aboutsummaryrefslogtreecommitdiffstats
path: root/sdkmanager/app/tests/com/android/sdkmanager
diff options
context:
space:
mode:
Diffstat (limited to 'sdkmanager/app/tests/com/android/sdkmanager')
-rw-r--r--sdkmanager/app/tests/com/android/sdkmanager/AvdManagerTest.java77
-rw-r--r--sdkmanager/app/tests/com/android/sdkmanager/MainTest.java174
-rwxr-xr-xsdkmanager/app/tests/com/android/sdkmanager/SdkManagerTestCase.java182
-rw-r--r--sdkmanager/app/tests/com/android/sdkmanager/SdkManagerTestUtil.java88
4 files changed, 358 insertions, 163 deletions
diff --git a/sdkmanager/app/tests/com/android/sdkmanager/AvdManagerTest.java b/sdkmanager/app/tests/com/android/sdkmanager/AvdManagerTest.java
index 4ae107c..a5a8289 100644
--- a/sdkmanager/app/tests/com/android/sdkmanager/AvdManagerTest.java
+++ b/sdkmanager/app/tests/com/android/sdkmanager/AvdManagerTest.java
@@ -16,59 +16,57 @@
package com.android.sdkmanager;
-import static java.io.File.createTempFile;
-
+import com.android.io.FileWrapper;
import com.android.sdklib.IAndroidTarget;
-import com.android.sdklib.SdkManager;
-import com.android.sdklib.internal.avd.AvdManager;
+import com.android.sdklib.SdkConstants;
+import com.android.sdklib.internal.avd.AvdInfo;
import com.android.sdklib.internal.project.ProjectProperties;
-import com.android.sdklib.io.FileWrapper;
-import com.android.sdklib.mock.MockLog;
import java.io.File;
import java.util.Map;
-import junit.framework.TestCase;
-
-public class AvdManagerTest extends TestCase {
+public class AvdManagerTest extends SdkManagerTestCase {
- private AvdManager mAvdManager;
- private SdkManager mSdkManager;
- private MockLog mLog;
- private File mFakeSdk;
- private File mAvdFolder;
private IAndroidTarget mTarget;
+ private File mAvdFolder;
@Override
public void setUp() throws Exception {
- mLog = new MockLog();
- mFakeSdk = SdkManagerTestUtil.makeFakeSdk(createTempFile(this.getClass().getSimpleName(), null));
- mSdkManager = SdkManager.createManager(mFakeSdk.getAbsolutePath(), mLog);
- assertNotNull("sdkManager location was invalid", mSdkManager);
+ super.setUp();
- mAvdManager = new AvdManager(mSdkManager, mLog);
- mAvdFolder = new File(mFakeSdk, "avdData");
- mTarget = mSdkManager.getTargets()[0];
+ mTarget = getSdkManager().getTargets()[0];
+ mAvdFolder = AvdInfo.getDefaultAvdFolder(getAvdManager(), getName());
}
@Override
public void tearDown() throws Exception {
- SdkManagerTestUtil.deleteDir(mFakeSdk);
+ super.tearDown();
}
public void testCreateAvdWithoutSnapshot() {
- mAvdManager.createAvd(
- mAvdFolder, this.getName(), mTarget, null, null, null, false, false, mLog);
- assertEquals("[P Created AVD '" + this.getName() + "' based on Android 0.0\n]",
- mLog.toString());
+ getAvdManager().createAvd(
+ mAvdFolder,
+ this.getName(),
+ mTarget,
+ SdkConstants.ABI_ARMEABI,
+ null, // skinName
+ null, // sdName
+ null, // properties
+ false, // createSnapshot
+ false, // removePrevious
+ false, // editExisting
+ getLog());
+
+ assertEquals("[P Created AVD '" + this.getName() + "' based on Android 0.0, ARM (armeabi) processor\n]",
+ getLog().toString());
assertTrue("Expected config.ini in " + mAvdFolder,
new File(mAvdFolder, "config.ini").exists());
Map<String, String> map = ProjectProperties.parsePropertyFile(
- new FileWrapper(mAvdFolder, "config.ini"), mLog);
+ new FileWrapper(mAvdFolder, "config.ini"), getLog());
assertEquals("HVGA", map.get("skin.name"));
- assertEquals("platforms/v0_0/skins/HVGA", map.get("skin.path"));
- assertEquals("platforms/v0_0/images/", map.get("image.sysdir.1"));
+ assertEquals("platforms/v0_0/skins/HVGA", map.get("skin.path").replace(File.separatorChar, '/'));
+ assertEquals("platforms/v0_0/images/", map.get("image.sysdir.1").replace(File.separatorChar, '/'));
assertEquals(null, map.get("snapshot.present"));
assertTrue("Expected userdata.img in " + mAvdFolder,
new File(mAvdFolder, "userdata.img").exists());
@@ -77,15 +75,26 @@ public class AvdManagerTest extends TestCase {
}
public void testCreateAvdWithSnapshot() {
- mAvdManager.createAvd(
- mAvdFolder, this.getName(), mTarget, null, null, null, false, true, mLog);
- assertEquals("[P Created AVD '" + this.getName() + "' based on Android 0.0\n]",
- mLog.toString());
+ getAvdManager().createAvd(
+ mAvdFolder,
+ this.getName(),
+ mTarget,
+ SdkConstants.ABI_ARMEABI,
+ null, // skinName
+ null, // sdName
+ null, // properties
+ true, // createSnapshot
+ false, // removePrevious
+ false, // editExisting
+ getLog());
+
+ assertEquals("[P Created AVD '" + this.getName() + "' based on Android 0.0, ARM (armeabi) processor\n]",
+ getLog().toString());
assertTrue("Expected snapshots.img in " + mAvdFolder,
new File(mAvdFolder, "snapshots.img").exists());
Map<String, String> map = ProjectProperties.parsePropertyFile(
- new FileWrapper(mAvdFolder, "config.ini"), mLog);
+ new FileWrapper(mAvdFolder, "config.ini"), getLog());
assertEquals("true", map.get("snapshot.present"));
}
}
diff --git a/sdkmanager/app/tests/com/android/sdkmanager/MainTest.java b/sdkmanager/app/tests/com/android/sdkmanager/MainTest.java
index 29516e3..4a17e32 100644
--- a/sdkmanager/app/tests/com/android/sdkmanager/MainTest.java
+++ b/sdkmanager/app/tests/com/android/sdkmanager/MainTest.java
@@ -17,60 +17,63 @@
package com.android.sdkmanager;
-import static java.io.File.createTempFile;
-
import com.android.sdklib.IAndroidTarget;
-import com.android.sdklib.SdkManager;
-import com.android.sdklib.internal.avd.AvdManager;
-import com.android.sdklib.mock.MockLog;
+import com.android.sdklib.SdkConstants;
+import com.android.sdklib.internal.avd.AvdInfo;
+import com.android.sdklib.repository.SdkAddonConstants;
+import com.android.sdklib.repository.SdkRepoConstants;
+import com.android.util.Pair;
import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Set;
+import java.util.TreeSet;
-import junit.framework.TestCase;
-
-public class MainTest extends TestCase {
+public class MainTest extends SdkManagerTestCase {
- private File mFakeSdk;
- private MockLog mLog;
- private SdkManager mSdkManager;
- private AvdManager mAvdManager;
- private File mAvdFolder;
private IAndroidTarget mTarget;
- private File fakeSdkDir;
+ private File mAvdFolder;
@Override
public void setUp() throws Exception {
- mLog = new MockLog();
- fakeSdkDir = createTempFile(this.getClass().getSimpleName() + "_" + this.getName(), null);
- mFakeSdk = SdkManagerTestUtil.makeFakeSdk(fakeSdkDir);
- mSdkManager = SdkManager.createManager(mFakeSdk.getAbsolutePath(), mLog);
- assertNotNull("sdkManager location was invalid", mSdkManager);
-
- mAvdManager = new AvdManager(mSdkManager, mLog);
- mAvdFolder = new File(mFakeSdk, "avdData");
- mTarget = mSdkManager.getTargets()[0];
+ super.setUp();
+
+ mTarget = getSdkManager().getTargets()[0];
+ mAvdFolder = AvdInfo.getDefaultAvdFolder(getAvdManager(), getName());
}
@Override
public void tearDown() throws Exception {
- SdkManagerTestUtil.deleteDir(mFakeSdk);
+ super.tearDown();
}
- public void txestDisplayEmptyAvdList() {
+ public void testDisplayEmptyAvdList() {
Main main = new Main();
- main.setLogger(mLog);
- mLog.clear();
- main.displayAvdList(mAvdManager);
- assertEquals("P Available Android Virtual Devices:\n", mLog.toString());
+ main.setLogger(getLog());
+ getLog().clear();
+ main.displayAvdList(getAvdManager());
+ assertEquals("[P Available Android Virtual Devices:\n]", getLog().toString());
}
public void testDisplayAvdListOfOneNonSnapshot() {
Main main = new Main();
- main.setLogger(mLog);
- mAvdManager.createAvd(
- mAvdFolder, this.getName(), mTarget, null, null, null, false, false, mLog);
- mLog.clear();
- main.displayAvdList(mAvdManager);
+ main.setLogger(getLog());
+ getAvdManager().createAvd(
+ mAvdFolder,
+ this.getName(),
+ mTarget,
+ SdkConstants.ABI_ARMEABI,
+ null, // skinName
+ null, // sdName
+ null, // properties
+ false, // createSnapshot
+ false, // removePrevious
+ false, // editExisting
+ getLog());
+
+ getLog().clear();
+ main.displayAvdList(getAvdManager());
assertEquals(
"[P Available Android Virtual Devices:\n"
+ ", P Name: " + this.getName() + "\n"
@@ -78,16 +81,28 @@ public class MainTest extends TestCase {
+ ", P Target: Android 0.0 (API level 0)\n"
+ ", P Skin: HVGA\n"
+ "]",
- mLog.toString());
+ getLog().toString());
}
public void testDisplayAvdListOfOneSnapshot() {
Main main = new Main();
- main.setLogger(mLog);
- mAvdManager.createAvd(
- mAvdFolder, this.getName(), mTarget, null, null, null, false, true, mLog);
- mLog.clear();
- main.displayAvdList(mAvdManager);
+ main.setLogger(getLog());
+
+ getAvdManager().createAvd(
+ mAvdFolder,
+ this.getName(),
+ mTarget,
+ SdkConstants.ABI_ARMEABI,
+ null, // skinName
+ null, // sdName
+ null, // properties
+ true, // createSnapshot
+ false, // removePrevious
+ false, // editExisting
+ getLog());
+
+ getLog().clear();
+ main.displayAvdList(getAvdManager());
assertEquals(
"[P Available Android Virtual Devices:\n"
+ ", P Name: " + this.getName() + "\n"
@@ -96,6 +111,83 @@ public class MainTest extends TestCase {
+ ", P Skin: HVGA\n"
+ ", P Snapshot: true\n"
+ "]",
- mLog.toString());
+ getLog().toString());
+ }
+
+ public void testCheckFilterValues() {
+ // These are the values we expect checkFilterValues() to match.
+ String[] expectedValues = {
+ "platform",
+ "tool",
+ "platform-tool",
+ "doc",
+ "sample",
+ "add-on",
+ "extra"
+ };
+
+ Set<String> expectedSet = new TreeSet<String>(Arrays.asList(expectedValues));
+
+ // First check the values are actually defined in the proper arrays
+ // in the Sdk*Constants.NODES
+ for (String node : SdkRepoConstants.NODES) {
+ assertTrue(
+ String.format(
+ "Error: value '%1$s' from SdkRepoConstants.NODES should be used in unit-test",
+ node),
+ expectedSet.contains(node));
+ }
+ for (String node : SdkAddonConstants.NODES) {
+ assertTrue(
+ String.format(
+ "Error: value '%1$s' from SdkAddonConstants.NODES should be used in unit-test",
+ node),
+ expectedSet.contains(node));
+ }
+
+ // Now check none of these values are NOT present in the NODES arrays
+ for (String node : SdkRepoConstants.NODES) {
+ expectedSet.remove(node);
+ }
+ for (String node : SdkAddonConstants.NODES) {
+ expectedSet.remove(node);
+ }
+ assertTrue(
+ String.format(
+ "Error: values %1$s are missing from Sdk[Repo|Addons]Constants.NODES",
+ Arrays.toString(expectedSet.toArray())),
+ expectedSet.isEmpty());
+
+ // We're done with expectedSet now
+ expectedSet = null;
+
+ // Finally check that checkFilterValues accepts all these values, one by one.
+ Main main = new Main();
+ main.setLogger(getLog());
+
+ for (int step = 0; step < 3; step++) {
+ for (String value : expectedValues) {
+ switch(step) {
+ // step 0: use value as-is
+ case 1:
+ // add some whitespace before and after
+ value = " " + value + " ";
+ break;
+ case 2:
+ // same with some empty arguments that should get ignored
+ value = " ," + value + " , ";
+ break;
+ }
+
+ Pair<String, ArrayList<String>> result = main.checkFilterValues(value);
+ assertNull(
+ String.format("Expected error to be null for value '%1$s', got: %2$s",
+ value, result.getFirst()),
+ result.getFirst());
+ assertEquals(
+ String.format("[%1$s]", value.replace(',', ' ').trim()),
+ Arrays.toString(result.getSecond().toArray()));
+ }
+ }
}
}
diff --git a/sdkmanager/app/tests/com/android/sdkmanager/SdkManagerTestCase.java b/sdkmanager/app/tests/com/android/sdkmanager/SdkManagerTestCase.java
new file mode 100755
index 0000000..9fdd852
--- /dev/null
+++ b/sdkmanager/app/tests/com/android/sdkmanager/SdkManagerTestCase.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2011 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.sdkmanager;
+
+
+import com.android.prefs.AndroidLocation;
+import com.android.prefs.AndroidLocation.AndroidLocationException;
+import com.android.sdklib.ISdkLog;
+import com.android.sdklib.SdkConstants;
+import com.android.sdklib.SdkManager;
+import com.android.sdklib.internal.avd.AvdManager;
+import com.android.sdklib.mock.MockLog;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
+/**
+ * Test case that allocates a temporary SDK, a temporary AVD base folder
+ * with an SdkManager and an AvdManager that points to them.
+ */
+public abstract class SdkManagerTestCase extends TestCase {
+
+ private File mFakeSdk;
+ private MockLog mLog;
+ private SdkManager mSdkManager;
+ private TmpAvdManager mAvdManager;
+
+ /** Returns the {@link MockLog} for this test case. */
+ public MockLog getLog() {
+ return mLog;
+ }
+
+ /** Returns the {@link SdkManager} for this test case. */
+ public SdkManager getSdkManager() {
+ return mSdkManager;
+ }
+
+ /** Returns the {@link AvdManager} for this test case. */
+ public TmpAvdManager getAvdManager() {
+ return mAvdManager;
+ }
+
+ /**
+ * Sets up a {@link MockLog}, a fake SDK in a temporary directory
+ * and an AVD Manager pointing to an initially-empty AVD directory.
+ */
+ @Override
+ public void setUp() throws Exception {
+ mLog = new MockLog();
+ mFakeSdk = makeFakeSdk();
+ mSdkManager = SdkManager.createManager(mFakeSdk.getAbsolutePath(), mLog);
+ assertNotNull("SdkManager location was invalid", mSdkManager);
+
+ mAvdManager = new TmpAvdManager(mSdkManager, mLog);
+ }
+
+ /**
+ * Removes the temporary SDK and AVD directories.
+ */
+ @Override
+ public void tearDown() throws Exception {
+ deleteDir(mFakeSdk);
+ }
+
+ /**
+ * An {@link AvdManager} that uses a temporary directory
+ * located <em>inside</em> the SDK directory for testing.
+ * The AVD list should be initially empty.
+ */
+ protected static class TmpAvdManager extends AvdManager {
+
+ /*
+ * Implementation detail:
+ * - When the super.AvdManager constructor is invoked, it will invoke
+ * the buildAvdFilesList() to fill the initial AVD list, which will in
+ * turn call getBaseAvdFolder().
+ * - That's why mTmpAvdRoot is initialized in getAvdRoot() rather than
+ * in the constructor, since we can't initialize fields before the super()
+ * call.
+ */
+
+ /**
+ * AVD Root, initialized "lazily" when the AVD root is first requested.
+ */
+ private File mTmpAvdRoot;
+
+ public TmpAvdManager(SdkManager sdkManager, ISdkLog log) throws AndroidLocationException {
+ super(sdkManager, log);
+ }
+
+ @Override
+ public String getBaseAvdFolder() throws AndroidLocationException {
+ if (mTmpAvdRoot == null) {
+ mTmpAvdRoot = new File(getSdkManager().getLocation(), "tmp_avds");
+ mTmpAvdRoot.mkdirs();
+ }
+ return mTmpAvdRoot.getAbsolutePath();
+ }
+ }
+
+ /**
+ * Build enough of a skeleton SDK to make the tests pass.
+ * <p/>
+ * Ideally this wouldn't touch the file system but the current
+ * structure of the SdkManager and AvdManager makes this difficult.
+ *
+ * @return Path to the temporary SDK root
+ * @throws IOException
+ */
+ private File makeFakeSdk() throws IOException {
+
+ File tmpFile = File.createTempFile(
+ this.getClass().getSimpleName() + '_' + this.getName(), null);
+ tmpFile.delete();
+ tmpFile.mkdirs();
+
+ AndroidLocation.resetFolder();
+ System.setProperty("user.home", tmpFile.getAbsolutePath());
+ File addonsDir = new File(tmpFile, SdkConstants.FD_ADDONS);
+ addonsDir.mkdir();
+ File toolsLibEmuDir = new File(tmpFile, SdkConstants.OS_SDK_TOOLS_LIB_FOLDER + "emulator");
+ toolsLibEmuDir.mkdirs();
+ new File(toolsLibEmuDir, "snapshots.img").createNewFile();
+ File platformsDir = new File(tmpFile, SdkConstants.FD_PLATFORMS);
+
+ // Creating a fake target here on down
+ File targetDir = new File(platformsDir, "v0_0");
+ targetDir.mkdirs();
+ new File(targetDir, SdkConstants.FN_FRAMEWORK_LIBRARY).createNewFile();
+ new File(targetDir, SdkConstants.FN_FRAMEWORK_AIDL).createNewFile();
+ new File(targetDir, SdkConstants.FN_SOURCE_PROP).createNewFile();
+ File buildProp = new File(targetDir, SdkConstants.FN_BUILD_PROP);
+ FileWriter out = new FileWriter(buildProp);
+ out.write(SdkManager.PROP_VERSION_RELEASE + "=0.0\n");
+ out.write(SdkManager.PROP_VERSION_SDK + "=0\n");
+ out.write(SdkManager.PROP_VERSION_CODENAME + "=REL\n");
+ out.close();
+ File imagesDir = new File(targetDir, "images");
+ imagesDir.mkdirs();
+ new File(imagesDir, "userdata.img").createNewFile();
+ File skinsDir = new File(targetDir, "skins");
+ File hvgaDir = new File(skinsDir, "HVGA");
+ hvgaDir.mkdirs();
+ return tmpFile;
+ }
+
+ /**
+ * Recursive delete directory. Mostly for fake SDKs.
+ *
+ * @param root directory to delete
+ */
+ private void deleteDir(File root) {
+ if (root.exists()) {
+ for (File file : root.listFiles()) {
+ if (file.isDirectory()) {
+ deleteDir(file);
+ } else {
+ file.delete();
+ }
+ }
+ root.delete();
+ }
+ }
+
+}
diff --git a/sdkmanager/app/tests/com/android/sdkmanager/SdkManagerTestUtil.java b/sdkmanager/app/tests/com/android/sdkmanager/SdkManagerTestUtil.java
deleted file mode 100644
index 96efb5c..0000000
--- a/sdkmanager/app/tests/com/android/sdkmanager/SdkManagerTestUtil.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2008 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.sdkmanager;
-
-import com.android.prefs.AndroidLocation;
-import com.android.sdklib.SdkConstants;
-import com.android.sdklib.SdkManager;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-
-public class SdkManagerTestUtil {
- /**
- * Build enough of a skeleton SDK to make the tests pass.
- *<p>
- * Ideally this wouldn't touch the file system, but I'm not inclined to
- * fiddle around with mock file systems just at the moment.
- *
- * @return an sdk manager to a fake sdk
- * @throws IOException
- */
- public static File makeFakeSdk(File fakeSdk) throws IOException {
- fakeSdk.delete();
- fakeSdk.mkdirs();
- AndroidLocation.resetFolder();
- System.setProperty("user.home", fakeSdk.getAbsolutePath());
- File addonsDir = new File(fakeSdk, SdkConstants.FD_ADDONS);
- addonsDir.mkdir();
- File toolsLibEmuDir = new File(fakeSdk, SdkConstants.OS_SDK_TOOLS_LIB_FOLDER + "emulator");
- toolsLibEmuDir.mkdirs();
- new File(toolsLibEmuDir, "snapshots.img").createNewFile();
- File platformsDir = new File(fakeSdk, SdkConstants.FD_PLATFORMS);
-
- // Creating a fake target here on down
- File targetDir = new File(platformsDir, "v0_0");
- targetDir.mkdirs();
- new File(targetDir, SdkConstants.FN_FRAMEWORK_LIBRARY).createNewFile();
- new File(targetDir, SdkConstants.FN_FRAMEWORK_AIDL).createNewFile();
- new File(targetDir, SdkConstants.FN_SOURCE_PROP).createNewFile();
- File buildProp = new File(targetDir, SdkConstants.FN_BUILD_PROP);
- FileWriter out = new FileWriter(buildProp);
- out.write(SdkManager.PROP_VERSION_RELEASE + "=0.0\n");
- out.write(SdkManager.PROP_VERSION_SDK + "=0\n");
- out.write(SdkManager.PROP_VERSION_CODENAME + "=REL\n");
- out.close();
- File imagesDir = new File(targetDir, "images");
- imagesDir.mkdirs();
- new File(imagesDir, "userdata.img").createNewFile();
- File skinsDir = new File(targetDir, "skins");
- File hvgaDir = new File(skinsDir, "HVGA");
- hvgaDir.mkdirs();
- return fakeSdk;
- }
-
- /**
- * Recursive delete directory. Mostly for fake SDKs.
- *
- * @param root directory to delete
- */
- public static void deleteDir(File root) {
- if (root.exists()) {
- for (File file : root.listFiles()) {
- if (file.isDirectory()) {
- deleteDir(file);
- } else {
- file.delete();
- }
- }
- root.delete();
- }
- }
-
-}