github.com/dfcfw/lua@v0.0.0-20230325031207-0cc7ffb7b8b9/luar/config_test.go (about) 1 package luar 2 3 import ( 4 "reflect" 5 "strings" 6 "testing" 7 8 "github.com/dfcfw/lua" 9 ) 10 11 func Test_config(t *testing.T) { 12 L := lua.NewState() 13 defer L.Close() 14 15 config := GetConfig(L) 16 if config == nil { 17 t.Fatal("expecting non-nil config") 18 } 19 20 if config.FieldNames != nil { 21 t.Fatal("expected config.FieldName to be nil") 22 } 23 24 if config.MethodNames != nil { 25 t.Fatal("expected config.MethodName to be nil") 26 } 27 } 28 29 func Test_config_fieldnames(t *testing.T) { 30 L := lua.NewState() 31 defer L.Close() 32 33 config := GetConfig(L) 34 config.FieldNames = func(s reflect.Type, f reflect.StructField) []string { 35 return []string{strings.ToLower(f.Name)} 36 } 37 38 type S struct { 39 Name string 40 Age int `luar:"AGE"` 41 } 42 s := S{ 43 Name: "Tim", 44 Age: 89, 45 } 46 47 L.SetGlobal("s", New(L, &s)) 48 49 testReturn(t, L, `return s.Name`, `nil`) 50 testReturn(t, L, `return s.name`, `Tim`) 51 testReturn(t, L, `return s.AGE`, `nil`) 52 testReturn(t, L, `return s.age`, `89`) 53 } 54 55 type TestConfigMethodnames []string 56 57 func (t TestConfigMethodnames) Len() int { 58 return len(t) 59 } 60 61 func Test_config_methodnames(t *testing.T) { 62 L := lua.NewState() 63 defer L.Close() 64 65 config := GetConfig(L) 66 config.MethodNames = func(s reflect.Type, m reflect.Method) []string { 67 return []string{strings.ToLower(m.Name) + "gth"} 68 } 69 70 v := TestConfigMethodnames{ 71 "hello", 72 "world", 73 } 74 75 L.SetGlobal("v", New(L, v)) 76 77 testError(t, L, `return v:len()`, `attempt to call a non-function object`) 78 testReturn(t, L, `return v:length()`, `2`) 79 }