Replace FixturePreparer.visit() with list()

The visit() method was dropped in favor of a list() method as the
latter makes it easier to treat fixtureFactory, simpleFixturePreparer
and compositeFixturePreparer as simple collections of already flattened
and deduped *simpleFixturePreparers. That will be used in a follow up
change.

Bug: 183235980
Test: m nothing
Change-Id: Ia41ae9bd4f9c39c85865ba698e0da6be00519caf
This commit is contained in:
Paul Duffin
2021-03-20 01:25:12 +00:00
parent cff464f794
commit 4ca6752b21

View File

@@ -429,20 +429,10 @@ func OptionalFixturePreparer(preparer FixturePreparer) FixturePreparer {
} }
} }
type simpleFixturePreparerVisitor func(preparer *simpleFixturePreparer)
// FixturePreparer is an opaque interface that can change a fixture. // FixturePreparer is an opaque interface that can change a fixture.
type FixturePreparer interface { type FixturePreparer interface {
// visit calls the supplied visitor with each *simpleFixturePreparer instances in this preparer, // Return the flattened and deduped list of simpleFixturePreparer pointers.
visit(simpleFixturePreparerVisitor) list() []*simpleFixturePreparer
}
type fixturePreparers []FixturePreparer
func (f fixturePreparers) visit(visitor simpleFixturePreparerVisitor) {
for _, p := range f {
p.visit(visitor)
}
} }
// dedupAndFlattenPreparers removes any duplicates and flattens any composite FixturePreparer // dedupAndFlattenPreparers removes any duplicates and flattens any composite FixturePreparer
@@ -457,7 +447,7 @@ func (f fixturePreparers) visit(visitor simpleFixturePreparerVisitor) {
// //
// Returns a deduped and flattened list of the preparers starting with the ones in base with any // Returns a deduped and flattened list of the preparers starting with the ones in base with any
// additional ones from the preparers list added afterwards. // additional ones from the preparers list added afterwards.
func dedupAndFlattenPreparers(base []*simpleFixturePreparer, preparers fixturePreparers) []*simpleFixturePreparer { func dedupAndFlattenPreparers(base []*simpleFixturePreparer, preparers []FixturePreparer) []*simpleFixturePreparer {
if len(preparers) == 0 { if len(preparers) == 0 {
return base return base
} }
@@ -473,24 +463,27 @@ func dedupAndFlattenPreparers(base []*simpleFixturePreparer, preparers fixturePr
list[i] = s list[i] = s
} }
preparers.visit(func(preparer *simpleFixturePreparer) { for _, p := range preparers {
if _, seen := visited[preparer]; !seen { for _, s := range p.list() {
visited[preparer] = struct{}{} if _, seen := visited[s]; !seen {
list = append(list, preparer) visited[s] = struct{}{}
list = append(list, s)
}
} }
}) }
return list return list
} }
// compositeFixturePreparer is a FixturePreparer created from a list of fixture preparers. // compositeFixturePreparer is a FixturePreparer created from a list of fixture preparers.
type compositeFixturePreparer struct { type compositeFixturePreparer struct {
// The flattened and deduped list of simpleFixturePreparer pointers encapsulated within this
// composite preparer.
preparers []*simpleFixturePreparer preparers []*simpleFixturePreparer
} }
func (c *compositeFixturePreparer) visit(visitor simpleFixturePreparerVisitor) { func (c *compositeFixturePreparer) list() []*simpleFixturePreparer {
for _, p := range c.preparers { return c.preparers
p.visit(visitor)
}
} }
// simpleFixturePreparer is a FixturePreparer that applies a function to a fixture. // simpleFixturePreparer is a FixturePreparer that applies a function to a fixture.
@@ -498,8 +491,8 @@ type simpleFixturePreparer struct {
function func(fixture *fixture) function func(fixture *fixture)
} }
func (s *simpleFixturePreparer) visit(visitor simpleFixturePreparerVisitor) { func (s *simpleFixturePreparer) list() []*simpleFixturePreparer {
visitor(s) return []*simpleFixturePreparer{s}
} }
func newSimpleFixturePreparer(preparer func(fixture *fixture)) FixturePreparer { func newSimpleFixturePreparer(preparer func(fixture *fixture)) FixturePreparer {