blob: 3b7281ec98a7e81e8ff018d0047a422a89ae0ad4 [file] [log] [blame]
// Copyright 2018 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 aconfig
import (
"testing"
"android/soong/android"
"github.com/google/blueprint"
)
func TestAconfigValueSet(t *testing.T) {
bp := `
aconfig_values {
name: "one",
srcs: [ "blah.aconfig_values" ],
package: "foo.package"
}
aconfig_value_set {
name: "module_name",
values: [ "one" ],
}
`
result := runTest(t, android.FixtureExpectsNoErrors, bp)
module := result.ModuleForTests("module_name", "").Module().(*ValueSetModule)
// Check that the provider has the right contents
depData, _ := android.OtherModuleProvider(result, module, valueSetProviderKey)
android.AssertStringEquals(t, "AvailablePackages", "blah.aconfig_values", depData.AvailablePackages["foo.package"][0].String())
}
func TestAconfigValueSetBpGlob(t *testing.T) {
result := android.GroupFixturePreparers(
PrepareForTestWithAconfigBuildComponents,
android.FixtureMergeMockFs(
map[string][]byte{
// .../some_release/android.foo/
"some_release/android.foo/Android.bp": []byte(`
aconfig_values {
name: "aconfig-values-platform_build_release-some_release-android.foo-all",
package: "android.foo",
srcs: [
"*.textproto",
],
}
`),
"some_release/android.foo/flag.textproto": nil,
// .../some_release/android.bar/
"some_release/android.bar/Android.bp": []byte(`
aconfig_values {
name: "aconfig-values-platform_build_release-some_release-android.bar-all",
package: "android.bar",
srcs: [
"*.textproto",
],
}
`),
"some_release/android.bar/flag.textproto": nil,
// .../some_release/
"some_release/Android.bp": []byte(`
aconfig_value_set {
name: "aconfig_value_set-platform_build_release-some_release",
srcs: [
"*/Android.bp",
],
}
`),
},
),
).RunTest(t)
checkModuleHasDependency := func(name, variant, dep string) bool {
t.Helper()
module := result.ModuleForTests(name, variant).Module()
depFound := false
result.VisitDirectDeps(module, func(m blueprint.Module) {
if m.Name() == dep {
depFound = true
}
})
return depFound
}
android.AssertBoolEquals(t,
"aconfig_value_set expected to depend on aconfig_value via srcs",
true,
checkModuleHasDependency(
"aconfig_value_set-platform_build_release-some_release",
"",
"aconfig-values-platform_build_release-some_release-android.foo-all",
),
)
android.AssertBoolEquals(t,
"aconfig_value_set expected to depend on aconfig_value via srcs",
true,
checkModuleHasDependency(
"aconfig_value_set-platform_build_release-some_release",
"",
"aconfig-values-platform_build_release-some_release-android.bar-all",
),
)
}
func TestAconfigValueSetBpGlobError(t *testing.T) {
android.GroupFixturePreparers(
PrepareForTestWithAconfigBuildComponents,
android.FixtureMergeMockFs(
map[string][]byte{
// .../some_release/android.bar/
"some_release/android.bar/Android.bp": []byte(`
aconfig_values {
name: "aconfig-values-platform_build_release-some_release-android_bar-all",
package: "android.bar",
srcs: [
"*.textproto",
],
}
`),
"some_release/android.bar/flag.textproto": nil,
// .../some_release/
"some_release/Android.bp": []byte(`
aconfig_value_set {
name: "aconfig_value_set-platform_build_release-some_release",
srcs: [
"*/Android.bp",
],
}
`),
},
),
).ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern(
`module "aconfig_value_set-platform_build_release-some_release": module ` +
`"aconfig-values-platform_build_release-some_release-android.bar-all" not found. ` +
`Rename the aconfig_values module defined in "some_release/android.bar/Android.bp" ` +
`to "aconfig-values-platform_build_release-some_release-android.bar-all"`),
).RunTest(t)
}