add some test cases

This commit is contained in:
fanybook 2021-11-08 13:58:08 +08:00
parent 9c081d1648
commit 92b12f29a7
2 changed files with 60 additions and 7 deletions

View File

@ -22,6 +22,7 @@ var (
tpTableName = reflect.TypeOf((*TableName)(nil)).Elem() tpTableName = reflect.TypeOf((*TableName)(nil)).Elem()
tpTableComment = reflect.TypeOf((*TableComment)(nil)).Elem() tpTableComment = reflect.TypeOf((*TableComment)(nil)).Elem()
tvCache sync.Map tvCache sync.Map
tcCache sync.Map
) )
// GetTableName returns table name // GetTableName returns table name
@ -67,5 +68,33 @@ func GetTableComment(v reflect.Value) string {
return v.Interface().(TableComment).TableComment() return v.Interface().(TableComment).TableComment()
} }
if v.Kind() == reflect.Ptr {//如果是指针
v = v.Elem()
if v.Type().Implements(tpTableComment) {
return v.Interface().(TableComment).TableComment()
}
} else if v.CanAddr() {//如果可以用地址访问
v1 := v.Addr()
if v1.Type().Implements(tpTableComment) {
return v1.Interface().(TableComment).TableComment()
}
} else {
comment, ok := tcCache.Load(v.Type())
if ok {
if comment.(string) != "" {
return comment.(string)
}
} else {
v2 := reflect.New(v.Type())
if v2.Type().Implements(tpTableComment) {
tableComment := v2.Interface().(TableComment).TableComment()
tcCache.Store(v.Type(), tableComment)
return tableComment
}
tcCache.Store(v.Type(), "")
}
}
return "" return ""
} }

View File

@ -26,10 +26,21 @@ func (p ParseTableName2) TableName() string {
return "p_parseTableName" return "p_parseTableName"
} }
func (p ParseTableName2) TableComment() string { type ParseTableComment struct{}
return "p2_testTableComment"
type ParseTableComment1 struct{}
type ParseTableComment2 struct{}
func (p ParseTableComment1) TableComment() string {
return "p_parseTableComment1"
} }
func (p *ParseTableComment2) TableComment() string {
return "p_parseTableComment2"
}
func TestParseTableName(t *testing.T) { func TestParseTableName(t *testing.T) {
parser := NewParser( parser := NewParser(
"xorm", "xorm",
@ -59,17 +70,30 @@ func TestParseTableComment(t *testing.T) {
names.SnakeMapper{}, names.SnakeMapper{},
caches.NewManager(), caches.NewManager(),
) )
table, err := parser.Parse(reflect.ValueOf(new(ParseTableName1)))
table, err := parser.Parse(reflect.ValueOf(new(ParseTableComment)))
assert.NoError(t, err)
assert.EqualValues(t, "", table.Name)
table, err = parser.Parse(reflect.ValueOf(new(ParseTableName1)))
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, "", table.Comment) assert.EqualValues(t, "", table.Comment)
table, err = parser.Parse(reflect.ValueOf(new(ParseTableName2))) table, err = parser.Parse(reflect.ValueOf(new(ParseTableComment1)))
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, "p2_testTableComment", table.Comment) assert.EqualValues(t, "p_parseTableComment1", table.Comment)
table, err = parser.Parse(reflect.ValueOf(ParseTableName2{})) table, err = parser.Parse(reflect.ValueOf(ParseTableComment1{}))
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, "p2_testTableComment", table.Comment) assert.EqualValues(t, "p_parseTableComment1", table.Comment)
table, err = parser.Parse(reflect.ValueOf(new(ParseTableComment2)))
assert.NoError(t, err)
assert.EqualValues(t, "p_parseTableComment2", table.Comment)
table, err = parser.Parse(reflect.ValueOf(ParseTableComment2{}))
assert.NoError(t, err)
assert.EqualValues(t, "p_parseTableComment2", table.Comment)
} }
func TestUnexportField(t *testing.T) { func TestUnexportField(t *testing.T) {