github.com/dfcfw/lua@v0.0.0-20230325031207-0cc7ffb7b8b9/luar/type_test.go (about) 1 package luar 2 3 import ( 4 "testing" 5 6 "github.com/dfcfw/lua" 7 ) 8 9 func Test_type_slice(t *testing.T) { 10 L := lua.NewState() 11 defer L.Close() 12 13 type ints []int 14 15 L.SetGlobal("newInts", NewType(L, ints{})) 16 17 testReturn(t, L, `ints = newInts(1); return #ints`, "1") 18 testReturn(t, L, `ints = newInts(0, 10); return #ints`, "0") 19 } 20 21 func Test_type(t *testing.T) { 22 L := lua.NewState() 23 defer L.Close() 24 25 tim := &StructTestPerson{ 26 Name: "Tim", 27 } 28 29 L.SetGlobal("user1", New(L, tim)) 30 L.SetGlobal("Person", NewType(L, StructTestPerson{})) 31 L.SetGlobal("People", NewType(L, map[string]*StructTestPerson{})) 32 33 testReturn(t, L, `user2 = Person(); user2.Name = "John"; user2.Friend = user1`) 34 testReturn(t, L, `return user2.Name`, "John") 35 testReturn(t, L, `return user2.Friend.Name`, "Tim") 36 testReturn(t, L, `everyone = People(); everyone["tim"] = user1; everyone["john"] = user2`) 37 38 everyone := L.GetGlobal("everyone").(*lua.LUserData).Value.(map[string]*StructTestPerson) 39 if len(everyone) != 2 { 40 t.Fatalf("expecting len(everyone) = 2, got %d", len(everyone)) 41 } 42 } 43 44 func Test_type_metatable(t *testing.T) { 45 L := lua.NewState() 46 defer L.Close() 47 48 L.SetGlobal("newInt", NewType(L, int(0))) 49 50 testReturn(t, L, `return getmetatable(newInt) == "gopher-luar"`, "true") 51 }