Files
wehub-resource-sync ead81af521
CI / go (push) Waiting to run
CI / build (darwin, macos-14) (push) Waiting to run
CI / build (windows, windows-2025) (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Failing after 0s
chore: import upstream snapshot with attribution
2026-07-13 12:31:13 +08:00

116 lines
2.3 KiB
Go

package luaplugin
import (
"testing"
lua "github.com/yuin/gopher-lua"
)
func TestJSONEncodeDecode(t *testing.T) {
L := lua.NewState()
defer L.Close()
cliamp := L.NewTable()
registerJSONAPI(L, cliamp)
L.SetGlobal("cliamp", cliamp)
err := L.DoString(`
local encoded = cliamp.json.encode({name = "test", count = 42})
local decoded = cliamp.json.decode(encoded)
_G.name = decoded.name
_G.count = decoded.count
`)
if err != nil {
t.Fatal(err)
}
if L.GetGlobal("name").String() != "test" {
t.Fatalf("name = %q", L.GetGlobal("name").String())
}
if float64(L.GetGlobal("count").(lua.LNumber)) != 42 {
t.Fatalf("count = %v", L.GetGlobal("count"))
}
}
func TestJSONDecodeInvalid(t *testing.T) {
L := lua.NewState()
defer L.Close()
cliamp := L.NewTable()
registerJSONAPI(L, cliamp)
L.SetGlobal("cliamp", cliamp)
err := L.DoString(`
local result, errmsg = cliamp.json.decode("not json")
_G.result = result
_G.errmsg = errmsg
`)
if err != nil {
t.Fatal(err)
}
if L.GetGlobal("result") != lua.LNil {
t.Fatalf("result = %v, want nil", L.GetGlobal("result"))
}
if L.GetGlobal("errmsg") == lua.LNil {
t.Fatal("errmsg should not be nil")
}
}
func TestJSONEncodeArray(t *testing.T) {
L := lua.NewState()
defer L.Close()
cliamp := L.NewTable()
registerJSONAPI(L, cliamp)
L.SetGlobal("cliamp", cliamp)
err := L.DoString(`
_G.result = cliamp.json.encode({1, 2, 3})
`)
if err != nil {
t.Fatal(err)
}
if got := L.GetGlobal("result").String(); got != "[1,2,3]" {
t.Fatalf("encode([1,2,3]) = %q, want %q", got, "[1,2,3]")
}
}
func TestLuaToGoRoundtrip(t *testing.T) {
L := lua.NewState()
defer L.Close()
tests := []struct {
name string
val lua.LValue
want any
}{
{"nil", lua.LNil, nil},
{"bool", lua.LTrue, true},
{"number", lua.LNumber(3.14), 3.14},
{"string", lua.LString("hi"), "hi"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := luaToGo(tt.val)
switch w := tt.want.(type) {
case nil:
if got != nil {
t.Fatalf("got %v, want nil", got)
}
case bool:
if got != w {
t.Fatalf("got %v, want %v", got, w)
}
case float64:
if got != w {
t.Fatalf("got %v, want %v", got, w)
}
case string:
if got != w {
t.Fatalf("got %v, want %v", got, w)
}
}
})
}
}