blob: f6762a3b932d1cee778679cc40291912c5455cca [file] [log] [blame]
// 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.android;
import static com.google.common.truth.Truth.assertThat;
import com.android.builder.core.VariantType;
import com.android.repository.Revision;
import com.google.common.collect.ImmutableList;
import com.google.common.testing.NullPointerTester;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.ArrayList;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/** Tests for {@link AaptCommandBuilder}. */
@RunWith(JUnit4.class)
public class AaptCommandBuilderTest {
private Path aapt;
private Path manifest;
@Before
public void createPaths() {
FileSystem fs = FileSystems.getDefault();
aapt = fs.getPath("aapt");
manifest = fs.getPath("AndroidManifest.xml");
}
@Test
public void testPassesNullPointerTester() throws Exception {
NullPointerTester tester = new NullPointerTester().setDefault(Path.class, aapt);
tester.testConstructor(AaptCommandBuilder.class.getConstructor(Path.class));
tester.testAllPublicInstanceMethods(new AaptCommandBuilder(aapt));
tester.testAllPublicInstanceMethods(new AaptCommandBuilder(aapt).when(true));
tester.testAllPublicInstanceMethods(new AaptCommandBuilder(aapt).when(false));
}
@Test
public void testAaptPathAddedAsFirstArgument() {
assertThat(new AaptCommandBuilder(aapt).build()).containsExactly(aapt.toString());
}
@Test
public void testAddArgumentAddedToList() {
assertThat(new AaptCommandBuilder(aapt).add("package").build()).contains("package");
}
@Test
public void testAddCallsAddedToEndOfList() {
assertThat(new AaptCommandBuilder(aapt).add("package").add("-f").build())
.containsExactly(aapt.toString(), "package", "-f")
.inOrder();
}
@Test
public void testAddWithStringValueAddsFlagThenValueAsSeparateWords() {
assertThat(new AaptCommandBuilder(aapt).add("-0", "gif").build())
.containsExactly(aapt.toString(), "-0", "gif")
.inOrder();
}
@Test
public void testAddWithEmptyValueAddsNothing() {
assertThat(new AaptCommandBuilder(aapt).add("-0", "").build()).doesNotContain("-0");
}
@Test
public void testAddWithNullStringValueAddsNothing() {
assertThat(new AaptCommandBuilder(aapt).add("-0", (String) null).build()).doesNotContain("-0");
}
@Test
public void testAddWithPathValueAddsFlagThenStringValueAsSeparateWords() {
assertThat(new AaptCommandBuilder(aapt).add("-M", manifest).build())
.containsExactly(aapt.toString(), "-M", manifest.toString())
.inOrder();
}
@Test
public void testAddWithNullPathValueAddsNothing() {
assertThat(new AaptCommandBuilder(aapt).add("-M", (Path) null).build()).doesNotContain("-M");
}
@Test
public void testAddRepeatedWithEmptyValuesAddsNothing() {
assertThat(new AaptCommandBuilder(aapt).addRepeated("-0", ImmutableList.<String>of()).build())
.doesNotContain("-0");
}
@Test
public void testAddRepeatedWithSingleValueAddsOneFlagOneValue() {
assertThat(new AaptCommandBuilder(aapt).addRepeated("-0", ImmutableList.of("gif")).build())
.containsExactly(aapt.toString(), "-0", "gif")
.inOrder();
}
@Test
public void testAddRepeatedWithMultipleValuesAddsFlagBeforeEachValue() {
assertThat(
new AaptCommandBuilder(aapt).addRepeated("-0", ImmutableList.of("gif", "png")).build())
.containsExactly(aapt.toString(), "-0", "gif", "-0", "png")
.inOrder();
}
@Test
public void testAddRepeatedSkipsNullValues() {
ArrayList<String> list = new ArrayList<>(3);
list.add("gif");
list.add(null);
list.add("png");
assertThat(
new AaptCommandBuilder(aapt).addRepeated("-0", list).build())
.containsExactly(aapt.toString(), "-0", "gif", "-0", "png")
.inOrder();
}
@Test
public void testThenAddFlagForwardsCallAfterWhenTrue() {
assertThat(
new AaptCommandBuilder(aapt).when(true).thenAdd("--addthisflag").build())
.contains("--addthisflag");
}
@Test
public void testThenAddFlagWithValueForwardsCallAfterWhenTrue() {
assertThat(
new AaptCommandBuilder(aapt)
.when(true).thenAdd("--addthisflag", "andthisvalue").build())
.contains("--addthisflag");
}
@Test
public void testThenAddFlagWithPathForwardsCallAfterWhenTrue() {
assertThat(
new AaptCommandBuilder(aapt)
.when(true).thenAdd("--addthisflag", manifest).build())
.contains("--addthisflag");
}
@Test
public void testThenAddRepeatedForwardsCallAfterWhenTrue() {
assertThat(
new AaptCommandBuilder(aapt)
.when(true).thenAddRepeated("--addthisflag", ImmutableList.of("andthesevalues"))
.build())
.contains("--addthisflag");
}
@Test
public void testThenAddFlagDoesNothingAfterWhenFalse() {
assertThat(
new AaptCommandBuilder(aapt).when(false).thenAdd("--dontaddthisflag").build())
.doesNotContain("--dontaddthisflag");
}
@Test
public void testThenAddFlagWithValueDoesNothingAfterWhenFalse() {
assertThat(
new AaptCommandBuilder(aapt)
.when(false).thenAdd("--dontaddthisflag", "orthisvalue").build())
.doesNotContain("--dontaddthisflag");
}
@Test
public void testThenAddFlagWithPathDoesNothingAfterWhenFalse() {
assertThat(
new AaptCommandBuilder(aapt)
.when(false).thenAdd("--dontaddthisflag", manifest).build())
.doesNotContain("--dontaddthisflag");
}
@Test
public void testThenAddRepeatedDoesNothingAfterWhenFalse() {
assertThat(
new AaptCommandBuilder(aapt)
.when(false).thenAddRepeated("--dontaddthisflag", ImmutableList.of("orthesevalues"))
.build())
.doesNotContain("--dontaddthisflag");
}
@Test
public void testWhenVersionIsAtLeastAddsFlagsForEqualVersion() {
assertThat(
new AaptCommandBuilder(aapt).forBuildToolsVersion(new Revision(23))
.whenVersionIsAtLeast(new Revision(23)).thenAdd("--addthisflag")
.build())
.contains("--addthisflag");
}
@Test
public void testWhenVersionIsAtLeastAddsFlagsForGreaterVersion() {
assertThat(
new AaptCommandBuilder(aapt).forBuildToolsVersion(new Revision(24))
.whenVersionIsAtLeast(new Revision(23)).thenAdd("--addthisflag")
.build())
.contains("--addthisflag");
}
@Test
public void testWhenVersionIsAtLeastAddsFlagsForUnspecifiedVersion() {
assertThat(
new AaptCommandBuilder(aapt)
.whenVersionIsAtLeast(new Revision(23)).thenAdd("--addthisflag")
.build())
.contains("--addthisflag");
}
@Test
public void testWhenVersionIsAtLeastDoesNotAddFlagsForLesserVersion() {
assertThat(
new AaptCommandBuilder(aapt).forBuildToolsVersion(new Revision(22))
.whenVersionIsAtLeast(new Revision(23)).thenAdd("--dontaddthisflag")
.build())
.doesNotContain("--dontaddthisflag");
}
@Test
public void testWhenVariantIsAddsFlagsForEqualVariantType() {
assertThat(
new AaptCommandBuilder(aapt).forVariantType(VariantType.LIBRARY)
.whenVariantIs(VariantType.LIBRARY).thenAdd("--addthisflag")
.build())
.contains("--addthisflag");
}
@Test
public void testWhenVariantIsDoesNotAddFlagsForUnequalVariantType() {
assertThat(
new AaptCommandBuilder(aapt).forVariantType(VariantType.DEFAULT)
.whenVariantIs(VariantType.LIBRARY).thenAdd("--dontaddthisflag")
.build())
.doesNotContain("--dontaddthisflag");
}
@Test
public void testWhenVariantIsDoesNotAddFlagsForUnspecifiedVariantType() {
assertThat(
new AaptCommandBuilder(aapt)
.whenVariantIs(VariantType.LIBRARY).thenAdd("--dontaddthisflag")
.build())
.doesNotContain("--dontaddthisflag");
}
}