/* * 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.ide.common.xml; import com.android.ide.common.xml.ManifestData.UsesFeature; import com.android.ide.common.xml.ManifestData.UsesLibrary; import com.android.resources.Keyboard; import com.android.resources.Navigation; import com.android.resources.TouchScreen; import junit.framework.TestCase; import java.io.InputStream; /** * 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 ACTIVITY_ALIAS_XML = TESTDATA_PATH + "AndroidManifest-activityalias.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 LIBRARY_NAME2 = "android.test.runner2"; //$NON-NLS-1$ private static final String FEATURE_NAME = "com.foo.feature"; //$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.getMinSdkVersion()); assertEquals(8, mManifestTestApp.getTargetSdkVersion()); assertEquals("foo", mManifestInstrumentation.getMinSdkVersionString()); assertEquals(ManifestData.MIN_SDK_CODENAME, mManifestInstrumentation.getMinSdkVersion()); } 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()); } public void testSupportsScreen() { ManifestData.SupportsScreens supportsScreens = mManifestTestApp.getSupportsScreensFromManifest(); assertNotNull(supportsScreens); assertEquals(Boolean.TRUE, supportsScreens.getAnyDensity()); assertEquals(Boolean.TRUE, supportsScreens.getResizeable()); assertEquals(Boolean.TRUE, supportsScreens.getSmallScreens()); assertEquals(Boolean.TRUE, supportsScreens.getNormalScreens()); assertEquals(Boolean.TRUE, supportsScreens.getLargeScreens()); } public void testUsesConfiguration() { ManifestData.UsesConfiguration usesConfig = mManifestTestApp.getUsesConfiguration(); assertNotNull(usesConfig); assertEquals(Boolean.TRUE, usesConfig.getReqFiveWayNav()); assertEquals(Navigation.NONAV, usesConfig.getReqNavigation()); assertEquals(Boolean.TRUE, usesConfig.getReqHardKeyboard()); assertEquals(Keyboard.TWELVEKEY, usesConfig.getReqKeyboardType()); assertEquals(TouchScreen.FINGER, usesConfig.getReqTouchScreen()); } 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() { UsesLibrary[] libraries = mManifestTestApp.getUsesLibraries(); assertEquals(2, libraries.length); assertEquals(LIBRARY_NAME, libraries[0].getName()); assertEquals(Boolean.FALSE, libraries[0].getRequired()); assertEquals(LIBRARY_NAME2, libraries[1].getName()); assertEquals(Boolean.TRUE, libraries[1].getRequired()); } public void testGetUsesFeatures() { UsesFeature[] features = mManifestTestApp.getUsesFeatures(); assertEquals(2, features.length); assertEquals(0x00020001, features[0].mGlEsVersion); assertEquals(Boolean.TRUE, features[0].getRequired()); assertEquals(FEATURE_NAME, features[1].getName()); assertEquals(Boolean.TRUE, features[1].getRequired()); } public void testGetPackageName() { assertEquals(PACKAGE_NAME, mManifestTestApp.getPackage()); } public void testActivityAlias() throws Exception { InputStream manifestStream = this.getClass().getResourceAsStream(ACTIVITY_ALIAS_XML); ManifestData manifest = AndroidManifestParser.parse(manifestStream); assertNotNull(manifest); assertEquals(manifest.getLauncherActivity().getName(), "com.android.testapp.AliasActivity"); //$NON-NLS-1$ } }