diff --git a/android/Android.bp b/android/Android.bp index f17a8a047..a7581c603 100644 --- a/android/Android.bp +++ b/android/Android.bp @@ -67,6 +67,7 @@ bootstrap_go_package { "singleton.go", "singleton_module.go", "soong_config_modules.go", + "test_helpers.go", "test_suites.go", "testing.go", "util.go", diff --git a/android/fixture.go b/android/fixture.go index 0153c7b61..206d82593 100644 --- a/android/fixture.go +++ b/android/fixture.go @@ -16,8 +16,6 @@ package android import ( "fmt" - "reflect" - "strings" "testing" ) @@ -548,122 +546,6 @@ type Fixture interface { RunTest() *TestResult } -// Provides general test support. -type TestHelper struct { - *testing.T -} - -// AssertBoolEquals checks if the expected and actual values are equal and if they are not then it -// reports an error prefixed with the supplied message and including a reason for why it failed. -func (h *TestHelper) AssertBoolEquals(message string, expected bool, actual bool) { - h.Helper() - if actual != expected { - h.Errorf("%s: expected %t, actual %t", message, expected, actual) - } -} - -// AssertStringEquals checks if the expected and actual values are equal and if they are not then -// it reports an error prefixed with the supplied message and including a reason for why it failed. -func (h *TestHelper) AssertStringEquals(message string, expected string, actual string) { - h.Helper() - if actual != expected { - h.Errorf("%s: expected %s, actual %s", message, expected, 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 -// 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. -func (h *TestHelper) AssertTrimmedStringEquals(message string, expected string, actual string) { - h.Helper() - h.AssertStringEquals(message, strings.TrimSpace(expected), strings.TrimSpace(actual)) -} - -// AssertStringDoesContain checks if the string contains the expected substring. If it does not -// then it reports an error prefixed with the supplied message and including a reason for why it -// failed. -func (h *TestHelper) AssertStringDoesContain(message string, s string, expectedSubstring string) { - h.Helper() - if !strings.Contains(s, expectedSubstring) { - h.Errorf("%s: could not find %q within %q", message, expectedSubstring, s) - } -} - -// AssertStringDoesNotContain checks if the string contains the expected substring. If it does then -// it reports an error prefixed with the supplied message and including a reason for why it failed. -func (h *TestHelper) AssertStringDoesNotContain(message string, s string, unexpectedSubstring string) { - h.Helper() - if strings.Contains(s, unexpectedSubstring) { - h.Errorf("%s: unexpectedly found %q within %q", message, unexpectedSubstring, s) - } -} - -// AssertStringListContains checks if the list of strings contains the expected string. If it does -// not then it reports an error prefixed with the supplied message and including a reason for why it -// failed. -func (h *TestHelper) AssertStringListContains(message string, list []string, expected string) { - h.Helper() - if !InList(expected, list) { - h.Errorf("%s: could not find %q within %q", message, expected, list) - } -} - -// AssertArrayString checks if the expected and actual values are equal and if they are not then it -// reports an error prefixed with the supplied message and including a reason for why it failed. -func (h *TestHelper) AssertArrayString(message string, expected, actual []string) { - h.Helper() - if len(actual) != len(expected) { - h.Errorf("%s: expected %d (%q), actual (%d) %q", message, len(expected), expected, len(actual), actual) - return - } - for i := range actual { - if actual[i] != expected[i] { - h.Errorf("%s: expected %d-th, %q (%q), actual %q (%q)", - message, i, expected[i], expected, actual[i], actual) - return - } - } -} - -// AssertDeepEquals checks if the expected and actual values are equal using reflect.DeepEqual and -// if they are not then it reports an error prefixed with the supplied message and including a -// reason for why it failed. -func (h *TestHelper) AssertDeepEquals(message string, expected interface{}, actual interface{}) { - h.Helper() - if !reflect.DeepEqual(actual, expected) { - h.Errorf("%s: expected:\n %#v\n got:\n %#v", message, expected, actual) - } -} - -// 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. type testContext struct { *TestContext diff --git a/android/test_helpers.go b/android/test_helpers.go new file mode 100644 index 000000000..7070bda11 --- /dev/null +++ b/android/test_helpers.go @@ -0,0 +1,137 @@ +// 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 ( + "reflect" + "strings" + "testing" +) + +// Provides general test support. +type TestHelper struct { + *testing.T +} + +// AssertBoolEquals checks if the expected and actual values are equal and if they are not then it +// reports an error prefixed with the supplied message and including a reason for why it failed. +func (h *TestHelper) AssertBoolEquals(message string, expected bool, actual bool) { + h.Helper() + if actual != expected { + h.Errorf("%s: expected %t, actual %t", message, expected, actual) + } +} + +// AssertStringEquals checks if the expected and actual values are equal and if they are not then +// it reports an error prefixed with the supplied message and including a reason for why it failed. +func (h *TestHelper) AssertStringEquals(message string, expected string, actual string) { + h.Helper() + if actual != expected { + h.Errorf("%s: expected %s, actual %s", message, expected, 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 +// 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. +func (h *TestHelper) AssertTrimmedStringEquals(message string, expected string, actual string) { + h.Helper() + h.AssertStringEquals(message, strings.TrimSpace(expected), strings.TrimSpace(actual)) +} + +// AssertStringDoesContain checks if the string contains the expected substring. If it does not +// then it reports an error prefixed with the supplied message and including a reason for why it +// failed. +func (h *TestHelper) AssertStringDoesContain(message string, s string, expectedSubstring string) { + h.Helper() + if !strings.Contains(s, expectedSubstring) { + h.Errorf("%s: could not find %q within %q", message, expectedSubstring, s) + } +} + +// AssertStringDoesNotContain checks if the string contains the expected substring. If it does then +// it reports an error prefixed with the supplied message and including a reason for why it failed. +func (h *TestHelper) AssertStringDoesNotContain(message string, s string, unexpectedSubstring string) { + h.Helper() + if strings.Contains(s, unexpectedSubstring) { + h.Errorf("%s: unexpectedly found %q within %q", message, unexpectedSubstring, s) + } +} + +// AssertStringListContains checks if the list of strings contains the expected string. If it does +// not then it reports an error prefixed with the supplied message and including a reason for why it +// failed. +func (h *TestHelper) AssertStringListContains(message string, list []string, expected string) { + h.Helper() + if !InList(expected, list) { + h.Errorf("%s: could not find %q within %q", message, expected, list) + } +} + +// AssertArrayString checks if the expected and actual values are equal and if they are not then it +// reports an error prefixed with the supplied message and including a reason for why it failed. +func (h *TestHelper) AssertArrayString(message string, expected, actual []string) { + h.Helper() + if len(actual) != len(expected) { + h.Errorf("%s: expected %d (%q), actual (%d) %q", message, len(expected), expected, len(actual), actual) + return + } + for i := range actual { + if actual[i] != expected[i] { + h.Errorf("%s: expected %d-th, %q (%q), actual %q (%q)", + message, i, expected[i], expected, actual[i], actual) + return + } + } +} + +// AssertDeepEquals checks if the expected and actual values are equal using reflect.DeepEqual and +// if they are not then it reports an error prefixed with the supplied message and including a +// reason for why it failed. +func (h *TestHelper) AssertDeepEquals(message string, expected interface{}, actual interface{}) { + h.Helper() + if !reflect.DeepEqual(actual, expected) { + h.Errorf("%s: expected:\n %#v\n got:\n %#v", message, expected, actual) + } +} + +// 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) + } +}