Skip to content

Commit 6705bc3

Browse files
committed
enh: add tests for input and output redirect
1 parent a132991 commit 6705bc3

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

lua_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@ package lua_test
22

33
import (
44
"fmt"
5+
"io"
6+
"os"
57
"testing"
68

79
"github.com/Shopify/go-lua"
10+
"github.com/stretchr/testify/assert"
811
)
912

1013
func 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

Comments
 (0)