Remove duplicate sdk.TestHelper

As part of the work on the new fixture mechanism some of the TestHelper
functionality was moved into the android/fixture.go package. This moves
the rest and removes the now duplicated TestHelper from the sdk
package.

Also removed some unnecessary & operators.

Bug: 181070625
Test: m nothing
Change-Id: Ia09a5d05e4fab3a4e28cf44b2d947a33541e3925
This commit is contained in:
Paul Duffin
2021-03-10 09:15:22 +00:00
parent 706cb6f344
commit a3cb2b396f
4 changed files with 50 additions and 75 deletions

View File

@@ -484,6 +484,18 @@ func (h *TestHelper) AssertStringEquals(message string, expected string, actual
} }
} }
// AssertErrorMessageEquals checks if the error is not nil and has the expected message. If it does
// not then this reports an error prefixed with the supplied message and including a reason for why
// it failed.
func (h *TestHelper) AssertErrorMessageEquals(message string, expected string, actual error) {
h.Helper()
if actual == nil {
h.Errorf("Expected error but was nil")
} else if actual.Error() != expected {
h.Errorf("%s: expected %s, actual %s", message, expected, actual.Error())
}
}
// AssertTrimmedStringEquals checks if the expected and actual values are the same after trimming // AssertTrimmedStringEquals checks if the expected and actual values are the same after trimming
// leading and trailing spaces from them both. If they are not then it reports an error prefixed // leading and trailing spaces from them both. If they are not then it reports an error prefixed
// with the supplied message and including a reason for why it failed. // with the supplied message and including a reason for why it failed.
@@ -538,6 +550,23 @@ func (h *TestHelper) AssertDeepEquals(message string, expected interface{}, actu
} }
} }
// AssertPanic checks that the supplied function panics as expected.
func (h *TestHelper) AssertPanic(message string, funcThatShouldPanic func()) {
h.Helper()
panicked := false
func() {
defer func() {
if x := recover(); x != nil {
panicked = true
}
}()
funcThatShouldPanic()
}()
if !panicked {
h.Error(message)
}
}
// Struct to allow TestResult to embed a *TestContext and allow call forwarding to its methods. // Struct to allow TestResult to embed a *TestContext and allow call forwarding to its methods.
type testContext struct { type testContext struct {
*TestContext *TestContext

View File

@@ -54,7 +54,7 @@ func propertyStructFixture() interface{} {
return str return str
} }
func checkPropertySetFixture(h *TestHelper, val interface{}, hasTags bool) { func checkPropertySetFixture(h android.TestHelper, val interface{}, hasTags bool) {
set := val.(*bpPropertySet) set := val.(*bpPropertySet)
h.AssertDeepEquals("wrong x value", "taxi", set.getValue("x")) h.AssertDeepEquals("wrong x value", "taxi", set.getValue("x"))
h.AssertDeepEquals("wrong y value", 1729, set.getValue("y")) h.AssertDeepEquals("wrong y value", 1729, set.getValue("y"))
@@ -73,7 +73,7 @@ func checkPropertySetFixture(h *TestHelper, val interface{}, hasTags bool) {
} }
func TestAddPropertySimple(t *testing.T) { func TestAddPropertySimple(t *testing.T) {
h := &TestHelper{t} h := android.TestHelper{t}
set := newPropertySet() set := newPropertySet()
for name, val := range map[string]interface{}{ for name, val := range map[string]interface{}{
"x": "taxi", "x": "taxi",
@@ -92,7 +92,7 @@ func TestAddPropertySimple(t *testing.T) {
} }
func TestAddPropertySubset(t *testing.T) { func TestAddPropertySubset(t *testing.T) {
h := &TestHelper{t} h := android.TestHelper{t}
getFixtureMap := map[string]func() interface{}{ getFixtureMap := map[string]func() interface{}{
"property set": propertySetFixture, "property set": propertySetFixture,
"property struct": propertyStructFixture, "property struct": propertyStructFixture,
@@ -139,7 +139,7 @@ func TestAddPropertySubset(t *testing.T) {
} }
func TestAddPropertySetNew(t *testing.T) { func TestAddPropertySetNew(t *testing.T) {
h := &TestHelper{t} h := android.TestHelper{t}
set := newPropertySet() set := newPropertySet()
subset := set.AddPropertySet("sub") subset := set.AddPropertySet("sub")
subset.AddProperty("new", "d^^b") subset.AddProperty("new", "d^^b")
@@ -147,7 +147,7 @@ func TestAddPropertySetNew(t *testing.T) {
} }
func TestAddPropertySetExisting(t *testing.T) { func TestAddPropertySetExisting(t *testing.T) {
h := &TestHelper{t} h := android.TestHelper{t}
set := propertySetFixture().(*bpPropertySet) set := propertySetFixture().(*bpPropertySet)
subset := set.AddPropertySet("sub") subset := set.AddPropertySet("sub")
subset.AddProperty("new", "d^^b") subset.AddProperty("new", "d^^b")
@@ -181,7 +181,7 @@ func (t removeFredTransformation) transformPropertySetAfterContents(name string,
func TestTransformRemoveProperty(t *testing.T) { func TestTransformRemoveProperty(t *testing.T) {
helper := &TestHelper{t} helper := android.TestHelper{t}
set := newPropertySet() set := newPropertySet()
set.AddProperty("name", "name") set.AddProperty("name", "name")
@@ -196,7 +196,7 @@ func TestTransformRemoveProperty(t *testing.T) {
func TestTransformRemovePropertySet(t *testing.T) { func TestTransformRemovePropertySet(t *testing.T) {
helper := &TestHelper{t} helper := android.TestHelper{t}
set := newPropertySet() set := newPropertySet()
set.AddProperty("name", "name") set.AddProperty("name", "name")

View File

@@ -390,7 +390,7 @@ func TestCommonValueOptimization(t *testing.T) {
extractor := newCommonValueExtractor(common) extractor := newCommonValueExtractor(common)
h := TestHelper{t} h := android.TestHelper{t}
err := extractor.extractCommonProperties(common, structs) err := extractor.extractCommonProperties(common, structs)
h.AssertDeepEquals("unexpected error", nil, err) h.AssertDeepEquals("unexpected error", nil, err)
@@ -465,7 +465,7 @@ func TestCommonValueOptimization_InvalidArchSpecificVariants(t *testing.T) {
extractor := newCommonValueExtractor(common) extractor := newCommonValueExtractor(common)
h := TestHelper{t} h := android.TestHelper{t}
err := extractor.extractCommonProperties(common, structs) err := extractor.extractCommonProperties(common, structs)
h.AssertErrorMessageEquals("unexpected error", `field "S_Common" is not tagged as "arch_variant" but has arch specific properties: h.AssertErrorMessageEquals("unexpected error", `field "S_Common" is not tagged as "arch_variant" but has arch specific properties:

View File

@@ -19,7 +19,6 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
"reflect"
"strings" "strings"
"testing" "testing"
@@ -141,7 +140,7 @@ func runTests(t *testing.T, ctx *android.TestContext, config android.Config) *te
_, errs = ctx.PrepareBuildActions(config) _, errs = ctx.PrepareBuildActions(config)
android.FailIfErrored(t, errs) android.FailIfErrored(t, errs)
return &testSdkResult{ return &testSdkResult{
TestHelper: TestHelper{t: t}, TestHelper: android.TestHelper{T: t},
ctx: ctx, ctx: ctx,
config: config, config: config,
} }
@@ -185,63 +184,10 @@ func pathsToStrings(paths android.Paths) []string {
return ret return ret
} }
// Provides general test support.
type TestHelper struct {
t *testing.T
}
func (h *TestHelper) AssertStringEquals(message string, expected string, actual string) {
h.t.Helper()
if actual != expected {
h.t.Errorf("%s: expected %s, actual %s", message, expected, actual)
}
}
func (h *TestHelper) AssertErrorMessageEquals(message string, expected string, actual error) {
h.t.Helper()
if actual == nil {
h.t.Errorf("Expected error but was nil")
} else if actual.Error() != expected {
h.t.Errorf("%s: expected %s, actual %s", message, expected, actual.Error())
}
}
func (h *TestHelper) AssertTrimmedStringEquals(message string, expected string, actual string) {
h.t.Helper()
expected = strings.TrimSpace(expected)
actual = strings.TrimSpace(actual)
if actual != expected {
h.t.Errorf("%s: expected:\n%s\nactual:\n%s\n", message, expected, actual)
}
}
func (h *TestHelper) AssertDeepEquals(message string, expected interface{}, actual interface{}) {
h.t.Helper()
if !reflect.DeepEqual(actual, expected) {
h.t.Errorf("%s: expected %#v, actual %#v", message, expected, actual)
}
}
func (h *TestHelper) AssertPanic(message string, funcThatShouldPanic func()) {
h.t.Helper()
panicked := false
func() {
defer func() {
if x := recover(); x != nil {
panicked = true
}
}()
funcThatShouldPanic()
}()
if !panicked {
h.t.Error(message)
}
}
// Encapsulates result of processing an SDK definition. Provides support for // Encapsulates result of processing an SDK definition. Provides support for
// checking the state of the build structures. // checking the state of the build structures.
type testSdkResult struct { type testSdkResult struct {
TestHelper android.TestHelper
ctx *android.TestContext ctx *android.TestContext
config android.Config config android.Config
} }
@@ -295,7 +241,7 @@ func (r *testSdkResult) getSdkSnapshotBuildInfo(sdk *sdk) *snapshotBuildInfo {
info.intermediateZip = info.outputZip info.intermediateZip = info.outputZip
mergeInput := android.NormalizePathForTesting(bp.Input) mergeInput := android.NormalizePathForTesting(bp.Input)
if info.intermediateZip != mergeInput { if info.intermediateZip != mergeInput {
r.t.Errorf("Expected intermediate zip %s to be an input to merge zips but found %s instead", r.Errorf("Expected intermediate zip %s to be an input to merge zips but found %s instead",
info.intermediateZip, mergeInput) info.intermediateZip, mergeInput)
} }
@@ -328,7 +274,7 @@ func (r *testSdkResult) ModuleForTests(name string, variant string) android.Test
// Allows each test to customize what is checked without duplicating lots of code // Allows each test to customize what is checked without duplicating lots of code
// or proliferating check methods of different flavors. // or proliferating check methods of different flavors.
func (r *testSdkResult) CheckSnapshot(name string, dir string, checkers ...snapshotBuildInfoChecker) { func (r *testSdkResult) CheckSnapshot(name string, dir string, checkers ...snapshotBuildInfoChecker) {
r.t.Helper() r.Helper()
// The sdk CommonOS variant is always responsible for generating the snapshot. // The sdk CommonOS variant is always responsible for generating the snapshot.
variant := android.CommonOS.Name variant := android.CommonOS.Name
@@ -358,7 +304,7 @@ func (r *testSdkResult) CheckSnapshot(name string, dir string, checkers ...snaps
} }
// Process the generated bp file to make sure it is valid. // Process the generated bp file to make sure it is valid.
testSdkWithFs(r.t, snapshotBuildInfo.androidBpContents, fs) testSdkWithFs(r.T, snapshotBuildInfo.androidBpContents, fs)
} }
type snapshotBuildInfoChecker func(info *snapshotBuildInfo) type snapshotBuildInfoChecker func(info *snapshotBuildInfo)
@@ -368,7 +314,7 @@ type snapshotBuildInfoChecker func(info *snapshotBuildInfo)
// Both the expected and actual string are both trimmed before comparing. // Both the expected and actual string are both trimmed before comparing.
func checkAndroidBpContents(expected string) snapshotBuildInfoChecker { func checkAndroidBpContents(expected string) snapshotBuildInfoChecker {
return func(info *snapshotBuildInfo) { return func(info *snapshotBuildInfo) {
info.r.t.Helper() info.r.Helper()
info.r.AssertTrimmedStringEquals("Android.bp contents do not match", expected, info.androidBpContents) info.r.AssertTrimmedStringEquals("Android.bp contents do not match", expected, info.androidBpContents)
} }
} }
@@ -380,7 +326,7 @@ func checkAndroidBpContents(expected string) snapshotBuildInfoChecker {
// Both the expected and actual string are both trimmed before comparing. // Both the expected and actual string are both trimmed before comparing.
func checkUnversionedAndroidBpContents(expected string) snapshotBuildInfoChecker { func checkUnversionedAndroidBpContents(expected string) snapshotBuildInfoChecker {
return func(info *snapshotBuildInfo) { return func(info *snapshotBuildInfo) {
info.r.t.Helper() info.r.Helper()
info.r.AssertTrimmedStringEquals("unversioned Android.bp contents do not match", expected, info.androidUnversionedBpContents) info.r.AssertTrimmedStringEquals("unversioned Android.bp contents do not match", expected, info.androidUnversionedBpContents)
} }
} }
@@ -395,7 +341,7 @@ func checkUnversionedAndroidBpContents(expected string) snapshotBuildInfoChecker
// Both the expected and actual string are both trimmed before comparing. // Both the expected and actual string are both trimmed before comparing.
func checkVersionedAndroidBpContents(expected string) snapshotBuildInfoChecker { func checkVersionedAndroidBpContents(expected string) snapshotBuildInfoChecker {
return func(info *snapshotBuildInfo) { return func(info *snapshotBuildInfo) {
info.r.t.Helper() info.r.Helper()
info.r.AssertTrimmedStringEquals("versioned Android.bp contents do not match", expected, info.androidVersionedBpContents) info.r.AssertTrimmedStringEquals("versioned Android.bp contents do not match", expected, info.androidVersionedBpContents)
} }
} }
@@ -407,14 +353,14 @@ func checkVersionedAndroidBpContents(expected string) snapshotBuildInfoChecker {
// before comparing. // before comparing.
func checkAllCopyRules(expected string) snapshotBuildInfoChecker { func checkAllCopyRules(expected string) snapshotBuildInfoChecker {
return func(info *snapshotBuildInfo) { return func(info *snapshotBuildInfo) {
info.r.t.Helper() info.r.Helper()
info.r.AssertTrimmedStringEquals("Incorrect copy rules", expected, info.copyRules) info.r.AssertTrimmedStringEquals("Incorrect copy rules", expected, info.copyRules)
} }
} }
func checkAllOtherCopyRules(expected string) snapshotBuildInfoChecker { func checkAllOtherCopyRules(expected string) snapshotBuildInfoChecker {
return func(info *snapshotBuildInfo) { return func(info *snapshotBuildInfo) {
info.r.t.Helper() info.r.Helper()
info.r.AssertTrimmedStringEquals("Incorrect copy rules", expected, info.otherCopyRules) info.r.AssertTrimmedStringEquals("Incorrect copy rules", expected, info.otherCopyRules)
} }
} }
@@ -422,9 +368,9 @@ func checkAllOtherCopyRules(expected string) snapshotBuildInfoChecker {
// Check that the specified paths match the list of zips to merge with the intermediate zip. // Check that the specified paths match the list of zips to merge with the intermediate zip.
func checkMergeZips(expected ...string) snapshotBuildInfoChecker { func checkMergeZips(expected ...string) snapshotBuildInfoChecker {
return func(info *snapshotBuildInfo) { return func(info *snapshotBuildInfo) {
info.r.t.Helper() info.r.Helper()
if info.intermediateZip == "" { if info.intermediateZip == "" {
info.r.t.Errorf("No intermediate zip file was created") info.r.Errorf("No intermediate zip file was created")
} }
info.r.AssertDeepEquals("mismatching merge zip files", expected, info.mergeZips) info.r.AssertDeepEquals("mismatching merge zip files", expected, info.mergeZips)