@@ -2,9 +2,12 @@ package lua_test
2
2
3
3
import (
4
4
"fmt"
5
+ "io"
6
+ "os"
5
7
"testing"
6
8
7
9
"github.com/Shopify/go-lua"
10
+ "github.com/stretchr/testify/assert"
8
11
)
9
12
10
13
func TestPushFStringPointer (t * testing.T ) {
@@ -31,3 +34,57 @@ func TestToBooleanOutOfRange(t *testing.T) {
31
34
}
32
35
}
33
36
}
37
+
38
+ func TestInputOutputErrorRedirect (t * testing.T ) {
39
+ t .Run ("test redirect stdout" , func (t * testing.T ) {
40
+ // use a variable as stdout
41
+ reader , writer , err := os .Pipe ()
42
+ assert .Nil (t , err )
43
+
44
+ // setup runtime state
45
+ l := lua .NewState ()
46
+ l .SetStdout (writer )
47
+ lua .OpenLibraries (l )
48
+
49
+ // run lua code
50
+ err = lua .DoString (l , "print(1 + 1)" )
51
+ assert .Nil (t , err )
52
+
53
+ writer .Close ()
54
+ output , err := io .ReadAll (reader )
55
+ assert .Nil (t , err )
56
+
57
+ assert .Equal (t , "2\n " , string (output ))
58
+ })
59
+
60
+ t .Run ("test std redirect" , func (t * testing.T ) {
61
+ // create a pipe to stdin and add some lua code it it
62
+ inputReader , inputWriter , err := os .Pipe ()
63
+ assert .Nil (t , err )
64
+
65
+ outputReader , outputWriter , err := os .Pipe ()
66
+ assert .Nil (t , err )
67
+
68
+ // setup runtime state
69
+ l := lua .NewState ()
70
+ l .SetStdin (inputReader )
71
+ l .SetStdout (outputWriter )
72
+ lua .OpenLibraries (l )
73
+
74
+ // write to the file input
75
+ _ , err = inputWriter .Write ([]byte ("print(1 + 1)" ))
76
+ assert .Nil (t , err )
77
+ assert .Nil (t , inputWriter .Close ())
78
+
79
+ // run lua code
80
+ err = lua .DoFile (l , "" )
81
+ assert .Nil (t , err )
82
+ assert .Nil (t , outputWriter .Close ())
83
+
84
+ output , err := io .ReadAll (outputReader )
85
+ assert .Nil (t , err )
86
+
87
+ assert .Equal (t , "2\n " , string (output ))
88
+ })
89
+
90
+ }
0 commit comments