diff options
Diffstat (limited to 'sdkmanager/app/tests/com/android/sdkmanager')
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(); - } - } - -} |