From dfe9f387cf545a1a7d7ce7ceff2b45f216a671a9 Mon Sep 17 00:00:00 2001 From: finelog Date: Wed, 2 Dec 2020 21:47:06 +0800 Subject: [PATCH] add test for prevent panic when vanial struct with unexport field panic --- tags/parser_test.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tags/parser_test.go b/tags/parser_test.go index 6065bf2e..f6e99572 100644 --- a/tags/parser_test.go +++ b/tags/parser_test.go @@ -42,3 +42,43 @@ func TestParseTableName(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, "p_parseTableName", table.Name) } + +type VanilaStruct struct { + private int + Public int +} + +type TaggedStruct struct { + private int `xorm:"private"` + Public int `xorm:"-"` +} + +func TestUnexportField(t *testing.T) { + parser := NewParser( + "xorm", + dialects.QueryDialect("mysql"), + names.SnakeMapper{}, + names.SnakeMapper{}, + caches.NewManager(), + ) + + table, err := parser.Parse(reflect.ValueOf(new(VanilaStruct))) + assert.NoError(t, err) + assert.EqualValues(t, "vanila_struct", table.Name) + assert.EqualValues(t, 1, len(table.Columns())) + + for _, v := range table.Columns() { + assert.EqualValues(t, "public", v.Name) + assert.NotEqual(t, "private", v.Name) + } + + table, err = parser.Parse(reflect.ValueOf(new(TaggedStruct))) + assert.NoError(t, err) + assert.EqualValues(t, "tagged_struct", table.Name) + assert.EqualValues(t, 1, len(table.Columns())) + + for _, v := range table.Columns() { + assert.EqualValues(t, "private", v.Name) + assert.NotEqual(t, "public", v.Name) + } +}