Sometimes it is necessary to optionally add a preparer. e.g. There are many parameterized tests where one of the parameters is some additional test setup but not every test provides it so it will default to the "zero" value of whatever type is used for the test setup parameter Migrating those tests to use test fixtures will typically require that the test setup parameter be changed to a FixturePreparer, which by default will be nil. Attempting to use a nil FixturePreparer in the test fixtures will fail so the OptionalFixturePreparer was added to wrap a possibly nil FixturePreparer and thereby avoiding complicating each test with similar logic. Bug: 182885307 Test: m nothing Change-Id: Ia12b2af2105fdc69af4e0b909a37a7b86f1af299
50 lines
1.7 KiB
Go
50 lines
1.7 KiB
Go
// Copyright 2021 Google Inc. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package android
|
|
|
|
import "testing"
|
|
|
|
// Make sure that FixturePreparer instances are only called once per fixture and in the order in
|
|
// which they were added.
|
|
func TestFixtureDedup(t *testing.T) {
|
|
list := []string{}
|
|
|
|
appendToList := func(s string) FixturePreparer {
|
|
return FixtureModifyConfig(func(_ Config) {
|
|
list = append(list, s)
|
|
})
|
|
}
|
|
|
|
preparer1 := appendToList("preparer1")
|
|
preparer2 := appendToList("preparer2")
|
|
preparer3 := appendToList("preparer3")
|
|
preparer4 := OptionalFixturePreparer(appendToList("preparer4"))
|
|
nilPreparer := OptionalFixturePreparer(nil)
|
|
|
|
preparer1Then2 := GroupFixturePreparers(preparer1, preparer2, nilPreparer)
|
|
|
|
preparer2Then1 := GroupFixturePreparers(preparer2, preparer1)
|
|
|
|
buildDir := "build"
|
|
factory := NewFixtureFactory(&buildDir, preparer1, preparer2, preparer1, preparer1Then2)
|
|
|
|
extension := factory.Extend(preparer4, preparer2)
|
|
|
|
extension.Fixture(t, preparer1, preparer2, preparer2Then1, preparer3)
|
|
|
|
AssertDeepEquals(t, "preparers called in wrong order",
|
|
[]string{"preparer1", "preparer2", "preparer4", "preparer3"}, list)
|
|
}
|