aboutsummaryrefslogtreecommitdiffstats
path: root/sdkmanager
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2010-05-17 14:35:48 -0700
committerXavier Ducrohet <xav@android.com>2010-05-17 15:09:13 -0700
commita51d4ddc3cc08e445eb426a6a6108fad3fa842b9 (patch)
tree2df98e71bd93ec4701e0009070c9c12548475b4d /sdkmanager
parent1d196380ade34551da80a6b142792f7394d41733 (diff)
downloadsdk-a51d4ddc3cc08e445eb426a6a6108fad3fa842b9.zip
sdk-a51d4ddc3cc08e445eb426a6a6108fad3fa842b9.tar.gz
sdk-a51d4ddc3cc08e445eb426a6a6108fad3fa842b9.tar.bz2
Refactor the manifest parser test in the correct package.
And don't make it use the Parser Helper that's eclipse specific. Also fixed the versionCode parsing (bug introduced in previous CL) Change-Id: Ie472d7d6c4847e3fae660873cca7d71e801a2a34
Diffstat (limited to 'sdkmanager')
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifestParser.java31
-rw-r--r--sdkmanager/libs/sdklib/tests/com/android/sdklib/testdata/AndroidManifest-instrumentation.xml18
-rw-r--r--sdkmanager/libs/sdklib/tests/com/android/sdklib/testdata/AndroidManifest-testapp.xml28
-rw-r--r--sdkmanager/libs/sdklib/tests/com/android/sdklib/xml/AndroidManifestParserTest.java113
4 files changed, 188 insertions, 2 deletions
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifestParser.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifestParser.java
index 2330020..3b9cd0b 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifestParser.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/xml/AndroidManifestParser.java
@@ -35,6 +35,7 @@ import org.xml.sax.helpers.DefaultHandler;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.io.InputStream;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
@@ -142,7 +143,7 @@ public class AndroidManifestParser {
AndroidManifest.ATTRIBUTE_VERSIONCODE, true);
if (tmp != null) {
try {
- mManifestData.mVersionCode = Integer.getInteger(tmp);
+ mManifestData.mVersionCode = Integer.valueOf(tmp);
} catch (NumberFormatException e) {
// keep null in the field.
}
@@ -427,7 +428,6 @@ public class AndroidManifestParser {
AndroidManifest.ATTRIBUTE_LARGESCREENS, true /*hasNamespace*/));
}
-
/**
* Searches through the attributes list for a particular one and returns its value.
* @param attributes the attribute list to search through
@@ -525,6 +525,33 @@ public class AndroidManifestParser {
}
/**
+ * Parses the Android Manifest from an {@link InputStream}, and returns a {@link ManifestData}
+ * object containing the result of the parsing.
+ *
+ * @param manifestFileStream the {@link InputStream} representing the manifest file.
+ * @return
+ * @throws StreamException
+ * @throws IOException
+ * @throws SAXException
+ * @throws ParserConfigurationException
+ */
+ public static ManifestData parse(InputStream manifestFileStream)
+ throws SAXException, IOException, StreamException, ParserConfigurationException {
+ if (manifestFileStream != null) {
+ SAXParser parser = sParserFactory.newSAXParser();
+
+ ManifestData data = new ManifestData();
+
+ ManifestHandler manifestHandler = new ManifestHandler(null, data, null);
+ parser.parse(new InputSource(manifestFileStream), manifestHandler);
+
+ return data;
+ }
+
+ return null;
+ }
+
+ /**
* Returns an {@link IAbstractFile} object representing the manifest for the given project.
*
* @param project The project containing the manifest file.
diff --git a/sdkmanager/libs/sdklib/tests/com/android/sdklib/testdata/AndroidManifest-instrumentation.xml b/sdkmanager/libs/sdklib/tests/com/android/sdklib/testdata/AndroidManifest-instrumentation.xml
new file mode 100644
index 0000000..b380f96
--- /dev/null
+++ b/sdkmanager/libs/sdklib/tests/com/android/sdklib/testdata/AndroidManifest-instrumentation.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.AndroidProject.tests">
+
+ <!--
+ This declares that this app uses the instrumentation test runner targeting
+ the package of com.android.samples. To run the tests use the command:
+ "adb shell am instrument -w com.android.samples.tests/android.test.InstrumentationTestRunner"
+ -->
+ <instrumentation android:name="android.test.InstrumentationTestRunner"
+ android:targetPackage="com.android.AndroidProject"
+ android:label="Sample test for deployment."/>
+
+ <application>
+ <uses-library android:name="android.test.runner" />
+ </application>
+
+</manifest>
diff --git a/sdkmanager/libs/sdklib/tests/com/android/sdklib/testdata/AndroidManifest-testapp.xml b/sdkmanager/libs/sdklib/tests/com/android/sdklib/testdata/AndroidManifest-testapp.xml
new file mode 100644
index 0000000..cf58934
--- /dev/null
+++ b/sdkmanager/libs/sdklib/tests/com/android/sdklib/testdata/AndroidManifest-testapp.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.testapp"
+ android:versionCode="42"
+ android:versionName="1.42">
+ <application android:icon="@drawable/icon">
+ <activity android:name="com.android.testapp.MainActivity"
+ android:label="@string/app_name">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />"
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+ <uses-library android:name="android.test.runner"/>
+ </application>"
+ <uses-sdk android:minSdkVersion="7"/>
+ <supports-screens android:resizeable="true" android:smallScreens="true"
+ android:anyDensity="true" android:largeScreens="true" android:normalScreens="true"/>
+ <uses-configuration android:reqKeyboardType="twelvekey"
+ android:reqTouchScreen="finger" android:reqFiveWayNav="true" android:reqHardKeyboard="true"
+ android:reqNavigation="nonav"/>
+ <uses-feature android:glEsVersion="1"/>
+ <uses-feature android:name="com.foo.feature"/>
+ <instrumentation android:name="android.test.InstrumentationTestRunner"
+ android:targetPackage="com.example.android.apis"
+ android:label="Tests for Api Demos."/>
+</manifest> \ No newline at end of file
diff --git a/sdkmanager/libs/sdklib/tests/com/android/sdklib/xml/AndroidManifestParserTest.java b/sdkmanager/libs/sdklib/tests/com/android/sdklib/xml/AndroidManifestParserTest.java
new file mode 100644
index 0000000..c2ee943
--- /dev/null
+++ b/sdkmanager/libs/sdklib/tests/com/android/sdklib/xml/AndroidManifestParserTest.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2007 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.sdklib.xml;
+
+import java.io.InputStream;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@link AndroidManifestParser}
+ */
+public class AndroidManifestParserTest extends TestCase {
+ private ManifestData mManifestTestApp;
+ private ManifestData mManifestInstrumentation;
+
+ private static final String TESTDATA_PATH =
+ "/com/android/sdklib/testdata/"; //$NON-NLS-1$
+ private static final String INSTRUMENTATION_XML = TESTDATA_PATH +
+ "AndroidManifest-instrumentation.xml"; //$NON-NLS-1$
+ private static final String TESTAPP_XML = TESTDATA_PATH +
+ "AndroidManifest-testapp.xml"; //$NON-NLS-1$
+ private static final String PACKAGE_NAME = "com.android.testapp"; //$NON-NLS-1$
+ private static final Integer VERSION_CODE = 42;
+ private static final String ACTIVITY_NAME = "com.android.testapp.MainActivity"; //$NON-NLS-1$
+ private static final String LIBRARY_NAME = "android.test.runner"; //$NON-NLS-1$
+ private static final String INSTRUMENTATION_NAME = "android.test.InstrumentationTestRunner"; //$NON-NLS-1$
+ private static final String INSTRUMENTATION_TARGET = "com.android.AndroidProject"; //$NON-NLS-1$
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ InputStream manifestStream = this.getClass().getResourceAsStream(TESTAPP_XML);
+
+ mManifestTestApp = AndroidManifestParser.parse(manifestStream);
+ assertNotNull(mManifestTestApp);
+
+ manifestStream = this.getClass().getResourceAsStream(INSTRUMENTATION_XML);
+ mManifestInstrumentation = AndroidManifestParser.parse(manifestStream);
+ assertNotNull(mManifestInstrumentation);
+ }
+
+ public void testGetInstrumentationInformation() {
+ assertEquals(1, mManifestInstrumentation.getInstrumentations().length);
+ assertEquals(INSTRUMENTATION_NAME,
+ mManifestInstrumentation.getInstrumentations()[0].getName());
+ assertEquals(INSTRUMENTATION_TARGET,
+ mManifestInstrumentation.getInstrumentations()[0].getTargetPackage());
+ }
+
+ public void testGetPackage() {
+ assertEquals(PACKAGE_NAME, mManifestTestApp.getPackage());
+ }
+
+ public void testGetVersionCode() {
+ assertEquals(VERSION_CODE, mManifestTestApp.getVersionCode());
+ assertEquals(null, mManifestInstrumentation.getVersionCode());
+ }
+
+ public void testMinSdkVersion() {
+ assertEquals("7", mManifestTestApp.getApiLevelRequirement());
+ }
+
+ public void testGetActivities() {
+ assertEquals(1, mManifestTestApp.getActivities().length);
+ ManifestData.Activity activity = mManifestTestApp.getActivities()[0];
+ assertEquals(ACTIVITY_NAME, activity.getName());
+ assertTrue(activity.hasAction());
+ assertTrue(activity.isHomeActivity());
+ assertTrue(activity.hasAction());
+ assertEquals(activity, mManifestTestApp.getActivities()[0]);
+ }
+
+ public void testGetLauncherActivity() {
+ ManifestData.Activity activity = mManifestTestApp.getLauncherActivity();
+ assertEquals(ACTIVITY_NAME, activity.getName());
+ assertTrue(activity.hasAction());
+ assertTrue(activity.isHomeActivity());
+ }
+
+ private void assertEquals(ManifestData.Activity lhs, ManifestData.Activity rhs) {
+ assertTrue(lhs == rhs || (lhs != null && rhs != null));
+ if (lhs != null && rhs != null) {
+ assertEquals(lhs.getName(), rhs.getName());
+ assertEquals(lhs.isExported(), rhs.isExported());
+ assertEquals(lhs.hasAction(), rhs.hasAction());
+ assertEquals(lhs.isHomeActivity(), rhs.isHomeActivity());
+ }
+ }
+
+ public void testGetUsesLibraries() {
+ assertEquals(1, mManifestTestApp.getUsesLibraries().length);
+ assertEquals(LIBRARY_NAME, mManifestTestApp.getUsesLibraries()[0]);
+ }
+
+ public void testGetPackageName() {
+ assertEquals(PACKAGE_NAME, mManifestTestApp.getPackage());
+ }
+}