// Copyright 2020 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package debug import "testing" type fakeCache struct { Cache id string } func (c fakeCache) ID() string { return c.id } func TestState(t *testing.T) { c1 := fakeCache{id: "1"} c2 := fakeCache{id: "2"} c3 := fakeCache{id: "3"} var s State s.AddCache(c1) s.AddCache(c2) s.AddCache(c3) compareCaches := func(desc string, want []fakeCache) { t.Run(desc, func(t *testing.T) { caches := s.Caches() if gotLen, wantLen := len(caches), len(want); gotLen != wantLen { t.Fatalf("len(Caches) = %d, want %d", gotLen, wantLen) } for i, got := range caches { if got != want[i] { t.Errorf("Caches[%d] = %v, want %v", i, got, want[i]) } } }) } compareCaches("initial load", []fakeCache{c1, c2, c3}) s.DropCache(c2) compareCaches("dropped cache 2", []fakeCache{c1, c3}) s.DropCache(c2) compareCaches("duplicate drop", []fakeCache{c1, c3}) s.AddCache(c2) compareCaches("re-add cache 2", []fakeCache{c1, c3, c2}) s.DropCache(c1) s.DropCache(c2) s.DropCache(c3) compareCaches("drop all", []fakeCache{}) }