diff --git a/testjson/execution.go b/testjson/execution.go index 27e041c8..25d4be08 100644 --- a/testjson/execution.go +++ b/testjson/execution.go @@ -563,8 +563,9 @@ func FilterFailedUnique(tcs []TestCase) []TestCase { if _, exists := parents[tc.Package]; !exists { parents[tc.Package] = make(map[string]bool) } - if parent := tc.Test.Parent(); parent != "" { - parents[tc.Package][parent] = true + + for p := tc.Test.Parent(); p != ""; p = TestName(p).Parent() { + parents[tc.Package][p] = true } if _, exists := parents[tc.Package][tc.Test.Name()]; exists { continue // tc is a parent of a failing subtest diff --git a/testjson/execution_test.go b/testjson/execution_test.go index 2d348244..81f809dc 100644 --- a/testjson/execution_test.go +++ b/testjson/execution_test.go @@ -298,3 +298,20 @@ func TestFilterFailedUnique_MultipleNested(t *testing.T) { cmpTestCase := cmp.AllowUnexported(TestCase{}) assert.DeepEqual(t, expected, actual, cmpTestCase) } + +func TestFilterFailedUnique_NestedWithGaps(t *testing.T) { + input := []TestCase{ + {ID: 1, Package: "pkg", Test: "TestParent/foo/bar/baz"}, + {ID: 2, Package: "pkg", Test: "TestParent"}, + {ID: 3, Package: "pkg", Test: "TestParent1/foo/bar"}, + {ID: 4, Package: "pkg", Test: "TestParent1"}, + } + actual := FilterFailedUnique(input) + + expected := []TestCase{ + {ID: 1, Package: "pkg", Test: "TestParent/foo/bar/baz"}, + {ID: 3, Package: "pkg", Test: "TestParent1/foo/bar"}, + } + cmpTestCase := cmp.AllowUnexported(TestCase{}) + assert.DeepEqual(t, expected, actual, cmpTestCase) +}