ADT test fixes.

Temporarily remove SampleProjectTest from continuous, since its failing at
every CL.
Adjust ApiDemosRenderingTest to use the SDK loaded by ADT.
Remove SdkEnvTestCase since it doesn't work in all situations.
Fix test data lookup for NinePatchTest and BridgeXmlBlockParserTest.

Bugs 2222616, 2218682
This commit is contained in:
Brett Chabot
2009-10-28 18:22:15 -07:00
parent 107b1a9ee6
commit a94518e3bc
12 changed files with 140 additions and 150 deletions

View File

@@ -1,60 +0,0 @@
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php
*
* 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.eclipse.tests;
import com.android.ide.eclipse.adt.AdtPlugin;
import com.android.ide.eclipse.adt.internal.sdk.LoadStatus;
import com.android.ide.eclipse.adt.internal.sdk.Sdk;
/**
* A test case which uses the Sdk loaded by the Adt plugin.
*/
public abstract class AdtSdkTestCase extends SdkTestCase {
protected AdtSdkTestCase() {
}
/**
* Gets the current Sdk from Adt, waiting if necessary.
*/
@Override
protected Sdk loadSdk() {
AdtPlugin adt = AdtPlugin.getDefault();
Object sdkLock = adt.getSdkLockObject();
LoadStatus loadStatus = LoadStatus.LOADING;
// wait for Adt to load the Sdk on a separate thread
// loop max of 600 times * 200 ms = 2 minutes
final int maxWait = 600;
for (int i=0; i < maxWait && loadStatus == LoadStatus.LOADING; i++) {
try {
Thread.sleep(200);
}
catch (InterruptedException e) {
// ignore
}
synchronized(sdkLock) {
loadStatus = adt.getSdkLoadStatus();
}
}
Sdk sdk = null;
synchronized(sdkLock) {
assertEquals(LoadStatus.LOADED, loadStatus);
sdk = Sdk.getCurrent();
}
assertNotNull(sdk);
return sdk;
}
}

View File

@@ -21,7 +21,10 @@ import org.eclipse.core.runtime.FileLocator;
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;
@@ -54,18 +57,18 @@ public class AdtTestData {
sLogger.info("Cannot find test_data environment variable, init to class loader");
URL url = this.getClass().getClassLoader().getResource("data"); //$NON-NLS-1$
if (Platform.isRunning()) {
sLogger.info("Running as an Eclipse Plug-in JUnit test, using FileLocator");
try {
mOsRootDataPath = FileLocator.resolve(url).getFile();
} catch (IOException e) {
sLogger.warning("IOException while using FileLocator, reverting to url");
mOsRootDataPath = url.getFile();
}
} else {
sLogger.info("Running as an plain JUnit test, using url as-is");
if (Platform.isRunning()) {
sLogger.info("Running as an Eclipse Plug-in JUnit test, using FileLocator");
try {
mOsRootDataPath = FileLocator.resolve(url).getFile();
} catch (IOException e) {
sLogger.warning("IOException while using FileLocator, reverting to url");
mOsRootDataPath = url.getFile();
}
} else {
sLogger.info("Running as an plain JUnit test, using url as-is");
mOsRootDataPath = url.getFile();
}
}
if (mOsRootDataPath.equals(AndroidConstants.WS_SEP + "data")) {
@@ -86,13 +89,28 @@ public class AdtTestData {
return sInstance;
}
/** Returns the absolute file path to a file located in this plugins
* "data" directory
* @param osRelativePath - string path to file contained in /data. Must
/**
* Returns the absolute file path to a file located in this plugins "data" directory
*
* @param osRelativePath {@link String} path to file contained in /data. Must
* use path separators appropriate to host OS
* @return String
*
* @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));
}
}

View File

@@ -16,7 +16,6 @@
package com.android.ide.eclipse.tests;
import com.android.ide.eclipse.tests.functests.layoutRendering.ApiDemosRenderingTest;
import com.android.ide.eclipse.tests.functests.sampleProjects.SampleProjectTest;
import junit.framework.TestSuite;
@@ -39,7 +38,8 @@ public class FuncTests extends TestSuite {
public static TestSuite suite() {
TestSuite suite = new TestSuite();
suite.addTestSuite(SampleProjectTest.class);
// TODO: uncomment this when 'gen' folder error on create is fixed
// suite.addTestSuite(SampleProjectTest.class);
suite.addTestSuite(ApiDemosRenderingTest.class);
return suite;

View File

@@ -1,45 +0,0 @@
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php
*
* 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.eclipse.tests;
import com.android.ide.eclipse.adt.internal.sdk.Sdk;
/**
* A test case that receives a specific Sdk to test via the "sdk_home" environment variable.
*/
public abstract class SdkEnvTestCase extends SdkTestCase {
protected SdkEnvTestCase() {
}
/**
* Loads the {@link Sdk}.
* <p/>
* Fails test if environment variable "sdk_home" is not set.
*/
@Override
protected Sdk loadSdk() {
String osSdkLocation = System.getProperty("sdk_home");
if (osSdkLocation == null) {
osSdkLocation = System.getenv("sdk_home");
}
if (osSdkLocation == null || osSdkLocation.length() < 1) {
fail("Environment variable sdk_home is not set");
}
return Sdk.loadSdk(osSdkLocation);
}
}

View File

@@ -15,7 +15,9 @@
*/
package com.android.ide.eclipse.tests;
import com.android.ide.eclipse.adt.AdtPlugin;
import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetParser;
import com.android.ide.eclipse.adt.internal.sdk.LoadStatus;
import com.android.ide.eclipse.adt.internal.sdk.Sdk;
import com.android.sdklib.IAndroidTarget;
@@ -25,7 +27,7 @@ import org.eclipse.core.runtime.NullProgressMonitor;
import junit.framework.TestCase;
/**
* A test case that needs a reference to a SDK.
* A test case which uses the SDK loaded by the ADT plugin.
*/
public abstract class SdkTestCase extends TestCase {
@@ -47,9 +49,34 @@ public abstract class SdkTestCase extends TestCase {
}
/**
* Loads the {@link Sdk} to use for test
* Gets the current SDK from ADT, waiting if necessary.
*/
protected abstract Sdk loadSdk();
private Sdk loadSdk() {
AdtPlugin adt = AdtPlugin.getDefault();
Object sdkLock = adt.getSdkLockObject();
LoadStatus loadStatus = LoadStatus.LOADING;
// wait for ADT to load the SDK on a separate thread
// loop max of 600 times * 200 ms = 2 minutes
final int maxWait = 600;
for (int i=0; i < maxWait && loadStatus == LoadStatus.LOADING; i++) {
try {
Thread.sleep(200);
}
catch (InterruptedException e) {
// ignore
}
synchronized(sdkLock) {
loadStatus = adt.getSdkLoadStatus();
}
}
Sdk sdk = null;
synchronized(sdkLock) {
assertEquals(LoadStatus.LOADED, loadStatus);
sdk = Sdk.getCurrent();
}
assertNotNull(sdk);
return sdk;
}
/**
* Checks that the provided sdk contains one or more valid targets.

View File

@@ -39,7 +39,7 @@ import com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager;
import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData;
import com.android.ide.eclipse.adt.internal.sdk.LoadStatus;
import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData.LayoutBridge;
import com.android.ide.eclipse.tests.SdkEnvTestCase;
import com.android.ide.eclipse.tests.SdkTestCase;
import com.android.layoutlib.api.ILayoutResult;
import com.android.layoutlib.api.IProjectCallback;
import com.android.layoutlib.api.IResourceValue;
@@ -59,7 +59,7 @@ import java.util.Map;
import javax.imageio.ImageIO;
public class ApiDemosRenderingTest extends SdkEnvTestCase {
public class ApiDemosRenderingTest extends SdkTestCase {
/**
* Custom parser that implements {@link IXmlPullParser} (which itself extends

View File

@@ -17,7 +17,7 @@ package com.android.ide.eclipse.tests.functests.sampleProjects;
import com.android.ide.eclipse.adt.AndroidConstants;
import com.android.ide.eclipse.adt.wizards.newproject.StubProjectWizard;
import com.android.ide.eclipse.tests.AdtSdkTestCase;
import com.android.ide.eclipse.tests.SdkTestCase;
import com.android.sdklib.IAndroidTarget;
import org.eclipse.core.resources.IMarker;
@@ -44,7 +44,7 @@ import java.util.logging.Logger;
* execution there
*
*/
public class SampleProjectTest extends AdtSdkTestCase {
public class SampleProjectTest extends SdkTestCase {
private static final Logger sLogger = Logger.getLogger(SampleProjectTest.class.getName());

View File

@@ -54,7 +54,7 @@
<property name="plugin-name" value="${plugin-name}" />
<property name="classname" value="com.android.ide.eclipse.tests.AllTests" />
<!-- pass extra vm arg to set sdk_home env and test_data env variable -->
<property name="extraVMargs" value="-Dsdk_home=${sdk_home} -Dtest_data=${test_data}" />
<property name="extraVMargs" value="-Dtest_data=${test_data}" />
</ant>
</target>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -0,0 +1,49 @@
<?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>

View File

@@ -16,6 +16,8 @@
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;
@@ -123,9 +125,8 @@ public class TestSdkRepository extends TestCase {
/** Validate a valid sample using an InputStream */
public void testValidateLocalRepositoryFile() throws Exception {
InputStream xmlStream =
TestSdkRepository.class.getResourceAsStream(
"/com/android/sdklib/testdata/repository_sample.xml");
InputStream xmlStream = AdtTestData.getInstance().getTestFileStream(
"repository_sample.xml");
Source source = new StreamSource(xmlStream);
CaptureErrorHandler handler = new CaptureErrorHandler();