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