diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/tests/AdtTestData.java b/tools/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/tests/AdtTestData.java
index 2eef828..281170e 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/tests/AdtTestData.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/tests/AdtTestData.java
@@ -21,18 +21,14 @@
 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 {
 
@@ -40,12 +36,9 @@
     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
@@ -55,7 +48,7 @@
         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");
@@ -71,7 +64,7 @@
             }
         }
 
-        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");
         }
 
@@ -90,9 +83,9 @@
     }
 
     /**
-     * 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
@@ -100,17 +93,4 @@
     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));
-    }
 }
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/project/AndroidManifestParserTest.java b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/project/AndroidManifestParserTest.java
index b76e802..e05391c 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/project/AndroidManifestParserTest.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/project/AndroidManifestParserTest.java
@@ -28,9 +28,13 @@
 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$
@@ -40,26 +44,24 @@
     @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());
     }
@@ -80,7 +82,7 @@
         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) {
@@ -93,7 +95,7 @@
 
     public void testGetUsesLibraries() {
         assertEquals(1, mManifestTestApp.getUsesLibraries().length);
-        assertEquals(LIBRARY_NAME, mManifestTestApp.getUsesLibraries()[0]); 
+        assertEquals(LIBRARY_NAME, mManifestTestApp.getUsesLibraries()[0]);
     }
 
     public void testGetPackageName() {
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/resources/AttrsXmlParserTest.java b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/resources/AttrsXmlParserTest.java
index ac6ebf5..f5c16e7 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/resources/AttrsXmlParserTest.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/resources/AttrsXmlParserTest.java
@@ -17,9 +17,6 @@
 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;
@@ -32,20 +29,23 @@
 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());
     }
@@ -53,12 +53,12 @@
     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(
@@ -66,7 +66,7 @@
                 "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();
@@ -75,7 +75,7 @@
         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. -->
@@ -90,32 +90,32 @@
         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());
@@ -126,7 +126,7 @@
     }
 
     //---- access to private methods
-    
+
     private Document _getDocument() throws Exception {
         Method method = AttrsXmlParser.class.getDeclaredMethod("getDocument"); //$NON-NLS-1$
         method.setAccessible(true);
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/sdk/AndroidJarLoaderTest.java b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/sdk/AndroidJarLoaderTest.java
index 71c79be..f9178f1 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/sdk/AndroidJarLoaderTest.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/sdk/AndroidJarLoaderTest.java
@@ -40,7 +40,8 @@
     /** 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);
     }
 
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/sdk/LayoutParamsParserTest.java b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/sdk/LayoutParamsParserTest.java
index cf5f194..166b63d 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/sdk/LayoutParamsParserTest.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/sdk/LayoutParamsParserTest.java
@@ -19,15 +19,12 @@
 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;
@@ -36,7 +33,7 @@
 
 /**
  * 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
@@ -44,30 +41,26 @@
  */
 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);
@@ -82,7 +75,7 @@
     }
 
     private MockLayoutParamsParser mParser;
-    
+
     @Override
     public void setUp() throws Exception {
         mParser = new MockLayoutParamsParser();
@@ -91,7 +84,7 @@
     @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());
@@ -102,7 +95,7 @@
         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);
@@ -115,7 +108,7 @@
         assertNotNull(info2);
         // LinearLayout.LayoutData links to ViewGroup.LayoutParams
         assertSame(info1, info2.getSuperClass());
-        
+
         LayoutParamsInfo info3 = _getLayoutParamsInfo(
                 mock_android.widget.TableLayout.LayoutParams.class);
         assertNotNull(info3);
@@ -124,7 +117,7 @@
         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 {
@@ -132,7 +125,7 @@
     }
 
     //---- access to private methods
-    
+
     /** Calls the private constructor of the parser */
     @SuppressWarnings("unused")
     private AndroidTargetParser _Constructor(String osJarPath) throws Exception {
@@ -141,7 +134,7 @@
         constructor.setAccessible(true);
         return constructor.newInstance(osJarPath);
     }
-    
+
     /** calls the private getLayoutClasses() of the parser */
     @SuppressWarnings("unused")
     private void _getLayoutClasses() throws Exception {
@@ -149,7 +142,7 @@
         method.setAccessible(true);
         method.invoke(mParser);
     }
-    
+
     /** calls the private addGroup() of the parser */
     @SuppressWarnings("unused")
     private ViewClassInfo _addGroup(Class<?> groupClass) throws Exception {
@@ -175,7 +168,7 @@
         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$
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/AndroidManifest-instrumentation.xml b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/testdata/AndroidManifest-instrumentation.xml
similarity index 100%
rename from tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/AndroidManifest-instrumentation.xml
rename to tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/testdata/AndroidManifest-instrumentation.xml
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/AndroidManifest-testapp.xml b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/testdata/AndroidManifest-testapp.xml
similarity index 100%
rename from tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/AndroidManifest-testapp.xml
rename to tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/testdata/AndroidManifest-testapp.xml
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/jar_example.jar b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/testdata/jar_example.jar
similarity index 100%
rename from tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/jar_example.jar
rename to tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/testdata/jar_example.jar
Binary files differ
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/jar_example.jardesc b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/testdata/jar_example.jardesc
similarity index 100%
rename from tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/jar_example.jardesc
rename to tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/testdata/jar_example.jardesc
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/mock_attrs.xml b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/testdata/mock_attrs.xml
similarity index 100%
rename from tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/mock_attrs.xml
rename to tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/testdata/mock_attrs.xml
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/button.9.png b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/button.9.png
deleted file mode 100644
index 9d52f40..0000000
--- a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/button.9.png
+++ /dev/null
Binary files differ
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/layout1.xml b/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/layout1.xml
deleted file mode 100644
index 554f541..0000000
--- a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/layout1.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?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>
diff --git a/tools/sdkmanager/libs/sdklib/tests/com/android/sdklib/repository/TestSdkRepository.java b/tools/sdkmanager/libs/sdklib/tests/com/android/sdklib/repository/TestSdkRepository.java
index 7f1d967..de50b6e 100755
--- a/tools/sdkmanager/libs/sdklib/tests/com/android/sdklib/repository/TestSdkRepository.java
+++ b/tools/sdkmanager/libs/sdklib/tests/com/android/sdklib/repository/TestSdkRepository.java
@@ -16,8 +16,6 @@
 
 package com.android.sdklib.repository;
 
-import com.android.ide.eclipse.tests.AdtTestData;
-
 import org.xml.sax.ErrorHandler;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
@@ -125,8 +123,9 @@
 
     /** Validate a valid sample using an InputStream */
     public void testValidateLocalRepositoryFile() throws Exception {
-        InputStream xmlStream = AdtTestData.getInstance().getTestFileStream(
-                "repository_sample.xml");
+        InputStream xmlStream =
+            this.getClass().getClassLoader().getResourceAsStream(
+                             "com/android/sdklib/testdata/repository_sample.xml");
         Source source = new StreamSource(xmlStream);
 
         CaptureErrorHandler handler = new CaptureErrorHandler();
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/repository_sample.xml b/tools/sdkmanager/libs/sdklib/tests/com/android/sdklib/testdata/repository_sample.xml
similarity index 100%
rename from tools/eclipse/plugins/com.android.ide.eclipse.tests/unittests/data/repository_sample.xml
rename to tools/sdkmanager/libs/sdklib/tests/com/android/sdklib/testdata/repository_sample.xml
