// 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) }