github.com/RevenueMonster/sqlike@v1.0.6/reflext/reflext_test.go (about) 1 package reflext 2 3 import ( 4 "reflect" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 type enum string 11 12 type recursiveStruct struct { 13 Name string 14 Recursive *recursiveStruct 15 } 16 17 type tagStruct struct { 18 ID int64 `sqlike:"id,omitempty,default=40"` 19 Skip string `sqlike:"-"` 20 } 21 22 type PublicStruct struct { 23 ID string 24 } 25 26 type embeddedStruct struct { 27 tagStruct `sqlike:"test"` 28 PublicStruct `sqlike:"public"` 29 } 30 31 func TestStructTag(t *testing.T) { 32 var ( 33 tag = StructTag{ 34 originalName: "A", 35 name: "a", 36 opts: map[string]string{ 37 "omitempty": "", 38 "size": "20", 39 "charset": "", 40 }, 41 } 42 v string 43 ok bool 44 ) 45 46 require.Equal(t, tag.OriginalName(), "A") 47 require.Equal(t, tag.Name(), "a") 48 require.Equal(t, tag.OriginalName(), "A") 49 50 // unexists tag 51 { 52 v = tag.Get("unknown") 53 require.Equal(t, "", v) 54 55 v, ok = tag.LookUp("unknown") 56 require.Equal(t, "", v) 57 require.False(t, ok) 58 } 59 60 // existing tag with no value 61 { 62 v = tag.Get("omitempty") 63 require.Equal(t, "", v) 64 65 v, ok = tag.LookUp("omitempty") 66 require.Equal(t, "", v) 67 require.True(t, ok) 68 } 69 70 // existing tag with value 71 { 72 v = tag.Get("size") 73 require.Equal(t, "20", v) 74 75 v, ok = tag.LookUp("size") 76 require.Equal(t, "20", v) 77 require.True(t, ok) 78 } 79 } 80 81 func TestStructField(t *testing.T) { 82 var ( 83 sf = StructField{ 84 id: "", 85 idx: []int{0, 5}, 86 name: "Name", 87 path: "", 88 t: reflect.TypeOf(""), 89 null: false, 90 embed: false, 91 } 92 ) 93 94 require.Equal(t, []int{0, 5}, sf.Index()) 95 require.Equal(t, reflect.TypeOf("str"), sf.Type()) 96 require.Nil(t, sf.Children()) 97 require.Nil(t, sf.Parent()) 98 require.False(t, sf.IsNullable()) 99 require.False(t, sf.IsEmbedded()) 100 } 101 102 func TestStruct(t *testing.T) { 103 104 } 105 106 func TestCodec(t *testing.T) { 107 var ( 108 typeof reflect.Type 109 codec *Struct 110 i struct { 111 Name string 112 Nested struct { 113 embeddedStruct 114 Enum enum 115 } 116 embeddedStruct 117 } 118 ) 119 120 { 121 typeof = reflect.TypeOf(i) 122 codec = getCodec(typeof, "sqlike", nil) 123 124 require.Equal(t, len(codec.fields), 13) 125 require.Equal(t, len(codec.properties), 4) 126 require.NotNil(t, codec.names["Name"]) 127 require.NotNil(t, codec.names["Nested.Enum"]) 128 } 129 130 { 131 typeof = reflect.TypeOf(recursiveStruct{}) 132 codec = getCodec(typeof, "sqlike", nil) 133 134 require.Equal(t, len(codec.fields), 2) 135 require.Equal(t, len(codec.properties), 2) 136 require.NotNil(t, codec.names["Name"]) 137 require.NotNil(t, codec.names["Recursive"]) 138 } 139 }