Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions io.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,7 @@ func close(l *State) int {
func write(l *State, f *os.File, argIndex int) int {
var err error
for argCount := l.Top(); argIndex < argCount && err == nil; argIndex++ {
if n, ok := l.ToNumber(argIndex); ok {
_, err = f.WriteString(numberToString(n))
} else {
_, err = f.WriteString(CheckString(l, argIndex))
}
_, err = f.WriteString(CheckString(l, argIndex))
}
if err == nil {
return 1
Expand Down
37 changes: 37 additions & 0 deletions io_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package lua

import (
"fmt"
"os"
"path/filepath"
"testing"
)

func TestWritePreservesNumericStrings(t *testing.T) {
for _, writer := range []string{"io.write", "f:write"} {
t.Run(writer, func(t *testing.T) {
filename := filepath.Join(t.TempDir(), "output")
l := NewState()
OpenLibraries(l)
l.PushString(filename)
l.SetGlobal("filename")
if err := DoString(l, fmt.Sprintf(`
local f = assert(io.open(filename, "wb"))
io.output(f)
assert(%s("123 ", "456 ", "Hello, ", "world!\n") == f)
assert(%s("001.20 ", " 0x10 ", "1e+02 ", 2.5, "\n") == f)
assert(f:close())
`, writer, writer)); err != nil {
t.Fatal(err)
}
output, err := os.ReadFile(filename)
if err != nil {
t.Fatal(err)
}
const expected = "123 456 Hello, world!\n001.20 0x10 1e+02 2.5\n"
if string(output) != expected {
t.Errorf("got %q, want %q", output, expected)
}
})
}
}
Loading