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  }