fbff97a84d
zeek@ has been tagging unit tests that cannot run on RBE with "no-remote". While we don't yet have RBE support with standalone `b test` yet, we can make sure to propagate the tags now. Bug: 236973602 Test: new unit test Change-Id: I6d0648f184626bb01c657068804f99ffb82907a3
174 lines
5 KiB
Go
174 lines
5 KiB
Go
// Copyright 2022 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 bp2build
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"android/soong/android"
|
|
"android/soong/cc"
|
|
"android/soong/genrule"
|
|
)
|
|
|
|
type ccTestBp2buildTestCase struct {
|
|
description string
|
|
blueprint string
|
|
targets []testBazelTarget
|
|
}
|
|
|
|
func registerCcTestModuleTypes(ctx android.RegistrationContext) {
|
|
cc.RegisterCCBuildComponents(ctx)
|
|
ctx.RegisterModuleType("cc_binary", cc.BinaryFactory)
|
|
ctx.RegisterModuleType("cc_library_static", cc.LibraryStaticFactory)
|
|
ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
|
|
ctx.RegisterModuleType("cc_test_library", cc.TestLibraryFactory)
|
|
ctx.RegisterModuleType("genrule", genrule.GenRuleFactory)
|
|
}
|
|
|
|
func runCcTestTestCase(t *testing.T, testCase ccTestBp2buildTestCase) {
|
|
t.Helper()
|
|
moduleTypeUnderTest := "cc_test"
|
|
|
|
description := fmt.Sprintf("%s %s", moduleTypeUnderTest, testCase.description)
|
|
t.Run(description, func(t *testing.T) {
|
|
t.Helper()
|
|
RunBp2BuildTestCase(t, registerCcTestModuleTypes, Bp2buildTestCase{
|
|
ExpectedBazelTargets: generateBazelTargetsForTest(testCase.targets, android.HostAndDeviceSupported),
|
|
ModuleTypeUnderTest: moduleTypeUnderTest,
|
|
ModuleTypeUnderTestFactory: cc.TestFactory,
|
|
Description: description,
|
|
Blueprint: testCase.blueprint,
|
|
})
|
|
})
|
|
}
|
|
|
|
func TestBasicCcTest(t *testing.T) {
|
|
runCcTestTestCase(t, ccTestBp2buildTestCase{
|
|
description: "basic cc_test with commonly used attributes",
|
|
blueprint: `
|
|
cc_test {
|
|
name: "mytest",
|
|
host_supported: true,
|
|
srcs: ["test.cpp"],
|
|
target: {
|
|
android: {
|
|
srcs: ["android.cpp"],
|
|
shared_libs: ["foolib"],
|
|
},
|
|
linux: {
|
|
srcs: ["linux.cpp"],
|
|
},
|
|
host: {
|
|
static_libs: ["hostlib"],
|
|
},
|
|
},
|
|
data: [":data_mod", "file.txt"],
|
|
data_bins: [":cc_bin"],
|
|
data_libs: [":cc_lib"],
|
|
cflags: ["-Wall"],
|
|
}
|
|
` + simpleModuleDoNotConvertBp2build("cc_library", "foolib") +
|
|
simpleModuleDoNotConvertBp2build("cc_library_static", "hostlib") +
|
|
simpleModuleDoNotConvertBp2build("genrule", "data_mod") +
|
|
simpleModuleDoNotConvertBp2build("cc_binary", "cc_bin") +
|
|
simpleModuleDoNotConvertBp2build("cc_test_library", "cc_lib"),
|
|
targets: []testBazelTarget{
|
|
{"cc_test", "mytest", AttrNameToString{
|
|
"copts": `["-Wall"]`,
|
|
"data": `[
|
|
":data_mod",
|
|
"file.txt",
|
|
":cc_bin",
|
|
":cc_lib",
|
|
]`,
|
|
"deps": `select({
|
|
"//build/bazel/platforms/os:darwin": [":hostlib"],
|
|
"//build/bazel/platforms/os:linux": [":hostlib"],
|
|
"//build/bazel/platforms/os:linux_bionic": [":hostlib"],
|
|
"//build/bazel/platforms/os:linux_musl": [":hostlib"],
|
|
"//build/bazel/platforms/os:windows": [":hostlib"],
|
|
"//conditions:default": [],
|
|
})`,
|
|
"gtest": "True",
|
|
"isolated": "True",
|
|
"local_includes": `["."]`,
|
|
"dynamic_deps": `select({
|
|
"//build/bazel/platforms/os:android": [":foolib"],
|
|
"//conditions:default": [],
|
|
})`,
|
|
"srcs": `["test.cpp"] + select({
|
|
"//build/bazel/platforms/os:android": [
|
|
"linux.cpp",
|
|
"android.cpp",
|
|
],
|
|
"//build/bazel/platforms/os:linux": ["linux.cpp"],
|
|
"//build/bazel/platforms/os:linux_bionic": ["linux.cpp"],
|
|
"//build/bazel/platforms/os:linux_musl": ["linux.cpp"],
|
|
"//conditions:default": [],
|
|
})`,
|
|
},
|
|
},
|
|
},
|
|
})
|
|
}
|
|
|
|
func TestBasicCcTestGtestIsolatedDisabled(t *testing.T) {
|
|
runCcTestTestCase(t, ccTestBp2buildTestCase{
|
|
description: "cc test with disabled gtest and isolated props",
|
|
blueprint: `
|
|
cc_test {
|
|
name: "mytest",
|
|
host_supported: true,
|
|
srcs: ["test.cpp"],
|
|
gtest: false,
|
|
isolated: false,
|
|
}
|
|
`,
|
|
targets: []testBazelTarget{
|
|
{"cc_test", "mytest", AttrNameToString{
|
|
"gtest": "False",
|
|
"isolated": "False",
|
|
"local_includes": `["."]`,
|
|
"srcs": `["test.cpp"]`,
|
|
},
|
|
},
|
|
},
|
|
})
|
|
}
|
|
|
|
func TestCcTest_TestOptions_Tags(t *testing.T) {
|
|
runCcTestTestCase(t, ccTestBp2buildTestCase{
|
|
description: "cc test with test_options.tags converted to tags",
|
|
blueprint: `
|
|
cc_test {
|
|
name: "mytest",
|
|
host_supported: true,
|
|
srcs: ["test.cpp"],
|
|
test_options: { tags: ["no-remote"] },
|
|
}
|
|
`,
|
|
targets: []testBazelTarget{
|
|
{"cc_test", "mytest", AttrNameToString{
|
|
"tags": `["no-remote"]`,
|
|
"local_includes": `["."]`,
|
|
"srcs": `["test.cpp"]`,
|
|
"gtest": "True",
|
|
"isolated": "True",
|
|
},
|
|
},
|
|
},
|
|
})
|
|
}
|