aboutsummaryrefslogtreecommitdiff
path: root/builder/src/test
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2012-08-20 18:07:58 -0700
committerXavier Ducrohet <xav@android.com>2012-08-20 19:12:56 -0700
commit45c898bfc42ccc2e8dc635312358e85102a766ea (patch)
treeceedb0f01b7e989b2169d27e5185221b456555ae /builder/src/test
parent1d963e6684952b9259e2be2b33b36b649f889f26 (diff)
downloadbuild-45c898bfc42ccc2e8dc635312358e85102a766ea.tar.gz
Android build library.
This library allows building Android libraries and applications in the context of the Android SDK. It is meant to be usable by various build systems and only deals with the logic of building Android applications. While it exposes some configurations and expect from specific inputs, they are meant to be provided by the build system itself. It purposely doesn't include Eclipse or IDEA project files due to dependencies that are downloaded from Maven (and due to IDEA's tendency to put local path in its project paths). Instead those can be created using gradle eclipse and gradle idea The prebuilts are temporary till we move those libraries to gradle or figure something else. Change-Id: Ia95fa9ae3a619c2d9fe68b4cfa3ce72acfb4df3c
Diffstat (limited to 'builder/src/test')
-rw-r--r--builder/src/test/java/com/android/builder/AndroidBuilderTest.java110
-rw-r--r--builder/src/test/java/com/android/builder/BuildTypeTest.java38
-rw-r--r--builder/src/test/java/com/android/builder/ProductFlavorTest.java77
-rw-r--r--builder/src/test/java/com/android/builder/samples/Main.java89
4 files changed, 314 insertions, 0 deletions
diff --git a/builder/src/test/java/com/android/builder/AndroidBuilderTest.java b/builder/src/test/java/com/android/builder/AndroidBuilderTest.java
new file mode 100644
index 0000000..40cc650
--- /dev/null
+++ b/builder/src/test/java/com/android/builder/AndroidBuilderTest.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * 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.android.builder;
+
+import com.android.utils.StdLogger;
+
+import junit.framework.TestCase;
+
+public class AndroidBuilderTest extends TestCase {
+
+ private ProductFlavor mMain;
+ private ProductFlavor mFlavor;
+ private BuildType mDebug;
+
+ private static class ManifestParserMock implements ManifestParser {
+
+ private final String mPackageName;
+
+ ManifestParserMock(String packageName) {
+ mPackageName = packageName;
+ }
+
+ @Override
+ public String getPackage(String manifestFile) {
+ return mPackageName;
+ }
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ mMain = new ProductFlavor("main");
+ mFlavor = new ProductFlavor("flavor");
+ mDebug = new BuildType("debug");
+ }
+
+ public void testPackageOverrideNone() {
+ AndroidBuilder builder = new AndroidBuilder(new DefaultSdkParser(""),
+ new StdLogger(StdLogger.Level.ERROR), false /*verboseExec*/);
+
+ builder.setBuildVariant(mMain, mFlavor, mDebug);
+
+ assertNull(builder.getPackageOverride(""));
+ }
+
+ public void testPackageOverridePackageFromFlavor() {
+ AndroidBuilder builder = new AndroidBuilder(new DefaultSdkParser(""),
+ new StdLogger(StdLogger.Level.ERROR), false /*verboseExec*/);
+
+ mFlavor.setPackageName("foo.bar");
+
+ builder.setBuildVariant(mMain, mFlavor, mDebug);
+
+ assertEquals("foo.bar", builder.getPackageOverride(""));
+ }
+
+ public void testPackageOverridePackageFromFlavorWithSuffix() {
+ AndroidBuilder builder = new AndroidBuilder(new DefaultSdkParser(""),
+ new StdLogger(StdLogger.Level.ERROR), false /*verboseExec*/);
+
+ mFlavor.setPackageName("foo.bar");
+ mDebug.setPackageNameSuffix(".fortytwo");
+
+ builder.setBuildVariant(mMain, mFlavor, mDebug);
+
+ assertEquals("foo.bar.fortytwo", builder.getPackageOverride(""));
+ }
+
+ public void testPackageOverridePackageFromFlavorWithSuffix2() {
+ AndroidBuilder builder = new AndroidBuilder(new DefaultSdkParser(""),
+ new StdLogger(StdLogger.Level.ERROR), false /*verboseExec*/);
+
+ mFlavor.setPackageName("foo.bar");
+ mDebug.setPackageNameSuffix("fortytwo");
+
+ builder.setBuildVariant(mMain, mFlavor, mDebug);
+
+ assertEquals("foo.bar.fortytwo", builder.getPackageOverride(""));
+ }
+
+ public void testPackageOverridePackageWithSuffixOnly() {
+ StdLogger logger = new StdLogger(StdLogger.Level.ERROR);
+
+ AndroidBuilder builder = new AndroidBuilder(
+ new DefaultSdkParser(""),
+ new ManifestParserMock("fake.package.name"),
+ new CommandLineRunner(logger),
+ logger,
+ false /*verboseExec*/);
+
+ mDebug.setPackageNameSuffix("fortytwo");
+
+ builder.setBuildVariant(mMain, mFlavor, mDebug);
+
+ assertEquals("fake.package.name.fortytwo", builder.getPackageOverride(""));
+ }
+}
diff --git a/builder/src/test/java/com/android/builder/BuildTypeTest.java b/builder/src/test/java/com/android/builder/BuildTypeTest.java
new file mode 100644
index 0000000..1fecbb5
--- /dev/null
+++ b/builder/src/test/java/com/android/builder/BuildTypeTest.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * 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.android.builder;
+
+import junit.framework.TestCase;
+
+public class BuildTypeTest extends TestCase {
+
+ public void testDebug() {
+ BuildType type = new BuildType("debug");
+
+ assertTrue(type.isDebuggable());
+ assertTrue(type.isDebugJniBuild());
+ assertTrue(type.isDebugSigningKey());
+ }
+
+ public void testRelease() {
+ BuildType type = new BuildType("release");
+
+ assertFalse(type.isDebuggable());
+ assertFalse(type.isDebugJniBuild());
+ assertFalse(type.isDebugSigningKey());
+ }
+}
diff --git a/builder/src/test/java/com/android/builder/ProductFlavorTest.java b/builder/src/test/java/com/android/builder/ProductFlavorTest.java
new file mode 100644
index 0000000..84be8ee
--- /dev/null
+++ b/builder/src/test/java/com/android/builder/ProductFlavorTest.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * 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.android.builder;
+
+import junit.framework.TestCase;
+
+public class ProductFlavorTest extends TestCase {
+
+ private ProductFlavor mDefault;
+ private ProductFlavor mDefault2;
+ private ProductFlavor mCustom;
+
+ @Override
+ protected void setUp() throws Exception {
+ mDefault = new ProductFlavor("default");
+ mDefault2 = new ProductFlavor("default2");
+
+ mCustom = new ProductFlavor("custom");
+ mCustom.setMinSdkVersion(42);
+ mCustom.setTargetSdkVersion(43);
+ mCustom.setVersionCode(44);
+ mCustom.setVersionName("42.0");
+ mCustom.setPackageName("com.forty.two");
+ mCustom.setTestPackageName("com.forty.two.test");
+ mCustom.setTestInstrumentationRunner("com.forty.two.test.Runner");
+ }
+
+ public void testMergeOnDefault() {
+ ProductFlavor flavor = mCustom.mergeWith(mDefault);
+
+ assertEquals(42, flavor.getMinSdkVersion());
+ assertEquals(43, flavor.getTargetSdkVersion());
+ assertEquals(44, flavor.getVersionCode());
+ assertEquals("42.0", flavor.getVersionName());
+ assertEquals("com.forty.two", flavor.getPackageName());
+ assertEquals("com.forty.two.test", flavor.getTestPackageName());
+ assertEquals("com.forty.two.test.Runner", flavor.getTestInstrumentationRunner());
+ }
+
+ public void testMergeOnCustom() {
+ ProductFlavor flavor = mDefault.mergeWith(mCustom);
+
+ assertEquals(42, flavor.getMinSdkVersion());
+ assertEquals(43, flavor.getTargetSdkVersion());
+ assertEquals(44, flavor.getVersionCode());
+ assertEquals("42.0", flavor.getVersionName());
+ assertEquals("com.forty.two", flavor.getPackageName());
+ assertEquals("com.forty.two.test", flavor.getTestPackageName());
+ assertEquals("com.forty.two.test.Runner", flavor.getTestInstrumentationRunner());
+ }
+
+ public void testMergeDefaultOnDefault() {
+ ProductFlavor flavor = mDefault.mergeWith(mDefault2);
+
+ assertEquals(-1, flavor.getMinSdkVersion());
+ assertEquals(-1, flavor.getTargetSdkVersion());
+ assertEquals(-1, flavor.getVersionCode());
+ assertNull(flavor.getVersionName());
+ assertNull(flavor.getPackageName());
+ assertNull(flavor.getTestPackageName());
+ assertNull(flavor.getTestInstrumentationRunner());
+ }
+}
diff --git a/builder/src/test/java/com/android/builder/samples/Main.java b/builder/src/test/java/com/android/builder/samples/Main.java
new file mode 100644
index 0000000..2e53390
--- /dev/null
+++ b/builder/src/test/java/com/android/builder/samples/Main.java
@@ -0,0 +1,89 @@
+package com.android.builder.samples;
+
+import com.android.builder.AaptOptions;
+import com.android.builder.AndroidBuilder;
+import com.android.builder.BuildType;
+import com.android.builder.DefaultSdkParser;
+import com.android.builder.ProductFlavor;
+import com.android.utils.StdLogger;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+
+public class Main {
+
+ /**
+ * Usage: <sdklocation> <samplelocation>
+ *
+ *
+ * @param args
+ * @throws IOException
+ * @throws InterruptedException
+ */
+ public static void main(String[] args) throws IOException, InterruptedException {
+
+ DefaultSdkParser parser = new DefaultSdkParser(args[0]);
+
+ AndroidBuilder builder = new AndroidBuilder(parser,
+ new StdLogger(StdLogger.Level.VERBOSE), true);
+ builder.setTarget("android-15");
+
+ ProductFlavor mainFlavor = new ProductFlavor("main");
+ ProductFlavor customFlavor = new ProductFlavor("custom");
+ BuildType debug = new BuildType(BuildType.DEBUG);
+
+ customFlavor.setMinSdkVersion(15);
+ customFlavor.setTargetSdkVersion(16);
+
+ AaptOptions aaptOptions = new AaptOptions();
+
+ builder.setBuildVariant(mainFlavor, customFlavor, debug);
+
+ String sample = args[1];
+ String build = sample + File.separator + "build";
+ checkFolder(build);
+
+ String gen = build + File.separator + "gen";
+ checkFolder(gen);
+
+ String outRes = build + File.separator + "res";
+ checkFolder(outRes);
+
+ String[] lines = new String[] {
+ "public final static int A = 1;"
+ };
+ builder.generateBuildConfig(
+ sample + File.separator + "AndroidManifest.xml",
+ gen,
+ Arrays.asList(lines));
+
+ builder.preprocessResources(
+ sample + File.separator + "res",
+ null, /*flavorResLocation*/
+ null, /*typeResLocation*/
+ outRes);
+
+ builder.processResources(
+ sample + File.separator + "AndroidManifest.xml",
+ sample + File.separator + "res",
+ null, /*flavorResLocation*/
+ null, /*typeResLocation*/
+ outRes,
+ sample + File.separator + "assets",
+ null, /*flavorAssetsLocation*/
+ null, /*typeAssetsLocation*/
+ gen,
+ build + File.separator + "foo.apk_",
+ build + File.separator + "foo.proguard.txt",
+ aaptOptions);
+ }
+
+ private static void checkFolder(String path) {
+ File folder = new File(path);
+ if (folder.exists() == false) {
+ folder.mkdirs();
+ }
+ }
+
+}