diff options
Diffstat (limited to 'sdk/bp_test.go')
-rw-r--r-- | sdk/bp_test.go | 140 |
1 files changed, 132 insertions, 8 deletions
diff --git a/sdk/bp_test.go b/sdk/bp_test.go index c630c2524..c620ac2b8 100644 --- a/sdk/bp_test.go +++ b/sdk/bp_test.go @@ -18,8 +18,138 @@ import ( "testing" "android/soong/android" + + "github.com/google/blueprint/proptools" ) +func propertySetFixture() interface{} { + set := newPropertySet() + set.AddProperty("x", "taxi") + set.AddPropertyWithTag("y", 1729, "tag_y") + subset := set.AddPropertySet("sub") + subset.AddPropertyWithTag("x", "taxi", "tag_x") + subset.AddProperty("y", 1729) + return set +} + +func intPtr(i int) *int { return &i } + +type propertyStruct struct { + X *string + Y *int + Unset *bool + Sub struct { + X *string + Y *int + Unset *bool + } +} + +func propertyStructFixture() interface{} { + str := &propertyStruct{} + str.X = proptools.StringPtr("taxi") + str.Y = intPtr(1729) + str.Sub.X = proptools.StringPtr("taxi") + str.Sub.Y = intPtr(1729) + return str +} + +func checkPropertySetFixture(t *testing.T, val interface{}, hasTags bool) { + set := val.(*bpPropertySet) + android.AssertDeepEquals(t, "wrong x value", "taxi", set.getValue("x")) + android.AssertDeepEquals(t, "wrong y value", 1729, set.getValue("y")) + + subset := set.getValue("sub").(*bpPropertySet) + android.AssertDeepEquals(t, "wrong sub.x value", "taxi", subset.getValue("x")) + android.AssertDeepEquals(t, "wrong sub.y value", 1729, subset.getValue("y")) + + if hasTags { + android.AssertDeepEquals(t, "wrong y tag", "tag_y", set.getTag("y")) + android.AssertDeepEquals(t, "wrong sub.x tag", "tag_x", subset.getTag("x")) + } else { + android.AssertDeepEquals(t, "wrong y tag", nil, set.getTag("y")) + android.AssertDeepEquals(t, "wrong sub.x tag", nil, subset.getTag("x")) + } +} + +func TestAddPropertySimple(t *testing.T) { + set := newPropertySet() + for name, val := range map[string]interface{}{ + "x": "taxi", + "y": 1729, + "t": true, + "f": false, + "arr": []string{"a", "b", "c"}, + } { + set.AddProperty(name, val) + android.AssertDeepEquals(t, "wrong value", val, set.getValue(name)) + } + android.AssertPanicMessageContains(t, "adding x again should panic", `Property "x" already exists in property set`, + func() { set.AddProperty("x", "taxi") }) + android.AssertPanicMessageContains(t, "adding arr again should panic", `Property "arr" already exists in property set`, + func() { set.AddProperty("arr", []string{"d"}) }) +} + +func TestAddPropertySubset(t *testing.T) { + getFixtureMap := map[string]func() interface{}{ + "property set": propertySetFixture, + "property struct": propertyStructFixture, + } + + t.Run("add new subset", func(t *testing.T) { + for name, getFixture := range getFixtureMap { + t.Run(name, func(t *testing.T) { + set := propertySetFixture().(*bpPropertySet) + set.AddProperty("new", getFixture()) + checkPropertySetFixture(t, set, true) + checkPropertySetFixture(t, set.getValue("new"), name == "property set") + }) + } + }) + + t.Run("merge existing subset", func(t *testing.T) { + for name, getFixture := range getFixtureMap { + t.Run(name, func(t *testing.T) { + set := newPropertySet() + subset := set.AddPropertySet("sub") + subset.AddProperty("flag", false) + subset.AddPropertySet("sub") + set.AddProperty("sub", getFixture()) + merged := set.getValue("sub").(*bpPropertySet) + android.AssertDeepEquals(t, "wrong flag value", false, merged.getValue("flag")) + checkPropertySetFixture(t, merged, name == "property set") + }) + } + }) + + t.Run("add conflicting subset", func(t *testing.T) { + set := propertySetFixture().(*bpPropertySet) + android.AssertPanicMessageContains(t, "adding x again should panic", `Property "x" already exists in property set`, + func() { set.AddProperty("x", propertySetFixture()) }) + }) + + t.Run("add non-pointer struct", func(t *testing.T) { + set := propertySetFixture().(*bpPropertySet) + str := propertyStructFixture().(*propertyStruct) + android.AssertPanicMessageContains(t, "adding a non-pointer struct should panic", "Value is a struct, not a pointer to one:", + func() { set.AddProperty("new", *str) }) + }) +} + +func TestAddPropertySetNew(t *testing.T) { + set := newPropertySet() + subset := set.AddPropertySet("sub") + subset.AddProperty("new", "d^^b") + android.AssertDeepEquals(t, "wrong sub.new value", "d^^b", set.getValue("sub").(*bpPropertySet).getValue("new")) +} + +func TestAddPropertySetExisting(t *testing.T) { + set := propertySetFixture().(*bpPropertySet) + subset := set.AddPropertySet("sub") + subset.AddProperty("new", "d^^b") + android.AssertDeepEquals(t, "wrong sub.new value", "d^^b", set.getValue("sub").(*bpPropertySet).getValue("new")) +} + type removeFredTransformation struct { identityTransformation } @@ -46,9 +176,6 @@ func (t removeFredTransformation) transformPropertySetAfterContents(name string, } func TestTransformRemoveProperty(t *testing.T) { - - helper := &TestHelper{t} - set := newPropertySet() set.AddProperty("name", "name") set.AddProperty("fred", "12") @@ -57,13 +184,10 @@ func TestTransformRemoveProperty(t *testing.T) { contents := &generatedContents{} outputPropertySet(contents, set) - helper.AssertTrimmedStringEquals("removing property failed", "name: \"name\",\n", contents.content.String()) + android.AssertTrimmedStringEquals(t, "removing property failed", "name: \"name\",\n", contents.content.String()) } func TestTransformRemovePropertySet(t *testing.T) { - - helper := &TestHelper{t} - set := newPropertySet() set.AddProperty("name", "name") set.AddPropertySet("fred") @@ -72,5 +196,5 @@ func TestTransformRemovePropertySet(t *testing.T) { contents := &generatedContents{} outputPropertySet(contents, set) - helper.AssertTrimmedStringEquals("removing property set failed", "name: \"name\",\n", contents.content.String()) + android.AssertTrimmedStringEquals(t, "removing property set failed", "name: \"name\",\n", contents.content.String()) } |