@@ -2,9 +2,12 @@ package lua_test
22
33import (
44 "fmt"
5+ "io"
6+ "os"
57 "testing"
68
79 "github.com/Shopify/go-lua"
10+ "github.com/stretchr/testify/assert"
811)
912
1013func TestPushFStringPointer (t * testing.T ) {
@@ -31,3 +34,57 @@ func TestToBooleanOutOfRange(t *testing.T) {
3134 }
3235 }
3336}
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