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  }