assertNoChange compares two row slices keyed by name, fails if any row disappeared, appeared, or duplicated. Per-row equality beyond identity is delegated to the caller's `compare` func.
( t *testing.T, before, after []T, key func(T) string, compare func(b, af T), label, kind string, )
| 693 | // row disappeared, appeared, or duplicated. Per-row equality beyond |
| 694 | // identity is delegated to the caller's `compare` func. |
| 695 | func assertNoChange[T any]( |
| 696 | t *testing.T, |
| 697 | before, after []T, |
| 698 | key func(T) string, |
| 699 | compare func(b, af T), |
| 700 | label, kind string, |
| 701 | ) { |
| 702 | t.Helper() |
| 703 | a := require.New(t) |
| 704 | byKey := make(map[string]T, len(before)) |
| 705 | for _, r := range before { |
| 706 | _, dup := byKey[key(r)] |
| 707 | a.False(dup, "%s: duplicate %s %q in before snapshot", label, kind, key(r)) |
| 708 | byKey[key(r)] = r |
| 709 | } |
| 710 | a.Equal(len(before), len(after), "%s: %s count changed", label, kind) |
| 711 | seen := make(map[string]bool, len(after)) |
| 712 | for _, r := range after { |
| 713 | a.False(seen[key(r)], "%s: duplicate %s %q in after snapshot", label, kind, key(r)) |
| 714 | seen[key(r)] = true |
| 715 | b, ok := byKey[key(r)] |
| 716 | a.True(ok, "%s: %s %q appeared after", label, kind, key(r)) |
| 717 | if ok { |
| 718 | compare(b, r) |
| 719 | } |
| 720 | } |
| 721 | } |
no test coverage detected