diff options
Diffstat (limited to 'sdkmanager/app/tests/com/android')
5 files changed, 366 insertions, 5 deletions
diff --git a/sdkmanager/app/tests/com/android/sdkmanager/AvdManagerTest.java b/sdkmanager/app/tests/com/android/sdkmanager/AvdManagerTest.java new file mode 100644 index 0000000..bb1ba75 --- /dev/null +++ b/sdkmanager/app/tests/com/android/sdkmanager/AvdManagerTest.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2010 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 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.internal.project.ProjectProperties; +import com.android.sdklib.io.FileWrapper; + +import java.io.File; +import java.util.Map; + +import junit.framework.TestCase; + +public class AvdManagerTest extends TestCase { + + private AvdManager mAvdManager; + private SdkManager mSdkManager; + private MockLog mLog; + private File mFakeSdk; + private File mAvdFolder; + private IAndroidTarget mTarget; + + @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); + + mAvdManager = new AvdManager(mSdkManager, mLog); + mAvdFolder = new File(mFakeSdk, "avdData"); + mTarget = mSdkManager.getTargets()[0]; + } + + @Override + public void tearDown() throws Exception { + SdkManagerTestUtil.deleteDir(mFakeSdk); + } + + 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()); + assertTrue("Expected config.ini in " + mAvdFolder, + new File(mAvdFolder, "config.ini").exists()); + Map<String, String> map = ProjectProperties.parsePropertyFile( + new FileWrapper(mAvdFolder, "config.ini"), mLog); + 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(null, map.get("snapshot.present")); + assertTrue("Expected userdata.img in " + mAvdFolder, + new File(mAvdFolder, "userdata.img").exists()); + assertFalse("Expected NO snapshots.img in " + mAvdFolder, + new File(mAvdFolder, "snapshots.img").exists()); + } + + 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()); + assertTrue("Expected snapshots.img in " + mAvdFolder, + new File(mAvdFolder, "snapshots.img").exists()); + Map<String, String> map = ProjectProperties.parsePropertyFile( + new FileWrapper(mAvdFolder, "config.ini"), mLog); + 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 new file mode 100644 index 0000000..f6e3bbe --- /dev/null +++ b/sdkmanager/app/tests/com/android/sdkmanager/MainTest.java @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2010 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 static java.io.File.createTempFile; + +import com.android.sdklib.IAndroidTarget; +import com.android.sdklib.SdkManager; +import com.android.sdklib.internal.avd.AvdManager; + +import java.io.File; + +import junit.framework.TestCase; + +public class MainTest extends TestCase { + + private File mFakeSdk; + private MockLog mLog; + private SdkManager mSdkManager; + private AvdManager mAvdManager; + private File mAvdFolder; + private IAndroidTarget mTarget; + private File fakeSdkDir; + + @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]; + } + + @Override + public void tearDown() throws Exception { + SdkManagerTestUtil.deleteDir(mFakeSdk); + } + + public void txestDisplayEmptyAvdList() { + Main main = new Main(); + main.setLogger(mLog); + mLog.clear(); + main.displayAvdList(mAvdManager); + assertEquals("P Available Android Virtual Devices:\n", mLog.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); + assertEquals( + "[P Available Android Virtual Devices:\n" + + ", P Name: " + this.getName() + "\n" + + ", P Path: " + mAvdFolder + "\n" + + ", P Target: Android 0.0 (API level 0)\n" + + ", P Skin: HVGA\n" + + "]", + mLog.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); + assertEquals( + "[P Available Android Virtual Devices:\n" + + ", P Name: " + this.getName() + "\n" + + ", P Path: " + mAvdFolder + "\n" + + ", P Target: Android 0.0 (API level 0)\n" + + ", P Skin: HVGA\n" + + ", P Snapshot: true\n" + + "]", + mLog.toString()); + } +} diff --git a/sdkmanager/app/tests/com/android/sdkmanager/MockLog.java b/sdkmanager/app/tests/com/android/sdkmanager/MockLog.java new file mode 100644 index 0000000..a8ca90a --- /dev/null +++ b/sdkmanager/app/tests/com/android/sdkmanager/MockLog.java @@ -0,0 +1,57 @@ +/* + * 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.sdklib.ISdkLog; + +import java.util.ArrayList; +import java.util.Formatter; + +public class MockLog implements ISdkLog { + private ArrayList<String> mMessages = new ArrayList<String>(); + + private void add(String code, String format, Object... args) { + mMessages.add(new Formatter().format(code + format, args).toString()); + } + + @Override + public void warning(String format, Object... args) { + add("W ", format, args); + } + + @Override + public void printf(String format, Object... args) { + add("P ", format, args); + } + + @Override + public void error(Throwable t, String format, Object... args) { + if (t != null) { + add("T", "%s", t.toString()); + } + add("E ", format, args); + } + + @Override + public String toString() { + return mMessages.toString(); + } + + public void clear() { + mMessages.clear(); + } +} diff --git a/sdkmanager/app/tests/com/android/sdkmanager/SdkCommandLineTest.java b/sdkmanager/app/tests/com/android/sdkmanager/SdkCommandLineTest.java index 8206e2a..036d2ec 100644 --- a/sdkmanager/app/tests/com/android/sdkmanager/SdkCommandLineTest.java +++ b/sdkmanager/app/tests/com/android/sdkmanager/SdkCommandLineTest.java @@ -24,7 +24,7 @@ import junit.framework.TestCase; public class SdkCommandLineTest extends TestCase { private StdSdkLog mLog; - + /** * A mock version of the {@link SdkCommandLine} class that does not * exits and discards its stdout/stderr output. @@ -32,7 +32,7 @@ public class SdkCommandLineTest extends TestCase { public static class MockSdkCommandLine extends SdkCommandLine { private boolean mExitCalled; private boolean mHelpCalled; - + public MockSdkCommandLine(ISdkLog logger) { super(logger); } @@ -48,12 +48,12 @@ public class SdkCommandLineTest extends TestCase { protected void exit() { mExitCalled = true; } - + @Override protected void stdout(String format, Object... args) { // discard } - + @Override protected void stderr(String format, Object... args) { // discard @@ -62,7 +62,7 @@ public class SdkCommandLineTest extends TestCase { public boolean wasExitCalled() { return mExitCalled; } - + public boolean wasHelpCalled() { return mHelpCalled; } @@ -139,4 +139,30 @@ public class SdkCommandLineTest extends TestCase { assertEquals("target", c.getDirectObject()); assertFalse(c.isVerbose()); } + + public final void testCreate_Avd() { + MockSdkCommandLine c = new MockSdkCommandLine(mLog); + c.parseArgs(new String[] { "create", "avd", "-t", "android-100", "-n", "myProject" }); + assertFalse(c.wasHelpCalled()); + assertFalse(c.wasExitCalled()); + assertEquals("create", c.getVerb()); + assertEquals("avd", c.getDirectObject()); + assertFalse(c.getFlagSnapshot()); + assertEquals("android-100", c.getParamTargetId()); + assertEquals("myProject", c.getParamName()); + assertFalse(c.isVerbose()); + } + + public final void testCreate_Avd_Snapshot() { + MockSdkCommandLine c = new MockSdkCommandLine(mLog); + c.parseArgs(new String[] { "create", "avd", "-t", "android-100", "-n", "myProject", "-a" }); + assertFalse(c.wasHelpCalled()); + assertFalse(c.wasExitCalled()); + assertEquals("create", c.getVerb()); + assertEquals("avd", c.getDirectObject()); + assertTrue(c.getFlagSnapshot()); + assertEquals("android-100", c.getParamTargetId()); + assertEquals("myProject", c.getParamName()); + assertFalse(c.isVerbose()); + } } diff --git a/sdkmanager/app/tests/com/android/sdkmanager/SdkManagerTestUtil.java b/sdkmanager/app/tests/com/android/sdkmanager/SdkManagerTestUtil.java new file mode 100644 index 0000000..96efb5c --- /dev/null +++ b/sdkmanager/app/tests/com/android/sdkmanager/SdkManagerTestUtil.java @@ -0,0 +1,88 @@ +/* + * 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(); + } + } + +} |