- Remove reference to ADT from sdklib tests.
- Move ADT test data to be closer to their test classes, and to make it obvious
this data is only for ADT unit tests.
import org.eclipse.core.runtime.Platform;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
import java.io.IOException;
-import java.io.InputStream;
import java.net.URL;
import java.util.logging.Logger;
/**
* Helper class for retrieving test data
- *
- * All tests which need to retrieve test data files should go through this class
- *
+ * <p/>
+ * All tests which need to retrieve paths to test data files should go through this class.
*/
public class AdtTestData {
private static AdtTestData sInstance = null;
private static final Logger sLogger = Logger.getLogger(AdtTestData.class.getName());
- /** the absolute file path to the /data directory in this test
- * environment.
- */
+ /** The absolute file path to the plugin's contents. */
private String mOsRootDataPath;
-
private AdtTestData() {
// can set test_data env variable to override default behavior of
// finding data using class loader
mOsRootDataPath = System.getProperty("test_data");
if (mOsRootDataPath == null) {
sLogger.info("Cannot find test_data environment variable, init to class loader");
- URL url = this.getClass().getClassLoader().getResource("data"); //$NON-NLS-1$
+ URL url = this.getClass().getClassLoader().getResource("."); //$NON-NLS-1$
if (Platform.isRunning()) {
sLogger.info("Running as an Eclipse Plug-in JUnit test, using FileLocator");
}
}
- if (mOsRootDataPath.equals(AndroidConstants.WS_SEP + "data")) {
+ if (mOsRootDataPath.equals(AndroidConstants.WS_SEP)) {
sLogger.warning("Resource data not found using class loader!, Defaulting to no path");
}
}
/**
- * Returns the absolute file path to a file located in this plugins "data" directory
+ * Returns the absolute file path to a file located in this plugin.
*
- * @param osRelativePath {@link String} path to file contained in /data. Must
+ * @param osRelativePath {@link String} path to file contained in plugin. Must
* use path separators appropriate to host OS
*
* @return absolute OS path to test file
public String getTestFilePath(String osRelativePath) {
return mOsRootDataPath + osRelativePath;
}
-
- /**
- * Helper method to get a {@link InputStream} to test data file.
- *
- * @param osRelativePath {@link String} path to file contained in /data. Must
- * use path separators appropriate to host OS
- *
- * @return {@link InputStream} for test file
- * @throws FileNotFoundException if test file could not be found
- */
- public InputStream getTestFileStream(String osRelativePath) throws FileNotFoundException {
- return new FileInputStream(getTestFilePath(osRelativePath));
- }
}
public class AndroidManifestParserTest extends TestCase {
private AndroidManifestParser mManifestTestApp;
private AndroidManifestParser mManifestInstrumentation;
-
- private static final String INSTRUMENTATION_XML = "AndroidManifest-instrumentation.xml"; //$NON-NLS-1$
- private static final String TESTAPP_XML = "AndroidManifest-testapp.xml"; //$NON-NLS-1$
+
+ private static final String TESTDATA_PATH =
+ "com/android/ide/eclipse/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 String ACTIVITY_NAME = "com.android.testapp.MainActivity"; //$NON-NLS-1$
private static final String LIBRARY_NAME = "android.test.runner"; //$NON-NLS-1$
@Override
protected void setUp() throws Exception {
super.setUp();
-
- String testFilePath = AdtTestData.getInstance().getTestFilePath(
- TESTAPP_XML);
+
+ String testFilePath = AdtTestData.getInstance().getTestFilePath(TESTAPP_XML);
mManifestTestApp = AndroidManifestParser.parseForData(testFilePath);
assertNotNull(mManifestTestApp);
-
- testFilePath = AdtTestData.getInstance().getTestFilePath(
- INSTRUMENTATION_XML);
+
+ testFilePath = AdtTestData.getInstance().getTestFilePath(INSTRUMENTATION_XML);
mManifestInstrumentation = AndroidManifestParser.parseForData(testFilePath);
assertNotNull(mManifestInstrumentation);
}
public void testGetInstrumentationInformation() {
assertEquals(1, mManifestInstrumentation.getInstrumentations().length);
- assertEquals(INSTRUMENTATION_NAME,
+ assertEquals(INSTRUMENTATION_NAME,
mManifestInstrumentation.getInstrumentations()[0].getName());
- assertEquals(INSTRUMENTATION_TARGET,
+ assertEquals(INSTRUMENTATION_TARGET,
mManifestInstrumentation.getInstrumentations()[0].getTargetPackage());
}
-
+
public void testGetPackage() {
assertEquals(PACKAGE_NAME, mManifestTestApp.getPackage());
}
assertTrue(activity.hasAction());
assertTrue(activity.isHomeActivity());
}
-
+
private void assertEquals(Activity lhs, Activity rhs) {
assertTrue(lhs == rhs || (lhs != null && rhs != null));
if (lhs != null && rhs != null) {
public void testGetUsesLibraries() {
assertEquals(1, mManifestTestApp.getUsesLibraries().length);
- assertEquals(LIBRARY_NAME, mManifestTestApp.getUsesLibraries()[0]);
+ assertEquals(LIBRARY_NAME, mManifestTestApp.getUsesLibraries()[0]);
}
public void testGetPackageName() {
package com.android.ide.eclipse.adt.internal.resources;
-import com.android.ide.eclipse.adt.internal.resources.AttrsXmlParser;
-import com.android.ide.eclipse.adt.internal.resources.DeclareStyleableInfo;
-import com.android.ide.eclipse.adt.internal.resources.ViewClassInfo;
import com.android.ide.eclipse.adt.internal.resources.DeclareStyleableInfo.AttributeInfo;
import com.android.ide.eclipse.adt.internal.resources.DeclareStyleableInfo.AttributeInfo.Format;
import com.android.ide.eclipse.tests.AdtTestData;
import junit.framework.TestCase;
public class AttrsXmlParserTest extends TestCase {
-
+
private AttrsXmlParser mParser;
private String mFilePath;
+ private static final String MOCK_DATA_PATH =
+ "com/android/ide/eclipse/testdata/mock_attrs.xml"; //$NON-NLS-1$
+
@Override
public void setUp() throws Exception {
- mFilePath = AdtTestData.getInstance().getTestFilePath("mock_attrs.xml"); //$NON-NLS-1$
+ mFilePath = AdtTestData.getInstance().getTestFilePath(MOCK_DATA_PATH); //$NON-NLS-1$
mParser = new AttrsXmlParser(mFilePath);
}
@Override
public void tearDown() throws Exception {
}
-
+
public final void testGetDocument() throws Exception {
assertNotNull(_getDocument());
}
public void testGetOsAttrsXmlPath() throws Exception {
assertEquals(mFilePath, mParser.getOsAttrsXmlPath());
}
-
+
public final void testPreload() throws Exception {
assertSame(mParser, mParser.preload());
}
-
-
+
+
public final void testLoadViewAttributes() throws Exception {
mParser.preload();
ViewClassInfo info = new ViewClassInfo(
"mock_android.something.Theme", //$NON-NLS-1$
"Theme"); //$NON-NLS-1$
mParser.loadViewAttributes(info);
-
+
assertEquals("These are the standard attributes that make up a complete theme.", //$NON-NLS-1$
info.getJavaDoc());
AttributeInfo[] attrs = info.getAttributes();
assertEquals(1, info.getAttributes()[0].getFormats().length);
assertEquals(Format.DIMENSION, info.getAttributes()[0].getFormats()[0]);
}
-
+
public final void testEnumFlagValues() throws Exception {
/* The XML being read contains:
<!-- Standard orientation constant. -->
mParser.preload();
Map<String, Map<String, Integer>> attrMap = mParser.getEnumFlagValues();
assertTrue(attrMap.containsKey("orientation"));
-
+
Map<String, Integer> valueMap = attrMap.get("orientation");
assertTrue(valueMap.containsKey("horizontal"));
assertTrue(valueMap.containsKey("vertical"));
assertEquals(Integer.valueOf(0), valueMap.get("horizontal"));
assertEquals(Integer.valueOf(1), valueMap.get("vertical"));
}
-
+
public final void testDeprecated() throws Exception {
mParser.preload();
-
+
DeclareStyleableInfo dep = mParser.getDeclareStyleableList().get("DeprecatedTest");
assertNotNull(dep);
-
+
AttributeInfo[] attrs = dep.getAttributes();
assertEquals(4, attrs.length);
assertEquals("deprecated-inline", attrs[0].getName());
assertEquals("In-line deprecated.", attrs[0].getDeprecatedDoc());
assertEquals("Deprecated comments using delimiters.", attrs[0].getJavaDoc());
-
+
assertEquals("deprecated-multiline", attrs[1].getName());
assertEquals("Multi-line version of deprecated that works till the next tag.",
attrs[1].getDeprecatedDoc());
assertEquals("Deprecated comments on their own line.", attrs[1].getJavaDoc());
-
+
assertEquals("deprecated-not", attrs[2].getName());
assertEquals(null, attrs[2].getDeprecatedDoc());
assertEquals("This attribute is not deprecated.", attrs[2].getJavaDoc());
}
//---- access to private methods
-
+
private Document _getDocument() throws Exception {
Method method = AttrsXmlParser.class.getDeclaredMethod("getDocument"); //$NON-NLS-1$
method.setAccessible(true);
/** Creates an instance of {@link AndroidJarLoader} on our test data JAR */
@Override
public void setUp() throws Exception {
- String jarfilePath = AdtTestData.getInstance().getTestFilePath("jar_example.jar"); //$NON-NLS-1$
+ String jarfilePath = AdtTestData.getInstance().getTestFilePath(
+ "com/android/ide/eclipse/testdata/jar_example.jar"); //$NON-NLS-1$
mFrameworkClassLoader = new AndroidJarLoader(jarfilePath);
}
import com.android.ide.eclipse.adt.internal.resources.AttrsXmlParser;
import com.android.ide.eclipse.adt.internal.resources.ViewClassInfo;
import com.android.ide.eclipse.adt.internal.resources.ViewClassInfo.LayoutParamsInfo;
-import com.android.ide.eclipse.adt.internal.sdk.AndroidJarLoader;
-import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetParser;
-import com.android.ide.eclipse.adt.internal.sdk.LayoutParamsParser;
import com.android.ide.eclipse.adt.internal.sdk.AndroidJarLoader.ClassWrapper;
import com.android.ide.eclipse.adt.internal.sdk.IAndroidClassLoader.IClassDescriptor;
+import com.android.ide.eclipse.tests.AdtTestData;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
-import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.TreeMap;
/**
* Test the inner private methods of PlatformDataParser.
- *
+ *
* Convention: method names that start with an underscore are actually local wrappers
* that call private methods from {@link AndroidTargetParser} using reflection.
* This is inspired by the Python coding rule which mandates underscores prefixes for
*/
public class LayoutParamsParserTest extends TestCase {
+ private static final String MOCK_DATA_PATH =
+ "com/android/ide/eclipse/testdata/mock_attrs.xml"; //$NON-NLS-1$
+
private static class MockFrameworkClassLoader extends AndroidJarLoader {
MockFrameworkClassLoader() {
super(null /* osFrameworkLocation */);
}
-
+
@Override
public HashMap<String, ArrayList<IClassDescriptor>> findClassesDerivingFrom(
String rootPackage, String[] superClasses) throws ClassFormatError {
return new HashMap<String, ArrayList<IClassDescriptor>>();
}
}
-
- private static class MockAttrsXmlPath {
- public String getPath() {
- ClassLoader cl = this.getClass().getClassLoader();
- URL res = cl.getResource("data/mock_attrs.xml"); //$NON-NLS-1$
- return res.getFile();
- }
- }
-
+
private static class MockLayoutParamsParser extends LayoutParamsParser {
public MockLayoutParamsParser() {
super(new MockFrameworkClassLoader(),
- new AttrsXmlParser(new MockAttrsXmlPath().getPath()).preload());
+ new AttrsXmlParser(
+ AdtTestData.getInstance().getTestFilePath(MOCK_DATA_PATH)).preload());
mTopViewClass = new ClassWrapper(mock_android.view.View.class);
mTopGroupClass = new ClassWrapper(mock_android.view.ViewGroup.class);
}
private MockLayoutParamsParser mParser;
-
+
@Override
public void setUp() throws Exception {
mParser = new MockLayoutParamsParser();
@Override
public void tearDown() throws Exception {
}
-
+
public final void testFindLayoutParams() throws Exception {
assertEquals(mock_android.view.ViewGroup.LayoutParams.class,
((ClassWrapper)_findLayoutParams(mock_android.view.ViewGroup.class)).wrappedClass());
assertEquals(mock_android.widget.TableLayout.LayoutParams.class,
((ClassWrapper)_findLayoutParams(mock_android.widget.TableLayout.class)).wrappedClass());
}
-
+
public final void testGetLayoutParamsInfo() throws Exception {
LayoutParamsInfo info1 = _getLayoutParamsInfo(
mock_android.view.ViewGroup.LayoutParams.class);
assertNotNull(info2);
// LinearLayout.LayoutData links to ViewGroup.LayoutParams
assertSame(info1, info2.getSuperClass());
-
+
LayoutParamsInfo info3 = _getLayoutParamsInfo(
mock_android.widget.TableLayout.LayoutParams.class);
assertNotNull(info3);
assertNotSame(info1, info3.getSuperClass());
assertNotSame(info2, info3.getSuperClass());
// TableLayout.LayoutParams => ViewGroup.MarginLayoutParams => ViewGroup.LayoutParams
- assertSame(info1, info3.getSuperClass().getSuperClass());
+ assertSame(info1, info3.getSuperClass().getSuperClass());
}
public final void testGetLayoutClasses() throws Exception {
}
//---- access to private methods
-
+
/** Calls the private constructor of the parser */
@SuppressWarnings("unused")
private AndroidTargetParser _Constructor(String osJarPath) throws Exception {
constructor.setAccessible(true);
return constructor.newInstance(osJarPath);
}
-
+
/** calls the private getLayoutClasses() of the parser */
@SuppressWarnings("unused")
private void _getLayoutClasses() throws Exception {
method.setAccessible(true);
method.invoke(mParser);
}
-
+
/** calls the private addGroup() of the parser */
@SuppressWarnings("unused")
private ViewClassInfo _addGroup(Class<?> groupClass) throws Exception {
method.setAccessible(true);
return (LayoutParamsInfo) method.invoke(mParser, new ClassWrapper(layoutParamsClass));
}
-
+
/** calls the private findLayoutParams() of the parser */
private IClassDescriptor _findLayoutParams(Class<?> groupClass) throws Exception {
Method method = LayoutParamsParser.class.getDeclaredMethod("findLayoutParams", //$NON-NLS-1$
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
->
- <Button
- android:id="@+id/bouton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="My Button Text"
- >
- </Button>
- <View
- android:id="@+id/surface"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_weight="2"
- />
- <TextView
- android:id="@+id/status"
- android:paddingLeft="2dip"
- android:layout_weight="0"
- android:background="@drawable/black"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:lines="1"
- android:gravity="center_vertical|center_horizontal"
- android:text="My TextView Text"
- />
-</LinearLayout>
\r
package com.android.sdklib.repository;\r
\r
-import com.android.ide.eclipse.tests.AdtTestData;\r
-\r
import org.xml.sax.ErrorHandler;\r
import org.xml.sax.SAXException;\r
import org.xml.sax.SAXParseException;\r
\r
/** Validate a valid sample using an InputStream */\r
public void testValidateLocalRepositoryFile() throws Exception {\r
- InputStream xmlStream = AdtTestData.getInstance().getTestFileStream(\r
- "repository_sample.xml");\r
+ InputStream xmlStream =\r
+ this.getClass().getClassLoader().getResourceAsStream(\r
+ "com/android/sdklib/testdata/repository_sample.xml");\r
Source source = new StreamSource(xmlStream);\r
\r
CaptureErrorHandler handler = new CaptureErrorHandler();\r