diff options
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java index a52a1a60fb..9be5e5ca7f 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java @@ -2934,4 +2934,94 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase { assertThat(javacAction.buildCommandLine()).doesNotContain("--testonly"); } + + @Test + public void testFeatureFlagPolicyMustContainRuleToUseFeatureFlags() throws Exception { + reporter.removeHandler(failFastHandler); // expecting an error + scratch.file( + "policy/BUILD", + "package_group(", + " name = 'feature_flag_users',", + " packages = ['//flag'])"); + scratch.file( + "flag/BUILD", + "config_feature_flag(", + " name = 'flag',", + " allowed_values = ['right', 'wrong'],", + " default_value = 'right',", + " visibility = ['//java/com/google/android/foo:__pkg__'],", + ")"); + scratch.file( + "java/com/google/android/foo/BUILD", + "android_binary(", + " name = 'foo',", + " manifest = 'AndroidManifest.xml',", + " srcs = [':FooFlags.java'],", + " feature_flags = {", + " '//flag:flag': 'right',", + " }", + ")"); + useConfiguration( + "--experimental_dynamic_configs=notrim", + "--feature_control_policy=config_feature_flag=//policy:feature_flag_users"); + assertThat(getConfiguredTarget("//java/com/google/android/foo:foo")).isNull(); + assertContainsEvent( + "in android_binary rule //java/com/google/android/foo:foo: the feature_flags attribute is " + + "not available in package 'java/com/google/android/foo' according to policy " + + "'//policy:feature_flag_users'"); + } + + @Test + public void testFeatureFlagPolicyDoesNotBlockRuleIfInPolicy() throws Exception { + scratch.file( + "policy/BUILD", + "package_group(", + " name = 'feature_flag_users',", + " packages = ['//flag', '//java/com/google/android/foo'])"); + scratch.file( + "flag/BUILD", + "config_feature_flag(", + " name = 'flag',", + " allowed_values = ['right', 'wrong'],", + " default_value = 'right',", + " visibility = ['//java/com/google/android/foo:__pkg__'],", + ")"); + scratch.file( + "java/com/google/android/foo/BUILD", + "android_binary(", + " name = 'foo',", + " manifest = 'AndroidManifest.xml',", + " srcs = [':FooFlags.java'],", + " feature_flags = {", + " '//flag:flag': 'right',", + " }", + ")"); + useConfiguration( + "--experimental_dynamic_configs=notrim", + "--feature_control_policy=config_feature_flag=//policy:feature_flag_users"); + assertThat(getConfiguredTarget("//java/com/google/android/foo:foo")).isNotNull(); + assertNoEvents(); + } + + @Test + public void testFeatureFlagPolicyDoesNotBlockRuleIfFlagValuesNotUsed() throws Exception { + scratch.file( + "policy/BUILD", + "package_group(", + " name = 'feature_flag_users',", + " packages = ['//flag'])"); + scratch.file("flag/BUILD"); + scratch.file( + "java/com/google/android/foo/BUILD", + "android_binary(", + " name = 'foo',", + " manifest = 'AndroidManifest.xml',", + " srcs = [':FooFlags.java'],", + ")"); + useConfiguration( + "--experimental_dynamic_configs=notrim", + "--feature_control_policy=config_feature_flag=//policy:feature_flag_users"); + assertThat(getConfiguredTarget("//java/com/google/android/foo:foo")).isNotNull(); + assertNoEvents(); + } } |