diff options
author | 2017-05-05 04:19:34 +0200 | |
---|---|---|
committer | 2017-05-05 15:27:23 +0200 | |
commit | 14747a8bf2d35846d75ac9058e1b514a89f68f07 (patch) | |
tree | 51693a3aaf6ec6421bc0226355dc0c66a306fce3 /src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureTest.java | |
parent | f2528c1b96751692aae233aa839f86d0f887b75f (diff) |
Create new android_device_script_fixture rule.
This rule simply provides a shell script that is run on a device as part of a
test which can come from an input file or as a string command.
It also takes a list of APKs that need to be installed before the fixture can
be run.
Note that this CL does _not_ install the rule in the BazelRuleClassProvider, so
this CL does not make it usable by anyone. Once the other android testing rules are ready, I will install them all.
One small step towards https://github.com/bazelbuild/bazel/issues/903.
RELNOTES: None
PiperOrigin-RevId: 155155984
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureTest.java')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureTest.java | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureTest.java new file mode 100644 index 0000000000..6149580254 --- /dev/null +++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureTest.java @@ -0,0 +1,197 @@ +// Copyright 2017 The Bazel Authors. 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 com.google.devtools.build.lib.rules.android; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.devtools.build.lib.actions.util.ActionsTestUtil; +import com.google.devtools.build.lib.analysis.ConfiguredTarget; +import com.google.devtools.build.lib.analysis.actions.FileWriteAction; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Tests for {@link AndroidDeviceScriptFixture}. */ +@RunWith(JUnit4.class) +public class AndroidDeviceScriptFixtureTest extends AndroidBuildViewTestCase { + + @Before + public void setup() throws Exception { + scratch.file("scripts/BUILD", "exports_files(['my_script.sh'])"); + scratch.file( + "java/com/app/BUILD", + "android_binary(", + " name = 'app',", + " manifest = 'AndroidManifest.xml',", + ")"); + scratch.file( + "java/com/app/support/BUILD", + "android_binary(", + " name = 'support',", + " manifest = 'AndroidManifest.xml',", + ")", + "genrule(", + " name = 'genrule',", + " outs = ['generated.apk'],", + " cmd = 'touch $(OUTS)',", + ")"); + } + + @Test + public void testScriptFixture() throws Exception { + scratch.file( + "javatests/com/app/BUILD", + "android_device_script_fixture(", + " name = 'fixture',", + " script = '//scripts:my_script.sh',", + ")"); + ConfiguredTarget fixture = getConfiguredTarget("//javatests/com/app:fixture"); + assertThat(fixture).isNotNull(); + AndroidDeviceScriptFixtureInfoProvider deviceScriptFixtureInfoProvider = + (AndroidDeviceScriptFixtureInfoProvider) + fixture.get( + AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO.getKey()); + assertThat(deviceScriptFixtureInfoProvider).isNotNull(); + assertThat(deviceScriptFixtureInfoProvider.getFixtureScript()).isNotNull(); + assertThat(deviceScriptFixtureInfoProvider.getFixtureScript().prettyPrint()) + .isEqualTo("scripts/my_script.sh"); + } + + @Test + public void testCommandFixture() throws Exception { + scratch.file( + "javatests/com/app/BUILD", + "android_device_script_fixture(", + " name = 'fixture',", + " cmd = 'some literal command',", + ")"); + ConfiguredTarget fixture = getConfiguredTarget("//javatests/com/app:fixture"); + assertThat(fixture).isNotNull(); + AndroidDeviceScriptFixtureInfoProvider deviceScriptFixtureInfoProvider = + (AndroidDeviceScriptFixtureInfoProvider) + fixture.get( + AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO.getKey()); + assertThat(deviceScriptFixtureInfoProvider).isNotNull(); + assertThat(deviceScriptFixtureInfoProvider.getFixtureScript()).isNotNull(); + assertThat(deviceScriptFixtureInfoProvider.getFixtureScript().prettyPrint()) + .isEqualTo("javatests/com/app/cmd_device_fixtures/fixture/cmd.sh"); + FileWriteAction action = + (FileWriteAction) getGeneratingAction(deviceScriptFixtureInfoProvider.getFixtureScript()); + assertThat(action.getFileContents()).isEqualTo("some literal command"); + } + + @Test + public void testNoScriptOrCommand() throws Exception { + checkError( + "javatests/com/app", + "fixture", + "android_host_service_fixture requires that exactly one of the script and cmd attributes " + + "be specified", + "android_device_script_fixture(", + " name = 'fixture',", + ")"); + } + + @Test + public void testScriptAndCommand() throws Exception { + checkError( + "javatests/com/app", + "fixture", + "android_host_service_fixture requires that exactly one of the script and cmd attributes " + + "be specified", + "android_device_script_fixture(", + " name = 'fixture',", + " script = '//scripts:my_script.sh',", + " cmd = 'some literal command',", + ")"); + } + + @Test + public void testSupportApks() throws Exception { + scratch.file( + "javatests/com/app/BUILD", + "android_device_script_fixture(", + " name = 'fixture',", + " cmd = 'some literal command',", + " support_apks = [", + " '//java/com/app/support',", + " '//java/com/app/support:generated.apk',", + " ],", + ")"); + ConfiguredTarget fixture = getConfiguredTarget("//javatests/com/app:fixture"); + assertThat(fixture).isNotNull(); + AndroidDeviceScriptFixtureInfoProvider deviceScriptFixtureInfoProvider = + (AndroidDeviceScriptFixtureInfoProvider) + fixture.get( + AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO.getKey()); + assertThat(deviceScriptFixtureInfoProvider).isNotNull(); + + assertThat( + ActionsTestUtil.prettyArtifactNames(deviceScriptFixtureInfoProvider.getSupportApks())) + .containsExactly("java/com/app/support/support.apk", "java/com/app/support/generated.apk") + .inOrder(); + } + + @Test + public void testNonSupportedScriptExtension() throws Exception { + scratch.file("javatests/com/app/script.bat"); + checkError( + "javatests/com/app", + "fixture", + "file '//javatests/com/app:script.bat' is misplaced here (expected .sh)", + "android_device_script_fixture(", + " name = 'fixture',", + " script = 'script.bat',", + ")"); + } + + @Test + public void testDaemonIsProvided() throws Exception { + scratch.file( + "javatests/com/app/BUILD", + "android_device_script_fixture(", + " name = 'fixture',", + " cmd = 'some literal command',", + " daemon = 1,", + ")"); + ConfiguredTarget fixture = getConfiguredTarget("//javatests/com/app:fixture"); + assertThat(fixture).isNotNull(); + AndroidDeviceScriptFixtureInfoProvider deviceScriptFixtureInfoProvider = + (AndroidDeviceScriptFixtureInfoProvider) + fixture.get( + AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO.getKey()); + assertThat(deviceScriptFixtureInfoProvider).isNotNull(); + assertThat(deviceScriptFixtureInfoProvider.getDaemon()).isTrue(); + } + + @Test + public void testStrictExitIsProvided() throws Exception { + scratch.file( + "javatests/com/app/BUILD", + "android_device_script_fixture(", + " name = 'fixture',", + " cmd = 'some literal command',", + " strict_exit = 1,", + ")"); + ConfiguredTarget fixture = getConfiguredTarget("//javatests/com/app:fixture"); + assertThat(fixture).isNotNull(); + AndroidDeviceScriptFixtureInfoProvider deviceScriptFixtureInfoProvider = + (AndroidDeviceScriptFixtureInfoProvider) + fixture.get( + AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO.getKey()); + assertThat(deviceScriptFixtureInfoProvider).isNotNull(); + assertThat(deviceScriptFixtureInfoProvider.getStrictExit()).isTrue(); + } +} |