diff --git a/test.go b/test.go index 3554b33..b1fc665 100644 --- a/test.go +++ b/test.go @@ -2,6 +2,7 @@ package tea import ( "fmt" + "reflect" "testing" ) @@ -31,3 +32,21 @@ func (f failure) Run(t *testing.T) { type empty struct{} func (e empty) Run(t *testing.T) {} + +// parseName parses the name for a given test +func parseName(test Test) string { + if s, ok := test.(interface{ String() string }); ok { + return s.String() + } + + tv := reflect.ValueOf(test) + switch tv.Type().Kind() { + case reflect.Ptr: + tv = tv.Elem() + } + name := tv.Type().Name() + if name == "" { + return "unknown-test" + } + return name +} diff --git a/test_test.go b/test_test.go new file mode 100644 index 0000000..a9e4209 --- /dev/null +++ b/test_test.go @@ -0,0 +1,34 @@ +package tea + +import ( + "testing" +) + +type nameless struct{} + +func (nameless) Run(t *testing.T) {} + +func TestNames(t *testing.T) { + testTests := []struct { + testToTest Test + expectedName string + }{ + { + testToTest: nameless{}, + expectedName: "nameless", + }, + { + testToTest: &nameless{}, + expectedName: "nameless", + }, + } + + for _, doubleTest := range testTests { + name := parseName(doubleTest.testToTest) + if name != doubleTest.expectedName { + t.Errorf("saw name %q expecting %q", name, doubleTest.expectedName) + } else { + t.Logf("test %v has expected name %q", doubleTest.testToTest, name) + } + } +} diff --git a/tree.go b/tree.go index 8577321..4e9faaf 100644 --- a/tree.go +++ b/tree.go @@ -130,12 +130,3 @@ func isLoadField(f reflect.StructField) bool { } return false } - -// parseName parses the name for a given test -func parseName(test Test) string { - if s, ok := test.(interface{ String() string }); ok { - return s.String() - } - iv := reflect.ValueOf(test) - return iv.Type().Name() -}