Merge "CTS WebGL Tests: Don't override URL loading." into lmp-dev
diff --git a/CtsTestCaseList.mk b/CtsTestCaseList.mk
index d90f4fb..2be82a4 100644
--- a/CtsTestCaseList.mk
+++ b/CtsTestCaseList.mk
@@ -13,21 +13,21 @@
# limitations under the License.
cts_security_apps_list := \
- CtsAppAccessData \
- CtsAppWithData \
- CtsExternalStorageApp \
- CtsInstrumentationAppDiffCert \
- CtsPermissionDeclareApp \
- CtsPermissionDeclareAppCompat \
- CtsReadExternalStorageApp \
- CtsSharedUidInstall \
- CtsSharedUidInstallDiffCert \
- CtsSimpleAppInstall \
- CtsSimpleAppInstallDiffCert \
- CtsTargetInstrumentationApp \
- CtsUsePermissionDiffCert \
- CtsWriteExternalStorageApp \
- CtsMultiUserStorageApp
+ CtsAppAccessData \
+ CtsAppWithData \
+ CtsExternalStorageApp \
+ CtsInstrumentationAppDiffCert \
+ CtsPermissionDeclareApp \
+ CtsPermissionDeclareAppCompat \
+ CtsReadExternalStorageApp \
+ CtsSharedUidInstall \
+ CtsSharedUidInstallDiffCert \
+ CtsSimpleAppInstall \
+ CtsSimpleAppInstallDiffCert \
+ CtsTargetInstrumentationApp \
+ CtsUsePermissionDiffCert \
+ CtsWriteExternalStorageApp \
+ CtsMultiUserStorageApp
cts_support_packages := \
CtsAccelerationTestStubs \
@@ -39,6 +39,7 @@
CtsDeviceUi \
CtsMonkeyApp \
CtsMonkeyApp2 \
+ CtsProfileOwnerApp \
CtsSomeAccessibilityServices \
CtsTestStubs \
CtsThemeDeviceApp \
@@ -49,13 +50,14 @@
$(cts_security_apps_list)
cts_external_packages := \
- com.replica.replicaisland
+ com.replica.replicaisland \
+ com.drawelements.deqp
# Any APKs that need to be copied to the CTS distribution's testcases
# directory but do not require an associated test package XML.
CTS_TEST_CASE_LIST := \
- $(cts_support_packages) \
- $(cts_external_packages)
+ $(cts_support_packages) \
+ $(cts_external_packages)
# Test packages that require an associated test package XML.
cts_test_packages := \
@@ -91,6 +93,7 @@
CtsJniTestCases \
CtsKeystoreTestCases \
CtsLocationTestCases \
+ CtsLocation2TestCases \
CtsMediaStressTestCases \
CtsMediaTestCases \
CtsNativeOpenGLTestCases \
@@ -127,13 +130,14 @@
# All APKs that need to be scanned by the coverage utilities.
CTS_COVERAGE_TEST_CASE_LIST := \
- $(cts_support_packages) \
- $(cts_test_packages)
+ $(cts_support_packages) \
+ $(cts_test_packages)
# Host side only tests
cts_host_libraries := \
CtsAdbTests \
CtsAppSecurityTests \
+ CtsDevicePolicyManagerTestCases \
CtsHostJank \
CtsHostUi \
CtsMonkeyTestCases \
@@ -143,8 +147,8 @@
# Native test executables that need to have associated test XMLs.
cts_native_exes := \
- NativeMediaTest_SL \
- NativeMediaTest_XA \
+ NativeMediaTest_SL \
+ NativeMediaTest_XA \
ifeq ($(HOST_OS)-$(HOST_ARCH),$(filter $(HOST_OS)-$(HOST_ARCH),linux-x86 linux-x86_64))
cts_native_exes += bionic-unit-tests-cts
@@ -179,7 +183,9 @@
$(call cts-get-test-xmls,$(cts_test_packages)) \
$(call cts-get-test-xmls,$(cts_native_exes)) \
$(call cts-get-test-xmls,$(cts_target_junit_tests)) \
- $(call cts-get-test-xmls,$(cts_ui_tests))
+ $(call cts-get-test-xmls,$(cts_ui_tests)) \
+ external/deqp/android/cts/com.drawelements.deqp.gles3.xml \
+ external/deqp/android/cts/com.drawelements.deqp.gles31.xml
# The following files will be placed in the tools directory of the CTS distribution
CTS_TOOLS_LIST :=
diff --git a/apps/CtsVerifier/AndroidManifest.xml b/apps/CtsVerifier/AndroidManifest.xml
index 2b5b4f2..e151325 100644
--- a/apps/CtsVerifier/AndroidManifest.xml
+++ b/apps/CtsVerifier/AndroidManifest.xml
@@ -47,7 +47,7 @@
<uses-feature android:name="android.hardware.usb.accessory" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <uses-feature android:name="android.hardware.telephony" android:required="false" />
+ <uses-feature android:name="android.software.connectionservice" android:required="false" />
<!-- Needed by the Audio Quality Verifier to store the sound samples that will be mailed. -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
@@ -760,6 +760,16 @@
<meta-data android:name="test_category" android:value="@string/test_category_sensors"/>
</activity>
+ <activity android:name=".sensors.SensorBatchingTestsActivity"
+ android:label="@string/snsr_sensor_batching_tests"
+ android:screenOrientation="nosensor">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.cts.intent.category.MANUAL_TEST"/>
+ </intent-filter>
+ <meta-data android:name="test_category" android:value="@string/test_category_sensors"/>
+ </activity>
+
<activity android:name=".sensors.SensorIntegrationTestsActivity"
android:label="@string/snsr_sensor_integration_tests">
<intent-filter>
@@ -1146,6 +1156,7 @@
<category android:name="android.cts.intent.category.MANUAL_TEST" />
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_telecom" />
+ <meta-data android:name="test_required_features" android:value="android.software.connectionservice"/>
</activity>
<activity android:name=".telecom.CancelCallTestActivity"
@@ -1156,7 +1167,6 @@
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_telecom" />
<meta-data android:name="test_parent" android:value="com.android.cts.verifier.telecom.TelecomTestActivity" />
- <meta-data android:name="test_required_features" android:value="android.hardware.telephony"/>
</activity>
<service android:name=".telecom.CancelCallTestActivity$ConnectionService"
diff --git a/apps/CtsVerifier/res/layout/snsr_instruction.xml b/apps/CtsVerifier/res/layout/snsr_instruction.xml
index 66c7386..e7369c7 100644
--- a/apps/CtsVerifier/res/layout/snsr_instruction.xml
+++ b/apps/CtsVerifier/res/layout/snsr_instruction.xml
@@ -14,6 +14,7 @@
limitations under the License.
-->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:textColor="?android:attr/textColorSecondary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/snsr_log_padding_bottom"
diff --git a/apps/CtsVerifier/res/layout/snsr_message.xml b/apps/CtsVerifier/res/layout/snsr_message.xml
new file mode 100644
index 0000000..cef35ca
--- /dev/null
+++ b/apps/CtsVerifier/res/layout/snsr_message.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:textStyle="italic"
+ android:textColor="?android:attr/textColorTertiary"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="@dimen/snsr_log_padding_top"
+ android:paddingLeft="@dimen/snsr_boxed_padding_left"
+ android:paddingRight="@dimen/snsr_boxed_padding_right"
+ android:paddingBottom="@dimen/snsr_log_padding_bottom" />
diff --git a/apps/CtsVerifier/res/layout/snsr_test_title.xml b/apps/CtsVerifier/res/layout/snsr_test_title.xml
index 2a458e7..374fb54 100644
--- a/apps/CtsVerifier/res/layout/snsr_test_title.xml
+++ b/apps/CtsVerifier/res/layout/snsr_test_title.xml
@@ -14,10 +14,11 @@
limitations under the License.
-->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:textStyle="bold"
+ android:textColor="?android:attr/textColorPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/snsr_boxed_padding_bottom"
android:paddingTop="@dimen/snsr_boxed_padding_top"
android:paddingLeft="@dimen/snsr_boxed_padding_left"
- android:paddingRight="@dimen/snsr_boxed_padding_right"
- android:textStyle="bold" />
+ android:paddingRight="@dimen/snsr_boxed_padding_right" />
diff --git a/apps/CtsVerifier/res/values/strings.xml b/apps/CtsVerifier/res/values/strings.xml
index a3b920f..ea86111 100644
--- a/apps/CtsVerifier/res/values/strings.xml
+++ b/apps/CtsVerifier/res/values/strings.xml
@@ -432,7 +432,6 @@
<string name="snsr_executing_test">\nExecuting test case \'%1$s\'..\n</string>
<string name="snsr_orientation_portrait">[Device orientation]: Portrait.</string>
<string name="snsr_orientation_landscape">[Device orientation]: Landscape.</string>
- <string name="snsr_register_listener">Expected to be able to register sensor listener. Found=%b.</string>
<!-- Strings to interact with users in Sensor Tests -->
<string name="snsr_test_play_sound">A sound will be played once the verification is complete...</string>
@@ -517,8 +516,6 @@
<string name="snsr_batch_test">Sensor Batching Tests</string>
<string name="snsr_batching_walking_needed">Once the test begins, you will have to walk.</string>
<string name="snsr_batching_fifo_count">FifoReservedEventCount=%1$d. Expected to be at most FifoMaxEventCount=%2$d.</string>
- <string name="snsr_batching_first_event_arrival">Batched events expected to arrive after %1$d ns. Found=%2$d ns.</string>
- <string name="snsr_batching_flush_complete">Event \'onFlushComplete\' expected. Found=%1$b.</string>
<!-- Sensor Synchronization -->
<string name="snsr_synch_test">Sensor Synchronization Test</string>
@@ -555,6 +552,7 @@
<string name="snsr_single_sensor_tests">CTS Single Sensor Tests</string>
<string name="snsr_sensor_integration_tests">CTS Sensor Integration Tests</string>
<string name="snsr_sensor_test">CTS Sensor Test</string>
+ <string name="snsr_sensor_batching_tests">CTS Sensor Batching Tests</string>
<!-- Strings for Sample Test Activities -->
<string name="share_button_text">Share</string>
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/projection/offscreen/ProjectionOffscreenActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/projection/offscreen/ProjectionOffscreenActivity.java
index 5f32cfd..f992618 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/projection/offscreen/ProjectionOffscreenActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/projection/offscreen/ProjectionOffscreenActivity.java
@@ -185,6 +185,13 @@
}
Image image = reader.acquireLatestImage();
+
+ // No new images available
+ if (image == null) {
+ Log.w(TAG, "onImageAvailable called but no image!");
+ return;
+ }
+
if (mTestStatus == TestStatus.RUNNING) {
int ret = scanImage(image);
if (ret == -1) {
@@ -244,9 +251,7 @@
offset += rowPadding;
}
- // Return a color if it represents more than one quarter of the pixels.
- // We use this threshold in case the display is being letterboxed when
- // mirroring so there might be large black bars on the sides, which is normal.
+ // Return a color if it represents all of the pixels.
Log.d(TAG, "- Pixels: " + blackPixels + " black, "
+ bluePixels + " blue, "
+ otherPixels + " other");
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/BatchingTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/BatchingTestActivity.java
index 009e644..42bd6ad 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/BatchingTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/BatchingTestActivity.java
@@ -19,22 +19,15 @@
import com.android.cts.verifier.R;
import com.android.cts.verifier.sensors.base.SensorCtsVerifierTestActivity;
-import junit.framework.Assert;
-
import android.content.Context;
import android.hardware.Sensor;
-import android.hardware.SensorEvent;
-import android.hardware.SensorEventListener2;
import android.hardware.SensorManager;
-import android.hardware.cts.helpers.SensorNotSupportedException;
-import android.hardware.cts.helpers.TestSensorEvent;
+import android.hardware.cts.helpers.sensoroperations.TestSensorFlushOperation;
+import android.hardware.cts.helpers.sensoroperations.TestSensorOperation;
+import android.hardware.cts.helpers.sensoroperations.VerifiableSensorOperation;
import android.os.Bundle;
import android.os.PowerManager;
-import android.os.SystemClock;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
/**
@@ -44,27 +37,19 @@
* If a sensor supports the batching mode, FifoReservedEventCount for that sensor should be greater
* than one.
*/
-public class BatchingTestActivity
- extends SensorCtsVerifierTestActivity
- implements SensorEventListener2 {
+public class BatchingTestActivity extends SensorCtsVerifierTestActivity {
public BatchingTestActivity() {
super(BatchingTestActivity.class);
}
- private final long TWO_SECONDS_MILLIS = TimeUnit.SECONDS.toMillis(2);
- private static final long DATA_COLLECTION_TIME_IN_MS = TimeUnit.SECONDS.toMillis(10);
- private final long MIN_BATCH_TIME_NANOS = TimeUnit.SECONDS.toNanos(5);
- private final long MAX_BATCH_REPORT_LATENCY_US = DATA_COLLECTION_TIME_IN_MS * 500;
+ private static final int SENSOR_BATCHING_RATE_US = SensorManager.SENSOR_DELAY_FASTEST;
+ private static final int REPORT_LATENCY_10_SEC = 10;
+ private static final int BATCHING_PADDING_TIME_S = 2;
- private final List<TestSensorEvent> mSensorEvents = new ArrayList<TestSensorEvent>();
+ // we are testing sensors that only trigger based on external events, so leave enough time for
+ // such events to generate
+ private static final int REPORT_LATENCY_25_SEC = 25;
- private SensorManager mSensorManager;
-
- private volatile Sensor mSensorUnderTest;
- private volatile long mTimeFirstBatchedEventReceivedNanos;
-
- private CountDownLatch mSensorEventReceived;
- private CountDownLatch mFlushCompleteReceived;
private PowerManager.WakeLock mWakeLock;
@Override
@@ -74,7 +59,6 @@
@Override
protected void activitySetUp() throws InterruptedException {
- mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "BatchingTests");
@@ -88,147 +72,106 @@
restoreSensorFeatures();
}
- // TODO: refactor to discover all available sensors of each type and dinamically generate test
+ // TODO: refactor to discover all available sensors of each type and dynamically generate test
// cases for all of them
- public String testStepCounter() throws Throwable {
- return runTest(Sensor.TYPE_STEP_COUNTER, R.string.snsr_batching_walking_needed);
+ public String testStepCounter_batching() throws Throwable {
+ return runBatchTest(
+ Sensor.TYPE_STEP_COUNTER,
+ REPORT_LATENCY_25_SEC,
+ R.string.snsr_batching_walking_needed);
}
- public String testStepDetector() throws Throwable {
- return runTest(Sensor.TYPE_STEP_DETECTOR, R.string.snsr_batching_walking_needed);
+ public String testStepCounter_flush() throws Throwable {
+ return runFlushTest(
+ Sensor.TYPE_STEP_COUNTER,
+ REPORT_LATENCY_25_SEC,
+ R.string.snsr_batching_walking_needed);
}
- public String testProximity() throws Throwable {
- return runTest(Sensor.TYPE_PROXIMITY, R.string.snsr_interaction_needed);
+ public String testStepDetector_batching() throws Throwable {
+ return runBatchTest(
+ Sensor.TYPE_STEP_DETECTOR,
+ REPORT_LATENCY_25_SEC,
+ R.string.snsr_batching_walking_needed);
}
- public String testLight() throws Throwable {
- return runTest(Sensor.TYPE_LIGHT, R.string.snsr_interaction_needed);
+ public String testStepDetector_flush() throws Throwable {
+ return runFlushTest(
+ Sensor.TYPE_STEP_DETECTOR,
+ REPORT_LATENCY_25_SEC,
+ R.string.snsr_batching_walking_needed);
}
- // TODO: move sensors that do not require interaction to CTS
- public String testGameRotationVector() throws Throwable {
- return runTest(Sensor.TYPE_GAME_ROTATION_VECTOR, R.string.snsr_no_interaction);
+ public String testProximity_batching() throws Throwable {
+ return runBatchTest(
+ Sensor.TYPE_PROXIMITY,
+ REPORT_LATENCY_10_SEC,
+ R.string.snsr_interaction_needed);
}
- public String testGeomagneticRotationVector() throws Throwable {
- return runTest(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR, R.string.snsr_no_interaction);
+ public String testProximity_flush() throws Throwable {
+ return runFlushTest(
+ Sensor.TYPE_PROXIMITY,
+ REPORT_LATENCY_10_SEC,
+ R.string.snsr_interaction_needed);
}
- public String testAccelerometer() throws Throwable {
- return runTest(Sensor.TYPE_ACCELEROMETER, R.string.snsr_no_interaction);
+ public String testLight_batching() throws Throwable {
+ return runBatchTest(
+ Sensor.TYPE_LIGHT,
+ REPORT_LATENCY_10_SEC,
+ R.string.snsr_interaction_needed);
}
- public String testGyroscope() throws Throwable {
- return runTest(Sensor.TYPE_GYROSCOPE, R.string.snsr_no_interaction);
+ public String testLight_flush() throws Throwable {
+ return runFlushTest(
+ Sensor.TYPE_LIGHT,
+ REPORT_LATENCY_10_SEC,
+ R.string.snsr_interaction_needed);
}
- public String testGyroscopeUncalibrated() throws Throwable {
- return runTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, R.string.snsr_no_interaction);
+ private String runBatchTest(int sensorType, int maxBatchReportLatencySec, int instructionsResId)
+ throws Throwable {
+ getTestLogger().logInstructions(instructionsResId);
+ waitForUserToBegin();
+
+ Context context = getApplicationContext();
+ int maxBatchReportLatencyUs = (int) TimeUnit.SECONDS.toMicros(maxBatchReportLatencySec);
+ int testDurationSec = maxBatchReportLatencySec + BATCHING_PADDING_TIME_S;
+ TestSensorOperation operation = new TestSensorOperation(
+ context,
+ sensorType,
+ SENSOR_BATCHING_RATE_US,
+ maxBatchReportLatencyUs,
+ testDurationSec,
+ TimeUnit.SECONDS);
+
+ return executeTest(operation);
}
- public String testMagneticField() throws Throwable {
- return runTest(Sensor.TYPE_MAGNETIC_FIELD, R.string.snsr_no_interaction);
+ private String runFlushTest(int sensorType, int maxBatchReportLatencySec, int instructionsResId)
+ throws Throwable {
+ getTestLogger().logInstructions(instructionsResId);
+ waitForUserToBegin();
+
+ Context context = getApplicationContext();
+ int maxBatchReportLatencyUs = (int) TimeUnit.SECONDS.toMicros(maxBatchReportLatencySec);
+ int flushDurationSec = maxBatchReportLatencySec / 2;
+ TestSensorFlushOperation operation = new TestSensorFlushOperation(
+ context,
+ sensorType,
+ SENSOR_BATCHING_RATE_US,
+ maxBatchReportLatencyUs,
+ flushDurationSec,
+ TimeUnit.SECONDS);
+
+ return executeTest(operation);
}
- public String testMagneticFieldUncalibrated() throws Throwable {
- return runTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, R.string.snsr_no_interaction);
- }
-
- public String testRotationVector() throws Throwable {
- return runTest(Sensor.TYPE_ROTATION_VECTOR, R.string.snsr_no_interaction);
- }
-
- // TODO: split batching and flush scenarios
- private String runTest(int sensorType, int instructionsResId) throws Throwable {
- mSensorUnderTest = mSensorManager.getDefaultSensor(sensorType);
- // TODO: add exception for batching not supported
- if (mSensorUnderTest == null || mSensorUnderTest.getFifoMaxEventCount() < 1) {
- throw new SensorNotSupportedException(Sensor.TYPE_STEP_COUNTER);
- }
-
- appendText(instructionsResId);
- waitForUser();
-
- // Register to wait for first sensor event arrival, and when FIFO has been flushed
- mSensorEventReceived = new CountDownLatch(1);
- mFlushCompleteReceived = new CountDownLatch(1);
- mSensorEvents.clear();
-
- int fifoReservedEventCount = mSensorUnderTest.getFifoReservedEventCount();
- int fifoMaxEventCount = mSensorUnderTest.getFifoMaxEventCount();
- String fifoMessage = getString(
- R.string.snsr_batching_fifo_count,
- fifoReservedEventCount,
- fifoMaxEventCount);
- Assert.assertTrue(fifoMessage, fifoReservedEventCount <= fifoMaxEventCount);
-
- // Time when start batching
- mTimeFirstBatchedEventReceivedNanos = 0;
- long timeBatchingStartedNanos = SystemClock.elapsedRealtimeNanos();
-
- // Batch with the fastest rate and set report latency large enough to ensure full batching
- // occurs
- boolean registerResult = mSensorManager.registerListener(
- this /* listener */,
- mSensorUnderTest,
- SensorManager.SENSOR_DELAY_FASTEST,
- (int) MAX_BATCH_REPORT_LATENCY_US);
- Assert.assertTrue(
- getString(R.string.snsr_register_listener, registerResult),
- registerResult);
-
- // add a buffer to the duration of the test for timeout
- mSensorEventReceived
- .await(DATA_COLLECTION_TIME_IN_MS + TWO_SECONDS_MILLIS, TimeUnit.MILLISECONDS);
- // TODO: add delayed assertion for await
-
- // verify the minimum batching time
- long firstTimeArrivalDelta = mTimeFirstBatchedEventReceivedNanos - timeBatchingStartedNanos;
- String firstTimeArrivalMessage = getString(
- R.string.snsr_batching_first_event_arrival,
- MIN_BATCH_TIME_NANOS,
- firstTimeArrivalDelta);
- Assert.assertTrue(firstTimeArrivalMessage, firstTimeArrivalDelta >= MIN_BATCH_TIME_NANOS);
-
- // batch a bit more to test the flush
- long sleepTime = TimeUnit.NANOSECONDS.toMillis(MIN_BATCH_TIME_NANOS / 2);
- Thread.sleep(sleepTime);
- mSensorManager.flush(this);
-
- boolean flushAwaitSuccess = mFlushCompleteReceived
- .await(DATA_COLLECTION_TIME_IN_MS + TWO_SECONDS_MILLIS, TimeUnit.MILLISECONDS);
- Assert.assertTrue(
- getString(R.string.snsr_batching_flush_complete, flushAwaitSuccess),
- flushAwaitSuccess);
-
- playSound();
- // TODO: use SensorTestVerifications to check for event ordering and event gap
+ private String executeTest(VerifiableSensorOperation operation) {
+ operation.addDefaultVerifications();
+ operation.setLogEvents(true);
+ operation.execute();
return null;
}
-
- @Override
- public void onSensorChanged(SensorEvent sensorEvent) {
- long elapsedTime = SystemClock.elapsedRealtimeNanos();
- if (sensorEvent.sensor.getType() != mSensorUnderTest.getType()) {
- // TODO: add delayed assertion
- return;
- }
-
- mSensorEvents.add(new TestSensorEvent(sensorEvent, elapsedTime));
- if (mTimeFirstBatchedEventReceivedNanos == 0) {
- mTimeFirstBatchedEventReceivedNanos = elapsedTime;
- mSensorEventReceived.countDown();
- }
- }
-
- @Override
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
-
- @Override
- public void onFlushCompleted(Sensor sensor) {
- mSensorManager.unregisterListener(this);
- mFlushCompleteReceived.countDown();
- }
}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/SensorBatchingTestsActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/SensorBatchingTestsActivity.java
new file mode 100644
index 0000000..d1923cc
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/SensorBatchingTestsActivity.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2014 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.cts.verifier.sensors;
+
+import com.android.cts.verifier.sensors.base.SensorCtsTestActivity;
+
+import android.hardware.cts.SensorBatchingTests;
+
+/**
+ * Activity to execute CTS sensor batching tests.
+ * It is a wrapper for {@link SensorBatchingTests} running with AndroidJUnitRunner.
+ */
+public class SensorBatchingTestsActivity extends SensorCtsTestActivity {
+ public SensorBatchingTestsActivity() {
+ super(SensorBatchingTests.class);
+ }
+}
\ No newline at end of file
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/StepCounterTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/StepCounterTestActivity.java
index 78430e3..221c92a 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/StepCounterTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/StepCounterTestActivity.java
@@ -29,8 +29,9 @@
import android.hardware.cts.helpers.MovementDetectorHelper;
import android.hardware.cts.helpers.TestSensorEvent;
import android.os.SystemClock;
+import android.view.MotionEvent;
import android.view.View;
-import android.view.View.OnClickListener;
+import android.widget.ScrollView;
import java.util.ArrayList;
import java.util.List;
@@ -66,6 +67,10 @@
private final List<TestSensorEvent> mStepCounterEvents = new ArrayList<TestSensorEvent>();
private final List<TestSensorEvent> mStepDetectorEvents = new ArrayList<TestSensorEvent>();
+ /**
+ * A flag that indicates if the test is interested in registering steps reported by the
+ * operator. The registration of events happens by tapping the screen throughout the test.
+ */
private volatile boolean mCheckForMotion;
@Override
@@ -74,16 +79,19 @@
mSensorStepCounter = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
mSensorStepDetector = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
- View screen = findViewById(R.id.log_layout);
- screen.setOnClickListener(new OnClickListener() {
+ ScrollView scrollView = (ScrollView) findViewById(R.id.log_scroll_view);
+ scrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
- public void onClick(View v) {
+ public boolean onTouch(View v, MotionEvent event) {
+ // during movement of the device, the ScrollView will detect user taps as attempts
+ // to scroll, when in reality they are taps in the layout
+ // to overcome the fact that a ScrollView cannot be disabled from scrolling, we
+ // listen for ACTION_UP events instead of click events in the child layout
long elapsedTime = SystemClock.elapsedRealtimeNanos();
- if (mCheckForMotion) {
- playSound();
- mTimestampsUserReported.add(SystemClock.elapsedRealtimeNanos());
- appendText(getString(R.string.snsr_step_reported, elapsedTime));
+ if (event.getAction() == MotionEvent.ACTION_UP) {
+ logUserReportedStep(elapsedTime);
}
+ return false;
}
});
}
@@ -123,8 +131,8 @@
mMoveDetected = false;
mCheckForMotion = false;
- appendText(instructionsResId);
- waitForUser();
+ getTestLogger().logMessage(instructionsResId);
+ waitForUserToBegin();
mCheckForMotion = (expectedSteps > 0);
if (vibrate) {
@@ -299,16 +307,25 @@
int type = event.sensor.getType();
if (type == Sensor.TYPE_STEP_COUNTER) {
mStepCounterEvents.add(new TestSensorEvent(event, elapsedRealtimeNanos));
- String counterMessage = getString(
+ getTestLogger().logMessage(
R.string.snsr_step_counter_event,
elapsedRealtimeNanos,
(int) event.values[0]);
- appendText(counterMessage);
} else if (type == Sensor.TYPE_STEP_DETECTOR) {
mStepDetectorEvents.add(new TestSensorEvent(event, elapsedRealtimeNanos));
- appendText(getString(R.string.snsr_step_detector_event, elapsedRealtimeNanos));
+ getTestLogger().logMessage(R.string.snsr_step_detector_event, elapsedRealtimeNanos);
}
// TODO: with delayed assertions check events of other types are tracked
}
+
+ private void logUserReportedStep(long timestamp) {
+ if (!mCheckForMotion) {
+ return;
+ }
+
+ playSound();
+ mTimestampsUserReported.add(timestamp);
+ getTestLogger().logMessage(R.string.snsr_step_reported, timestamp);
+ }
}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/base/BaseSensorTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/base/BaseSensorTestActivity.java
index 2938dff..04603cb 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/base/BaseSensorTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/base/BaseSensorTestActivity.java
@@ -402,6 +402,12 @@
textAppender.append();
}
+ public void logMessage(int messageResId, Object ... params) {
+ TextAppender textAppender = new TextAppender(R.layout.snsr_message);
+ textAppender.setText(getString(messageResId, params));
+ textAppender.append();
+ }
+
public void logTestDetails(SensorTestDetails testDetails) {
String name = testDetails.getName();
String summary = testDetails.getSummary();
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/base/SensorCtsTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/base/SensorCtsTestActivity.java
index 1479248..6bdc8d2 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/base/SensorCtsTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/base/SensorCtsTestActivity.java
@@ -20,10 +20,11 @@
import com.android.cts.verifier.R;
import com.android.cts.verifier.sensors.reporting.SensorTestDetails;
-import junit.framework.TestResult;
+import junit.framework.Test;
import junit.framework.TestSuite;
import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.internal.runners.SuiteMethod;
import org.junit.runner.Computer;
import org.junit.runner.Description;
import org.junit.runner.JUnitCore;
@@ -93,27 +94,35 @@
}
/**
- * A {@link RunnerBuilder} that is used to inject during execution a {@link SensorTestSuite}.
+ * A {@link RunnerBuilder} that is used to inject during execution a {@link SensorCtsTestSuite}.
*/
private class SensorRunnerBuilder extends RunnerBuilder {
@Override
public Runner runnerForClass(Class<?> testClass) throws Throwable {
- TestSuite testSuite = new SensorTestSuite(testClass);
- return new JUnit38ClassRunner(testSuite);
- }
- }
-
- /**
- * A {@link TestSuite} that is used to inject during execution a {@link SensorCtsTestResult}.
- */
- private class SensorTestSuite extends TestSuite {
- public SensorTestSuite(Class<?> testClass) {
- super(testClass);
+ TestSuite testSuite;
+ if (hasSuiteMethod(testClass)) {
+ Test test = SuiteMethod.testFromSuiteMethod(testClass);
+ if (test instanceof TestSuite) {
+ testSuite = (TestSuite) test;
+ } else {
+ throw new IllegalArgumentException(
+ testClass.getName() + "#suite() did not return a TestSuite.");
+ }
+ } else {
+ testSuite = new TestSuite(testClass);
+ }
+ SensorCtsTestSuite sensorTestSuite =
+ new SensorCtsTestSuite(getApplicationContext(), testSuite);
+ return new JUnit38ClassRunner(sensorTestSuite);
}
- @Override
- public void run(TestResult testResult) {
- super.run(new SensorCtsTestResult(getApplicationContext(), testResult));
+ private boolean hasSuiteMethod(Class testClass) {
+ try {
+ testClass.getMethod("suite");
+ return true;
+ } catch (NoSuchMethodException e) {
+ return false;
+ }
}
}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/base/SensorCtsTestSuite.java b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/base/SensorCtsTestSuite.java
new file mode 100644
index 0000000..bbf76a7
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/base/SensorCtsTestSuite.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2014 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.cts.verifier.sensors.base;
+
+import junit.framework.Test;
+import junit.framework.TestResult;
+import junit.framework.TestSuite;
+
+import android.content.Context;
+
+import java.util.Enumeration;
+
+/**
+ * A wrapper class for a {@link TestSuite}.
+ *
+ * It provides a way to inject a {@link SensorCtsTestResult} during execution.
+ */
+class SensorCtsTestSuite extends TestSuite {
+ private final Context mContext;
+ private final TestSuite mWrappedTestSuite;
+
+ public SensorCtsTestSuite(Context context, TestSuite testSuite) {
+ mContext = context;
+ mWrappedTestSuite = testSuite;
+ }
+
+ @Override
+ public void run(TestResult testResult) {
+ mWrappedTestSuite.run(new SensorCtsTestResult(mContext, testResult));
+ }
+
+ @Override
+ public void addTest(Test test) {
+ mWrappedTestSuite.addTest(test);
+ }
+
+ @Override
+ public int countTestCases() {
+ return mWrappedTestSuite.countTestCases();
+ }
+
+ @Override
+ public String getName() {
+ return mWrappedTestSuite.getName();
+ }
+
+ @Override
+ public void runTest(Test test, TestResult testResult) {
+ mWrappedTestSuite.runTest(test, testResult);
+ }
+
+ @Override
+ public void setName(String name) {
+ mWrappedTestSuite.setName(name);
+ }
+
+ @Override
+ public Test testAt(int index) {
+ return mWrappedTestSuite.testAt(index);
+ }
+
+ @Override
+ public int testCount() {
+ return mWrappedTestSuite.testCount();
+ }
+
+ @Override
+ public Enumeration<Test> tests() {
+ return mWrappedTestSuite.tests();
+ }
+
+ @Override
+ public String toString() {
+ return mWrappedTestSuite.toString();
+ }
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/reporting/SensorTestDetails.java b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/reporting/SensorTestDetails.java
index 9a9b1cb..6ca4e30 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/sensors/reporting/SensorTestDetails.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/sensors/reporting/SensorTestDetails.java
@@ -64,7 +64,7 @@
public SensorTestDetails(Context context, String name, Result result) {
this(context,
name,
- result.getRunCount(),
+ result.getRunCount() - result.getFailureCount() - result.getIgnoreCount(),
result.getIgnoreCount(),
result.getFailureCount());
}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/telecom/BasicCallTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/telecom/BasicCallTestActivity.java
index 2924ac5..70d141c 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/telecom/BasicCallTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/telecom/BasicCallTestActivity.java
@@ -6,6 +6,7 @@
import android.os.SystemClock;
import android.telecom.Connection;
import android.telecom.ConnectionRequest;
+import android.telecom.DisconnectCause;
import android.telecom.PhoneAccountHandle;
import android.telecom.RemoteConnection;
import android.telecom.StatusHints;
@@ -100,9 +101,9 @@
}
@Override
- public void onDisconnected(RemoteConnection connection, int disconnectCauseCode,
- String disconnectCauseMessage) {
- setDisconnected(disconnectCauseCode, disconnectCauseMessage);
+ public void onDisconnected(
+ RemoteConnection connection, DisconnectCause disconnectCause) {
+ setDisconnected(disconnectCause);
}
@Override
@@ -111,7 +112,8 @@
}
@Override
- public void onAddressChanged(RemoteConnection connection, Uri address, int presentation) {
+ public void onAddressChanged(
+ RemoteConnection connection, Uri address, int presentation) {
setAddress(address, presentation);
}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/telecom/FailedCallTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/telecom/FailedCallTestActivity.java
index a7ba7b0..74a8637 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/telecom/FailedCallTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/telecom/FailedCallTestActivity.java
@@ -19,8 +19,8 @@
import android.os.SystemClock;
import android.telecom.Connection;
import android.telecom.ConnectionRequest;
+import android.telecom.DisconnectCause;
import android.telecom.PhoneAccountHandle;
-import android.telephony.DisconnectCause;
import com.android.cts.verifier.R;
@@ -79,8 +79,8 @@
PhoneAccountHandle connectionManagerPhoneAccount,
ConnectionRequest request) {
sLock.release();
- return Connection.createFailedConnection(DisconnectCause.BUSY,
- "Test; no need to continue");
+ return Connection.createFailedConnection(
+ new DisconnectCause(DisconnectCause.BUSY, "Test; no need to continue"));
}
}
}
diff --git a/hostsidetests/devicepolicy/Android.mk b/hostsidetests/devicepolicy/Android.mk
new file mode 100644
index 0000000..1f51494
--- /dev/null
+++ b/hostsidetests/devicepolicy/Android.mk
@@ -0,0 +1,32 @@
+# Copyright (C) 2014 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := CtsDevicePolicyManagerTestCases
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_JAVA_LIBRARIES := junit ddmlib-prebuilt tradefed-prebuilt tools-common-prebuilt cts-tradefed
+
+LOCAL_CTS_TEST_PACKAGE := android.adminhostside
+
+include $(BUILD_CTS_HOST_JAVA_LIBRARY)
+
+# Build the test APKs using their own makefiles
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/hostsidetests/devicepolicy/app/Android.mk b/hostsidetests/devicepolicy/app/Android.mk
new file mode 100644
index 0000000..a22ef3f
--- /dev/null
+++ b/hostsidetests/devicepolicy/app/Android.mk
@@ -0,0 +1,20 @@
+# Copyright (C) 2014 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+# Build the test APKs using their own makefiles
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/hostsidetests/devicepolicy/app/ProfileOwner/Android.mk b/hostsidetests/devicepolicy/app/ProfileOwner/Android.mk
new file mode 100644
index 0000000..a845163
--- /dev/null
+++ b/hostsidetests/devicepolicy/app/ProfileOwner/Android.mk
@@ -0,0 +1,31 @@
+# Copyright (C) 2014 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_PACKAGE_NAME := CtsProfileOwnerApp
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_JAVA_LIBRARIES := android.test.runner
+
+LOCAL_SDK_VERSION := current
+
+include $(BUILD_CTS_PACKAGE)
diff --git a/hostsidetests/devicepolicy/app/ProfileOwner/AndroidManifest.xml b/hostsidetests/devicepolicy/app/ProfileOwner/AndroidManifest.xml
new file mode 100644
index 0000000..1aaf99f
--- /dev/null
+++ b/hostsidetests/devicepolicy/app/ProfileOwner/AndroidManifest.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.cts.profileowner">
+
+ <uses-sdk android:minSdkVersion="20"/>
+
+ <application>
+ <uses-library android:name="android.test.runner" />
+ <receiver
+ android:name="com.android.cts.profileowner.BaseProfileOwnerTest$BasicAdminReceiver"
+ android:permission="android.permission.BIND_DEVICE_ADMIN">
+ <meta-data android:name="android.app.device_admin"
+ android:resource="@xml/device_admin" />
+ <intent-filter>
+ <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
+ </intent-filter>
+ </receiver>
+ </application>
+
+ <instrumentation android:name="android.test.InstrumentationTestRunner"
+ android:targetPackage="com.android.cts.profileowner"
+ android:label="Profile Owner CTS Tests"/>
+</manifest>
diff --git a/hostsidetests/devicepolicy/app/ProfileOwner/res/values/strings.xml b/hostsidetests/devicepolicy/app/ProfileOwner/res/values/strings.xml
new file mode 100644
index 0000000..640b8b5
--- /dev/null
+++ b/hostsidetests/devicepolicy/app/ProfileOwner/res/values/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Label for this package -->
+ <string name="label">Android CTS - Profile Owner</string>
+</resources>
\ No newline at end of file
diff --git a/hostsidetests/devicepolicy/app/ProfileOwner/res/xml/device_admin.xml b/hostsidetests/devicepolicy/app/ProfileOwner/res/xml/device_admin.xml
new file mode 100644
index 0000000..8f39ed0
--- /dev/null
+++ b/hostsidetests/devicepolicy/app/ProfileOwner/res/xml/device_admin.xml
@@ -0,0 +1,19 @@
+<!-- Copyright (C) 2014 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.
+-->
+<device-admin xmlns:android="http://schemas.android.com/apk/res/android" android:visible="false">
+ <uses-policies>
+ <wipe-data />
+ </uses-policies>
+</device-admin>
diff --git a/hostsidetests/devicepolicy/app/ProfileOwner/src/com/android/cts/profileowner/BaseProfileOwnerTest.java b/hostsidetests/devicepolicy/app/ProfileOwner/src/com/android/cts/profileowner/BaseProfileOwnerTest.java
new file mode 100644
index 0000000..e7ccc74
--- /dev/null
+++ b/hostsidetests/devicepolicy/app/ProfileOwner/src/com/android/cts/profileowner/BaseProfileOwnerTest.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2014 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.cts.profileowner;
+
+import android.app.admin.DeviceAdminReceiver;
+import android.app.admin.DevicePolicyManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.test.AndroidTestCase;
+
+/**
+ * Base class for profile-owner based tests.
+ *
+ * This class handles making sure that the test is the profile owner and that it has an active admin
+ * registered, so that all tests may assume these are done.
+ */
+public class BaseProfileOwnerTest extends AndroidTestCase {
+
+ public static class BasicAdminReceiver extends DeviceAdminReceiver {
+ }
+
+ static final ComponentName ADMIN_RECEIVER_COMPONENT = new ComponentName(
+ BasicAdminReceiver.class.getPackage().getName(), BasicAdminReceiver.class.getName());
+
+ protected DevicePolicyManager mDevicePolicyManager;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ mDevicePolicyManager = (DevicePolicyManager)
+ mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
+ assertNotNull(mDevicePolicyManager);
+ // TODO: Only check this if we are running as the profile user. Otherwise, maybe check
+ // that there is a profile and that the below holds for it? If we don't want to do these
+ // checks, we could get rid for this class altogether.
+ assertTrue(mDevicePolicyManager.isAdminActive(ADMIN_RECEIVER_COMPONENT));
+ assertTrue(mDevicePolicyManager.isProfileOwnerApp(
+ ADMIN_RECEIVER_COMPONENT.getPackageName()));
+ }
+}
diff --git a/hostsidetests/devicepolicy/app/ProfileOwner/src/com/android/cts/profileowner/ProfileOwnerSetupTest.java b/hostsidetests/devicepolicy/app/ProfileOwner/src/com/android/cts/profileowner/ProfileOwnerSetupTest.java
new file mode 100644
index 0000000..6fc0eb9
--- /dev/null
+++ b/hostsidetests/devicepolicy/app/ProfileOwner/src/com/android/cts/profileowner/ProfileOwnerSetupTest.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2014 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.cts.profileowner;
+
+
+public class ProfileOwnerSetupTest extends BaseProfileOwnerTest {
+
+ // This test verifies that the setUp assertions on the base class are working to verify
+ // we are the profile owner and have a valid active admin.
+ public void testProfileOwnerSetup() {
+ // Empty test. We just want the assertions from super.setUp() to be executed.
+ }
+
+}
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/ProfileOwnerTest.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/ProfileOwnerTest.java
new file mode 100644
index 0000000..e2f2f4e
--- /dev/null
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/ProfileOwnerTest.java
@@ -0,0 +1,227 @@
+/*
+ * Copyright (C) 2014 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.cts.devicepolicy;
+
+import com.android.cts.tradefed.build.CtsBuildHelper;
+import com.android.ddmlib.Log.LogLevel;
+import com.android.ddmlib.testrunner.InstrumentationResultParser;
+import com.android.ddmlib.testrunner.RemoteAndroidTestRunner;
+import com.android.ddmlib.testrunner.TestIdentifier;
+import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.device.DeviceNotAvailableException;
+import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.log.LogUtil.CLog;
+import com.android.tradefed.result.CollectingTestListener;
+import com.android.tradefed.result.TestResult;
+import com.android.tradefed.result.TestResult.TestStatus;
+import com.android.tradefed.result.TestRunResult;
+import com.android.tradefed.testtype.DeviceTestCase;
+import com.android.tradefed.testtype.IBuildReceiver;
+
+import java.io.FileNotFoundException;
+import java.util.HashSet;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * Set of tests for Profile Owner use cases.
+ */
+public class ProfileOwnerTest extends DeviceTestCase implements IBuildReceiver {
+
+ private static final String RUNNER = "android.test.InstrumentationTestRunner";
+
+ private static final String PROFILE_OWNER_PKG = "com.android.cts.profileowner";
+ private static final String PROFILE_OWNER_APK = "CtsProfileOwnerApp.apk";
+
+ private static final String ADMIN_RECEIVER_TEST_CLASS =
+ PROFILE_OWNER_PKG + ".BaseProfileOwnerTest$BasicAdminReceiver";
+
+ private static final String[] REQUIRED_DEVICE_FEATURES = new String[] {
+ "android.software.managed_users",
+ "android.software.device_admin" };
+
+ private CtsBuildHelper mCtsBuild;
+ private int mUserId;
+ private boolean mHasFeature;
+
+ @Override
+ public void setBuild(IBuildInfo buildInfo) {
+ mCtsBuild = CtsBuildHelper.createBuildHelper(buildInfo);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ assertNotNull(mCtsBuild); // ensure build has been set before test is run.
+ mHasFeature = hasDeviceFeatures(REQUIRED_DEVICE_FEATURES);
+
+ if (mHasFeature) {
+ mUserId = createUser();
+ installApp(PROFILE_OWNER_APK);
+ setProfileOwner(PROFILE_OWNER_PKG + "/" + ADMIN_RECEIVER_TEST_CLASS);
+ }
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ if (mHasFeature) {
+ // Remove the user that we created on setUp(), and the app that we installed.
+ String removeUserCommand = "pm remove-user " + mUserId;
+ CLog.logAndDisplay(LogLevel.INFO, "Output for command " + removeUserCommand + ": "
+ + getDevice().executeShellCommand(removeUserCommand));
+ getDevice().uninstallPackage(PROFILE_OWNER_PKG);
+ }
+
+ super.tearDown();
+ }
+
+ public void testProfileOwner() throws Exception {
+ if (!mHasFeature) {
+ return;
+ }
+ // Runs all tests classes from the package, as the profile user.
+ assertTrue(runDeviceTestsAsUser(PROFILE_OWNER_PKG, null /*testClassName*/, mUserId));
+ }
+
+ private boolean hasDeviceFeatures(String[] requiredFeatures)
+ throws DeviceNotAvailableException {
+ // TODO: Move this logic to ITestDevice.
+ String command = "pm list features";
+ String commandOutput = getDevice().executeShellCommand(command);
+
+ // Extract the id of the new user.
+ HashSet<String> availableFeatures = new HashSet<String>();
+ for (String feature: commandOutput.split("\\s+")) {
+ // Each line in the output of the command has the format "feature:{FEATURE_VALUE}".
+ String[] tokens = feature.split(":");
+ assertTrue(tokens.length > 1);
+ assertEquals("feature", tokens[0]);
+ availableFeatures.add(tokens[1]);
+ }
+
+ for (String requiredFeature : requiredFeatures) {
+ if(!availableFeatures.contains(requiredFeature)) {
+ CLog.logAndDisplay(LogLevel.INFO, "Device doesn't have required feature "
+ + requiredFeature + ". Tests won't run.");
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private void installApp(String fileName)
+ throws FileNotFoundException, DeviceNotAvailableException {
+ String installResult = getDevice().installPackage(mCtsBuild.getTestApp(fileName), true);
+ assertNull(String.format("Failed to install %s, Reason: %s", fileName, installResult),
+ installResult);
+ }
+
+ private int createUser() throws DeviceNotAvailableException {
+ String command =
+ "pm create-user --profileOf 0 --managed TestProfile_" + System.currentTimeMillis();
+ String commandOutput = getDevice().executeShellCommand(command);
+ CLog.logAndDisplay(LogLevel.INFO, "Output for command " + command + ": " + commandOutput);
+
+ // Extract the id of the new user.
+ String[] tokens = commandOutput.split("\\s+");
+ assertTrue(tokens.length > 0);
+ assertEquals("Success:", tokens[0]);
+ return Integer.parseInt(tokens[tokens.length-1]);
+ }
+
+ private void setProfileOwner(String componentName) throws DeviceNotAvailableException {
+ String command = "dpm set-profile-owner '" + componentName + "' " + mUserId;
+ String commandOutput = getDevice().executeShellCommand(command);
+ CLog.logAndDisplay(LogLevel.INFO, "Output for command " + command + ": " + commandOutput);
+ assertTrue(commandOutput.startsWith("Success:"));
+ }
+
+ /** Returns true if the specified tests passed. Tests are run as user owner. */
+ private boolean runDeviceTests(String pkgName, @Nullable String testClassName)
+ throws DeviceNotAvailableException {
+ return runDeviceTests(pkgName, testClassName, null /*testMethodName*/, null /*userId*/);
+ }
+
+ /** Returns true if the specified tests passed. Tests are run as given user. */
+ private boolean runDeviceTestsAsUser(String pkgName, @Nullable String testClassName, int userId)
+ throws DeviceNotAvailableException {
+ return runDeviceTests(pkgName, testClassName, null /*testMethodName*/, userId);
+ }
+
+ private boolean runDeviceTests(String pkgName, @Nullable String testClassName,
+ @Nullable String testMethodName, @Nullable Integer userId)
+ throws DeviceNotAvailableException {
+ TestRunResult runResult = (userId == null)
+ ? doRunTests(pkgName, testClassName, testMethodName)
+ : doRunTestsAsUser(pkgName, testClassName, testMethodName, userId);
+ printTestResult(runResult);
+ return !runResult.hasFailedTests() && runResult.getNumPassedTests() > 0;
+ }
+
+ /** Helper method to run tests and return the listener that collected the results. */
+ private TestRunResult doRunTests(
+ String pkgName, @Nullable String testClassName, @Nullable String testMethodName)
+ throws DeviceNotAvailableException {
+ RemoteAndroidTestRunner testRunner = new RemoteAndroidTestRunner(
+ pkgName, RUNNER, getDevice().getIDevice());
+ if (testClassName != null && testMethodName != null) {
+ testRunner.setMethodName(testClassName, testMethodName);
+ } else if (testClassName != null) {
+ testRunner.setClassName(testClassName);
+ }
+
+ CollectingTestListener listener = new CollectingTestListener();
+ assertTrue(getDevice().runInstrumentationTests(testRunner, listener));
+ return listener.getCurrentRunResults();
+ }
+
+ private TestRunResult doRunTestsAsUser(String pkgName, @Nullable String testClassName,
+ @Nullable String testMethodName, int userId)
+ throws DeviceNotAvailableException {
+ // TODO: move this to RemoteAndroidTestRunner once it supports users. Should be straight
+ // forward to add a RemoteAndroidTestRunner.setUser(userId) method. Then we can merge both
+ // doRunTests* methods.
+ StringBuilder testsToRun = new StringBuilder();
+ if (testClassName != null) {
+ testsToRun.append("-e class " + testClassName);
+ if (testMethodName != null) {
+ testsToRun.append("#" + testMethodName);
+ }
+ }
+ String command = "am instrument --user " + userId + " -w -r " + testsToRun + " "
+ + pkgName + "/" + RUNNER;
+ CLog.i("Running " + command);
+
+ CollectingTestListener listener = new CollectingTestListener();
+ InstrumentationResultParser parser = new InstrumentationResultParser(pkgName, listener);
+ getDevice().executeShellCommand(command, parser);
+ return listener.getCurrentRunResults();
+ }
+
+ private void printTestResult(TestRunResult runResult) {
+ for (Map.Entry<TestIdentifier, TestResult> testEntry :
+ runResult.getTestResults().entrySet()) {
+ TestResult testResult = testEntry.getValue();
+ CLog.logAndDisplay(LogLevel.INFO,
+ "Test " + testEntry.getKey() + ": " + testResult.getStatus());
+ if (testResult.getStatus() != TestStatus.PASSED) {
+ CLog.logAndDisplay(LogLevel.WARN, testResult.getStackTrace());
+ }
+ }
+ }
+}
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 645eb3b..9190da8 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -858,16 +858,6 @@
</intent-filter>
</receiver>
- <!-- Used for PackageManager test, don't delete this MockContentProvider provider -->
- <provider android:name="android.content.cts.MockContentProvider" android:authorities="ctstest"
- android:multiprocess="false" />
- <provider android:name="android.content.cts.DummyProvider"
- android:authorities="android.content.cts.dummyprovider"
- android:multiprocess="true" />
- <provider android:name="android.content.cts.MockRemoteContentProvider"
- android:authorities="remotectstest"
- android:process=":remoteprovider" android:multiprocess="false" />
-
<activity android:name="android.app.cts.ChildTabActivity" android:label="ChildTabActivity" />
<activity android:name="android.app.cts.LauncherActivityStub"
diff --git a/tests/expectations/knownfailures.txt b/tests/expectations/knownfailures.txt
index 131b264..3802c73 100644
--- a/tests/expectations/knownfailures.txt
+++ b/tests/expectations/knownfailures.txt
@@ -60,6 +60,25 @@
names: [
"android.hardware.camera2.cts.RobustnessTest#testMandatoryOutputCombinations"
],
- bug: 16899526
+ bug: 17511208
+},
+{
+ description: "these tests require a good test scene, so they fail if run in random conditions",
+ names: [
+ "android.hardware.camera2.cts.AllocationTest#testBlackWhite",
+ "android.hardware.camera2.cts.AllocationTest#testParamSensitivity"
+ ],
+ bug: 17530117
+},
+{
+ description: "these tests locks the screen with an emtpy password or swipe-to-unlock, blocking subsequent test to dismiss keyguard",
+ names: [
+ "android.admin.cts.DevicePolicyManagerTest#testPasswordQuality_something",
+ "android.admin.cts.DevicePolicyManagerTest#testPasswordQuality_numeric",
+ "android.admin.cts.DevicePolicyManagerTest#testPasswordQuality_alphabetic",
+ "android.admin.cts.DevicePolicyManagerTest#testPasswordQuality_alphanumeric",
+ "android.admin.cts.DevicePolicyManagerTest#testGetMaximumFailedPasswordsForWipe"
+ ],
+ bug: 17496766
}
]
diff --git a/tests/res/layout/autocompletetextview_layout.xml b/tests/res/layout/autocompletetextview_layout.xml
index be1d284..c2404d5 100644
--- a/tests/res/layout/autocompletetextview_layout.xml
+++ b/tests/res/layout/autocompletetextview_layout.xml
@@ -28,5 +28,6 @@
android:completionThreshold="1"
android:completionHint="@string/tabs_1"
android:layout_width="match_parent"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:inputType="none"/>
</LinearLayout>
diff --git a/tests/res/layout/popupwindow.xml b/tests/res/layout/popupwindow.xml
index e6b0aed..2508115 100644
--- a/tests/res/layout/popupwindow.xml
+++ b/tests/res/layout/popupwindow.xml
@@ -16,17 +16,16 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:orientation="vertical">
<TextView android:id="@+id/anchor_upper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="@string/text_view_hint"
- android:layout_weight="1"/>
+ android:text="@string/text_view_hint" />
<LinearLayout android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ android:layout_height="0dp"
android:layout_weight="1">
<TextView android:id="@+id/anchor_middle_left"
@@ -46,7 +45,6 @@
<TextView android:id="@+id/anchor_lower"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="@string/text_view_hint"
- android:layout_weight="1"/>
+ android:text="@string/text_view_hint" />
</LinearLayout>
diff --git a/tests/res/layout/textview_layout.xml b/tests/res/layout/textview_layout.xml
index 108e3f0..d069df2 100644
--- a/tests/res/layout/textview_layout.xml
+++ b/tests/res/layout/textview_layout.xml
@@ -36,6 +36,7 @@
android:typeface="normal"
android:textSize="20px"
android:textStyle="normal"
+ android:textAppearance="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
diff --git a/tests/tests/app/AndroidManifest.xml b/tests/tests/app/AndroidManifest.xml
index 134df64..a558564 100644
--- a/tests/tests/app/AndroidManifest.xml
+++ b/tests/tests/app/AndroidManifest.xml
@@ -21,6 +21,14 @@
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<application>
<uses-library android:name="android.test.runner" />
+
+ <service android:name="android.speech.tts.cts.StubTextToSpeechService">
+ <intent-filter>
+ <action android:name="android.intent.action.TTS_SERVICE" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </service>
+
</application>
<instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
diff --git a/tests/tests/content/Android.mk b/tests/tests/content/Android.mk
index 6f883b6..2c185d9 100644
--- a/tests/tests/content/Android.mk
+++ b/tests/tests/content/Android.mk
@@ -23,12 +23,15 @@
LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+LOCAL_STATIC_JAVA_LIBRARIES := ctsdeviceutil ctstestrunner
+
+# Resource unit tests use a private locale and some densities
+LOCAL_AAPT_FLAGS = -c xx_YY -c cs -c small -c normal -c large -c xlarge \
+ -c 320dpi -c 240dpi -c 160dpi -c 32dpi \
+ -c kok,kok_IN,kok_419,kok_419_VARIANT,kok_Knda_419,kok_Knda_419_VARIANT,kok_VARIANT,kok_Knda,tgl,tgl_PH
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := CtsContentTestCases
-LOCAL_INSTRUMENTATION_FOR := CtsTestStubs
-
include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/content/AndroidManifest.xml b/tests/tests/content/AndroidManifest.xml
index 8d57e49..b3de29f 100644
--- a/tests/tests/content/AndroidManifest.xml
+++ b/tests/tests/content/AndroidManifest.xml
@@ -18,9 +18,53 @@
package="com.android.cts.content">
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
+ <!-- content sync tests -->
+ <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
+ <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
+ <uses-permission android:name="android.permission.GET_ACCOUNTS" />
+ <uses-permission android:name="android.permission.USE_CREDENTIALS" />
+ <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
+ <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
+ <uses-permission android:name="android.permission.READ_SYNC_STATS" />
+ <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+ <uses-permission android:name="android.permission.SET_WALLPAPER" />
+ <uses-permission android:name="android.permission.BROADCAST_STICKY" />
+ <uses-permission android:name="android.content.cts.permission.TEST_GRANTED" />
- <application>
- <activity android:name="android.app.cts.MockActivity">
+ <!-- Used for PackageManager test, don't delete this INTERNET permission -->
+ <uses-permission android:name="android.permission.INTERNET" />
+
+ <!-- Used for PackageManager test, don't delete this permission-tree -->
+ <permission-tree android:name="com.android.cts.content.permission.TEST_DYNAMIC"
+ android:label="Test Tree"/>
+
+ <!-- Used for PackageManager test, don't delete this permission-group -->
+ <permission-group android:name="android.permission-group.COST_MONEY"/>
+ <!-- Used for PackageManager test, don't delete! -->
+ <uses-configuration/>
+ <uses-feature android:name="android.hardware.camera" />
+ <uses-feature android:glEsVersion="0x00020000" />
+ <feature-group/>
+ <feature-group>
+ <uses-feature android:glEsVersion="0x00030000" />
+ <uses-feature android:name="android.hardware.location" />
+ </feature-group>
+ <feature-group>
+ <uses-feature android:glEsVersion="0x00010001" />
+ <uses-feature android:name="android.hardware.camera" />
+ </feature-group>
+
+ <application android:label="Android TestCase"
+ android:icon="@drawable/size_48x48"
+ android:maxRecents="1"
+ android:multiArch="true"
+ android:name="android.content.cts.MockApplication"
+ android:supportsRtl="true">
+ <activity android:name="android.content.cts.MockActivity">
+ <meta-data android:name="android.app.alias"
+ android:resource="@xml/alias" />
+ <meta-data android:name="android.app.intent.filter"
+ android:resource="@xml/intentfilter" />
<intent-filter>
<action android:name="com.android.cts.content.action.TEST_ACTION" />
<category android:name="android.intent.category.DEFAULT" />
@@ -28,8 +72,8 @@
</intent-filter>
</activity>
- <activity-alias android:name="android.app.cts.MockActivity2"
- android:targetActivity="android.app.cts.MockActivity">
+ <activity-alias android:name="android.content.cts.MockActivity2"
+ android:targetActivity="android.content.cts.MockActivity">
<intent-filter>
<action android:name="com.android.cts.content.action.TEST_ACTION" />
<category android:name="android.intent.category.DEFAULT" />
@@ -37,13 +81,114 @@
</activity-alias>
<uses-library android:name="android.test.runner" />
+
+ <service android:name="android.content.cts.MockContextWrapperService" />
+ <activity android:name=".content.ContextWrapperCtsActivity"
+ android:label="ContextWrapperCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ </intent-filter>
+ </activity>
+
+ <receiver android:name="android.content.cts.MockReceiverFirst">
+ <intent-filter android:priority="3">
+ <action android:name="android.content.cts.BroadcastReceiverTest.BROADCAST_TESTABORT" />
+ </intent-filter>
+ </receiver>
+ <receiver android:name="android.content.cts.MockReceiverAbort">
+ <intent-filter android:priority="2">
+ <action android:name="android.content.cts.BroadcastReceiverTest.BROADCAST_TESTABORT" />
+ </intent-filter>
+ </receiver>
+ <receiver android:name="android.content.cts.MockReceiver">
+ <intent-filter android:priority="1">
+ <action android:name="android.content.cts.BroadcastReceiverTest.BROADCAST_MOCKTEST" />
+ <action android:name="android.content.cts.BroadcastReceiverTest.BROADCAST_TESTABORT" />
+ <action android:name="android.content.cts.ContextWrapperTest.BROADCAST_TESTORDER" />
+ </intent-filter>
+ </receiver>
+
+ <activity android:name="android.content.cts.AvailableIntentsActivity"
+ android:label="AvailableIntentsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <!--Test for PackageManager-->
+ <activity android:name="android.content.pm.cts.TestPmActivity"
+ android:icon="@drawable/start">
+ <intent-filter>
+ <action android:name="android.intent.action.PMTEST" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ <meta-data android:name="android.content.pm.cts.xmltest" android:resource="@xml/pm_test" />
+ </activity>
+ <activity android:name="android.content.pm.cts.TestPmCompare">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.INFO" />
+ </intent-filter>
+ </activity>
+ <!--Test for PackageManager-->
+ <service android:name="android.content.pm.cts.TestPmService">
+ <intent-filter>
+ <action android:name="android.content.pm.cts.activity.PMTEST_SERVICE" />
+ </intent-filter>
+ </service>
+ <!--Test for PackageManager-->
+ <receiver android:name="android.content.pm.cts.PmTestReceiver">
+ <intent-filter>
+ <action android:name="android.content.pm.cts.PackageManagerTest.PMTEST_RECEIVER" />
+ </intent-filter>
+ </receiver>
+
+ <!-- Used for PackageManager test, don't delete this MockContentProvider provider -->
+ <provider android:name="android.content.cts.MockContentProvider" android:authorities="ctstest"
+ android:multiprocess="false" />
+ <provider android:name="android.content.cts.DummyProvider"
+ android:authorities="android.content.cts.dummyprovider"
+ android:multiprocess="true" />
+ <provider android:name="android.content.cts.MockRemoteContentProvider"
+ android:authorities="remotectstest"
+ android:process=":remoteprovider" android:multiprocess="false" />
+
+ <service android:name="android.content.cts.MockService" />
+
+ <service android:name="android.content.cts.MockSyncAdapterService" android:exported="true">
+ <intent-filter>
+ <action android:name="android.content.SyncAdapter" />
+ </intent-filter>
+
+ <meta-data android:name="android.content.SyncAdapter"
+ android:resource="@xml/syncadapter" />
+ </service>
+
+ <service android:name="android.content.cts.MockAccountService" android:exported="true"
+ >
+ <intent-filter>
+ <action android:name="android.accounts.AccountAuthenticator" />
+ </intent-filter>
+
+ <meta-data android:name="android.accounts.AccountAuthenticator"
+ android:resource="@xml/authenticator" />
+ </service>
+
+ <activity android:name="android.content.cts.ClipboardManagerListenerActivity"/>
+
</application>
<instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.cts.stub"
+ android:targetPackage="com.android.cts.content"
android:label="CTS tests of android.content">
<meta-data android:name="listener"
android:value="com.android.cts.runner.CtsTestRunListener" />
</instrumentation>
+
+ <!--Test for PackageManager, please put this at the very beginning-->
+ <instrumentation android:name="android.content.pm.cts.TestPmInstrumentation"
+ android:targetPackage="android"
+ android:label="PackageManager Instrumentation Test" />
</manifest>
diff --git a/tests/assets/text.txt b/tests/tests/content/assets/text.txt
similarity index 100%
rename from tests/assets/text.txt
rename to tests/tests/content/assets/text.txt
diff --git a/tests/src/android/widget/cts/ViewFlipperStubActivity.java b/tests/tests/content/res/anim/anim_rotate.xml
similarity index 62%
copy from tests/src/android/widget/cts/ViewFlipperStubActivity.java
copy to tests/tests/content/res/anim/anim_rotate.xml
index 2ac331e..4fbadcf 100644
--- a/tests/src/android/widget/cts/ViewFlipperStubActivity.java
+++ b/tests/tests/content/res/anim/anim_rotate.xml
@@ -1,4 +1,5 @@
-/*
+<?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");
@@ -12,21 +13,13 @@
* 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 android.widget.cts;
-
-import com.android.cts.stub.R;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-public class ViewFlipperStubActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.viewflipper_layout);
- }
-}
-
+<rotate xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@android:anim/decelerate_interpolator"
+ android:fromDegrees="0"
+ android:toDegrees="-45"
+ android:toYScale="0.0"
+ android:pivotX="50%"
+ android:pivotY="50%"
+ android:duration="700" />
diff --git a/tests/tests/content/res/color/color1.xml b/tests/tests/content/res/color/color1.xml
new file mode 100755
index 0000000..87034fa
--- /dev/null
+++ b/tests/tests/content/res/color/color1.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_focused="true" android:color="@color/testcolor1"/>
+ <item android:color="@color/testcolor2"/>
+</selector>
diff --git a/tests/tests/content/res/drawable/ic_cts_minitab_selected.png b/tests/tests/content/res/drawable/ic_cts_minitab_selected.png
new file mode 100644
index 0000000..c730050
--- /dev/null
+++ b/tests/tests/content/res/drawable/ic_cts_minitab_selected.png
Binary files differ
diff --git a/tests/tests/content/res/drawable/ic_cts_selected.png b/tests/tests/content/res/drawable/ic_cts_selected.png
new file mode 100644
index 0000000..72a065c
--- /dev/null
+++ b/tests/tests/content/res/drawable/ic_cts_selected.png
Binary files differ
diff --git a/tests/tests/content/res/drawable/icon_black.jpg b/tests/tests/content/res/drawable/icon_black.jpg
new file mode 100644
index 0000000..4c9062a
--- /dev/null
+++ b/tests/tests/content/res/drawable/icon_black.jpg
Binary files differ
diff --git a/tests/tests/content/res/drawable/ninepatch_0.9.png b/tests/tests/content/res/drawable/ninepatch_0.9.png
new file mode 100644
index 0000000..24019d8
--- /dev/null
+++ b/tests/tests/content/res/drawable/ninepatch_0.9.png
Binary files differ
diff --git a/tests/tests/content/res/drawable/ninepatch_1.9.png b/tests/tests/content/res/drawable/ninepatch_1.9.png
new file mode 100644
index 0000000..c56b1db
--- /dev/null
+++ b/tests/tests/content/res/drawable/ninepatch_1.9.png
Binary files differ
diff --git a/tests/tests/content/res/drawable/pass.jpg b/tests/tests/content/res/drawable/pass.jpg
new file mode 100644
index 0000000..2f4b083
--- /dev/null
+++ b/tests/tests/content/res/drawable/pass.jpg
Binary files differ
diff --git a/tests/tests/content/res/drawable/scenery.jpg b/tests/tests/content/res/drawable/scenery.jpg
new file mode 100644
index 0000000..7a6145b
--- /dev/null
+++ b/tests/tests/content/res/drawable/scenery.jpg
Binary files differ
diff --git a/tests/tests/content/res/drawable/size_48x48.jpg b/tests/tests/content/res/drawable/size_48x48.jpg
new file mode 100644
index 0000000..5c2291e
--- /dev/null
+++ b/tests/tests/content/res/drawable/size_48x48.jpg
Binary files differ
diff --git a/tests/tests/content/res/drawable/start.jpg b/tests/tests/content/res/drawable/start.jpg
new file mode 100644
index 0000000..54e05e0
--- /dev/null
+++ b/tests/tests/content/res/drawable/start.jpg
Binary files differ
diff --git a/tests/tests/content/res/drawable/testcolor.xml b/tests/tests/content/res/drawable/testcolor.xml
new file mode 100644
index 0000000..d7b2718
--- /dev/null
+++ b/tests/tests/content/res/drawable/testcolor.xml
@@ -0,0 +1,22 @@
+<?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.
+ */
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:color="#FFA6C839"/>
+</selector>
+
diff --git a/tests/tests/content/res/drawable/testimage.jpg b/tests/tests/content/res/drawable/testimage.jpg
new file mode 100644
index 0000000..754df0c
--- /dev/null
+++ b/tests/tests/content/res/drawable/testimage.jpg
Binary files differ
diff --git a/tests/tests/content/res/layout/abslistview_layout.xml b/tests/tests/content/res/layout/abslistview_layout.xml
new file mode 100644
index 0000000..a090ce3
--- /dev/null
+++ b/tests/tests/content/res/layout/abslistview_layout.xml
@@ -0,0 +1,38 @@
+<?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.
+-->
+
+<ViewGroup_Layout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/abslistview_root"
+ android:layout_width="25px"
+ android:layout_height="25px" >
+
+ <GridView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+ <ListView>
+ <TextView
+ android:text="@string/table_layout_first"
+ android:padding="3dip" />
+ <TextView
+ android:text="@string/table_layout_second"
+ android:padding="3dip" />
+ <TextView
+ android:text="@string/table_layout_third"
+ android:padding="3dip" />
+ </ListView>
+</ViewGroup_Layout>
+
diff --git a/tests/tests/content/res/layout/available_intents_layout.xml b/tests/tests/content/res/layout/available_intents_layout.xml
new file mode 100644
index 0000000..5415657
--- /dev/null
+++ b/tests/tests/content/res/layout/available_intents_layout.xml
@@ -0,0 +1,30 @@
+<?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="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView android:id="@+id/text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingLeft="4dip"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:text="@string/text_view_hello"/>
+
+</LinearLayout>
diff --git a/tests/tests/content/res/layout/context_layout.xml b/tests/tests/content/res/layout/context_layout.xml
new file mode 100644
index 0000000..6ec6c76
--- /dev/null
+++ b/tests/tests/content/res/layout/context_layout.xml
@@ -0,0 +1,27 @@
+<?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.
+-->
+
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <DatePicker
+ android:id="@+id/contextdatepicker_dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true" />
+
+</RelativeLayout>
diff --git a/tests/tests/content/res/layout/local_sample.xml b/tests/tests/content/res/layout/local_sample.xml
new file mode 100644
index 0000000..6f02e78
--- /dev/null
+++ b/tests/tests/content/res/layout/local_sample.xml
@@ -0,0 +1,40 @@
+<?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:orientation="vertical"
+ android:padding="4dip"
+ android:gravity="center_horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="0"
+ android:paddingBottom="4dip"
+ android:text="@string/text"/>
+
+ <Button android:id="@+id/go"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/text">
+ <requestFocus />
+ </Button>
+
+</LinearLayout>
+
diff --git a/tests/tests/content/res/raw/testimage.jpg b/tests/tests/content/res/raw/testimage.jpg
new file mode 100644
index 0000000..d3dae03
--- /dev/null
+++ b/tests/tests/content/res/raw/testimage.jpg
Binary files differ
diff --git a/tests/tests/content/res/raw/testmp3.mp3 b/tests/tests/content/res/raw/testmp3.mp3
new file mode 100755
index 0000000..657faf7
--- /dev/null
+++ b/tests/tests/content/res/raw/testmp3.mp3
Binary files differ
diff --git a/tests/assets/text.txt b/tests/tests/content/res/raw/text.txt
similarity index 100%
copy from tests/assets/text.txt
copy to tests/tests/content/res/raw/text.txt
diff --git a/tests/res/values-12key-63x57/configVarying.xml b/tests/tests/content/res/values-12key-63x57/configVarying.xml
similarity index 100%
rename from tests/res/values-12key-63x57/configVarying.xml
rename to tests/tests/content/res/values-12key-63x57/configVarying.xml
diff --git a/tests/res/values-12key-dpad/configVarying.xml b/tests/tests/content/res/values-12key-dpad/configVarying.xml
similarity index 100%
rename from tests/res/values-12key-dpad/configVarying.xml
rename to tests/tests/content/res/values-12key-dpad/configVarying.xml
diff --git a/tests/res/values-12key/configVarying.xml b/tests/tests/content/res/values-12key/configVarying.xml
similarity index 100%
rename from tests/res/values-12key/configVarying.xml
rename to tests/tests/content/res/values-12key/configVarying.xml
diff --git a/tests/res/values-240dpi/configVarying.xml b/tests/tests/content/res/values-240dpi/configVarying.xml
similarity index 100%
rename from tests/res/values-240dpi/configVarying.xml
rename to tests/tests/content/res/values-240dpi/configVarying.xml
diff --git a/tests/res/values-32dpi-keysexposed/configVarying.xml b/tests/tests/content/res/values-32dpi-keysexposed/configVarying.xml
similarity index 100%
rename from tests/res/values-32dpi-keysexposed/configVarying.xml
rename to tests/tests/content/res/values-32dpi-keysexposed/configVarying.xml
diff --git a/tests/res/values-32dpi-stylus/configVarying.xml b/tests/tests/content/res/values-32dpi-stylus/configVarying.xml
similarity index 100%
rename from tests/res/values-32dpi-stylus/configVarying.xml
rename to tests/tests/content/res/values-32dpi-stylus/configVarying.xml
diff --git a/tests/res/values-32dpi/configVarying.xml b/tests/tests/content/res/values-32dpi/configVarying.xml
similarity index 100%
rename from tests/res/values-32dpi/configVarying.xml
rename to tests/tests/content/res/values-32dpi/configVarying.xml
diff --git a/tests/res/values-480x320/configVarying.xml b/tests/tests/content/res/values-480x320/configVarying.xml
similarity index 100%
rename from tests/res/values-480x320/configVarying.xml
rename to tests/tests/content/res/values-480x320/configVarying.xml
diff --git a/tests/res/values-640x400/configVarying.xml b/tests/tests/content/res/values-640x400/configVarying.xml
similarity index 100%
rename from tests/res/values-640x400/configVarying.xml
rename to tests/tests/content/res/values-640x400/configVarying.xml
diff --git a/tests/res/values-b+kok+419+VARIANT/configVarying.xml b/tests/tests/content/res/values-b+kok+419+VARIANT/configVarying.xml
similarity index 100%
rename from tests/res/values-b+kok+419+VARIANT/configVarying.xml
rename to tests/tests/content/res/values-b+kok+419+VARIANT/configVarying.xml
diff --git a/tests/res/values-b+kok+419/configVarying.xml b/tests/tests/content/res/values-b+kok+419/configVarying.xml
similarity index 100%
rename from tests/res/values-b+kok+419/configVarying.xml
rename to tests/tests/content/res/values-b+kok+419/configVarying.xml
diff --git a/tests/res/values-b+kok+IN/configVarying.xml b/tests/tests/content/res/values-b+kok+IN/configVarying.xml
similarity index 100%
rename from tests/res/values-b+kok+IN/configVarying.xml
rename to tests/tests/content/res/values-b+kok+IN/configVarying.xml
diff --git a/tests/res/values-b+kok+Knda+419+VARIANT/configVarying.xml b/tests/tests/content/res/values-b+kok+Knda+419+VARIANT/configVarying.xml
similarity index 100%
rename from tests/res/values-b+kok+Knda+419+VARIANT/configVarying.xml
rename to tests/tests/content/res/values-b+kok+Knda+419+VARIANT/configVarying.xml
diff --git a/tests/res/values-b+kok+Knda+419/configVarying.xml b/tests/tests/content/res/values-b+kok+Knda+419/configVarying.xml
similarity index 100%
rename from tests/res/values-b+kok+Knda+419/configVarying.xml
rename to tests/tests/content/res/values-b+kok+Knda+419/configVarying.xml
diff --git a/tests/res/values-b+kok+Knda/configVarying.xml b/tests/tests/content/res/values-b+kok+Knda/configVarying.xml
similarity index 100%
rename from tests/res/values-b+kok+Knda/configVarying.xml
rename to tests/tests/content/res/values-b+kok+Knda/configVarying.xml
diff --git a/tests/res/values-b+kok+VARIANT/configVarying.xml b/tests/tests/content/res/values-b+kok+VARIANT/configVarying.xml
similarity index 100%
rename from tests/res/values-b+kok+VARIANT/configVarying.xml
rename to tests/tests/content/res/values-b+kok+VARIANT/configVarying.xml
diff --git a/tests/res/values-b+kok/configVarying.xml b/tests/tests/content/res/values-b+kok/configVarying.xml
similarity index 100%
rename from tests/res/values-b+kok/configVarying.xml
rename to tests/tests/content/res/values-b+kok/configVarying.xml
diff --git a/tests/res/values-b+tgl+PH/configVarying.xml b/tests/tests/content/res/values-b+tgl+PH/configVarying.xml
similarity index 100%
rename from tests/res/values-b+tgl+PH/configVarying.xml
rename to tests/tests/content/res/values-b+tgl+PH/configVarying.xml
diff --git a/tests/res/values-b+tgl/configVarying.xml b/tests/tests/content/res/values-b+tgl/configVarying.xml
similarity index 100%
rename from tests/res/values-b+tgl/configVarying.xml
rename to tests/tests/content/res/values-b+tgl/configVarying.xml
diff --git a/tests/res/values-cs/strings.xml b/tests/tests/content/res/values-cs/strings.xml
similarity index 100%
rename from tests/res/values-cs/strings.xml
rename to tests/tests/content/res/values-cs/strings.xml
diff --git a/tests/res/values-dpad-63x57/configVarying.xml b/tests/tests/content/res/values-dpad-63x57/configVarying.xml
similarity index 100%
rename from tests/res/values-dpad-63x57/configVarying.xml
rename to tests/tests/content/res/values-dpad-63x57/configVarying.xml
diff --git a/tests/res/values-dpad/configVarying.xml b/tests/tests/content/res/values-dpad/configVarying.xml
similarity index 100%
rename from tests/res/values-dpad/configVarying.xml
rename to tests/tests/content/res/values-dpad/configVarying.xml
diff --git a/tests/res/values-fr-rFR/configVarying.xml b/tests/tests/content/res/values-fr-rFR/configVarying.xml
similarity index 100%
rename from tests/res/values-fr-rFR/configVarying.xml
rename to tests/tests/content/res/values-fr-rFR/configVarying.xml
diff --git a/tests/res/values-fr/configVarying.xml b/tests/tests/content/res/values-fr/configVarying.xml
similarity index 100%
rename from tests/res/values-fr/configVarying.xml
rename to tests/tests/content/res/values-fr/configVarying.xml
diff --git a/tests/res/values-h550dp/configVarying.xml b/tests/tests/content/res/values-h550dp/configVarying.xml
similarity index 100%
rename from tests/res/values-h550dp/configVarying.xml
rename to tests/tests/content/res/values-h550dp/configVarying.xml
diff --git a/tests/res/values-h670dp/configVarying.xml b/tests/tests/content/res/values-h670dp/configVarying.xml
similarity index 100%
rename from tests/res/values-h670dp/configVarying.xml
rename to tests/tests/content/res/values-h670dp/configVarying.xml
diff --git a/tests/res/values-keysexposed-12key/configVarying.xml b/tests/tests/content/res/values-keysexposed-12key/configVarying.xml
similarity index 100%
rename from tests/res/values-keysexposed-12key/configVarying.xml
rename to tests/tests/content/res/values-keysexposed-12key/configVarying.xml
diff --git a/tests/res/values-keysexposed-dpad/configVarying.xml b/tests/tests/content/res/values-keysexposed-dpad/configVarying.xml
similarity index 100%
rename from tests/res/values-keysexposed-dpad/configVarying.xml
rename to tests/tests/content/res/values-keysexposed-dpad/configVarying.xml
diff --git a/tests/res/values-keysexposed/configVarying.xml b/tests/tests/content/res/values-keysexposed/configVarying.xml
similarity index 100%
rename from tests/res/values-keysexposed/configVarying.xml
rename to tests/tests/content/res/values-keysexposed/configVarying.xml
diff --git a/tests/res/values-land/configVarying.xml b/tests/tests/content/res/values-land/configVarying.xml
similarity index 100%
rename from tests/res/values-land/configVarying.xml
rename to tests/tests/content/res/values-land/configVarying.xml
diff --git a/tests/res/values-land/dimens.xml b/tests/tests/content/res/values-land/dimens.xml
similarity index 100%
rename from tests/res/values-land/dimens.xml
rename to tests/tests/content/res/values-land/dimens.xml
diff --git a/tests/res/values-large/configVarying.xml b/tests/tests/content/res/values-large/configVarying.xml
similarity index 100%
rename from tests/res/values-large/configVarying.xml
rename to tests/tests/content/res/values-large/configVarying.xml
diff --git a/tests/res/values-mcc110-xx/configVarying.xml b/tests/tests/content/res/values-mcc110-xx/configVarying.xml
similarity index 100%
rename from tests/res/values-mcc110-xx/configVarying.xml
rename to tests/tests/content/res/values-mcc110-xx/configVarying.xml
diff --git a/tests/res/values-mcc111-mnc222/configVarying.xml b/tests/tests/content/res/values-mcc111-mnc222/configVarying.xml
similarity index 100%
rename from tests/res/values-mcc111-mnc222/configVarying.xml
rename to tests/tests/content/res/values-mcc111-mnc222/configVarying.xml
diff --git a/tests/res/values-mcc111-xx-rYY/configVarying.xml b/tests/tests/content/res/values-mcc111-xx-rYY/configVarying.xml
similarity index 100%
rename from tests/res/values-mcc111-xx-rYY/configVarying.xml
rename to tests/tests/content/res/values-mcc111-xx-rYY/configVarying.xml
diff --git a/tests/res/values-mcc111-xx/configVarying.xml b/tests/tests/content/res/values-mcc111-xx/configVarying.xml
similarity index 100%
rename from tests/res/values-mcc111-xx/configVarying.xml
rename to tests/tests/content/res/values-mcc111-xx/configVarying.xml
diff --git a/tests/res/values-mcc111/configVarying.xml b/tests/tests/content/res/values-mcc111/configVarying.xml
similarity index 100%
rename from tests/res/values-mcc111/configVarying.xml
rename to tests/tests/content/res/values-mcc111/configVarying.xml
diff --git a/tests/res/values-mcc112/configVarying.xml b/tests/tests/content/res/values-mcc112/configVarying.xml
similarity index 100%
rename from tests/res/values-mcc112/configVarying.xml
rename to tests/tests/content/res/values-mcc112/configVarying.xml
diff --git a/tests/res/values-mnc220-xx/configVarying.xml b/tests/tests/content/res/values-mnc220-xx/configVarying.xml
similarity index 100%
rename from tests/res/values-mnc220-xx/configVarying.xml
rename to tests/tests/content/res/values-mnc220-xx/configVarying.xml
diff --git a/tests/res/values-mnc222-32dpi/configVarying.xml b/tests/tests/content/res/values-mnc222-32dpi/configVarying.xml
similarity index 100%
rename from tests/res/values-mnc222-32dpi/configVarying.xml
rename to tests/tests/content/res/values-mnc222-32dpi/configVarying.xml
diff --git a/tests/res/values-mnc222-square/configVarying.xml b/tests/tests/content/res/values-mnc222-square/configVarying.xml
similarity index 100%
rename from tests/res/values-mnc222-square/configVarying.xml
rename to tests/tests/content/res/values-mnc222-square/configVarying.xml
diff --git a/tests/res/values-mnc222-xx/configVarying.xml b/tests/tests/content/res/values-mnc222-xx/configVarying.xml
similarity index 100%
rename from tests/res/values-mnc222-xx/configVarying.xml
rename to tests/tests/content/res/values-mnc222-xx/configVarying.xml
diff --git a/tests/res/values-mnc222/configVarying.xml b/tests/tests/content/res/values-mnc222/configVarying.xml
similarity index 100%
rename from tests/res/values-mnc222/configVarying.xml
rename to tests/tests/content/res/values-mnc222/configVarying.xml
diff --git a/tests/res/values-mnc223/configVarying.xml b/tests/tests/content/res/values-mnc223/configVarying.xml
similarity index 100%
rename from tests/res/values-mnc223/configVarying.xml
rename to tests/tests/content/res/values-mnc223/configVarying.xml
diff --git a/tests/res/values-nokeys/configVarying.xml b/tests/tests/content/res/values-nokeys/configVarying.xml
similarity index 100%
rename from tests/res/values-nokeys/configVarying.xml
rename to tests/tests/content/res/values-nokeys/configVarying.xml
diff --git a/tests/res/values-nonav/configVarying.xml b/tests/tests/content/res/values-nonav/configVarying.xml
similarity index 100%
rename from tests/res/values-nonav/configVarying.xml
rename to tests/tests/content/res/values-nonav/configVarying.xml
diff --git a/tests/res/values-normal/configVarying.xml b/tests/tests/content/res/values-normal/configVarying.xml
similarity index 100%
rename from tests/res/values-normal/configVarying.xml
rename to tests/tests/content/res/values-normal/configVarying.xml
diff --git a/tests/res/values-notouch/configVarying.xml b/tests/tests/content/res/values-notouch/configVarying.xml
similarity index 100%
rename from tests/res/values-notouch/configVarying.xml
rename to tests/tests/content/res/values-notouch/configVarying.xml
diff --git a/tests/res/values-small/configVarying.xml b/tests/tests/content/res/values-small/configVarying.xml
similarity index 100%
rename from tests/res/values-small/configVarying.xml
rename to tests/tests/content/res/values-small/configVarying.xml
diff --git a/tests/res/values-square-32dpi/configVarying.xml b/tests/tests/content/res/values-square-32dpi/configVarying.xml
similarity index 100%
rename from tests/res/values-square-32dpi/configVarying.xml
rename to tests/tests/content/res/values-square-32dpi/configVarying.xml
diff --git a/tests/res/values-square-stylus/configVarying.xml b/tests/tests/content/res/values-square-stylus/configVarying.xml
similarity index 100%
rename from tests/res/values-square-stylus/configVarying.xml
rename to tests/tests/content/res/values-square-stylus/configVarying.xml
diff --git a/tests/res/values-square/configVarying.xml b/tests/tests/content/res/values-square/configVarying.xml
similarity index 100%
rename from tests/res/values-square/configVarying.xml
rename to tests/tests/content/res/values-square/configVarying.xml
diff --git a/tests/res/values-stylus-12key/configVarying.xml b/tests/tests/content/res/values-stylus-12key/configVarying.xml
similarity index 100%
rename from tests/res/values-stylus-12key/configVarying.xml
rename to tests/tests/content/res/values-stylus-12key/configVarying.xml
diff --git a/tests/res/values-stylus-keysexposed/configVarying.xml b/tests/tests/content/res/values-stylus-keysexposed/configVarying.xml
similarity index 100%
rename from tests/res/values-stylus-keysexposed/configVarying.xml
rename to tests/tests/content/res/values-stylus-keysexposed/configVarying.xml
diff --git a/tests/res/values-stylus/configVarying.xml b/tests/tests/content/res/values-stylus/configVarying.xml
similarity index 100%
rename from tests/res/values-stylus/configVarying.xml
rename to tests/tests/content/res/values-stylus/configVarying.xml
diff --git a/tests/res/values-sw590dp-hdpi/configVarying.xml b/tests/tests/content/res/values-sw590dp-hdpi/configVarying.xml
similarity index 100%
rename from tests/res/values-sw590dp-hdpi/configVarying.xml
rename to tests/tests/content/res/values-sw590dp-hdpi/configVarying.xml
diff --git a/tests/res/values-sw590dp-mdpi/configVarying.xml b/tests/tests/content/res/values-sw590dp-mdpi/configVarying.xml
similarity index 100%
rename from tests/res/values-sw590dp-mdpi/configVarying.xml
rename to tests/tests/content/res/values-sw590dp-mdpi/configVarying.xml
diff --git a/tests/res/values-sw590dp-xhdpi/configVarying.xml b/tests/tests/content/res/values-sw590dp-xhdpi/configVarying.xml
similarity index 100%
rename from tests/res/values-sw590dp-xhdpi/configVarying.xml
rename to tests/tests/content/res/values-sw590dp-xhdpi/configVarying.xml
diff --git a/tests/res/values-sw590dp/configVarying.xml b/tests/tests/content/res/values-sw590dp/configVarying.xml
similarity index 100%
rename from tests/res/values-sw590dp/configVarying.xml
rename to tests/tests/content/res/values-sw590dp/configVarying.xml
diff --git a/tests/res/values-sw591dp-hdpi/configVarying.xml b/tests/tests/content/res/values-sw591dp-hdpi/configVarying.xml
similarity index 100%
rename from tests/res/values-sw591dp-hdpi/configVarying.xml
rename to tests/tests/content/res/values-sw591dp-hdpi/configVarying.xml
diff --git a/tests/res/values-sw591dp/configVarying.xml b/tests/tests/content/res/values-sw591dp/configVarying.xml
similarity index 100%
rename from tests/res/values-sw591dp/configVarying.xml
rename to tests/tests/content/res/values-sw591dp/configVarying.xml
diff --git a/tests/res/values-sw600dp-land/configVarying.xml b/tests/tests/content/res/values-sw600dp-land/configVarying.xml
similarity index 100%
rename from tests/res/values-sw600dp-land/configVarying.xml
rename to tests/tests/content/res/values-sw600dp-land/configVarying.xml
diff --git a/tests/res/values-sw600dp-land/dimens.xml b/tests/tests/content/res/values-sw600dp-land/dimens.xml
similarity index 100%
rename from tests/res/values-sw600dp-land/dimens.xml
rename to tests/tests/content/res/values-sw600dp-land/dimens.xml
diff --git a/tests/res/values-sw600dp/configVarying.xml b/tests/tests/content/res/values-sw600dp/configVarying.xml
similarity index 100%
rename from tests/res/values-sw600dp/configVarying.xml
rename to tests/tests/content/res/values-sw600dp/configVarying.xml
diff --git a/tests/res/values-sw600dp/dimens.xml b/tests/tests/content/res/values-sw600dp/dimens.xml
similarity index 100%
rename from tests/res/values-sw600dp/dimens.xml
rename to tests/tests/content/res/values-sw600dp/dimens.xml
diff --git a/tests/res/values-sw720dp/configVarying.xml b/tests/tests/content/res/values-sw720dp/configVarying.xml
similarity index 100%
rename from tests/res/values-sw720dp/configVarying.xml
rename to tests/tests/content/res/values-sw720dp/configVarying.xml
diff --git a/tests/res/values-tl-rPH/configVarying.xml b/tests/tests/content/res/values-tl-rPH/configVarying.xml
similarity index 100%
rename from tests/res/values-tl-rPH/configVarying.xml
rename to tests/tests/content/res/values-tl-rPH/configVarying.xml
diff --git a/tests/res/values-tl/configVarying.xml b/tests/tests/content/res/values-tl/configVarying.xml
similarity index 100%
rename from tests/res/values-tl/configVarying.xml
rename to tests/tests/content/res/values-tl/configVarying.xml
diff --git a/tests/res/values-v10/strings.xml b/tests/tests/content/res/values-v10/strings.xml
similarity index 100%
rename from tests/res/values-v10/strings.xml
rename to tests/tests/content/res/values-v10/strings.xml
diff --git a/tests/res/values-v11/strings.xml b/tests/tests/content/res/values-v11/strings.xml
similarity index 100%
rename from tests/res/values-v11/strings.xml
rename to tests/tests/content/res/values-v11/strings.xml
diff --git a/tests/res/values-v12/strings.xml b/tests/tests/content/res/values-v12/strings.xml
similarity index 100%
rename from tests/res/values-v12/strings.xml
rename to tests/tests/content/res/values-v12/strings.xml
diff --git a/tests/res/values-v13/strings.xml b/tests/tests/content/res/values-v13/strings.xml
similarity index 100%
rename from tests/res/values-v13/strings.xml
rename to tests/tests/content/res/values-v13/strings.xml
diff --git a/tests/res/values-v14/strings.xml b/tests/tests/content/res/values-v14/strings.xml
similarity index 100%
rename from tests/res/values-v14/strings.xml
rename to tests/tests/content/res/values-v14/strings.xml
diff --git a/tests/res/values-v15/strings.xml b/tests/tests/content/res/values-v15/strings.xml
similarity index 100%
rename from tests/res/values-v15/strings.xml
rename to tests/tests/content/res/values-v15/strings.xml
diff --git a/tests/res/values-v16/strings.xml b/tests/tests/content/res/values-v16/strings.xml
similarity index 100%
rename from tests/res/values-v16/strings.xml
rename to tests/tests/content/res/values-v16/strings.xml
diff --git a/tests/res/values-v17/strings.xml b/tests/tests/content/res/values-v17/strings.xml
similarity index 100%
rename from tests/res/values-v17/strings.xml
rename to tests/tests/content/res/values-v17/strings.xml
diff --git a/tests/res/values-v18/strings.xml b/tests/tests/content/res/values-v18/strings.xml
similarity index 100%
rename from tests/res/values-v18/strings.xml
rename to tests/tests/content/res/values-v18/strings.xml
diff --git a/tests/res/values-v19/strings.xml b/tests/tests/content/res/values-v19/strings.xml
similarity index 100%
rename from tests/res/values-v19/strings.xml
rename to tests/tests/content/res/values-v19/strings.xml
diff --git a/tests/res/values-v20/strings.xml b/tests/tests/content/res/values-v20/strings.xml
similarity index 100%
rename from tests/res/values-v20/strings.xml
rename to tests/tests/content/res/values-v20/strings.xml
diff --git a/tests/res/values-v21/strings.xml b/tests/tests/content/res/values-v21/strings.xml
similarity index 100%
rename from tests/res/values-v21/strings.xml
rename to tests/tests/content/res/values-v21/strings.xml
diff --git a/tests/res/values-v22/strings.xml b/tests/tests/content/res/values-v22/strings.xml
similarity index 100%
rename from tests/res/values-v22/strings.xml
rename to tests/tests/content/res/values-v22/strings.xml
diff --git a/tests/res/values-v3/strings.xml b/tests/tests/content/res/values-v3/strings.xml
similarity index 100%
rename from tests/res/values-v3/strings.xml
rename to tests/tests/content/res/values-v3/strings.xml
diff --git a/tests/res/values-v4/strings.xml b/tests/tests/content/res/values-v4/strings.xml
similarity index 100%
rename from tests/res/values-v4/strings.xml
rename to tests/tests/content/res/values-v4/strings.xml
diff --git a/tests/res/values-v5/strings.xml b/tests/tests/content/res/values-v5/strings.xml
similarity index 100%
rename from tests/res/values-v5/strings.xml
rename to tests/tests/content/res/values-v5/strings.xml
diff --git a/tests/res/values-v6/strings.xml b/tests/tests/content/res/values-v6/strings.xml
similarity index 100%
rename from tests/res/values-v6/strings.xml
rename to tests/tests/content/res/values-v6/strings.xml
diff --git a/tests/res/values-v7/strings.xml b/tests/tests/content/res/values-v7/strings.xml
similarity index 100%
rename from tests/res/values-v7/strings.xml
rename to tests/tests/content/res/values-v7/strings.xml
diff --git a/tests/res/values-v8/strings.xml b/tests/tests/content/res/values-v8/strings.xml
similarity index 100%
rename from tests/res/values-v8/strings.xml
rename to tests/tests/content/res/values-v8/strings.xml
diff --git a/tests/res/values-v9/strings.xml b/tests/tests/content/res/values-v9/strings.xml
similarity index 100%
rename from tests/res/values-v9/strings.xml
rename to tests/tests/content/res/values-v9/strings.xml
diff --git a/tests/res/values-w600dp-h550dp/configVarying.xml b/tests/tests/content/res/values-w600dp-h550dp/configVarying.xml
similarity index 100%
rename from tests/res/values-w600dp-h550dp/configVarying.xml
rename to tests/tests/content/res/values-w600dp-h550dp/configVarying.xml
diff --git a/tests/res/values-w600dp/configVarying.xml b/tests/tests/content/res/values-w600dp/configVarying.xml
similarity index 100%
rename from tests/res/values-w600dp/configVarying.xml
rename to tests/tests/content/res/values-w600dp/configVarying.xml
diff --git a/tests/res/values-w720dp-h670dp/configVarying.xml b/tests/tests/content/res/values-w720dp-h670dp/configVarying.xml
similarity index 100%
rename from tests/res/values-w720dp-h670dp/configVarying.xml
rename to tests/tests/content/res/values-w720dp-h670dp/configVarying.xml
diff --git a/tests/res/values-w720dp/configVarying.xml b/tests/tests/content/res/values-w720dp/configVarying.xml
similarity index 100%
rename from tests/res/values-w720dp/configVarying.xml
rename to tests/tests/content/res/values-w720dp/configVarying.xml
diff --git a/tests/res/values-wheel/configVarying.xml b/tests/tests/content/res/values-wheel/configVarying.xml
similarity index 100%
rename from tests/res/values-wheel/configVarying.xml
rename to tests/tests/content/res/values-wheel/configVarying.xml
diff --git a/tests/res/values-xlarge/configVarying.xml b/tests/tests/content/res/values-xlarge/configVarying.xml
similarity index 100%
rename from tests/res/values-xlarge/configVarying.xml
rename to tests/tests/content/res/values-xlarge/configVarying.xml
diff --git a/tests/res/values-xx-32dpi/configVarying.xml b/tests/tests/content/res/values-xx-32dpi/configVarying.xml
similarity index 100%
rename from tests/res/values-xx-32dpi/configVarying.xml
rename to tests/tests/content/res/values-xx-32dpi/configVarying.xml
diff --git a/tests/res/values-xx-rYY/configVarying.xml b/tests/tests/content/res/values-xx-rYY/configVarying.xml
similarity index 100%
rename from tests/res/values-xx-rYY/configVarying.xml
rename to tests/tests/content/res/values-xx-rYY/configVarying.xml
diff --git a/tests/res/values-xx-square/configVarying.xml b/tests/tests/content/res/values-xx-square/configVarying.xml
similarity index 100%
rename from tests/res/values-xx-square/configVarying.xml
rename to tests/tests/content/res/values-xx-square/configVarying.xml
diff --git a/tests/res/values-xx/configVarying.xml b/tests/tests/content/res/values-xx/configVarying.xml
similarity index 100%
rename from tests/res/values-xx/configVarying.xml
rename to tests/tests/content/res/values-xx/configVarying.xml
diff --git a/tests/tests/content/res/values/arrays.xml b/tests/tests/content/res/values/arrays.xml
new file mode 100644
index 0000000..71e0133
--- /dev/null
+++ b/tests/tests/content/res/values/arrays.xml
@@ -0,0 +1,57 @@
+<?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.
+ -->
+
+<resources>
+ <item type="integer" name="reference" format="integer">101</item>
+
+ <string-array name="strings">
+ <item>zero</item>
+ <item>1</item>
+ <item>@string/reference</item>
+ </string-array>
+
+ <integer-array name="integers">
+ <item>0</item>
+ <item>1</item>
+ <item>@integer/reference</item>
+ </integer-array>
+
+ <array name="difficultyLevel">
+ <item>Easy</item>
+ <item>Medium</item>
+ <item>Hard</item>
+ </array>
+
+ <string-array name="string">
+ <item>Test String 1</item>
+ <item>Test String 2</item>
+ <item>Test String 3</item>
+ </string-array>
+
+ <integer-array name="table_row_layout">
+ <item>1</item>
+ <item>2</item>
+ <item>3</item>
+ <item>4</item>
+ <item>5</item>
+ <item>6</item>
+ <item>7</item>
+ <item>8</item>
+ <item>9</item>
+ <item>10</item>
+ </integer-array>
+</resources>
diff --git a/tests/tests/content/res/values/attrs.xml b/tests/tests/content/res/values/attrs.xml
new file mode 100644
index 0000000..4c3d9db
--- /dev/null
+++ b/tests/tests/content/res/values/attrs.xml
@@ -0,0 +1,145 @@
+<?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.
+ -->
+
+<resources>
+ <declare-styleable name="Style1">
+ <attr name="Type1" format="integer">
+ <enum name="type" value="28" />
+ <enum name="data" value="0xff00ff00" />
+ <enum name="asset_cookie" value="0" />
+ <enum name="resource_id" value="0" />
+ <enum name="changing_config" value="0" />
+ </attr>
+ <attr name="Type2" format="integer">
+ <enum name="type" value="28" />
+ <enum name="data" value="0xff0000ff" />
+ <enum name="asset_cookie" value="0" />
+ <enum name="resource_id" value="0" />
+ <enum name="changing_config" value="0" />
+ </attr>
+ </declare-styleable>
+ <attr name="type1" format="boolean"/>
+ <attr name="type2" format="boolean"/>
+ <attr name="type3" format="color"/>
+ <attr name="type4" format="reference|color"/>
+ <attr name="type5" format="dimension"/>
+ <attr name="type6" format="dimension"/>
+ <attr name="type7" format="dimension"/>
+ <attr name="type8" format="reference"/>
+ <attr name="type9" format="float"/>
+ <attr name="type10" format="fraction"/>
+ <attr name="type11" format="integer"/>
+ <attr name="type12" format="integer"/>
+ <attr name="type13" format="reference|string"/>
+ <attr name="type14" format="string"/>
+ <attr name="type15" format="reference"/>
+ <attr name="type16" format="string"/>
+ <declare-styleable name="style1">
+ <attr name="type1"/>
+ <attr name="type2"/>
+ <attr name="type3"/>
+ <attr name="type4"/>
+ <attr name="type5"/>
+ <attr name="type6"/>
+ <attr name="type7"/>
+ <attr name="type8"/>
+ <attr name="type9"/>
+ <attr name="type10"/>
+ <attr name="type11"/>
+ <attr name="type12"/>
+ <attr name="type13"/>
+ <attr name="type14"/>
+ <attr name="type15"/>
+ <attr name="type16"/>
+ </declare-styleable>
+ <attr name="testEnum">
+ <enum name="val1" value="1" />
+ <enum name="val2" value="2" />
+ <enum name="val10" value="10" />
+ </attr>
+ <attr name="testFlags">
+ <flag name="bit1" value="0x1" />
+ <flag name="bit2" value="0x2" />
+ <flag name="bit31" value="0x40000000" />
+ </attr>
+ <attr name="testString" format="string" />
+ <declare-styleable name="EnumStyle">
+ <attr name="testEnum" />
+ </declare-styleable>
+ <declare-styleable name="FlagStyle">
+ <attr name="testFlags" />
+ </declare-styleable>
+ <declare-styleable name="TestConfig">
+ <attr name="testString" />
+ </declare-styleable>
+ <!-- Size of text. Recommended dimension type for text is "sp" for scaled-pixels (example: 15sp).
+ Supported values include the following:<p/>
+ <ul>
+ <li><b>px</b> Pixels</li>
+ <li><b>sp</b> Scaled pixels (scaled to relative pixel size on screen). See {@link android.util.DisplayMetrics} for more information.</li>
+ <li><b>pt</b> Points</li>
+ <li><b>dip</b> Device independent pixels. See {@link android.util.DisplayMetrics} for more information.</li>
+ </ul>
+ -->
+ <attr name="textSize" format="dimension" />
+ <attr name="typeface">
+ <enum name="normal" value="0" />
+ <enum name="sans" value="1" />
+ <enum name="serif" value="2" />
+ <enum name="monospace" value="3" />
+ </attr>
+ <!-- Default text typeface style. -->
+ <attr name="textStyle">
+ <flag name="normal" value="0" />
+ <flag name="bold" value="1" />
+ <flag name="italic" value="2" />
+ </attr>
+ <!-- Color of text (usually same as colorForeground). -->
+ <attr name="textColor" format="reference|color" />
+ <!-- Color of highlighted text. -->
+ <attr name="textColorHighlight" format="reference|color" />
+ <!-- Color of hint text (displayed when the field is empty). -->
+ <attr name="textColorHint" format="reference|color" />
+ <!-- Color of link text (URLs). -->
+ <attr name="textColorLink" format="reference|color" />
+ <declare-styleable name="TextAppearance">
+ <attr name="textColor"/>
+ <attr name="textSize"/>
+ <attr name="textStyle"/>
+ <attr name="typeface"/>
+ <attr name="textColorHighlight"/>
+ <attr name="textColorHint"/>
+ <attr name="textColorLink"/>
+ </declare-styleable>
+ <!-- Integer used to uniquely identify theme overrides. -->
+ <attr name="themeType" format="integer"/>
+ <!-- Theme reference used to override parent theme. -->
+ <attr name="themeOverrideAttr" format="reference"/>
+
+ <!-- Drawable theming attributes -->
+ <attr name="themeBoolean" />
+ <attr name="themeColor" />
+ <attr name="themeFloat" />
+ <attr name="themeInteger" />
+ <attr name="themeDimension" />
+ <attr name="themeDrawable" />
+ <attr name="themeBitmap" />
+ <attr name="themeNinePatch" />
+ <attr name="themeGravity" />
+ <attr name="themeTileMode" />
+ <attr name="themeAngle" />
+</resources>
diff --git a/tests/src/android/widget/cts/StubActivity.java b/tests/tests/content/res/values/bools.xml
old mode 100644
new mode 100755
similarity index 69%
copy from tests/src/android/widget/cts/StubActivity.java
copy to tests/tests/content/res/values/bools.xml
index fe4002c..f119cda
--- a/tests/src/android/widget/cts/StubActivity.java
+++ b/tests/tests/content/res/values/bools.xml
@@ -1,5 +1,6 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
+<?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.
@@ -12,15 +13,9 @@
* 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 android.widget.cts;
-
-import android.app.Activity;
-
-/**
- * Stub activity for helping test. It's an empty activity.
- */
-public class StubActivity extends Activity {
-
-}
+<resources>
+ <bool name="trueRes">true</bool>
+ <bool name="falseRes">false</bool>
+</resources>
diff --git a/tests/src/android/widget/cts/ProgressBarStubActivity.java b/tests/tests/content/res/values/colors.xml
similarity index 60%
copy from tests/src/android/widget/cts/ProgressBarStubActivity.java
copy to tests/tests/content/res/values/colors.xml
index 57cfa1a..f3cc325 100644
--- a/tests/src/android/widget/cts/ProgressBarStubActivity.java
+++ b/tests/tests/content/res/values/colors.xml
@@ -1,4 +1,5 @@
-/*
+<?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");
@@ -12,23 +13,14 @@
* 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 android.widget.cts;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-/**
- * An application for ProgressBar test
- *
- */
-public class ProgressBarStubActivity extends Activity {
- /**
- * Called with the activity is first created.
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
-}
+<resources>
+ <drawable name="red">#7f00</drawable>
+ <drawable name="blue">#770000ff</drawable>
+ <drawable name="black">#77ffffff</drawable>
+ <drawable name="yellow">#77ffff00</drawable>
+ <color name="testcolor1">#ff00ff00</color>
+ <color name="testcolor2">#ffff0000</color>
+ <color name="failColor">#ff0000ff</color>
+</resources>
diff --git a/tests/tests/content/res/values/configVarying.xml b/tests/tests/content/res/values/configVarying.xml
new file mode 100755
index 0000000..7b7d576
--- /dev/null
+++ b/tests/tests/content/res/values/configVarying.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+
+<resources>
+ <item type="configVarying" name="simple">simple default</item>
+ <bag type="configVarying" name="bag">
+ <item name="testString">bag default</item>
+ </bag>
+ <item type="configVarying" name="small">default</item>
+ <item type="configVarying" name="normal">default</item>
+ <item type="configVarying" name="large">default</item>
+ <item type="configVarying" name="xlarge">default</item>
+ <item type="configVarying" name="sw">default</item>
+ <item type="configVarying" name="w">default</item>
+ <item type="configVarying" name="h">default</item>
+ <item type="configVarying" name="wh">default</item>
+</resources>
diff --git a/tests/tests/content/res/values/dimens.xml b/tests/tests/content/res/values/dimens.xml
new file mode 100755
index 0000000..bae216f
--- /dev/null
+++ b/tests/tests/content/res/values/dimens.xml
@@ -0,0 +1,43 @@
+<?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.
+ -->
+
+<resources>
+ <item name="frac100perc" type="dimen" format="fraction">100%</item>
+ <item name="frac1perc" type="dimen" format="fraction">1%</item>
+ <item name="fracp1perc" type="dimen" format="fraction">.1%</item>
+ <item name="fracp01perc" type="dimen" format="fraction">.01%</item>
+ <item name="frac0perc" type="dimen" format="fraction">0%</item>
+ <item name="frac1p1perc" type="dimen" format="fraction">1.1%</item>
+ <item name="frac100p1perc" type="dimen" format="fraction">100.1%</item>
+ <item name="frac25510perc" type="dimen" format="fraction">25510%</item>
+ <item name="frac25610perc" type="dimen" format="fraction">25610%</item>
+ <item name="frac6553510perc" type="dimen" format="fraction">6553510%</item>
+ <item name="frac6553610perc" type="dimen" format="fraction">6553610%</item>
+
+ <item name="frac100pperc" type="dimen" format="fraction">100%p</item>
+ <item name="frac1pperc" type="dimen" format="fraction">1%p</item>
+ <item name="fracp1pperc" type="dimen" format="fraction">.1%p</item>
+ <item name="fracp01pperc" type="dimen" format="fraction">.01%p</item>
+ <item name="frac0pperc" type="dimen" format="fraction">0%p</item>
+ <item name="frac1p1pperc" type="dimen" format="fraction">1.1%p</item>
+ <item name="frac100p1pperc" type="dimen" format="fraction">100.1%p</item>
+ <item name="frac25510pperc" type="dimen" format="fraction">25510%p</item>
+ <item name="frac25610pperc" type="dimen" format="fraction">25610%p</item>
+ <item name="frac6553510pperc" type="dimen" format="fraction">6553510%p</item>
+ <item name="frac6553610pperc" type="dimen" format="fraction">6553610%p</item>
+</resources>
+
diff --git a/tests/tests/content/res/values/resources_test.xml b/tests/tests/content/res/values/resources_test.xml
new file mode 100644
index 0000000..91c2c4a
--- /dev/null
+++ b/tests/tests/content/res/values/resources_test.xml
@@ -0,0 +1,31 @@
+<?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.
+-->
+<resources>
+ <!-- The width that is used when creating thumbnails of applications. -->
+ <dimen name="thumbnail_width">84dp</dimen>
+ <!-- The height that is used when creating thumbnails of applications. -->
+ <dimen name="thumbnail_height">63dp</dimen>
+ <!-- The standard size (both width and height) of an application icon that
+ will be displayed in the app launcher and elsewhere. -->
+ <dimen name="app_icon_size">48px</dimen>
+ <dimen name="toast_y_offset">64dip</dimen>
+ <plurals name="plurals_test">
+ <item quantity="one">A dog</item>
+ <item quantity="other">Some dogs</item>
+ </plurals>
+ <color name="resource_test_color">#003B3B3B</color>
+ <integer name="resource_test_int">10</integer>
+</resources>
diff --git a/tests/tests/content/res/values/strings.xml b/tests/tests/content/res/values/strings.xml
new file mode 100644
index 0000000..c167278
--- /dev/null
+++ b/tests/tests/content/res/values/strings.xml
@@ -0,0 +1,179 @@
+<?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.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="permlab_testGranted">Test Granted</string>
+ <string name="permdesc_testGranted">Used for running CTS tests, for testing operations
+ where we have the permission.</string>
+ <string name="permlab_testDynamic">Test Dynamic</string>
+ <string name="permdesc_testDynamic">Used for running CTS tests, for testing adding
+ dynamic permissions.</string>
+ <string name="permlab_testDenied">Test Denied</string>
+ <string name="permdesc_testDenied">Used for running CTS tests, for testing operations
+ where we do not have the permission.</string>
+ <string name="explain">1. click start. \n2. if above image shaked, then press pass button,
+ else press failed button.</string>
+ <string name="text_view_hello">Hello! Text view!</string>
+ <string name="text_view_hello_two_lines">Hello! \nText view!</string>
+ <string name="text_view_simple_hint">This is a hint.</string>
+ <string name="text_view_hint">This is a string for testing hint of textview.</string>
+ <string name="activity_forwarding">App/Forwarding</string>
+ <string name="forwarding">$$$</string>
+ <string name="go">Go</string>
+ <string name="back">Back</string>
+ <string name="forward_target">
+ Press back button and notice we don\'t see the previous activity.
+ </string>
+ <string name="edit_text">testing</string>
+ <string name="text">DialogTest</string>
+ <string name="text_country">Country</string>
+ <string name="text_name">Name</string>
+ <string name="hello_world">Hello, World!</string>
+ <string name="hello_android">Hello, Android!</string>
+ <string name="alert_dialog_username">Name:</string>
+ <string name="alert_dialog_password">Password:</string>
+ <string name="alert_dialog_positive">Positive</string>
+ <string name="alert_dialog_negative">Negative</string>
+ <string name="alert_dialog_neutral">Neutral</string>
+ <string name="notify">Notify </string>
+ <string name="tabs_1">testing</string>
+ <string name="table_layout_first">first</string>
+ <string name="table_layout_second">second</string>
+ <string name="table_layout_third">third</string>
+ <string name="table_layout_long">Very long to make the string out of the screen</string>
+ <string name="chronometer_text">Test Chronometer</string>
+ <string name="am">AM</string>
+ <string name="pm">PM</string>
+ <string name="viewgroup_test">ViewGroup test</string>
+ <string name="viewanimator_test">ViewAnimator test</string>
+ <string name="id_ok">OK</string>
+ <string name="id_cancel">Cancel</string>
+ <string name="context_test_string1">This is %s string.</string>
+ <string name="context_test_string2">This is test string.</string>
+ <string name="animationutils_test_instructions">Choose different animations</string>
+ <string name="animationutils_test_alpha">Alpha animation</string>
+ <string name="animationutils_test_scale">Scale animation</string>
+ <string name="animationutils_test_rotate">Rotate animation</string>
+ <string name="animationutils_test_translate">Translate animation</string>
+ <string name="animationutils_test_set">Animation set</string>
+ <string name="animationutils_test_layout">Layout animation</string>
+ <string name="animationutils_test_gridlayout">Grid layout animation</string>
+ <string name="twolinelistitem_test_text1">text1</string>
+ <string name="twolinelistitem_test_text2">text2</string>
+ <string name="metadata_text">metadata text</string>
+ <string name="horizontal_text_1">horizontal 1</string>
+ <string name="horizontal_text_2">horizontal 2</string>
+ <string name="horizontal_text_3">horizontal 3</string>
+ <string name="vertical_text_1">vertical 1</string>
+ <string name="vertical_text_2">vertical 2</string>
+ <string name="vertical_text_3">vertical 3</string>
+ <string name="reference">here</string>
+ <string name="coerceIntegerToString">100</string>
+ <string name="coerceBooleanToString">true</string>
+ <string name="coerceColorToString">#fff</string>
+ <string name="coerceFloatToString">100.0</string>
+ <string name="coerceDimensionToString">100px</string>
+ <string name="coerceFractionToString">100<xliff:g id="percent">%</xliff:g></string>
+ <string name="formattedStringNone">Format[]</string>
+ <string name="formattedStringOne">Format[<xliff:g id="format">%d</xliff:g>]</string>
+ <string name="formattedStringTwo">Format[<xliff:g id="format">%3$d,%2$s</xliff:g>]</string>
+ <string name="checkboxpref_key">checkboxpref_key</string>
+ <string name="checkboxpref_title">title of preference</string>
+ <string name="checkboxpref_summary">summary of preference</string>
+ <string name="checkboxpref_summary_on">summary on of preference</string>
+ <string name="checkboxpref_summary_off">summary off of preference</string>
+ <string name="checkboxpref_depend">checkboxpref_depend</string>
+ <string name="checkboxpref_depend_title"> depend title of preference</string>
+ <string name="checkboxpref_depend_summary"> depend summary of preference</string>
+ <string name="edittextpref_key">edittextpref_key</string>
+ <string name="edittextpref_default_value">default value of preference</string>
+ <string name="edittextpref_title">title of edit text preference</string>
+ <string name="edittextpref_summary">summary of edit text preference</string>
+ <string name="edittextpref_dialog_title">dialog title of edit text preference</string>
+ <string name="edittextpref_text">text of edit text preference</string>
+ <string name="listpref_key">listpref_key</string>
+ <string name="listpref_title">title of list preference</string>
+ <string name="listpref_summary">summary of list preference</string>
+ <string name="listpref_dialogtitle">dialog title of list preference</string>
+ <string name="easy">Easy</string>
+ <string name="medium">Medium</string>
+ <string name="hard">Hard</string>
+ <string name="footer_view">Footer view</string>
+ <string name="header_view">Header view</string>
+ <string name="dialogpref_title">title of dialog preference </string>
+ <string name="dialogpref_dialog_title">dialog title of dialog preference </string>
+ <string name="dialogpref_key">dialogpref_key</string>
+ <string name="dialogpref_default_value">default value of dialog preference</string>
+ <string name="dialogpref_summary">summary of dialog preference</string>
+ <string name="dialogpref_message">message of dialog preference</string>
+ <string name="dialogpref_sure">Sure</string>
+ <string name="dialogpref_cancel">Cancel</string>
+ <string name="pref_key">pref_key</string>
+ <string name="pref_title">title of preference</string>
+ <string name="pref_summary">summary of preference</string>
+ <string name="pref_depend_key">pref_depend_key</string>
+ <string name="pref_depend_title"> depend title of preference</string>
+ <string name="pref_depend_summary"> depend summary of preference</string>
+ <string name="android_intent_action_preference">android.intent.action.PREFERENCE</string>
+ <string name="def_pref_key">def_pref_key</string>
+ <string name="def_pref_title">default preference</string>
+ <string name="def_pref_summary">This is default preference of cts</string>
+ <string name="relative_view1">view 1</string>
+ <string name="relative_view2">view 2</string>
+ <string name="relative_view3">view 3</string>
+ <string name="relative_view4">view 4</string>
+ <string name="relative_view5">view 5</string>
+ <string name="relative_view6">view 6</string>
+ <string name="relative_view7">view 7</string>
+ <string name="relative_view8">view 8</string>
+ <string name="relative_view9">view 9</string>
+ <string name="relative_view10">view 10</string>
+ <string name="relative_view11">view 11</string>
+ <string name="relative_view12">view 12</string>
+ <string name="relative_view13">view 13</string>
+ <string name="country">Country:</string>
+ <string name="symbol">Symbol:</string>
+ <string name="country_warning">No such country registered</string>
+ <string name="version_cur">base</string>
+ <string name="version_old">base</string>
+ <string name="version_v3">base</string>
+ <string name="authenticator_label">Android CTS</string>
+ <string name="search_label">Android CTS</string>
+ <string name="tag1">tag 1</string>
+ <string name="tag2">tag 2</string>
+
+ <string name="button">Button</string>
+ <string name="holo_test">Holo Test</string>
+ <string name="holo_generator">Holo Generator</string>
+ <string name="holo_light_test">Holo Light Test</string>
+ <string name="holo_light_generator">Holo Light Generator</string>
+ <string name="reference_image">Reference Image: </string>
+ <string name="generated_image">Generated Image: </string>
+ <string name="themes_prompt">Select a Theme:</string>
+ <string name="sample_text">Sample text goes here. I wanted something creative and whimsical
+but then I just got bored...</string>
+ <string name="long_text">This is a really long string which exceeds the width of the view.
+New devices have a much larger screen which actually enables long strings to be displayed
+with no fading. I have made this string longer to fix this case. If you are correcting this
+text, I would love to see the kind of devices you guys now use! Guys, maybe some devices need longer string!
+I think so, so how about double this string, like copy and paste!
+This is a really long string which exceeds the width of the view.
+New devices have a much larger screen which actually enables long strings to be displayed
+with no fading. I have made this string longer to fix this case. If you are correcting this
+text, I would love to see the kind of devices you guys now use! Guys, maybe some devices need longer string!
+I think so, so how about double this string, like copy and paste! </string>
+ <string name="rectangle200">"M 0,0 l 200,0 l 0, 200 l -200, 0 z"</string>
+</resources>
diff --git a/tests/tests/content/res/values/styles.xml b/tests/tests/content/res/values/styles.xml
new file mode 100644
index 0000000..20c80f8
--- /dev/null
+++ b/tests/tests/content/res/values/styles.xml
@@ -0,0 +1,172 @@
+<?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.
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <style name="Whatever">
+ <item name="type1">true</item>
+ <item name="type2">false</item>
+ <item name="type3">#ff0000ff</item>
+ <item name="type4">#ff00ff00</item>
+ <item name="type5">0.75px</item>
+ <item name="type6">10px</item>
+ <item name="type7">18px</item>
+ <item name="type8">@drawable/pass</item>
+ <item name="type9">3.14</item>
+ <item name="type10">100%</item>
+ <item name="type11">365</item>
+ <item name="type12">86400</item>
+ <item name="type13">@string/hello_android</item>
+ <item name="type14">TypedArray Test!</item>
+ <item name="type15">@array/difficultyLevel</item>
+ <item name="type16">Typed Value!</item>
+ </style>
+
+ <style name="TextViewWithoutColorAndAppearance">
+ <item name="android:textSize">18sp</item>
+ </style>
+
+ <style name="TextViewWithColorButWithOutAppearance">
+ <item name="android:textColor">#ff0000ff</item>
+ </style>
+
+ <style name="TextViewWithColorAndAppearance">
+ <item name="android:textColor">#ff0000ff</item>
+ <item name="android:textAppearance">@style/TextAppearance.WithColor</item>
+ </style>
+
+ <style name="TextViewWithoutColorButWithAppearance">
+ <item name="android:textAppearance">@style/TextAppearance.WithColor</item>
+ </style>
+
+ <style name="TextAppearance" parent="android:TextAppearance">
+ </style>
+
+ <style name="TextAppearance.WithColor">
+ <item name="android:textColor">#ffff0000</item>
+ </style>
+
+ <style name="TextAppearance.All">
+ <item name="android:textColor">@drawable/black</item>
+ <item name="android:textSize">20px</item>
+ <item name="android:textStyle">bold</item>
+ <item name="android:textColorHint">@drawable/red</item>
+ <item name="android:textColorLink">@drawable/blue</item>
+ <item name="android:textColorHighlight">@drawable/yellow</item>
+ </style>
+
+ <style name="TextAppearance.Colors">
+ <item name="android:textColor">@drawable/black</item>
+ <item name="android:textColorHint">@drawable/blue</item>
+ <item name="android:textColorLink">@drawable/yellow</item>
+ <item name="android:textColorHighlight">@drawable/red</item>
+ </style>
+
+ <style name="TextAppearance.NotColors">
+ <item name="android:textSize">17px</item>
+ <item name="android:typeface">sans</item>
+ <item name="android:textStyle">normal</item>
+ </style>
+
+ <style name="TextAppearance.Style">
+ <item name="android:textStyle">normal</item>
+ </style>
+
+ <style name="TestEnum1">
+ <item name="testEnum">val1</item>
+ </style>
+
+ <style name="TestEnum2">
+ <item name="testEnum">val2</item>
+ </style>
+
+ <style name="TestEnum10">
+ <item name="testEnum">val10</item>
+ </style>
+
+ <style name="TestFlag1">
+ <item name="testFlags">bit1</item>
+ </style>
+
+ <style name="TestFlag2">
+ <item name="testFlags">bit2</item>
+ </style>
+
+ <style name="TestFlag31">
+ <item name="testFlags">bit31</item>
+ </style>
+
+ <style name="TestFlag1And2">
+ <item name="testFlags">bit1|bit2</item>
+ </style>
+
+ <style name="TestFlag1And2And31">
+ <item name="testFlags">bit1|bit2|bit31</item>
+ </style>
+
+ <style name="TestEnum1.EmptyInherit" />
+
+ <style name="Theme_AlertDialog">
+ <item name="android:textSize">18sp</item>
+ </style>
+
+ <style name="TestProgressBar">
+ <item name="android:indeterminateOnly">false</item>
+ <item name="android:progressDrawable">?android:drawable/progress_horizontal</item>
+ <item name="android:indeterminateDrawable">?android:drawable/progress_horizontal</item>
+ <item name="android:minHeight">20dip</item>
+ <item name="android:maxHeight">20dip</item>
+ <item name="android:focusable">true</item>
+ </style>
+
+ <style name="Test_Theme">
+ <item name="android:windowNoTitle">true</item>
+ <item name="android:panelColorForeground">#ff000000</item>
+ <item name="android:panelColorBackground">#ffffffff</item>
+ </style>
+
+ <style name="Theme_OverrideOuter">
+ <item name="themeType">1</item>
+ </style>
+
+ <style name="Theme_OverrideInner">
+ <item name="themeType">2</item>
+ <item name="themeOverrideAttr">@style/Theme_OverrideAttr</item>
+ </style>
+
+ <style name="Theme_OverrideAttr">
+ <item name="themeType">3</item>
+ </style>
+
+ <style name="Theme_ThemedDrawableTest">
+ <item name="themeBoolean">true</item>
+ <item name="themeColor">@android:color/black</item>
+ <item name="themeFloat">1.0</item>
+ <item name="themeAngle">45.0</item>
+ <item name="themeInteger">1</item>
+ <item name="themeDimension">1px</item>
+ <item name="themeDrawable">@drawable/icon_black</item>
+ <item name="themeBitmap">@drawable/icon_black</item>
+ <item name="themeNinePatch">@drawable/ninepatch_0</item>
+ <item name="themeGravity">48</item>
+ <item name="themeTileMode">2</item>
+ </style>
+
+ <style name="Theme_NoSwipeDismiss">
+ <item name="android:windowSwipeToDismiss">false</item>
+ </style>
+
+</resources>
diff --git a/tests/tests/content/res/xml/alias.xml b/tests/tests/content/res/xml/alias.xml
new file mode 100644
index 0000000..f88f3dc
--- /dev/null
+++ b/tests/tests/content/res/xml/alias.xml
@@ -0,0 +1,27 @@
+<?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.
+ */
+-->
+
+<alias xmlns:android="http://schemas.android.com/apk/res/android">
+ <intent android:action="android.intent.action.MAIN"
+ android:targetPackage="com.android.cts.stub"
+ android:targetClass="android.app.cts.ChildActivity"
+ android:data="http://www.google.com/">
+ </intent>
+</alias>
+
diff --git a/tests/tests/content/res/xml/authenticator.xml b/tests/tests/content/res/xml/authenticator.xml
new file mode 100644
index 0000000..1e298b1
--- /dev/null
+++ b/tests/tests/content/res/xml/authenticator.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2009, 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.
+ */
+-->
+
+<!-- The attributes in this XML file provide configuration information -->
+<!-- for the Account Manager. -->
+
+<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
+ android:accountType="android.content.cts.account.type"
+ android:icon="@drawable/ic_cts_selected"
+ android:smallIcon="@drawable/ic_cts_minitab_selected"
+ android:label="@string/authenticator_label"
+/>
\ No newline at end of file
diff --git a/tests/tests/content/res/xml/colors.xml b/tests/tests/content/res/xml/colors.xml
new file mode 100644
index 0000000..8c44a66
--- /dev/null
+++ b/tests/tests/content/res/xml/colors.xml
@@ -0,0 +1,24 @@
+<?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.
+ */
+-->
+<resources>
+ <color name="testcolor1">#ff00ff00</color>
+ <color name="testcolor2">#ffff0000</color>
+ <color name="failColor">#ff0000ff</color>
+</resources>
+
diff --git a/tests/src/android/widget/cts/StubActivity.java b/tests/tests/content/res/xml/extra.xml
old mode 100644
new mode 100755
similarity index 65%
copy from tests/src/android/widget/cts/StubActivity.java
copy to tests/tests/content/res/xml/extra.xml
index fe4002c..b3bffb4
--- a/tests/src/android/widget/cts/StubActivity.java
+++ b/tests/tests/content/res/xml/extra.xml
@@ -1,5 +1,6 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
+<?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.
@@ -12,15 +13,8 @@
* 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 android.widget.cts;
-
-import android.app.Activity;
-
-/**
- * Stub activity for helping test. It's an empty activity.
- */
-public class StubActivity extends Activity {
-
-}
+ -->
+<tag xmlns:android="http://schemas.android.com/apk/res/android" android:name="Bruce" android:value="Lee">
+ <extra android:name="google" android:value="android">
+ </extra>
+</tag>
diff --git a/tests/tests/content/res/xml/intentfilter.xml b/tests/tests/content/res/xml/intentfilter.xml
new file mode 100644
index 0000000..7ed3a53
--- /dev/null
+++ b/tests/tests/content/res/xml/intentfilter.xml
@@ -0,0 +1,28 @@
+<?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.
+ */
+-->
+<intent-filter xmlns="http://schemas.android.com/apk/res/android">
+ <action name="testAction"/>
+ <cat name="testCategory" />
+ <type name="vnd.android.cursor.dir/person"/>
+ <scheme name="testScheme"/>
+ <auth host="testHost" port="80"/>
+ <path name="testPath" literal="test"/>
+ <path name="testPath" prefix="test"/>
+ <path name="testPath" sglob="test"/>
+</intent-filter>
diff --git a/tests/src/android/widget/cts/StubActivity.java b/tests/tests/content/res/xml/pm_test.xml
similarity index 69%
copy from tests/src/android/widget/cts/StubActivity.java
copy to tests/tests/content/res/xml/pm_test.xml
index fe4002c..4db24cf 100644
--- a/tests/src/android/widget/cts/StubActivity.java
+++ b/tests/tests/content/res/xml/pm_test.xml
@@ -1,5 +1,6 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
+<?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.
@@ -12,15 +13,7 @@
* 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 android.widget.cts;
-
-import android.app.Activity;
-
-/**
- * Stub activity for helping test. It's an empty activity.
- */
-public class StubActivity extends Activity {
-
-}
+ -->
+ <!-- This xml is just test for PackageManager Test -->
+<resources>
+</resources>
diff --git a/tests/tests/content/res/xml/syncadapter.xml b/tests/tests/content/res/xml/syncadapter.xml
new file mode 100644
index 0000000..1c0bb72
--- /dev/null
+++ b/tests/tests/content/res/xml/syncadapter.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2009, 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.
+ */
+-->
+
+<!-- The attributes in this XML file provide configuration information -->
+<!-- for the SyncAdapter. -->
+
+<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
+ android:contentAuthority="android.content.cts.authority"
+ android:accountType="android.content.cts.account.type"
+/>
diff --git a/tests/tests/content/res/xml/test_color.xml b/tests/tests/content/res/xml/test_color.xml
new file mode 100644
index 0000000..97f7dec
--- /dev/null
+++ b/tests/tests/content/res/xml/test_color.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ android:versionName="testNonResourcesString">
+ <color name="testcolor1">#ff00ff00</color>
+ <color name="testcolor2">#ffff0000</color>
+ <color name="failColor">#ff0000ff</color>
+</resources>
diff --git a/tests/src/android/content/cts/AvailableIntentsActivity.java b/tests/tests/content/src/android/content/cts/AvailableIntentsActivity.java
similarity index 96%
rename from tests/src/android/content/cts/AvailableIntentsActivity.java
rename to tests/tests/content/src/android/content/cts/AvailableIntentsActivity.java
index ac676de..773defc 100644
--- a/tests/src/android/content/cts/AvailableIntentsActivity.java
+++ b/tests/tests/content/src/android/content/cts/AvailableIntentsActivity.java
@@ -16,7 +16,7 @@
package android.content.cts;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
import android.app.Activity;
import android.os.Bundle;
diff --git a/tests/tests/content/src/android/content/cts/BroadcastReceiverTest.java b/tests/tests/content/src/android/content/cts/BroadcastReceiverTest.java
index 2865f9e..526087b 100644
--- a/tests/tests/content/src/android/content/cts/BroadcastReceiverTest.java
+++ b/tests/tests/content/src/android/content/cts/BroadcastReceiverTest.java
@@ -18,8 +18,6 @@
import android.app.Service;
-import android.app.cts.MockActivity;
-import android.app.cts.MockService;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -52,7 +50,7 @@
private static final long START_SERVICE_TIMEOUT = 3000;
public BroadcastReceiverTest() {
- super("com.android.cts.stub", MockActivity.class);
+ super("com.android.cts.content", MockActivity.class);
}
@Override
diff --git a/tests/src/android/content/cts/ClipboardManagerListenerActivity.java b/tests/tests/content/src/android/content/cts/ClipboardManagerListenerActivity.java
similarity index 100%
rename from tests/src/android/content/cts/ClipboardManagerListenerActivity.java
rename to tests/tests/content/src/android/content/cts/ClipboardManagerListenerActivity.java
diff --git a/tests/tests/content/src/android/content/cts/ComponentNameTest.java b/tests/tests/content/src/android/content/cts/ComponentNameTest.java
index d14a95b..6277bd6 100644
--- a/tests/tests/content/src/android/content/cts/ComponentNameTest.java
+++ b/tests/tests/content/src/android/content/cts/ComponentNameTest.java
@@ -85,7 +85,7 @@
}
public void testFlattenToString() {
- assertEquals("com.android.cts.stub/android.content.cts.ComponentNameTest",
+ assertEquals("com.android.cts.content/android.content.cts.ComponentNameTest",
getComponentName().flattenToString());
}
@@ -121,7 +121,7 @@
public void testGetPackageName() {
final String actual = getComponentName().getPackageName();
- assertEquals("com.android.cts.stub", actual);
+ assertEquals("com.android.cts.content", actual);
}
public void testUnflattenFromString() {
@@ -135,7 +135,7 @@
public void testFlattenToShortString() {
// Test normal
String actual = getComponentName().flattenToShortString();
- assertEquals("com.android.cts.stub/android.content.cts.ComponentNameTest", actual);
+ assertEquals("com.android.cts.content/android.content.cts.ComponentNameTest", actual);
// Test long class name
final ComponentName componentName = new ComponentName("com.android.view",
@@ -168,7 +168,7 @@
public void testToShortString() {
// Test normal string
final String shortString = getComponentName().toShortString();
- assertEquals("{com.android.cts.stub/android.content.cts.ComponentNameTest}", shortString);
+ assertEquals("{com.android.cts.content/android.content.cts.ComponentNameTest}", shortString);
}
public void testGetClassName() {
@@ -196,7 +196,7 @@
ComponentName.writeToParcel(componentName, parcel);
parcel.setDataPosition(0);
assertFalse(0 == parcel.dataAvail());
- assertEquals("com.android.cts.stub", parcel.readString());
+ assertEquals("com.android.cts.content", parcel.readString());
assertEquals("android.content.cts.ComponentNameTest", parcel.readString());
// Test null data
diff --git a/tests/tests/content/src/android/content/cts/ContentProviderTest.java b/tests/tests/content/src/android/content/cts/ContentProviderTest.java
index 5ced37c..0b4d9aa 100644
--- a/tests/tests/content/src/android/content/cts/ContentProviderTest.java
+++ b/tests/tests/content/src/android/content/cts/ContentProviderTest.java
@@ -27,7 +27,7 @@
import android.os.ParcelFileDescriptor;
import android.test.AndroidTestCase;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
import java.io.File;
import java.io.FileNotFoundException;
@@ -37,7 +37,7 @@
* Test {@link ContentProvider}.
*/
public class ContentProviderTest extends AndroidTestCase {
- private static final String TEST_PACKAGE_NAME = "com.android.cts.stub";
+ private static final String TEST_PACKAGE_NAME = "com.android.cts.content";
private static final String TEST_FILE_NAME = "testFile.tmp";
private static final String TEST_DB_NAME = "test.db";
diff --git a/tests/tests/content/src/android/content/cts/ContentResolverTest.java b/tests/tests/content/src/android/content/cts/ContentResolverTest.java
index 47371cc..4176da3 100644
--- a/tests/tests/content/src/android/content/cts/ContentResolverTest.java
+++ b/tests/tests/content/src/android/content/cts/ContentResolverTest.java
@@ -16,7 +16,7 @@
package android.content.cts;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
import android.accounts.Account;
@@ -75,7 +75,7 @@
private static final int VALUE2 = 2;
private static final int VALUE3 = 3;
- private static final String TEST_PACKAGE_NAME = "com.android.cts.stub";
+ private static final String TEST_PACKAGE_NAME = "com.android.cts.content";
private Context mContext;
private ContentResolver mContentResolver;
diff --git a/tests/tests/content/src/android/content/cts/ContextTest.java b/tests/tests/content/src/android/content/cts/ContextTest.java
index 70abe1f..7c5dc50 100644
--- a/tests/tests/content/src/android/content/cts/ContextTest.java
+++ b/tests/tests/content/src/android/content/cts/ContextTest.java
@@ -16,7 +16,7 @@
package android.content.cts;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
import com.android.internal.util.XmlUtils;
diff --git a/tests/src/android/content/cts/ContextWrapperStubActivity.java b/tests/tests/content/src/android/content/cts/ContextWrapperCtsActivity.java
similarity index 90%
rename from tests/src/android/content/cts/ContextWrapperStubActivity.java
rename to tests/tests/content/src/android/content/cts/ContextWrapperCtsActivity.java
index 977cedc..9ff4df9 100644
--- a/tests/src/android/content/cts/ContextWrapperStubActivity.java
+++ b/tests/tests/content/src/android/content/cts/ContextWrapperCtsActivity.java
@@ -21,9 +21,9 @@
import android.app.Activity;
import android.os.Bundle;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
-public class ContextWrapperStubActivity extends Activity {
+public class ContextWrapperCtsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/tests/tests/content/src/android/content/cts/ContextWrapperTest.java b/tests/tests/content/src/android/content/cts/ContextWrapperTest.java
index 59fae2f..e7b6ed7 100644
--- a/tests/tests/content/src/android/content/cts/ContextWrapperTest.java
+++ b/tests/tests/content/src/android/content/cts/ContextWrapperTest.java
@@ -16,7 +16,7 @@
package android.content.cts;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
import android.content.ActivityNotFoundException;
@@ -79,8 +79,8 @@
private final static String MOCK_ACTION1 = ACTION_BROADCAST_TESTORDER + "1";
private final static String MOCK_ACTION2 = ACTION_BROADCAST_TESTORDER + "2";
- public static final String PERMISSION_GRANTED = "android.app.cts.permission.TEST_GRANTED";
- public static final String PERMISSION_DENIED = "android.app.cts.permission.TEST_DENIED";
+ public static final String PERMISSION_GRANTED = "android.content.cts.permission.TEST_GRANTED";
+ public static final String PERMISSION_DENIED = "android.content.cts.permission.TEST_DENIED";
private static final int BROADCAST_TIMEOUT = 10000;
@@ -402,7 +402,7 @@
}
public void testStartActivity() {
- Intent intent = new Intent(mContext, ContextWrapperStubActivity.class);
+ Intent intent = new Intent(mContext, ContextWrapperCtsActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
mContextWrapper.startActivity(intent);
@@ -474,7 +474,7 @@
}
public void testGetPackageName() {
- assertEquals("com.android.cts.stub", mContextWrapper.getPackageName());
+ assertEquals("com.android.cts.content", mContextWrapper.getPackageName());
}
public void testGetCacheDir() {
diff --git a/tests/src/android/content/cts/DummyProvider.java b/tests/tests/content/src/android/content/cts/DummyProvider.java
similarity index 100%
rename from tests/src/android/content/cts/DummyProvider.java
rename to tests/tests/content/src/android/content/cts/DummyProvider.java
diff --git a/tests/src/android/content/cts/HighPriorityBroadcastReceiver.java b/tests/tests/content/src/android/content/cts/HighPriorityBroadcastReceiver.java
similarity index 100%
rename from tests/src/android/content/cts/HighPriorityBroadcastReceiver.java
rename to tests/tests/content/src/android/content/cts/HighPriorityBroadcastReceiver.java
diff --git a/tests/tests/content/src/android/content/cts/IntentFilterTest.java b/tests/tests/content/src/android/content/cts/IntentFilterTest.java
index d067b9e..d0e70f2 100644
--- a/tests/tests/content/src/android/content/cts/IntentFilterTest.java
+++ b/tests/tests/content/src/android/content/cts/IntentFilterTest.java
@@ -33,7 +33,6 @@
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
-import android.app.cts.MockActivity;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Intent;
diff --git a/tests/tests/content/src/android/content/cts/IntentTest.java b/tests/tests/content/src/android/content/cts/IntentTest.java
index d7bf6f4..d4fac55 100644
--- a/tests/tests/content/src/android/content/cts/IntentTest.java
+++ b/tests/tests/content/src/android/content/cts/IntentTest.java
@@ -22,8 +22,6 @@
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
-import android.app.cts.MockActivity;
-import android.app.cts.MockReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
@@ -730,18 +728,18 @@
// Should only have one activity responding to narrow category
final ComponentName target = intent.resolveActivity(mPm);
assertEquals("com.android.cts.content", target.getPackageName());
- assertEquals("android.app.cts.MockActivity", target.getClassName());
+ assertEquals("android.content.cts.MockActivity", target.getClassName());
}
public void testResolveActivityShortcutMatch() {
final Intent intent = new Intent("com.android.cts.content.action.TEST_ACTION");
intent.setComponent(
- new ComponentName("com.android.cts.content", "android.app.cts.MockActivity2"));
+ new ComponentName("com.android.cts.content", "android.content.cts.MockActivity2"));
// Multiple activities match, but we asked for explicit component
final ComponentName target = intent.resolveActivity(mPm);
assertEquals("com.android.cts.content", target.getPackageName());
- assertEquals("android.app.cts.MockActivity2", target.getClassName());
+ assertEquals("android.content.cts.MockActivity2", target.getClassName());
}
public void testResolveActivityMultipleMatch() {
diff --git a/tests/tests/content/src/android/content/cts/Intent_ShortcutIconResourceTest.java b/tests/tests/content/src/android/content/cts/Intent_ShortcutIconResourceTest.java
index b38f3fc..062ef90 100644
--- a/tests/tests/content/src/android/content/cts/Intent_ShortcutIconResourceTest.java
+++ b/tests/tests/content/src/android/content/cts/Intent_ShortcutIconResourceTest.java
@@ -29,7 +29,7 @@
ShortcutIconResource mShortcutIconResource;
Context mContext;
- final int resourceId = com.android.cts.stub.R.string.notify;
+ final int resourceId = com.android.cts.content.R.string.notify;
@Override
protected void setUp() throws Exception {
@@ -63,7 +63,7 @@
public void testWriteToParcel() {
mShortcutIconResource = ShortcutIconResource.fromContext(mContext,
- com.android.cts.stub.R.string.notify);
+ com.android.cts.content.R.string.notify);
assertNotNull(mShortcutIconResource);
Parcel parce = Parcel.obtain();
mShortcutIconResource.writeToParcel(parce, 1);
diff --git a/tests/src/android/content/cts/LowPriorityBroadcastReceiver.java b/tests/tests/content/src/android/content/cts/LowPriorityBroadcastReceiver.java
similarity index 100%
rename from tests/src/android/content/cts/LowPriorityBroadcastReceiver.java
rename to tests/tests/content/src/android/content/cts/LowPriorityBroadcastReceiver.java
diff --git a/tests/src/android/content/cts/MockAccountAuthenticator.java b/tests/tests/content/src/android/content/cts/MockAccountAuthenticator.java
similarity index 100%
rename from tests/src/android/content/cts/MockAccountAuthenticator.java
rename to tests/tests/content/src/android/content/cts/MockAccountAuthenticator.java
diff --git a/tests/src/android/content/cts/MockAccountService.java b/tests/tests/content/src/android/content/cts/MockAccountService.java
similarity index 100%
rename from tests/src/android/content/cts/MockAccountService.java
rename to tests/tests/content/src/android/content/cts/MockAccountService.java
diff --git a/tests/src/android/widget/cts/StubActivity.java b/tests/tests/content/src/android/content/cts/MockActivity.java
similarity index 75%
copy from tests/src/android/widget/cts/StubActivity.java
copy to tests/tests/content/src/android/content/cts/MockActivity.java
index fe4002c..19834df 100644
--- a/tests/src/android/widget/cts/StubActivity.java
+++ b/tests/tests/content/src/android/content/cts/MockActivity.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 The Android Open Source Project
+ * 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.
@@ -14,13 +14,10 @@
* limitations under the License.
*/
-package android.widget.cts;
+package android.content.cts;
import android.app.Activity;
-/**
- * Stub activity for helping test. It's an empty activity.
- */
-public class StubActivity extends Activity {
+public class MockActivity extends Activity {
}
diff --git a/tests/tests/content/src/android/content/cts/MockApplication.java b/tests/tests/content/src/android/content/cts/MockApplication.java
new file mode 100644
index 0000000..cca34d6
--- /dev/null
+++ b/tests/tests/content/src/android/content/cts/MockApplication.java
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ */
+
+package android.content.cts;
+
+import android.app.Application;
+import android.content.res.Configuration;
+
+
+public class MockApplication extends Application {
+
+ public boolean isOnCreateCalled;
+ public boolean isConstructorCalled;
+ public boolean isOnConfigurationChangedCalled;
+ public boolean isOnLowMemoryCalled;
+
+ public MockApplication() {
+ super();
+ isConstructorCalled = true;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ isOnCreateCalled = true;
+ }
+
+ @Override
+ public void onTerminate() {
+ super.onTerminate();
+ // The documentation states that one cannot rely on this method being called. No need to
+ // test it here.
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ isOnConfigurationChangedCalled = true;
+ }
+
+ @Override
+ public void onLowMemory() {
+ super.onLowMemory();
+ isOnLowMemoryCalled = true;
+ }
+}
diff --git a/tests/src/android/content/cts/MockContentProvider.java b/tests/tests/content/src/android/content/cts/MockContentProvider.java
similarity index 100%
rename from tests/src/android/content/cts/MockContentProvider.java
rename to tests/tests/content/src/android/content/cts/MockContentProvider.java
diff --git a/tests/src/android/content/cts/MockContextWrapperService.java b/tests/tests/content/src/android/content/cts/MockContextWrapperService.java
similarity index 100%
rename from tests/src/android/content/cts/MockContextWrapperService.java
rename to tests/tests/content/src/android/content/cts/MockContextWrapperService.java
diff --git a/tests/src/android/content/cts/MockReceiver.java b/tests/tests/content/src/android/content/cts/MockReceiver.java
similarity index 100%
rename from tests/src/android/content/cts/MockReceiver.java
rename to tests/tests/content/src/android/content/cts/MockReceiver.java
diff --git a/tests/src/android/content/cts/MockReceiverAbort.java b/tests/tests/content/src/android/content/cts/MockReceiverAbort.java
similarity index 100%
rename from tests/src/android/content/cts/MockReceiverAbort.java
rename to tests/tests/content/src/android/content/cts/MockReceiverAbort.java
diff --git a/tests/src/android/content/cts/MockReceiverFirst.java b/tests/tests/content/src/android/content/cts/MockReceiverFirst.java
similarity index 100%
rename from tests/src/android/content/cts/MockReceiverFirst.java
rename to tests/tests/content/src/android/content/cts/MockReceiverFirst.java
diff --git a/tests/src/android/content/cts/MockRemoteContentProvider.java b/tests/tests/content/src/android/content/cts/MockRemoteContentProvider.java
similarity index 100%
rename from tests/src/android/content/cts/MockRemoteContentProvider.java
rename to tests/tests/content/src/android/content/cts/MockRemoteContentProvider.java
diff --git a/tests/src/android/content/cts/MockSRSProvider.java b/tests/tests/content/src/android/content/cts/MockSRSProvider.java
similarity index 100%
rename from tests/src/android/content/cts/MockSRSProvider.java
rename to tests/tests/content/src/android/content/cts/MockSRSProvider.java
diff --git a/tests/tests/content/src/android/content/cts/MockService.java b/tests/tests/content/src/android/content/cts/MockService.java
new file mode 100644
index 0000000..6726f8b
--- /dev/null
+++ b/tests/tests/content/src/android/content/cts/MockService.java
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ */
+
+package android.content.cts;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.Binder;
+import android.os.IBinder;
+
+public class MockService extends Service {
+ public static boolean result = false;
+ private final IBinder mBinder = new MockBinder();
+
+ public class MockBinder extends Binder {
+ MockService getService() {
+ return MockService.this;
+ }
+ }
+
+ /**
+ * set the result as true when service bind
+ */
+ @Override
+ public IBinder onBind(Intent intent) {
+ result = true;
+ return mBinder;
+ }
+
+ /**
+ * set the result as true when service start
+ */
+ @Override
+ public void onStart(Intent intent, int startId) {
+ super.onStart(intent, startId);
+ result = true;
+ }
+}
+
diff --git a/tests/src/android/content/cts/MockSyncAdapter.java b/tests/tests/content/src/android/content/cts/MockSyncAdapter.java
similarity index 100%
rename from tests/src/android/content/cts/MockSyncAdapter.java
rename to tests/tests/content/src/android/content/cts/MockSyncAdapter.java
diff --git a/tests/src/android/content/cts/MockSyncAdapterService.java b/tests/tests/content/src/android/content/cts/MockSyncAdapterService.java
similarity index 100%
rename from tests/src/android/content/cts/MockSyncAdapterService.java
rename to tests/tests/content/src/android/content/cts/MockSyncAdapterService.java
diff --git a/tests/tests/content/src/android/content/cts/MutableContextWrapperTest.java b/tests/tests/content/src/android/content/cts/MutableContextWrapperTest.java
index b81ca71..aaba30c 100644
--- a/tests/tests/content/src/android/content/cts/MutableContextWrapperTest.java
+++ b/tests/tests/content/src/android/content/cts/MutableContextWrapperTest.java
@@ -16,7 +16,6 @@
package android.content.cts;
-import android.app.cts.MockActivity;
import android.content.Context;
import android.content.MutableContextWrapper;
import android.test.AndroidTestCase;
diff --git a/tests/src/android/content/cts/ResultReceiver.java b/tests/tests/content/src/android/content/cts/ResultReceiver.java
similarity index 100%
rename from tests/src/android/content/cts/ResultReceiver.java
rename to tests/tests/content/src/android/content/cts/ResultReceiver.java
diff --git a/tests/tests/content/src/android/content/cts/SharedPreferencesTest.java b/tests/tests/content/src/android/content/cts/SharedPreferencesTest.java
index 2354926..c271483 100644
--- a/tests/tests/content/src/android/content/cts/SharedPreferencesTest.java
+++ b/tests/tests/content/src/android/content/cts/SharedPreferencesTest.java
@@ -54,8 +54,8 @@
// Duplicated from ContextImpl.java. Not ideal, but there wasn't a better
// way to reach into Context{Wrapper,Impl} to ask where this file lives.
- mPrefsFile = new File("/data/data/com.android.cts.stub/shared_prefs",
- "com.android.cts.stub_preferences.xml");
+ mPrefsFile = new File("/data/data/com.android.cts.content/shared_prefs",
+ "com.android.cts.content_preferences.xml");
mPrefsFile.delete();
}
diff --git a/tests/tests/content/src/android/content/pm/cts/ActivityInfoTest.java b/tests/tests/content/src/android/content/pm/cts/ActivityInfoTest.java
index 6c1ae40..caabdb4 100644
--- a/tests/tests/content/src/android/content/pm/cts/ActivityInfoTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/ActivityInfoTest.java
@@ -17,7 +17,7 @@
package android.content.pm.cts;
-import android.app.cts.MockActivity;
+import android.content.cts.MockActivity;
import android.content.ComponentName;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
diff --git a/tests/tests/content/src/android/content/pm/cts/ApplicationInfoTest.java b/tests/tests/content/src/android/content/pm/cts/ApplicationInfoTest.java
index 3055e57..1e9f5a2 100644
--- a/tests/tests/content/src/android/content/pm/cts/ApplicationInfoTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/ApplicationInfoTest.java
@@ -16,7 +16,7 @@
package android.content.pm.cts;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
import android.content.pm.ApplicationInfo;
diff --git a/tests/tests/content/src/android/content/pm/cts/ApplicationInfo_DisplayNameComparatorTest.java b/tests/tests/content/src/android/content/pm/cts/ApplicationInfo_DisplayNameComparatorTest.java
index ebd75cc..211a2ca 100644
--- a/tests/tests/content/src/android/content/pm/cts/ApplicationInfo_DisplayNameComparatorTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/ApplicationInfo_DisplayNameComparatorTest.java
@@ -26,7 +26,7 @@
* Test {@link DisplayNameComparator}.
*/
public class ApplicationInfo_DisplayNameComparatorTest extends AndroidTestCase {
- private static final String PACKAGE_NAME = "com.android.cts.stub";
+ private static final String PACKAGE_NAME = "com.android.cts.content";
DisplayNameComparator mDisplayNameComparator;
@Override
diff --git a/tests/tests/content/src/android/content/pm/cts/ComponentInfoTest.java b/tests/tests/content/src/android/content/pm/cts/ComponentInfoTest.java
index 7850e1e..361bfe4 100644
--- a/tests/tests/content/src/android/content/pm/cts/ComponentInfoTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/ComponentInfoTest.java
@@ -26,16 +26,15 @@
import android.test.AndroidTestCase;
import android.util.Printer;
import android.util.StringBuilderPrinter;
-import android.widget.cts.WidgetTestUtils;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
/**
* Test {@link ComponentInfo}.
*/
public class ComponentInfoTest extends AndroidTestCase {
- private final String PACKAGE_NAME = "com.android.cts.stub";
+ private final String PACKAGE_NAME = "com.android.cts.content";
private ComponentInfo mComponentInfo;
public void testConstructor() {
diff --git a/tests/tests/content/src/android/content/pm/cts/InstrumentationInfoTest.java b/tests/tests/content/src/android/content/pm/cts/InstrumentationInfoTest.java
index 4656949..5b7747d 100644
--- a/tests/tests/content/src/android/content/pm/cts/InstrumentationInfoTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/InstrumentationInfoTest.java
@@ -25,7 +25,7 @@
import android.test.AndroidTestCase;
public class InstrumentationInfoTest extends AndroidTestCase {
- private static final String PACKAGE_NAME = "com.android.cts.stub";
+ private static final String PACKAGE_NAME = "com.android.cts.content";
private static final String INSTRUMENTATION_NAME =
"android.content.pm.cts.TestPmInstrumentation";
diff --git a/tests/tests/content/src/android/content/pm/cts/PackageInfoTest.java b/tests/tests/content/src/android/content/pm/cts/PackageInfoTest.java
index cefe1a6..0540e0b 100644
--- a/tests/tests/content/src/android/content/pm/cts/PackageInfoTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/PackageInfoTest.java
@@ -32,7 +32,7 @@
private PackageManager mPackageManager;
private PackageInfo mPackageInfo;
private PackageInfo mPackageInfoCmp;
- private static final String PACKAGE_NAME = "com.android.cts.stub";
+ private static final String PACKAGE_NAME = "com.android.cts.content";
@Override
protected void setUp() throws Exception {
diff --git a/tests/tests/content/src/android/content/pm/cts/PackageItemInfoTest.java b/tests/tests/content/src/android/content/pm/cts/PackageItemInfoTest.java
index d3372c6..53e69da 100644
--- a/tests/tests/content/src/android/content/pm/cts/PackageItemInfoTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/PackageItemInfoTest.java
@@ -16,7 +16,7 @@
package android.content.pm.cts;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
import android.content.ComponentName;
@@ -30,7 +30,7 @@
import android.util.Printer;
public class PackageItemInfoTest extends AndroidTestCase {
- private static final String PACKAGE_NAME = "com.android.cts.stub";
+ private static final String PACKAGE_NAME = "com.android.cts.content";
private static final String ACTIVITY_NAME = "android.content.pm.cts.TestPmActivity";
private static final String METADATA_NAME = "android.content.pm.cts.xmltest";
private PackageManager mPackageManager;
diff --git a/tests/tests/content/src/android/content/pm/cts/PackageItemInfo_DisplayNameComparatorTest.java b/tests/tests/content/src/android/content/pm/cts/PackageItemInfo_DisplayNameComparatorTest.java
index f332d6e..0cfd1dd 100644
--- a/tests/tests/content/src/android/content/pm/cts/PackageItemInfo_DisplayNameComparatorTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/PackageItemInfo_DisplayNameComparatorTest.java
@@ -26,7 +26,7 @@
import android.test.AndroidTestCase;
public class PackageItemInfo_DisplayNameComparatorTest extends AndroidTestCase {
- private static final String PACKAGE_NAME = "com.android.cts.stub";
+ private static final String PACKAGE_NAME = "com.android.cts.content";
private static final String ACTIVITY_NAME = "android.content.pm.cts.TestPmActivity";
private static final String CMPACTIVITY_NAME = "android.content.pm.cts.TestPmCompare";
diff --git a/tests/tests/content/src/android/content/pm/cts/PackageManagerTest.java b/tests/tests/content/src/android/content/pm/cts/PackageManagerTest.java
index d1e1252..aaab8c4 100644
--- a/tests/tests/content/src/android/content/pm/cts/PackageManagerTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/PackageManagerTest.java
@@ -16,7 +16,7 @@
package android.content.pm.cts;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
import android.content.ComponentName;
@@ -44,7 +44,7 @@
*/
public class PackageManagerTest extends AndroidTestCase {
private PackageManager mPackageManager;
- private static final String PACKAGE_NAME = "com.android.cts.stub";
+ private static final String PACKAGE_NAME = "com.android.cts.content";
private static final String CONTENT_PKG_NAME = "com.android.cts.content";
private static final String ACTIVITY_ACTION_NAME = "android.intent.action.PMTEST";
private static final String MAIN_ACTION_NAME = "android.intent.action.MAIN";
@@ -395,7 +395,7 @@
public void testOpPermission() {
PermissionInfo permissionInfo = new PermissionInfo();
- String permissionName = "com.android.cts.stub.permission.TEST_DYNAMIC.ADD";
+ String permissionName = "com.android.cts.content.permission.TEST_DYNAMIC.ADD";
permissionInfo.name = permissionName;
permissionInfo.labelRes = R.string.permlab_testDynamic;
permissionInfo.nonLocalizedLabel = "Test Tree";
@@ -450,7 +450,7 @@
public void testGetResources() throws NameNotFoundException {
ComponentName componentName = new ComponentName(PACKAGE_NAME, ACTIVITY_NAME);
int resourceId = R.xml.pm_test;
- String xmlName = "com.android.cts.stub:xml/pm_test";
+ String xmlName = "com.android.cts.content:xml/pm_test";
ApplicationInfo appInfo = mPackageManager.getApplicationInfo(PACKAGE_NAME, 0);
assertNotNull(mPackageManager.getXml(PACKAGE_NAME, resourceId, appInfo));
assertEquals(xmlName, mPackageManager.getResourcesForActivity(componentName)
diff --git a/tests/tests/content/src/android/content/pm/cts/PackageStatsTest.java b/tests/tests/content/src/android/content/pm/cts/PackageStatsTest.java
index dca51e9..6425209 100644
--- a/tests/tests/content/src/android/content/pm/cts/PackageStatsTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/PackageStatsTest.java
@@ -22,7 +22,7 @@
import android.test.AndroidTestCase;
public class PackageStatsTest extends AndroidTestCase {
- private static final String PACKAGE_NAME = "com.android.cts.stub";
+ private static final String PACKAGE_NAME = "com.android.cts.content";
public void testPackageStats() {
// Set mock data to make sure the functionality of constructor
diff --git a/tests/tests/content/src/android/content/pm/cts/ProviderInfoTest.java b/tests/tests/content/src/android/content/pm/cts/ProviderInfoTest.java
index c585568..6256a69 100644
--- a/tests/tests/content/src/android/content/pm/cts/ProviderInfoTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/ProviderInfoTest.java
@@ -28,7 +28,7 @@
import java.util.List;
public class ProviderInfoTest extends AndroidTestCase {
- private static final String PACKAGE_NAME = "com.android.cts.stub";
+ private static final String PACKAGE_NAME = "com.android.cts.content";
private static final String PROVIDER_NAME = "android.content.cts.MockContentProvider";
public void testProviderInfo() throws NameNotFoundException {
diff --git a/tests/tests/content/src/android/content/pm/cts/ResolveInfoTest.java b/tests/tests/content/src/android/content/pm/cts/ResolveInfoTest.java
index 3501e86..af3f161 100644
--- a/tests/tests/content/src/android/content/pm/cts/ResolveInfoTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/ResolveInfoTest.java
@@ -26,7 +26,7 @@
import android.util.Printer;
public class ResolveInfoTest extends AndroidTestCase {
- private static final String PACKAGE_NAME = "com.android.cts.stub";
+ private static final String PACKAGE_NAME = "com.android.cts.content";
private static final String MAIN_ACTION_NAME = "android.intent.action.MAIN";
private static final String ACTIVITY_NAME = "android.content.pm.cts.TestPmActivity";
private static final String SERVICE_NAME = "android.content.pm.cts.activity.PMTEST_SERVICE";
diff --git a/tests/tests/content/src/android/content/pm/cts/ServiceInfoTest.java b/tests/tests/content/src/android/content/pm/cts/ServiceInfoTest.java
index 8508c15..297ab69 100644
--- a/tests/tests/content/src/android/content/pm/cts/ServiceInfoTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/ServiceInfoTest.java
@@ -25,7 +25,7 @@
import android.test.AndroidTestCase;
public class ServiceInfoTest extends AndroidTestCase {
- private static final String PACKAGE_NAME = "com.android.cts.stub";
+ private static final String PACKAGE_NAME = "com.android.cts.content";
private static final String SERVICE_NAME = "android.content.pm.cts.TestPmService";
public void testServiceInfo() throws NameNotFoundException {
diff --git a/tests/tests/content/src/android/content/pm/cts/WidgetTestUtils.java b/tests/tests/content/src/android/content/pm/cts/WidgetTestUtils.java
new file mode 100644
index 0000000..6efd8b1
--- /dev/null
+++ b/tests/tests/content/src/android/content/pm/cts/WidgetTestUtils.java
@@ -0,0 +1,138 @@
+/*
+ * 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.
+ */
+
+package android.content.pm.cts;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+
+import java.io.IOException;
+
+import junit.framework.Assert;
+
+/**
+ * The useful methods for widget test.
+ */
+public class WidgetTestUtils {
+ /**
+ * Assert that two bitmaps are equal.
+ *
+ * @param Bitmap b1 the first bitmap which needs to compare.
+ * @param Bitmap b2 the second bitmap which needs to compare.
+ */
+ public static void assertEquals(Bitmap b1, Bitmap b2) {
+ if (b1 == b2) {
+ return;
+ }
+
+ if (b1 == null || b2 == null) {
+ Assert.fail("the bitmaps are not equal");
+ }
+
+ // b1 and b2 are all not null.
+ if (b1.getWidth() != b2.getWidth() || b1.getHeight() != b2.getHeight()
+ || b1.getConfig() != b2.getConfig()) {
+ Assert.fail("the bitmaps are not equal");
+ }
+
+ int w = b1.getWidth();
+ int h = b1.getHeight();
+ int s = w * h;
+ int[] pixels1 = new int[s];
+ int[] pixels2 = new int[s];
+
+ b1.getPixels(pixels1, 0, w, 0, 0, w, h);
+ b2.getPixels(pixels2, 0, w, 0, 0, w, h);
+
+ for (int i = 0; i < s; i++) {
+ if (pixels1[i] != pixels2[i]) {
+ Assert.fail("the bitmaps are not equal");
+ }
+ }
+ }
+
+ /**
+ * Find beginning of the special element.
+ * @param parser XmlPullParser will be parsed.
+ * @param firstElementName the target element name.
+ *
+ * @throws XmlPullParserException if XML Pull Parser related faults occur.
+ * @throws IOException if I/O-related error occur when parsing.
+ */
+ public static final void beginDocument(XmlPullParser parser, String firstElementName)
+ throws XmlPullParserException, IOException {
+ Assert.assertNotNull(parser);
+ Assert.assertNotNull(firstElementName);
+
+ int type;
+ while ((type = parser.next()) != XmlPullParser.START_TAG
+ && type != XmlPullParser.END_DOCUMENT) {
+ ;
+ }
+
+ if (!parser.getName().equals(firstElementName)) {
+ throw new XmlPullParserException("Unexpected start tag: found " + parser.getName()
+ + ", expected " + firstElementName);
+ }
+ }
+
+ /**
+ * Compare the expected pixels with actual, scaling for the target context density
+ *
+ * @throws AssertionFailedError
+ */
+ public static void assertScaledPixels(int expected, int actual, Context context) {
+ Assert.assertEquals(expected * context.getResources().getDisplayMetrics().density,
+ actual, 3);
+ }
+
+ /** Converts dips into pixels using the {@link Context}'s density. */
+ public static int convertDipToPixels(Context context, int dip) {
+ float density = context.getResources().getDisplayMetrics().density;
+ return Math.round(density * dip);
+ }
+
+ /**
+ * Retrieve a bitmap that can be used for comparison on any density
+ * @param resources
+ * @return the {@link Bitmap} or <code>null</code>
+ */
+ public static Bitmap getUnscaledBitmap(Resources resources, int resId) {
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inScaled = false;
+ return BitmapFactory.decodeResource(resources, resId, options);
+ }
+
+ /**
+ * Retrieve a dithered bitmap that can be used for comparison on any density
+ * @param resources
+ * @param config the preferred config for the returning bitmap
+ * @return the {@link Bitmap} or <code>null</code>
+ */
+ public static Bitmap getUnscaledAndDitheredBitmap(Resources resources,
+ int resId, Bitmap.Config config) {
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inDither = true;
+ options.inScaled = false;
+ options.inPreferredConfig = config;
+ return BitmapFactory.decodeResource(resources, resId, options);
+ }
+}
diff --git a/tests/tests/content/src/android/content/res/cts/ArrayTest.java b/tests/tests/content/src/android/content/res/cts/ArrayTest.java
index 1b1fcdf..909fbf6 100644
--- a/tests/tests/content/src/android/content/res/cts/ArrayTest.java
+++ b/tests/tests/content/src/android/content/res/cts/ArrayTest.java
@@ -20,7 +20,7 @@
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
public class ArrayTest extends AndroidTestCase {
private Resources mResources;
diff --git a/tests/tests/content/src/android/content/res/cts/AssetManagerTest.java b/tests/tests/content/src/android/content/res/cts/AssetManagerTest.java
index cbf20ec..2870fee 100644
--- a/tests/tests/content/src/android/content/res/cts/AssetManagerTest.java
+++ b/tests/tests/content/src/android/content/res/cts/AssetManagerTest.java
@@ -30,7 +30,7 @@
import android.test.AndroidTestCase;
import android.util.TypedValue;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
import com.android.internal.util.XmlUtils;
diff --git a/tests/tests/content/src/android/content/res/cts/ColorStateListTest.java b/tests/tests/content/src/android/content/res/cts/ColorStateListTest.java
index cd1ac8b..88f5798 100644
--- a/tests/tests/content/src/android/content/res/cts/ColorStateListTest.java
+++ b/tests/tests/content/src/android/content/res/cts/ColorStateListTest.java
@@ -27,7 +27,7 @@
import android.os.Parcel;
import android.test.AndroidTestCase;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
public class ColorStateListTest extends AndroidTestCase {
diff --git a/tests/tests/content/src/android/content/res/cts/ConfigTest.java b/tests/tests/content/src/android/content/res/cts/ConfigTest.java
index bfc7887..0b94b6f 100644
--- a/tests/tests/content/src/android/content/res/cts/ConfigTest.java
+++ b/tests/tests/content/src/android/content/res/cts/ConfigTest.java
@@ -31,7 +31,7 @@
import android.util.DisplayMetrics;
import android.util.Log;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
public class ConfigTest extends AndroidTestCase {
enum Properties {
diff --git a/tests/tests/content/src/android/content/res/cts/FractionTest.java b/tests/tests/content/src/android/content/res/cts/FractionTest.java
index 9fa896c..2c3e797 100644
--- a/tests/tests/content/src/android/content/res/cts/FractionTest.java
+++ b/tests/tests/content/src/android/content/res/cts/FractionTest.java
@@ -20,7 +20,7 @@
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.TypedValue;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
public class FractionTest extends AndroidTestCase {
diff --git a/tests/tests/content/src/android/content/res/cts/PluralResourcesTest.java b/tests/tests/content/src/android/content/res/cts/PluralResourcesTest.java
index 074d10a..1fd204d 100644
--- a/tests/tests/content/src/android/content/res/cts/PluralResourcesTest.java
+++ b/tests/tests/content/src/android/content/res/cts/PluralResourcesTest.java
@@ -25,7 +25,7 @@
import android.test.suitebuilder.annotation.SmallTest;
import android.util.Log;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
public class PluralResourcesTest extends AndroidTestCase {
public static boolean DEBUG = false;
diff --git a/tests/tests/content/src/android/content/res/cts/PrimitiveTest.java b/tests/tests/content/src/android/content/res/cts/PrimitiveTest.java
index c7da6d8..8eeb086 100644
--- a/tests/tests/content/src/android/content/res/cts/PrimitiveTest.java
+++ b/tests/tests/content/src/android/content/res/cts/PrimitiveTest.java
@@ -21,7 +21,7 @@
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.TypedValue;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
public class PrimitiveTest extends AndroidTestCase {
private Resources mResources;
diff --git a/tests/tests/content/src/android/content/res/cts/RawResourceTest.java b/tests/tests/content/src/android/content/res/cts/RawResourceTest.java
index 9c8dae0..c92efc7 100644
--- a/tests/tests/content/src/android/content/res/cts/RawResourceTest.java
+++ b/tests/tests/content/src/android/content/res/cts/RawResourceTest.java
@@ -19,7 +19,7 @@
import android.content.res.Resources;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
import java.io.IOException;
import java.io.InputStream;
diff --git a/tests/tests/content/src/android/content/res/cts/ResourceNameTest.java b/tests/tests/content/src/android/content/res/cts/ResourceNameTest.java
index eacf00d..a7cc03b 100644
--- a/tests/tests/content/src/android/content/res/cts/ResourceNameTest.java
+++ b/tests/tests/content/src/android/content/res/cts/ResourceNameTest.java
@@ -20,7 +20,7 @@
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
public class ResourceNameTest extends AndroidTestCase {
@@ -29,10 +29,10 @@
final Resources res = mContext.getResources();
final String fullName = res.getResourceName(R.configVarying.simple);
- assertEquals("com.android.cts.stub:configVarying/simple", fullName);
+ assertEquals("com.android.cts.content:configVarying/simple", fullName);
final String packageName = res.getResourcePackageName(R.configVarying.simple);
- assertEquals("com.android.cts.stub", packageName);
+ assertEquals("com.android.cts.content", packageName);
final String typeName = res.getResourceTypeName(R.configVarying.simple);
assertEquals("configVarying", typeName);
@@ -45,16 +45,16 @@
public void testGetResourceIdentifier() {
final Resources res = mContext.getResources();
int resid = res.getIdentifier(
- "com.android.cts.stub:configVarying/simple",
+ "com.android.cts.content:configVarying/simple",
null, null);
assertEquals(R.configVarying.simple, resid);
resid = res.getIdentifier("configVarying/simple", null,
- "com.android.cts.stub");
+ "com.android.cts.content");
assertEquals(R.configVarying.simple, resid);
resid = res.getIdentifier("simple", "configVarying",
- "com.android.cts.stub");
+ "com.android.cts.content");
assertEquals(R.configVarying.simple, resid);
}
}
diff --git a/tests/tests/content/src/android/content/res/cts/ResourcesTest.java b/tests/tests/content/src/android/content/res/cts/ResourcesTest.java
index 058076c..88caa6f 100644
--- a/tests/tests/content/src/android/content/res/cts/ResourcesTest.java
+++ b/tests/tests/content/src/android/content/res/cts/ResourcesTest.java
@@ -16,7 +16,7 @@
package android.content.res.cts;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
import com.android.internal.util.XmlUtils;
@@ -49,9 +49,9 @@
private static final String CONFIG_VARYING = "configVarying";
private static final String SIMPLE = "simple";
private static final String CONFIG_VARYING_SIMPLE = "configVarying/simple";
- private static final String PACKAGE_NAME = "com.android.cts.stub";
+ private static final String PACKAGE_NAME = "com.android.cts.content";
private static final String COM_ANDROID_CTS_STUB_IDENTIFIER =
- "com.android.cts.stub:configVarying/simple";
+ "com.android.cts.content:configVarying/simple";
private Resources mResources;
@Override
@@ -320,7 +320,7 @@
//expected
}
- mResources.getValue("com.android.cts.stub:raw/text", tv, false);
+ mResources.getValue("com.android.cts.content:raw/text", tv, false);
assertNotNull(tv);
assertEquals("res/raw/text.txt", tv.coerceToString());
}
diff --git a/tests/tests/content/src/android/content/res/cts/Resources_ThemeTest.java b/tests/tests/content/src/android/content/res/cts/Resources_ThemeTest.java
index 4a4991f..349cb47 100644
--- a/tests/tests/content/src/android/content/res/cts/Resources_ThemeTest.java
+++ b/tests/tests/content/src/android/content/res/cts/Resources_ThemeTest.java
@@ -26,7 +26,7 @@
import android.util.TypedValue;
import android.util.Xml;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
public class Resources_ThemeTest extends AndroidTestCase {
diff --git a/tests/tests/content/src/android/content/res/cts/TypedArrayTest.java b/tests/tests/content/src/android/content/res/cts/TypedArrayTest.java
index c51405a..cc6c5ec 100644
--- a/tests/tests/content/src/android/content/res/cts/TypedArrayTest.java
+++ b/tests/tests/content/src/android/content/res/cts/TypedArrayTest.java
@@ -27,7 +27,7 @@
import android.util.TypedValue;
import android.view.ContextThemeWrapper;
-import com.android.cts.stub.R;
+import com.android.cts.content.R;
import com.android.internal.util.XmlUtils;
diff --git a/tests/tests/drm/Android.mk b/tests/tests/drm/Android.mk
index 9404f4b..74422a0 100644
--- a/tests/tests/drm/Android.mk
+++ b/tests/tests/drm/Android.mk
@@ -27,8 +27,6 @@
LOCAL_PACKAGE_NAME := CtsDrmTestCases
-LOCAL_INSTRUMENTATION_FOR := CtsTestStubs
-
LOCAL_JNI_SHARED_LIBRARIES := \
libctsdrm_jni \
libdrmtestplugin
diff --git a/tests/tests/drm/AndroidManifest.xml b/tests/tests/drm/AndroidManifest.xml
index dd70f02..527d498 100644
--- a/tests/tests/drm/AndroidManifest.xml
+++ b/tests/tests/drm/AndroidManifest.xml
@@ -23,7 +23,7 @@
</application>
<instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.cts.stub"
+ android:targetPackage="com.android.cts.drm"
android:label="CTS tests of android.drm">
<meta-data android:name="listener"
android:value="com.android.cts.runner.CtsTestRunListener" />
diff --git a/tests/tests/hardware/Android.mk b/tests/tests/hardware/Android.mk
index dec0d5d..e5203e5 100644
--- a/tests/tests/hardware/Android.mk
+++ b/tests/tests/hardware/Android.mk
@@ -29,6 +29,7 @@
src/android/hardware/cts/SensorTestCase.java \
src/android/hardware/cts/SingleSensorTests.java \
src/android/hardware/cts/SensorIntegrationTests.java \
+ src/android/hardware/cts/SensorBatchingTests.java \
src/android/hardware/cts/SensorTest.java \
LOCAL_STATIC_JAVA_LIBRARIES := ctsdeviceutil
diff --git a/tests/tests/hardware/src/android/hardware/camera2/cts/CameraDeviceTest.java b/tests/tests/hardware/src/android/hardware/camera2/cts/CameraDeviceTest.java
index faf72f3..bfc30b5 100644
--- a/tests/tests/hardware/src/android/hardware/camera2/cts/CameraDeviceTest.java
+++ b/tests/tests/hardware/src/android/hardware/camera2/cts/CameraDeviceTest.java
@@ -259,7 +259,8 @@
*/
for (int j = 0; j < sTemplates.length; j++) {
// Skip video snapshots for LEGACY mode
- if (sTemplates[j] == CameraDevice.TEMPLATE_VIDEO_SNAPSHOT) {
+ if (mStaticInfo.isHardwareLevelLegacy() &&
+ sTemplates[j] == CameraDevice.TEMPLATE_VIDEO_SNAPSHOT) {
continue;
}
CaptureRequest.Builder capReq = mCamera.createCaptureRequest(sTemplates[j]);
@@ -712,6 +713,11 @@
if (!burst) {
// Test: that a single capture of each template type succeeds.
for (int j = 0; j < sTemplates.length; j++) {
+ // Skip video snapshots for LEGACY mode
+ if (mStaticInfo.isHardwareLevelLegacy() &&
+ sTemplates[j] == CameraDevice.TEMPLATE_VIDEO_SNAPSHOT) {
+ continue;
+ }
captureSingleShot(mCameraIds[i], sTemplates[j], repeating, abort);
}
}
@@ -797,6 +803,11 @@
assertTrue("Invalid args to capture function", len <= templates.length);
List<CaptureRequest> requests = new ArrayList<CaptureRequest>();
for (int i = 0; i < len; i++) {
+ // Skip video snapshots for LEGACY mode
+ if (mStaticInfo.isHardwareLevelLegacy() &&
+ templates[i] == CameraDevice.TEMPLATE_VIDEO_SNAPSHOT) {
+ continue;
+ }
CaptureRequest.Builder requestBuilder = mCamera.createCaptureRequest(templates[i]);
assertNotNull("Failed to create capture request", requestBuilder);
requestBuilder.addTarget(mReaderSurface);
@@ -817,7 +828,7 @@
}
waitForSessionState(SESSION_ACTIVE, SESSION_READY_TIMEOUT_MS);
- int expectedResultCount = len;
+ int expectedResultCount = requests.size();
if (repeating) {
expectedResultCount *= REPEATING_CAPTURE_EXPECTED_RESULT_COUNT;
}
diff --git a/tests/tests/hardware/src/android/hardware/camera2/cts/CaptureResultTest.java b/tests/tests/hardware/src/android/hardware/camera2/cts/CaptureResultTest.java
index f81e2be..744f4ca 100644
--- a/tests/tests/hardware/src/android/hardware/camera2/cts/CaptureResultTest.java
+++ b/tests/tests/hardware/src/android/hardware/camera2/cts/CaptureResultTest.java
@@ -504,6 +504,10 @@
waiverKeys.add(CaptureResult.NOISE_REDUCTION_MODE);
}
+ if (!mStaticInfo.isManualLensShadingMapSupported()) {
+ waiverKeys.add(CaptureResult.SHADING_MODE);
+ }
+
//Keys not required if manual sensor control is not supported
if (!mStaticInfo.isCapabilitySupported(
CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR)) {
@@ -531,7 +535,6 @@
waiverKeys.add(CaptureResult.LENS_APERTURE);
waiverKeys.add(CaptureResult.LENS_FILTER_DENSITY);
waiverKeys.add(CaptureResult.SENSOR_ROLLING_SHUTTER_SKEW);
- waiverKeys.add(CaptureResult.SHADING_MODE);
waiverKeys.add(CaptureResult.STATISTICS_LENS_SHADING_MAP_MODE);
waiverKeys.add(CaptureResult.STATISTICS_SCENE_FLICKER);
waiverKeys.add(CaptureResult.STATISTICS_HOT_PIXEL_MAP_MODE);
diff --git a/tests/tests/hardware/src/android/hardware/camera2/cts/ExtendedCameraCharacteristicsTest.java b/tests/tests/hardware/src/android/hardware/camera2/cts/ExtendedCameraCharacteristicsTest.java
index 2ddff9f..a28eadd 100644
--- a/tests/tests/hardware/src/android/hardware/camera2/cts/ExtendedCameraCharacteristicsTest.java
+++ b/tests/tests/hardware/src/android/hardware/camera2/cts/ExtendedCameraCharacteristicsTest.java
@@ -65,7 +65,7 @@
private static final int LEGACY = CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY;
private static final int LIMITED = CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED;
private static final int FULL = CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL;
- private static final int OPT = -1; // For keys that are optional on all hardware levels.
+ private static final int OPT = Integer.MAX_VALUE; // For keys that are optional on all hardware levels.
/*
* Capabilities short hand
@@ -478,7 +478,7 @@
private static int remapHardwareLevel(int level) {
switch (level) {
case OPT:
- return -1;
+ return Integer.MAX_VALUE;
case LEGACY:
return 0; // lowest
case LIMITED:
diff --git a/tests/tests/hardware/src/android/hardware/camera2/cts/PerformanceTest.java b/tests/tests/hardware/src/android/hardware/camera2/cts/PerformanceTest.java
index aeab4cf..3a7df4c 100644
--- a/tests/tests/hardware/src/android/hardware/camera2/cts/PerformanceTest.java
+++ b/tests/tests/hardware/src/android/hardware/camera2/cts/PerformanceTest.java
@@ -194,8 +194,10 @@
for (String id : mCameraIds) {
try {
openDevice(id);
+
+ boolean partialsExpected = mStaticInfo.getPartialResultCount() > 1;
long startTimeMs;
- boolean isPartialTimingValid = true;
+ boolean isPartialTimingValid = partialsExpected;
for (int i = 0; i < NUM_TEST_LOOPS; i++) {
// setup builders and listeners
@@ -219,9 +221,16 @@
CaptureRequest request = captureBuilder.build();
mSession.capture(request, captureResultListener, mHandler);
- Pair<CaptureResult, Long> partialResultNTime =
- captureResultListener.getPartialResultNTimeForRequest(
- request, NUM_RESULTS_WAIT);
+ Pair<CaptureResult, Long> partialResultNTime = null;
+ if (partialsExpected) {
+ partialResultNTime = captureResultListener.getPartialResultNTimeForRequest(
+ request, NUM_RESULTS_WAIT);
+ // Even if maxPartials > 1, may not see partials for some devices
+ if (partialResultNTime == null) {
+ partialsExpected = false;
+ isPartialTimingValid = false;
+ }
+ }
Pair<CaptureResult, Long> captureResultNTime =
captureResultListener.getCaptureResultNTimeForRequest(
request, NUM_RESULTS_WAIT);
@@ -229,9 +238,11 @@
CameraTestUtils.CAPTURE_IMAGE_TIMEOUT_MS);
captureTimes[i] = imageListener.getTimeReceivedImage() - startTimeMs;
- getPartialTimes[i] = partialResultNTime.second - startTimeMs;
- if (getPartialTimes[i] < 0) {
- isPartialTimingValid = false;
+ if (partialsExpected) {
+ getPartialTimes[i] = partialResultNTime.second - startTimeMs;
+ if (getPartialTimes[i] < 0) {
+ isPartialTimingValid = false;
+ }
}
getResultTimes[i] = captureResultNTime.second - startTimeMs;
@@ -422,7 +433,6 @@
try {
Pair<CaptureResult, Long> result =
mPartialResultQueue.poll(timeout, TimeUnit.MILLISECONDS);
- assertNotNull("Wait for a partial result timed out in " + timeout + "ms", result);
return result;
} catch (InterruptedException e) {
throw new UnsupportedOperationException("Unhandled interrupted exception", e);
@@ -450,13 +460,17 @@
int i = 0;
do {
result = getPartialResultNTime(CameraTestUtils.CAPTURE_RESULT_TIMEOUT_MS);
+ // The result may be null if no partials are produced on this particular path, so
+ // stop trying
+ if (result == null) break;
if (result.first.getRequest().equals(myRequest)) {
return result;
}
} while (i++ < numResultsWait);
- throw new TimeoutRuntimeException("Unable to get the expected capture result after "
- + "waiting for " + numResultsWait + " results");
+ // No partials produced - this may not be an error, since a given device may not
+ // produce any partials on this testing path
+ return null;
}
public Pair<CaptureResult, Long> getCaptureResultNTimeForRequest(CaptureRequest myRequest,
diff --git a/tests/tests/hardware/src/android/hardware/camera2/cts/StaticMetadataTest.java b/tests/tests/hardware/src/android/hardware/camera2/cts/StaticMetadataTest.java
index f0d8293..1d28e6d 100644
--- a/tests/tests/hardware/src/android/hardware/camera2/cts/StaticMetadataTest.java
+++ b/tests/tests/hardware/src/android/hardware/camera2/cts/StaticMetadataTest.java
@@ -31,14 +31,16 @@
import junit.framework.Assert;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
/**
* <p>
* This class covers the {@link CameraCharacteristics} tests that are not
- * covered by {@link CaptureRequestTest} and {@link CameraCharacteristicsTest}
- * (auto-generated tests that only do the non-null checks).
+ * covered by {@link CaptureRequestTest} and {@link ExtendedCameraCharacteristicsTest}
* </p>
* <p>
* Note that most of the tests in this class don't require camera open.
@@ -137,14 +139,79 @@
* @return {@code true} if request keys' presence match expectation. Otherwise {@code false}
*/
private boolean validateRequestKeysPresence(String capabilityName,
- List<CaptureRequest.Key<?>> requestKeys, boolean expectedPresence) {
+ Collection<CaptureRequest.Key<?>> requestKeys, boolean expectedPresence) {
boolean actualPresence = mStaticInfo.areRequestKeysAvailable(requestKeys);
if (expectedPresence != actualPresence) {
if (expectedPresence) {
for (CaptureRequest.Key<?> key : requestKeys) {
if (!mStaticInfo.areKeysAvailable(key)) {
mCollector.addMessage(String.format(
- "Camera %s list capability %s but doesn't contain key %s",
+ "Camera %s list capability %s but doesn't contain request key %s",
+ mCameraId, capabilityName, key.getName()));
+ }
+ }
+ } else {
+ Log.w(TAG, String.format(
+ "Camera %s doesn't list capability %s but contain all required keys",
+ mCameraId, capabilityName));
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Check if result keys' presence match expectation.
+ *
+ * @param capabilityName The name string of capability being tested. Used for output messages.
+ * @param resultKeys The capture result keys to be checked
+ * @param expectedPresence Expected presence of {@code resultKeys}. {@code true} for expecting
+ * all keys are available. Otherwise {@code false}
+ * @return {@code true} if result keys' presence match expectation. Otherwise {@code false}
+ */
+ private boolean validateResultKeysPresence(String capabilityName,
+ Collection<CaptureResult.Key<?>> resultKeys, boolean expectedPresence) {
+ boolean actualPresence = mStaticInfo.areResultKeysAvailable(resultKeys);
+ if (expectedPresence != actualPresence) {
+ if (expectedPresence) {
+ for (CaptureResult.Key<?> key : resultKeys) {
+ if (!mStaticInfo.areKeysAvailable(key)) {
+ mCollector.addMessage(String.format(
+ "Camera %s list capability %s but doesn't contain result key %s",
+ mCameraId, capabilityName, key.getName()));
+ }
+ }
+ } else {
+ Log.w(TAG, String.format(
+ "Camera %s doesn't list capability %s but contain all required keys",
+ mCameraId, capabilityName));
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Check if characteristics keys' presence match expectation.
+ *
+ * @param capabilityName The name string of capability being tested. Used for output messages.
+ * @param characteristicsKeys The characteristics keys to be checked
+ * @param expectedPresence Expected presence of {@code characteristicsKeys}. {@code true} for
+ * expecting all keys are available. Otherwise {@code false}
+ * @return {@code true} if characteristics keys' presence match expectation.
+ * Otherwise {@code false}
+ */
+ private boolean validateCharacteristicsKeysPresence(String capabilityName,
+ Collection<CameraCharacteristics.Key<?>> characteristicsKeys,
+ boolean expectedPresence) {
+ boolean actualPresence = mStaticInfo.areCharacteristicsKeysAvailable(characteristicsKeys);
+ if (expectedPresence != actualPresence) {
+ if (expectedPresence) {
+ for (CameraCharacteristics.Key<?> key : characteristicsKeys) {
+ if (!mStaticInfo.areKeysAvailable(key)) {
+ mCollector.addMessage(String.format(
+ "Camera %s list capability %s but doesn't contain" +
+ "characteristics key %s",
mCameraId, capabilityName, key.getName()));
}
}
@@ -160,8 +227,8 @@
private void validateCapability(Integer capability, boolean isCapabilityAvailable) {
List<CaptureRequest.Key<?>> requestKeys = new ArrayList<>();
- /* Only test request keys in this test
- Characteristics keys are tested in CameraCharacteristicsTest
+ /* For available capabilities, only check request keys in this test
+ Characteristics keys are tested in ExtendedCameraCharacteristicsTest
Result keys are tested in CaptureResultTest */
String capabilityName;
switch (capability) {
@@ -239,38 +306,74 @@
requestKeys.add(CaptureRequest.BLACK_LEVEL_LOCK);
break;
case REQUEST_AVAILABLE_CAPABILITIES_RAW:
- capabilityName = "REQUEST_AVAILABLE_CAPABILITIES_RAW";
- boolean rawOutputSupported = mStaticInfo.getRawOutputSizesChecked().length > 0;
- if (isCapabilityAvailable) {
- mCollector.expectTrue(
- "REQUEST_AVAILABLE_CAPABILITIES_RAW should support RAW_SENSOR output",
- rawOutputSupported);
- }
- requestKeys.add(CaptureRequest.HOT_PIXEL_MODE);
- requestKeys.add(CaptureRequest.STATISTICS_HOT_PIXEL_MAP_MODE);
- break;
+ // RAW_CAPABILITY needs to check for not just capture request keys
+ validateRawCapability(isCapabilityAvailable);
+ return;
default:
capabilityName = "Unknown";
Assert.fail(String.format("Unknown capability: %d", capability));
}
+
boolean matchExpectation =
validateRequestKeysPresence(capabilityName, requestKeys, isCapabilityAvailable);
-
// In case of isCapabilityAvailable == true, error has been filed in
// validateRequestKeysPresence
if (!matchExpectation && !isCapabilityAvailable) {
- if (capability == REQUEST_AVAILABLE_CAPABILITIES_RAW) {
- // RAW capability needs to also check raw output capability
- boolean rawOutputSupported = mStaticInfo.getRawOutputSizesChecked().length > 0;
- if (rawOutputSupported) {
- mCollector.addMessage(String.format(
- "Camera %s doesn't list capability %s but contain all required keys" +
- " and RAW format output",
- mCameraId, capabilityName));
- }
+ mCollector.addMessage(String.format(
+ "Camera %s doesn't list capability %s but contain all required keys",
+ mCameraId, capabilityName));
+ }
+ }
+
+ private void validateRawCapability(boolean isCapabilityAvailable) {
+ String capabilityName = "REQUEST_AVAILABLE_CAPABILITIES_RAW";
+
+ Set<CaptureRequest.Key<?>> requestKeys = new HashSet<>();
+ requestKeys.add(CaptureRequest.HOT_PIXEL_MODE);
+ requestKeys.add(CaptureRequest.STATISTICS_HOT_PIXEL_MAP_MODE);
+
+ Set<CameraCharacteristics.Key<?>> characteristicsKeys = new HashSet<>();
+ characteristicsKeys.add(HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES);
+ characteristicsKeys.add(SENSOR_BLACK_LEVEL_PATTERN);
+ characteristicsKeys.add(SENSOR_CALIBRATION_TRANSFORM1);
+ characteristicsKeys.add(SENSOR_CALIBRATION_TRANSFORM2);
+ characteristicsKeys.add(SENSOR_COLOR_TRANSFORM1);
+ characteristicsKeys.add(SENSOR_COLOR_TRANSFORM2);
+ characteristicsKeys.add(SENSOR_FORWARD_MATRIX1);
+ characteristicsKeys.add(SENSOR_FORWARD_MATRIX2);
+ characteristicsKeys.add(SENSOR_INFO_ACTIVE_ARRAY_SIZE);
+ characteristicsKeys.add(SENSOR_INFO_COLOR_FILTER_ARRANGEMENT);
+ characteristicsKeys.add(SENSOR_INFO_WHITE_LEVEL);
+ characteristicsKeys.add(SENSOR_REFERENCE_ILLUMINANT1);
+ characteristicsKeys.add(SENSOR_REFERENCE_ILLUMINANT2);
+ characteristicsKeys.add(STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES);
+
+ Set<CaptureResult.Key<?>> resultKeys = new HashSet<>();
+ resultKeys.add(CaptureResult.SENSOR_NEUTRAL_COLOR_POINT);
+ resultKeys.add(CaptureResult.SENSOR_GREEN_SPLIT);
+ resultKeys.add(CaptureResult.SENSOR_NOISE_PROFILE);
+
+ boolean rawOutputSupported = mStaticInfo.getRawOutputSizesChecked().length > 0;
+ boolean requestKeysPresent = mStaticInfo.areRequestKeysAvailable(requestKeys);
+ boolean characteristicsKeysPresent =
+ mStaticInfo.areCharacteristicsKeysAvailable(characteristicsKeys);
+ boolean resultKeysPresent = mStaticInfo.areResultKeysAvailable(resultKeys);
+ boolean expectCapabilityPresent = rawOutputSupported && requestKeysPresent &&
+ characteristicsKeysPresent && resultKeysPresent;
+
+ if (isCapabilityAvailable != expectCapabilityPresent) {
+ if (isCapabilityAvailable) {
+ mCollector.expectTrue(
+ "REQUEST_AVAILABLE_CAPABILITIES_RAW should support RAW_SENSOR output",
+ rawOutputSupported);
+ validateRequestKeysPresence(capabilityName, requestKeys, isCapabilityAvailable);
+ validateResultKeysPresence(capabilityName, resultKeys, isCapabilityAvailable);
+ validateCharacteristicsKeysPresence(capabilityName, characteristicsKeys,
+ isCapabilityAvailable);
} else {
mCollector.addMessage(String.format(
- "Camera %s doesn't list capability %s but contain all required keys",
+ "Camera %s doesn't list capability %s but contain all required keys" +
+ " and RAW format output",
mCameraId, capabilityName));
}
}
diff --git a/tests/tests/hardware/src/android/hardware/cts/SensorBatchingTests.java b/tests/tests/hardware/src/android/hardware/cts/SensorBatchingTests.java
new file mode 100644
index 0000000..3d66b50
--- /dev/null
+++ b/tests/tests/hardware/src/android/hardware/cts/SensorBatchingTests.java
@@ -0,0 +1,319 @@
+/*
+ * Copyright (C) 2014 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 android.hardware.cts;
+
+import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.SensorManager;
+import android.hardware.cts.helpers.SensorCtsHelper;
+import android.hardware.cts.helpers.SensorStats;
+import android.hardware.cts.helpers.SensorTestInformation;
+import android.hardware.cts.helpers.sensoroperations.TestSensorFlushOperation;
+import android.hardware.cts.helpers.sensoroperations.TestSensorOperation;
+import android.hardware.cts.helpers.sensoroperations.VerifiableSensorOperation;
+import android.hardware.cts.helpers.sensorverification.ISensorVerification;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Set of tests to verify that sensors operate correctly when operating in batching mode.
+ * This class defines tests for continuous sensors when the device is awake.
+ * On-change and special sensors are tested separately inside CtsVerifier, and they are defined in:
+ * {@link com.android.cts.verifier.sensors.BatchingTestActivity}.
+ *
+ * Each test is expected to pass even if batching is not supported for a particular sensor. This is
+ * usually achieved by ensuring that {@link ISensorVerification}s fallback accordingly.
+ *
+ * <p>To execute these test cases, the following command can be used:</p>
+ * <pre>
+ * adb shell am instrument -e class android.hardware.cts.SensorBatchingTests \
+ * -w com.android.cts.hardware/android.test.AndroidJUnitRunner
+ * </pre>
+ */
+public class SensorBatchingTests extends SensorTestCase {
+ private static final String TAG = "SensorBatchingTests";
+
+ private static final int BATCHING_10S = 10;
+ private static final int RATE_50HZ = 20000;
+ private static final int RATE_FASTEST = SensorManager.SENSOR_DELAY_FASTEST;
+
+ /**
+ * An arbitrary 'padding' time slot to wait for events after batching latency expires.
+ * This allows for the test to wait for event arrivals after batching was expected.
+ */
+ private static final int BATCHING_PADDING_TIME_S = 2;
+
+ public void testAccelerometer_fastest_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testAccelerometer_50hz_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testAccelerometer_fastest_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testAccelerometer_50hz_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testMagneticField_fastest_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testMagneticField_50hz_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testMagneticField_fastest_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testMagneticField_50hz_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_50HZ, BATCHING_10S);
+ }
+
+ @SuppressWarnings("deprecation")
+ public void testOrientation_fastest_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_ORIENTATION, RATE_FASTEST, BATCHING_10S);
+ }
+
+ @SuppressWarnings("deprecation")
+ public void testOrientation_50hz_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_ORIENTATION, RATE_50HZ, BATCHING_10S);
+ }
+
+ @SuppressWarnings("deprecation")
+ public void testOrientation_fastest_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_ORIENTATION, RATE_FASTEST, BATCHING_10S);
+ }
+
+ @SuppressWarnings("deprecation")
+ public void testOrientation_50hz_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_ORIENTATION, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testGyroscope_fastest_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_GYROSCOPE, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testGyroscope_50hz_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_GYROSCOPE, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testGyroscope_fastest_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_GYROSCOPE, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_10S);
+ }
+
+ public void testGyroscope_50hz_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_GYROSCOPE, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testPressure_fastest_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_PRESSURE, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testPressure_50hz_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_PRESSURE, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testPressure_fastest_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_PRESSURE, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_10S);
+ }
+
+ public void testPressure_50hz_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_PRESSURE, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testGravity_fastest_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_GRAVITY, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testGravity_50hz_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_GRAVITY, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testGravity_fastest_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_GRAVITY, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_10S);
+ }
+
+ public void testGravity_50hz_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_GRAVITY, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testRotationVector_fastest_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testRotationVector_50hz_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testRotationVector_fastest_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testRotationVector_50hz_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testMagneticFieldUncalibrated_fastest_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testMagneticFieldUncalibrated_50hz_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testMagneticFieldUncalibrated_fastest_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testMagneticFieldUncalibrated_50hz_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testGameRotationVector_fastest_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testGameRotationVector_50hz_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testGameRotationVector_fastest_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testGameRotationVector_50hz_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testGyroscopeUncalibrated_fastest_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testGyroscopeUncalibrated_50hz_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testGyroscopeUncalibrated_fastest_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testGyroscopeUncalibrated_50hz_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testLinearAcceleration_fastest_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testLinearAcceleration_50hz_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testLinearAcceleration_fastest_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testLinearAcceleration_50hz_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testGeomagneticRotationVector_fastest_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testGeomagneticRotationVector_50hz_batching() throws Throwable {
+ runBatchingSensorTest(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR, RATE_50HZ, BATCHING_10S);
+ }
+
+ public void testGeomagneticRotationVector_fastest_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR, RATE_FASTEST, BATCHING_10S);
+ }
+
+ public void testGeomagneticRotationVector_50hz_flush() throws Throwable {
+ runFlushSensorTest(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR, RATE_50HZ, BATCHING_10S);
+ }
+
+ private void runBatchingSensorTest(int sensorType, int rateUs, int maxBatchReportLatencySec)
+ throws Throwable {
+ Context context = getContext();
+ int maxBatchReportLatencyUs = (int) TimeUnit.SECONDS.toMicros(maxBatchReportLatencySec);
+ int testDurationSec = maxBatchReportLatencySec + BATCHING_PADDING_TIME_S;
+ TestSensorOperation operation = new TestSensorOperation(
+ context,
+ sensorType,
+ rateUs,
+ maxBatchReportLatencyUs,
+ testDurationSec,
+ TimeUnit.SECONDS);
+
+ boolean flushExpected = false;
+ executeTest(operation, sensorType, rateUs, maxBatchReportLatencyUs, flushExpected);
+ }
+
+ private void runFlushSensorTest(int sensorType, int rateUs, int maxBatchReportLatencySec)
+ throws Throwable {
+ Context context = getContext();
+ int maxBatchReportLatencyUs = (int) TimeUnit.SECONDS.toMicros(maxBatchReportLatencySec);
+ int flushDurationSec = maxBatchReportLatencySec / 2;
+ TestSensorFlushOperation operation = new TestSensorFlushOperation(
+ context,
+ sensorType,
+ rateUs,
+ maxBatchReportLatencyUs,
+ flushDurationSec,
+ TimeUnit.SECONDS);
+
+ boolean flushExpected = true;
+ executeTest(operation, sensorType, rateUs, maxBatchReportLatencyUs, flushExpected);
+ }
+
+ private void executeTest(
+ VerifiableSensorOperation operation,
+ int sensorType,
+ int rateUs,
+ int maxBatchReportLatencyUs,
+ boolean flushExpected) throws Throwable {
+ operation.addDefaultVerifications();
+ operation.setLogEvents(true);
+
+ try {
+ operation.execute();
+ } finally {
+ SensorStats.logStats(TAG, operation.getStats());
+
+ String sensorName = SensorTestInformation.getSanitizedSensorName(sensorType);
+ String sensorRate;
+ if (rateUs == SensorManager.SENSOR_DELAY_FASTEST) {
+ sensorRate = "fastest";
+ } else {
+ sensorRate = String.format("%.0fhz",
+ SensorCtsHelper.getFrequency(rateUs, TimeUnit.MICROSECONDS));
+ }
+ String batching = maxBatchReportLatencyUs > 0 ? "_batching" : "";
+ String flush = flushExpected ? "_flush" : "";
+ String fileName = String.format("sensor_batching_%s_%s%s%s.txt",
+ sensorName, sensorRate, batching, flush);
+ SensorStats.logStatsToFile(fileName, operation.getStats());
+ }
+ }
+}
diff --git a/tests/tests/hardware/src/android/hardware/cts/SensorIntegrationTests.java b/tests/tests/hardware/src/android/hardware/cts/SensorIntegrationTests.java
index 1b923fc..c471b7a 100644
--- a/tests/tests/hardware/src/android/hardware/cts/SensorIntegrationTests.java
+++ b/tests/tests/hardware/src/android/hardware/cts/SensorIntegrationTests.java
@@ -15,6 +15,9 @@
*/
package android.hardware.cts;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
@@ -24,11 +27,9 @@
import android.hardware.cts.helpers.sensoroperations.RepeatingSensorOperation;
import android.hardware.cts.helpers.sensoroperations.SequentialSensorOperation;
import android.hardware.cts.helpers.sensoroperations.TestSensorOperation;
+import android.hardware.cts.helpers.sensoroperations.VerifiableSensorOperation;
import android.hardware.cts.helpers.sensorverification.EventOrderingVerification;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
import java.util.Random;
/**
@@ -225,7 +226,7 @@
100 /* event count */);
tester.addVerification(new EventOrderingVerification());
- TestSensorOperation testee = new TestSensorOperation(
+ VerifiableSensorOperation testee = new TestSensorOperation(
context,
mSensorTypeTestee,
SensorManager.SENSOR_DELAY_FASTEST,
diff --git a/tests/tests/hardware/src/android/hardware/cts/SensorTest.java b/tests/tests/hardware/src/android/hardware/cts/SensorTest.java
index 5607123..a4d4157 100644
--- a/tests/tests/hardware/src/android/hardware/cts/SensorTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/SensorTest.java
@@ -518,8 +518,11 @@
assertTrue(sensor.getResolution() >= 0);
assertNotNull(sensor.getVendor());
assertTrue(sensor.getVersion() > 0);
- assertTrue(sensor.getFifoMaxEventCount() >= 0);
- assertTrue(sensor.getFifoReservedEventCount() >= 0);
+ int fifoMaxEventCount = sensor.getFifoMaxEventCount();
+ int fifoReservedEventCount = sensor.getFifoReservedEventCount();
+ assertTrue(fifoMaxEventCount >= 0);
+ assertTrue(fifoReservedEventCount >= 0);
+ assertTrue(fifoReservedEventCount <= fifoMaxEventCount);
if (sensor.getReportingMode() == Sensor.REPORTING_MODE_ONE_SHOT) {
assertTrue("One shot sensors should have zero FIFO Size",
sensor.getFifoMaxEventCount() == 0);
diff --git a/tests/tests/hardware/src/android/hardware/cts/SingleSensorTests.java b/tests/tests/hardware/src/android/hardware/cts/SingleSensorTests.java
index cc7f71c..866e556 100644
--- a/tests/tests/hardware/src/android/hardware/cts/SingleSensorTests.java
+++ b/tests/tests/hardware/src/android/hardware/cts/SingleSensorTests.java
@@ -34,7 +34,7 @@
* To execute these test cases, the following command can be used:
* </p><pre>
* adb shell am instrument -e class android.hardware.cts.SingleSensorTests \
- * -w com.android.cts.hardware/android.test.InstrumentationCtsTestRunner
+ * -w com.android.cts.hardware/android.test.AndroidJUnitRunner
* </pre><p>
* For each sensor that reports continuously, it takes a set of samples. The test suite verifies
* that the event ordering, frequency, and jitter pass for the collected sensor events. It
@@ -86,9 +86,6 @@
public class SingleSensorTests extends SensorTestCase {
private static final String TAG = "SingleSensorTests";
- private static final int BATCHING_OFF = 0;
- private static final int BATCHING_5S = 5000000;
-
private static final int RATE_200HZ = 5000;
private static final int RATE_100HZ = 10000;
private static final int RATE_50HZ = 20000;
@@ -98,17 +95,8 @@
private static final int RATE_5HZ = 200000;
private static final int RATE_1HZ = 1000000;
- private static final String[] STAT_KEYS = {
- SensorStats.FREQUENCY_KEY,
- SensorStats.JITTER_95_PERCENTILE_KEY,
- SensorStats.EVENT_OUT_OF_ORDER_COUNT_KEY,
- SensorStats.MAGNITUDE_KEY,
- SensorStats.MEAN_KEY,
- SensorStats.STANDARD_DEVIATION_KEY,
- };
-
/**
- * This test verifies that the sensor's properties complies with the required properites set in
+ * This test verifies that the sensor's properties complies with the required properties set in
* the CDD.
* <p>
* It checks that the sampling rate advertised by the sensor under test matches that which is
@@ -138,513 +126,414 @@
// TODO: Figure out if a better way to enumerate test cases programmatically exists that works
// with CTS framework.
public void testAccelerometer_fastest() throws Throwable {
- runSensorTest(Sensor.TYPE_ACCELEROMETER, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ACCELEROMETER, SensorManager.SENSOR_DELAY_FASTEST);
}
public void testAccelerometer_100hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_100HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_100HZ);
}
public void testAccelerometer_200hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_200HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_200HZ);
}
public void testAccelerometer_50hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_50HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_50HZ);
}
public void testAccelerometer_25hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_25HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_25HZ);
}
public void testAccelerometer_15hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_15HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_15HZ);
}
public void testAccelerometer_10hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_10HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_10HZ);
}
public void testAccelerometer_5hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_5HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_5HZ);
}
public void testAccelerometer_1hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_1HZ, BATCHING_OFF);
- }
-
- public void testAccelerometer_fastest_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_ACCELEROMETER, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_5S);
- }
-
- public void testAccelerometer_50hz_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_50HZ, BATCHING_5S);
+ runSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_1HZ);
}
public void testMagneticField_fastest() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, SensorManager.SENSOR_DELAY_FASTEST);
}
public void testMagneticField_200hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_200HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_200HZ);
}
public void testMagneticField_100hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_100HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_100HZ);
}
public void testMagneticField_50hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_50HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_50HZ);
}
public void testMagneticField_25hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_25HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_25HZ);
}
public void testMagneticField_15hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_15HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_15HZ);
}
public void testMagneticField_10hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_10HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_10HZ);
}
public void testMagneticField_5hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_5HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_5HZ);
}
public void testMagneticField_1hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_1HZ, BATCHING_OFF);
- }
-
- public void testMagneticField_fastest_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_5S);
- }
-
- public void testMagneticField_50hz_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_50HZ, BATCHING_5S);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD, RATE_1HZ);
}
@SuppressWarnings("deprecation")
public void testOrientation_fastest() throws Throwable {
- runSensorTest(Sensor.TYPE_ORIENTATION, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ORIENTATION, SensorManager.SENSOR_DELAY_FASTEST);
}
@SuppressWarnings("deprecation")
public void testOrientation_200hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ORIENTATION, RATE_200HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ORIENTATION, RATE_200HZ);
}
@SuppressWarnings("deprecation")
public void testOrientation_100hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ORIENTATION, RATE_100HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ORIENTATION, RATE_100HZ);
}
@SuppressWarnings("deprecation")
public void testOrientation_50hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ORIENTATION, RATE_50HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ORIENTATION, RATE_50HZ);
}
@SuppressWarnings("deprecation")
public void testOrientation_25hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ORIENTATION, RATE_25HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ORIENTATION, RATE_25HZ);
}
@SuppressWarnings("deprecation")
public void testOrientation_15hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ORIENTATION, RATE_15HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ORIENTATION, RATE_15HZ);
}
@SuppressWarnings("deprecation")
public void testOrientation_10hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ORIENTATION, RATE_10HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ORIENTATION, RATE_10HZ);
}
@SuppressWarnings("deprecation")
public void testOrientation_5hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ORIENTATION, RATE_5HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ORIENTATION, RATE_5HZ);
}
@SuppressWarnings("deprecation")
public void testOrientation_1hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ORIENTATION, RATE_1HZ, BATCHING_OFF);
- }
-
- @SuppressWarnings("deprecation")
- public void testOrientation_fastest_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_ORIENTATION, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_5S);
- }
-
- @SuppressWarnings("deprecation")
- public void testOrientation_50hz_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_ORIENTATION, RATE_50HZ, BATCHING_5S);
+ runSensorTest(Sensor.TYPE_ORIENTATION, RATE_1HZ);
}
public void testGyroscope_fastest() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE, SensorManager.SENSOR_DELAY_FASTEST);
}
public void testGyroscope_200hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_200HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_200HZ);
}
public void testGyroscope_100hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_100HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_100HZ);
}
public void testGyroscope_50hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_50HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_50HZ);
}
public void testGyroscope_25hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_25HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_25HZ);
}
public void testGyroscope_15hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_15HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_15HZ);
}
public void testGyroscope_10hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_10HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_10HZ);
}
public void testGyroscope_5hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_5HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_5HZ);
}
public void testGyroscope_1hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_1HZ, BATCHING_OFF);
- }
-
- public void testGyroscope_fastest_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_5S);
- }
-
- public void testGyroscope_50hz_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_50HZ, BATCHING_5S);
+ runSensorTest(Sensor.TYPE_GYROSCOPE, RATE_1HZ);
}
public void testPressure_fastest() throws Throwable {
- runSensorTest(Sensor.TYPE_PRESSURE, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_PRESSURE, SensorManager.SENSOR_DELAY_FASTEST);
}
public void testPressure_200hz() throws Throwable {
- runSensorTest(Sensor.TYPE_PRESSURE, RATE_200HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_PRESSURE, RATE_200HZ);
}
public void testPressure_100hz() throws Throwable {
- runSensorTest(Sensor.TYPE_PRESSURE, RATE_100HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_PRESSURE, RATE_100HZ);
}
public void testPressure_50hz() throws Throwable {
- runSensorTest(Sensor.TYPE_PRESSURE, RATE_50HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_PRESSURE, RATE_50HZ);
}
public void testPressure_25hz() throws Throwable {
- runSensorTest(Sensor.TYPE_PRESSURE, RATE_25HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_PRESSURE, RATE_25HZ);
}
public void testPressure_15hz() throws Throwable {
- runSensorTest(Sensor.TYPE_PRESSURE, RATE_15HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_PRESSURE, RATE_15HZ);
}
public void testPressure_10hz() throws Throwable {
- runSensorTest(Sensor.TYPE_PRESSURE, RATE_10HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_PRESSURE, RATE_10HZ);
}
public void testPressure_5hz() throws Throwable {
- runSensorTest(Sensor.TYPE_PRESSURE, RATE_5HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_PRESSURE, RATE_5HZ);
}
public void testPressure_1hz() throws Throwable {
- runSensorTest(Sensor.TYPE_PRESSURE, RATE_1HZ, BATCHING_OFF);
- }
-
- public void testPressure_fastest_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_PRESSURE, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_5S);
- }
-
- public void testPressure_50hz_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_PRESSURE, RATE_50HZ, BATCHING_5S);
+ runSensorTest(Sensor.TYPE_PRESSURE, RATE_1HZ);
}
public void testGravity_fastest() throws Throwable {
- runSensorTest(Sensor.TYPE_GRAVITY, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GRAVITY, SensorManager.SENSOR_DELAY_FASTEST);
}
public void testGravity_200hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GRAVITY, RATE_200HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GRAVITY, RATE_200HZ);
}
public void testGravity_100hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GRAVITY, RATE_100HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GRAVITY, RATE_100HZ);
}
public void testGravity_50hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GRAVITY, RATE_50HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GRAVITY, RATE_50HZ);
}
public void testGravity_25hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GRAVITY, RATE_25HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GRAVITY, RATE_25HZ);
}
public void testGravity_15hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GRAVITY, RATE_15HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GRAVITY, RATE_15HZ);
}
public void testGravity_10hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GRAVITY, RATE_10HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GRAVITY, RATE_10HZ);
}
public void testGravity_5hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GRAVITY, RATE_5HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GRAVITY, RATE_5HZ);
}
public void testGravity_1hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GRAVITY, RATE_1HZ, BATCHING_OFF);
- }
-
- public void testGravity_fastest_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_GRAVITY, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_5S);
- }
-
- public void testGravity_50hz_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_GRAVITY, RATE_50HZ, BATCHING_5S);
+ runSensorTest(Sensor.TYPE_GRAVITY, RATE_1HZ);
}
public void testRotationVector_fastest() throws Throwable {
- runSensorTest(Sensor.TYPE_ROTATION_VECTOR, SensorManager.SENSOR_DELAY_FASTEST,
- BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ROTATION_VECTOR, SensorManager.SENSOR_DELAY_FASTEST);
}
public void testRotationVector_200hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_200HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_200HZ);
}
public void testRotationVector_100hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_100HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_100HZ);
}
public void testRotationVector_50hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_50HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_50HZ);
}
public void testRotationVector_25hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_25HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_25HZ);
}
public void testRotationVector_15hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_15HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_15HZ);
}
public void testRotationVector_10hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_10HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_10HZ);
}
public void testRotationVector_5hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_5HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_5HZ);
}
public void testRotationVector_1hz() throws Throwable {
- runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_1HZ, BATCHING_OFF);
- }
-
- public void testRotationVector_fastest_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_ROTATION_VECTOR, SensorManager.SENSOR_DELAY_FASTEST, BATCHING_5S);
- }
-
- public void testRotationVector_50hz_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_50HZ, BATCHING_5S);
+ runSensorTest(Sensor.TYPE_ROTATION_VECTOR, RATE_1HZ);
}
public void testMagneticFieldUncalibrated_fastest() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, SensorManager.SENSOR_DELAY_FASTEST,
- BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, SensorManager.SENSOR_DELAY_FASTEST);
}
public void testMagneticFieldUncalibrated_200hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_200HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_200HZ);
}
public void testMagneticFieldUncalibrated_100hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_100HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_100HZ);
}
public void testMagneticFieldUncalibrated_50hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_50HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_50HZ);
}
public void testMagneticFieldUncalibrated_25hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_25HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_25HZ);
}
public void testMagneticFieldUncalibrated_15hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_15HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_15HZ);
}
public void testMagneticFieldUncalibrated_10hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_10HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_10HZ);
}
public void testMagneticFieldUncalibrated_5hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_5HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_5HZ);
}
public void testMagneticFieldUncalibrated_1hz() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_1HZ, BATCHING_OFF);
- }
-
- public void testMagneticFieldUncalibrated_fastest_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, SensorManager.SENSOR_DELAY_FASTEST,
- BATCHING_5S);
- }
-
- public void testMagneticFieldUncalibrated_50hz_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_50HZ, BATCHING_5S);
+ runSensorTest(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, RATE_1HZ);
}
public void testGameRotationVector_fastest() throws Throwable {
- runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, SensorManager.SENSOR_DELAY_FASTEST,
- BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, SensorManager.SENSOR_DELAY_FASTEST);
}
public void testGameRotationVector_200hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_200HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_200HZ);
}
public void testGameRotationVector_100hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_100HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_100HZ);
}
public void testGameRotationVector_50hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_50HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_50HZ);
}
public void testGameRotationVector_25hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_25HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_25HZ);
}
public void testGameRotationVector_15hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_15HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_15HZ);
}
public void testGameRotationVector_10hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_10HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_10HZ);
}
public void testGameRotationVector_5hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_5HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_5HZ);
}
public void testGameRotationVector_1hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_1HZ, BATCHING_OFF);
- }
-
- public void testGameRotationVector_fastest_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, SensorManager.SENSOR_DELAY_FASTEST,
- BATCHING_5S);
- }
-
- public void testGameRotationVector_50hz_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_50HZ, BATCHING_5S);
+ runSensorTest(Sensor.TYPE_GAME_ROTATION_VECTOR, RATE_1HZ);
}
public void testGyroscopeUncalibrated_fastest() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, SensorManager.SENSOR_DELAY_FASTEST,
- BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, SensorManager.SENSOR_DELAY_FASTEST);
}
public void testGyroscopeUncalibrated_200hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_200HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_200HZ);
}
public void testGyroscopeUncalibrated_100hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_100HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_100HZ);
}
public void testGyroscopeUncalibrated_50hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_50HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_50HZ);
}
public void testGyroscopeUncalibrated_25hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_25HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_25HZ);
}
public void testGyroscopeUncalibrated_15hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_15HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_15HZ);
}
public void testGyroscopeUncalibrated_10hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_10HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_10HZ);
}
public void testGyroscopeUncalibrated_5hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_5HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_5HZ);
}
public void testGyroscopeUncalibrated_1hz() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_1HZ, BATCHING_OFF);
- }
-
- public void testGyroscopeUncalibrated_fastest_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, SensorManager.SENSOR_DELAY_FASTEST,
- BATCHING_5S);
- }
-
- public void testGyroscopeUncalibrated_50hz_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_50HZ, BATCHING_5S);
+ runSensorTest(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, RATE_1HZ);
}
public void testGeomagneticRotationVector_fastest() throws Throwable {
- runSensorTest(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR, SensorManager.SENSOR_DELAY_FASTEST,
- BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR, SensorManager.SENSOR_DELAY_FASTEST);
}
public void testLinearAcceleration_200hz() throws Throwable {
- runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_200HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_200HZ);
}
public void testLinearAcceleration_100hz() throws Throwable {
- runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_100HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_100HZ);
}
public void testLinearAcceleration_50hz() throws Throwable {
- runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_50HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_50HZ);
}
public void testLinearAcceleration_25hz() throws Throwable {
- runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_25HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_25HZ);
}
public void testLinearAcceleration_15hz() throws Throwable {
- runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_15HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_15HZ);
}
public void testLinearAcceleration_10hz() throws Throwable {
- runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_10HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_10HZ);
}
public void testLinearAcceleration_5hz() throws Throwable {
- runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_5HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_5HZ);
}
public void testLinearAcceleration_1hz() throws Throwable {
- runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_1HZ, BATCHING_OFF);
+ runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_1HZ);
}
- public void testLinearAcceleration_fastest_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, SensorManager.SENSOR_DELAY_FASTEST,
- BATCHING_5S);
- }
-
- public void testLinearAcceleration_50hz_batching() throws Throwable {
- runSensorTest(Sensor.TYPE_LINEAR_ACCELERATION, RATE_50HZ, BATCHING_5S);
- }
-
- private void runSensorTest(int sensorType, int rateUs, int maxBatchReportLatencyUs)
+ private void runSensorTest(int sensorType, int rateUs)
throws Throwable {
TestSensorOperation op = new TestSensorOperation(this.getContext(), sensorType,
- rateUs, maxBatchReportLatencyUs, 5, TimeUnit.SECONDS);
- op.setDefaultVerifications();
+ rateUs, 0 /* maxBatchReportLatencyUs */, 5, TimeUnit.SECONDS);
+ op.addDefaultVerifications();
op.setLogEvents(true);
try {
op.execute();
@@ -659,9 +548,7 @@
sensorRate = String.format("%.0fhz",
SensorCtsHelper.getFrequency(rateUs, TimeUnit.MICROSECONDS));
}
- String batching = maxBatchReportLatencyUs > 0 ? "_batching" : "";
- String fileName = String.format("single_sensor_%s_%s%s.txt",
- sensorName, sensorRate, batching);
+ String fileName = String.format("single_sensor_%s_%s.txt", sensorName, sensorRate);
SensorStats.logStatsToFile(fileName, op.getStats());
}
}
diff --git a/tests/tests/hardware/src/android/hardware/cts/helpers/TestSensorManager.java b/tests/tests/hardware/src/android/hardware/cts/helpers/TestSensorManager.java
index a45ad70..1c1ea1c 100644
--- a/tests/tests/hardware/src/android/hardware/cts/helpers/TestSensorManager.java
+++ b/tests/tests/hardware/src/android/hardware/cts/helpers/TestSensorManager.java
@@ -16,6 +16,8 @@
package android.hardware.cts.helpers;
+import junit.framework.Assert;
+
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEventListener;
@@ -23,8 +25,6 @@
import android.hardware.SensorManager;
import android.util.Log;
-import junit.framework.Assert;
-
import java.util.concurrent.TimeUnit;
/**
@@ -213,6 +213,29 @@
}
/**
+ * Registers a listener, waits for a specific duration, calls flush, and waits for flush to
+ * complete.
+ */
+ public void runSensorAndFlush(
+ TestSensorEventListener listener,
+ long duration,
+ TimeUnit timeUnit) {
+ if (mTestSensorEventListener != null) {
+ Log.w(LOG_TAG, "Listener already registered, returning.");
+ return;
+ }
+
+ try {
+ registerListener(listener);
+ SensorCtsHelper.sleep(duration, timeUnit);
+ startFlush();
+ listener.waitForFlushComplete();
+ } finally {
+ unregisterListener();
+ }
+ }
+
+ /**
* Get the sensor under test.
*/
public Sensor getSensor() {
diff --git a/tests/tests/hardware/src/android/hardware/cts/helpers/sensoroperations/TestSensorFlushOperation.java b/tests/tests/hardware/src/android/hardware/cts/helpers/sensoroperations/TestSensorFlushOperation.java
new file mode 100644
index 0000000..135d674
--- /dev/null
+++ b/tests/tests/hardware/src/android/hardware/cts/helpers/sensoroperations/TestSensorFlushOperation.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2014 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 android.hardware.cts.helpers.sensoroperations;
+
+import android.content.Context;
+import android.hardware.cts.helpers.TestSensorEventListener;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A {@link ISensorOperation} used to verify that sensor events and sensor values are correct.
+ * <p>
+ * Provides methods to set test expectations as well as providing a set of default expectations
+ * depending on sensor type. When {{@link #execute()} is called, the sensor will collect the
+ * events, call flush, and then run all the tests.
+ * </p>
+ */
+public class TestSensorFlushOperation extends VerifiableSensorOperation {
+ private final Long mDuration;
+ private final TimeUnit mTimeUnit;
+
+ /**
+ * Create a {@link TestSensorOperation}.
+ *
+ * @param context the {@link Context}.
+ * @param sensorType the sensor type
+ * @param rateUs the rate that
+ * @param maxBatchReportLatencyUs the max batch report latency
+ * @param duration the duration to gather events before calling {@code SensorManager.flush()}
+ * @param timeUnit the time unit of the duration
+ */
+ public TestSensorFlushOperation(
+ Context context,
+ int sensorType,
+ int rateUs,
+ int maxBatchReportLatencyUs,
+ long duration,
+ TimeUnit timeUnit) {
+ super(context, sensorType, rateUs, maxBatchReportLatencyUs);
+ mDuration = duration;
+ mTimeUnit = timeUnit;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void doExecute(TestSensorEventListener listener) {
+ mSensorManager.runSensorAndFlush(listener, mDuration, mTimeUnit);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected VerifiableSensorOperation doClone() {
+ return new TestSensorFlushOperation(
+ mContext,
+ mSensorType,
+ mRateUs,
+ mMaxBatchReportLatencyUs,
+ mDuration,
+ mTimeUnit);
+ }
+}
diff --git a/tests/tests/hardware/src/android/hardware/cts/helpers/sensoroperations/TestSensorOperation.java b/tests/tests/hardware/src/android/hardware/cts/helpers/sensoroperations/TestSensorOperation.java
index b841eda..5982d24 100644
--- a/tests/tests/hardware/src/android/hardware/cts/helpers/sensoroperations/TestSensorOperation.java
+++ b/tests/tests/hardware/src/android/hardware/cts/helpers/sensoroperations/TestSensorOperation.java
@@ -17,25 +17,8 @@
package android.hardware.cts.helpers.sensoroperations;
import android.content.Context;
-import android.hardware.Sensor;
-import android.hardware.cts.helpers.SensorCtsHelper;
-import android.hardware.cts.helpers.SensorStats;
-import android.hardware.cts.helpers.SensorTestInformation;
-import android.hardware.cts.helpers.TestSensorManager;
-import android.hardware.cts.helpers.ValidatingSensorEventListener;
-import android.hardware.cts.helpers.sensorverification.EventGapVerification;
-import android.hardware.cts.helpers.sensorverification.EventOrderingVerification;
-import android.hardware.cts.helpers.sensorverification.FrequencyVerification;
-import android.hardware.cts.helpers.sensorverification.ISensorVerification;
-import android.hardware.cts.helpers.sensorverification.JitterVerification;
-import android.hardware.cts.helpers.sensorverification.MagnitudeVerification;
-import android.hardware.cts.helpers.sensorverification.MeanVerification;
-import android.hardware.cts.helpers.sensorverification.StandardDeviationVerification;
+import android.hardware.cts.helpers.TestSensorEventListener;
-import junit.framework.Assert;
-
-import java.util.Collection;
-import java.util.HashSet;
import java.util.concurrent.TimeUnit;
/**
@@ -46,21 +29,11 @@
* events and then run all the tests.
* </p>
*/
-public class TestSensorOperation extends AbstractSensorOperation {
- private final TestSensorManager mSensorManager;
- private final Context mContext;
- private final int mSensorType;
- private final int mRateUs;
- private final int mMaxBatchReportLatencyUs;
+public class TestSensorOperation extends VerifiableSensorOperation {
private final Integer mEventCount;
private final Long mDuration;
private final TimeUnit mTimeUnit;
- private final Collection<ISensorVerification> mVerifications =
- new HashSet<ISensorVerification>();
-
- private boolean mLogEvents = false;
-
/**
* Create a {@link TestSensorOperation}.
*
@@ -95,109 +68,35 @@
*/
private TestSensorOperation(Context context, int sensorType, int rateUs,
int maxBatchReportLatencyUs, Integer eventCount, Long duration, TimeUnit timeUnit) {
- mContext = context;
- mSensorType = sensorType;
- mRateUs = rateUs;
- mMaxBatchReportLatencyUs = maxBatchReportLatencyUs;
+ super(context, sensorType, rateUs, maxBatchReportLatencyUs);
mEventCount = eventCount;
mDuration = duration;
mTimeUnit = timeUnit;
- mSensorManager = new TestSensorManager(mContext, mSensorType, mRateUs,
- mMaxBatchReportLatencyUs);
}
/**
- * Set whether to log events.
- */
- public void setLogEvents(boolean logEvents) {
- mLogEvents = logEvents;
- }
-
- /**
- * Set all of the default test expectations.
- */
- public void setDefaultVerifications() {
- Sensor sensor = mSensorManager.getSensor();
- addVerification(EventGapVerification.getDefault(sensor, mRateUs));
- addVerification(EventOrderingVerification.getDefault(sensor));
- addVerification(FrequencyVerification.getDefault(sensor, mRateUs));
- addVerification(JitterVerification.getDefault(sensor, mRateUs));
- addVerification(MagnitudeVerification.getDefault(sensor));
- addVerification(MeanVerification.getDefault(sensor));
- // Skip SigNumVerification since it has no default
- addVerification(StandardDeviationVerification.getDefault(sensor));
- }
-
- public void addVerification(ISensorVerification verification) {
- if (verification != null) {
- mVerifications.add(verification);
- }
- }
-
- /**
- * Collect the specified number of events from the sensor and run all enabled verifications.
+ * {@inheritDoc}
*/
@Override
- public void execute() {
- getStats().addValue("sensor_name", SensorTestInformation.getSensorName(mSensorType));
-
- ValidatingSensorEventListener listener = new ValidatingSensorEventListener(mVerifications);
- listener.setLogEvents(mLogEvents);
-
+ protected void doExecute(TestSensorEventListener listener) {
if (mEventCount != null) {
mSensorManager.runSensor(listener, mEventCount);
} else {
mSensorManager.runSensor(listener, mDuration, mTimeUnit);
}
-
- boolean failed = false;
- StringBuilder sb = new StringBuilder();
-
- for (ISensorVerification verification : mVerifications) {
- failed |= evaluateResults(verification, sb);
- }
-
- if (failed) {
- String msg = SensorCtsHelper.formatAssertionMessage(mSensorManager.getSensor(),
- "VerifySensorOperation", mRateUs, mMaxBatchReportLatencyUs, sb.toString());
- getStats().addValue(SensorStats.ERROR, msg);
- Assert.fail(msg);
- }
}
/**
* {@inheritDoc}
*/
@Override
- public TestSensorOperation clone() {
- TestSensorOperation operation;
+ protected VerifiableSensorOperation doClone() {
if (mEventCount != null) {
- operation = new TestSensorOperation(mContext, mSensorType, mRateUs,
+ return new TestSensorOperation(mContext, mSensorType, mRateUs,
mMaxBatchReportLatencyUs, mEventCount);
} else {
- operation = new TestSensorOperation(mContext, mSensorType, mRateUs,
+ return new TestSensorOperation(mContext, mSensorType, mRateUs,
mMaxBatchReportLatencyUs, mDuration, mTimeUnit);
}
-
- for (ISensorVerification verification : mVerifications) {
- operation.addVerification(verification.clone());
- }
- return operation;
- }
-
- /**
- * Evaluate the results of a test, aggregate the stats, and build the error message.
- */
- private boolean evaluateResults(ISensorVerification verification, StringBuilder sb) {
- try {
- verification.verify(getStats());
- } catch (AssertionError e) {
- if (sb.length() > 0) {
- sb.append(", ");
- }
- sb.append(e.getMessage());
- return true;
- }
- return false;
}
}
diff --git a/tests/tests/hardware/src/android/hardware/cts/helpers/sensoroperations/VerifiableSensorOperation.java b/tests/tests/hardware/src/android/hardware/cts/helpers/sensoroperations/VerifiableSensorOperation.java
new file mode 100644
index 0000000..d0a5673
--- /dev/null
+++ b/tests/tests/hardware/src/android/hardware/cts/helpers/sensoroperations/VerifiableSensorOperation.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2014 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 android.hardware.cts.helpers.sensoroperations;
+
+import junit.framework.Assert;
+
+import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.cts.helpers.SensorCtsHelper;
+import android.hardware.cts.helpers.SensorStats;
+import android.hardware.cts.helpers.SensorTestInformation;
+import android.hardware.cts.helpers.TestSensorEventListener;
+import android.hardware.cts.helpers.TestSensorManager;
+import android.hardware.cts.helpers.ValidatingSensorEventListener;
+import android.hardware.cts.helpers.sensorverification.EventGapVerification;
+import android.hardware.cts.helpers.sensorverification.EventOrderingVerification;
+import android.hardware.cts.helpers.sensorverification.FrequencyVerification;
+import android.hardware.cts.helpers.sensorverification.ISensorVerification;
+import android.hardware.cts.helpers.sensorverification.JitterVerification;
+import android.hardware.cts.helpers.sensorverification.MagnitudeVerification;
+import android.hardware.cts.helpers.sensorverification.MeanVerification;
+import android.hardware.cts.helpers.sensorverification.StandardDeviationVerification;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+/**
+ * A {@link ISensorOperation} used to verify that sensor events and sensor values are correct.
+ * <p>
+ * Provides methods to set test expectations as well as providing a set of default expectations
+ * depending on sensor type. When {{@link #execute()} is called, the sensor will collect the
+ * events and then run all the tests.
+ * </p>
+ */
+public abstract class VerifiableSensorOperation extends AbstractSensorOperation {
+ protected final TestSensorManager mSensorManager;
+ protected final Context mContext;
+ protected final int mSensorType;
+ protected final int mRateUs;
+ protected final int mMaxBatchReportLatencyUs;
+
+ private final Collection<ISensorVerification> mVerifications =
+ new HashSet<ISensorVerification>();
+
+ private boolean mLogEvents = false;
+
+ /**
+ * Create a {@link TestSensorOperation}.
+ *
+ * @param context the {@link Context}.
+ * @param sensorType the sensor type
+ * @param rateUs the rate that
+ * @param maxBatchReportLatencyUs the max batch report latency
+ */
+ public VerifiableSensorOperation(
+ Context context,
+ int sensorType,
+ int rateUs,
+ int maxBatchReportLatencyUs) {
+ mContext = context;
+ mSensorType = sensorType;
+ mRateUs = rateUs;
+ mMaxBatchReportLatencyUs = maxBatchReportLatencyUs;
+ mSensorManager = new TestSensorManager(mContext, mSensorType, mRateUs,
+ mMaxBatchReportLatencyUs);
+ }
+
+ /**
+ * Set whether to log events.
+ */
+ public void setLogEvents(boolean logEvents) {
+ mLogEvents = logEvents;
+ }
+
+ /**
+ * Set all of the default test expectations.
+ */
+ public void addDefaultVerifications() {
+ Sensor sensor = mSensorManager.getSensor();
+ addVerification(EventGapVerification.getDefault(sensor, mRateUs));
+ addVerification(EventOrderingVerification.getDefault(sensor));
+ addVerification(FrequencyVerification.getDefault(sensor, mRateUs));
+ addVerification(JitterVerification.getDefault(sensor, mRateUs));
+ addVerification(MagnitudeVerification.getDefault(sensor));
+ addVerification(MeanVerification.getDefault(sensor));
+ // Skip SigNumVerification since it has no default
+ addVerification(StandardDeviationVerification.getDefault(sensor));
+ }
+
+ public void addVerification(ISensorVerification verification) {
+ if (verification != null) {
+ mVerifications.add(verification);
+ }
+ }
+
+ /**
+ * Collect the specified number of events from the sensor and run all enabled verifications.
+ */
+ @Override
+ public void execute() {
+ getStats().addValue("sensor_name", SensorTestInformation.getSensorName(mSensorType));
+
+ ValidatingSensorEventListener listener = new ValidatingSensorEventListener(mVerifications);
+ listener.setLogEvents(mLogEvents);
+
+ doExecute(listener);
+
+ boolean failed = false;
+ StringBuilder sb = new StringBuilder();
+ for (ISensorVerification verification : mVerifications) {
+ failed |= evaluateResults(verification, sb);
+ }
+
+ if (failed) {
+ String msg = SensorCtsHelper.formatAssertionMessage(mSensorManager.getSensor(),
+ "VerifySensorOperation", mRateUs, mMaxBatchReportLatencyUs, sb.toString());
+ getStats().addValue(SensorStats.ERROR, msg);
+ Assert.fail(msg);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public VerifiableSensorOperation clone() {
+ VerifiableSensorOperation operation = doClone();
+ for (ISensorVerification verification : mVerifications) {
+ operation.addVerification(verification.clone());
+ }
+ return operation;
+ }
+
+ /**
+ * Execute operations in a {@link TestSensorManager}.
+ */
+ protected abstract void doExecute(TestSensorEventListener listener);
+
+ /**
+ * Clone the subclass operation.
+ */
+ protected abstract VerifiableSensorOperation doClone();
+
+ /**
+ * Evaluate the results of a test, aggregate the stats, and build the error message.
+ */
+ private boolean evaluateResults(ISensorVerification verification, StringBuilder sb) {
+ try {
+ verification.verify(getStats());
+ } catch (AssertionError e) {
+ if (sb.length() > 0) {
+ sb.append(", ");
+ }
+ sb.append(e.getMessage());
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/tests/tests/location/Android.mk b/tests/tests/location/Android.mk
index 2503fc7..02de2f2 100644
--- a/tests/tests/location/Android.mk
+++ b/tests/tests/location/Android.mk
@@ -27,8 +27,6 @@
LOCAL_PACKAGE_NAME := CtsLocationTestCases
-LOCAL_INSTRUMENTATION_FOR := CtsTestStubs
-
LOCAL_SDK_VERSION := current
include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/location2/Android.mk b/tests/tests/location2/Android.mk
index 6daca72..5b227b2 100644
--- a/tests/tests/location2/Android.mk
+++ b/tests/tests/location2/Android.mk
@@ -27,8 +27,6 @@
LOCAL_PACKAGE_NAME := CtsLocation2TestCases
-LOCAL_INSTRUMENTATION_FOR := CtsTestStubs
-
# uncomment when Location.EXTRA_NO_GPS_LOCATION is removed
#LOCAL_SDK_VERSION := curren
diff --git a/tests/tests/media/res/raw/camera_click.ogg b/tests/tests/media/res/raw/camera_click.ogg
new file mode 100644
index 0000000..b836e10
--- /dev/null
+++ b/tests/tests/media/res/raw/camera_click.ogg
Binary files differ
diff --git a/tests/tests/media/src/android/media/cts/AudioManagerTest.java b/tests/tests/media/src/android/media/cts/AudioManagerTest.java
index 3eaafd4..e65fb0b 100644
--- a/tests/tests/media/src/android/media/cts/AudioManagerTest.java
+++ b/tests/tests/media/src/android/media/cts/AudioManagerTest.java
@@ -125,8 +125,6 @@
public void testAccessMode() throws Exception {
mAudioManager.setMode(MODE_RINGTONE);
assertEquals(MODE_RINGTONE, mAudioManager.getMode());
- mAudioManager.setMode(MODE_IN_CALL);
- assertEquals(MODE_IN_CALL, mAudioManager.getMode());
mAudioManager.setMode(MODE_IN_COMMUNICATION);
assertEquals(MODE_IN_COMMUNICATION, mAudioManager.getMode());
mAudioManager.setMode(MODE_NORMAL);
diff --git a/tests/tests/media/src/android/media/cts/MediaCodecCapabilitiesTest.java b/tests/tests/media/src/android/media/cts/MediaCodecCapabilitiesTest.java
index a3f1815..e6530ec 100644
--- a/tests/tests/media/src/android/media/cts/MediaCodecCapabilitiesTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaCodecCapabilitiesTest.java
@@ -212,6 +212,10 @@
continue;
}
+ if (!supportsMimeType(codecInfo, mimeType)) {
+ continue;
+ }
+
CodecCapabilities capabilities = codecInfo.getCapabilitiesForType(mimeType);
for (CodecProfileLevel profileLevel : capabilities.profileLevels) {
if (profileLevel.profile == profile
@@ -224,4 +228,14 @@
return false;
}
+ private static boolean supportsMimeType(MediaCodecInfo codecInfo, String mimeType) {
+ String[] supportedMimeTypes = codecInfo.getSupportedTypes();
+ for (String supportedMimeType : supportedMimeTypes) {
+ if (mimeType.equalsIgnoreCase(supportedMimeType)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
}
diff --git a/tests/tests/media/src/android/media/cts/MediaPlayerTest.java b/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
index 30d164c..10ec741 100644
--- a/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
@@ -237,6 +237,98 @@
}
}
+ static class OutputListener {
+ int mSession;
+ AudioEffect mVc;
+ Visualizer mVis;
+ byte [] mVisData;
+ boolean mSoundDetected;
+ OutputListener(int session) {
+ mSession = session;
+ // creating a volume controller on output mix ensures that ro.audio.silent mutes
+ // audio after the effects and not before
+ mVc = new AudioEffect(
+ AudioEffect.EFFECT_TYPE_NULL,
+ UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b"),
+ 0,
+ session);
+ mVc.setEnabled(true);
+ mVis = new Visualizer(session);
+ int size = 256;
+ int[] range = Visualizer.getCaptureSizeRange();
+ if (size < range[0]) {
+ size = range[0];
+ }
+ if (size > range[1]) {
+ size = range[1];
+ }
+ assertTrue(mVis.setCaptureSize(size) == Visualizer.SUCCESS);
+
+ mVis.setDataCaptureListener(new Visualizer.OnDataCaptureListener() {
+ @Override
+ public void onWaveFormDataCapture(Visualizer visualizer,
+ byte[] waveform, int samplingRate) {
+ if (!mSoundDetected) {
+ for (int i = 0; i < waveform.length; i++) {
+ // 8 bit unsigned PCM, zero level is at 128, which is -128 when
+ // seen as a signed byte
+ if (waveform[i] != -128) {
+ mSoundDetected = true;
+ break;
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onFftDataCapture(Visualizer visualizer, byte[] fft, int samplingRate) {
+ }
+ }, 10000 /* milliHertz */, true /* PCM */, false /* FFT */);
+ assertTrue(mVis.setEnabled(true) == Visualizer.SUCCESS);
+ }
+
+ void reset() {
+ mSoundDetected = false;
+ }
+
+ boolean heardSound() {
+ return mSoundDetected;
+ }
+
+ void release() {
+ mVis.release();
+ mVc.release();
+ }
+ }
+
+ public void testPlayAudioTwice() throws Exception {
+ final int resid = R.raw.camera_click;
+
+ MediaPlayer mp = MediaPlayer.create(mContext, resid);
+ try {
+ mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
+ mp.setWakeMode(mContext, PowerManager.PARTIAL_WAKE_LOCK);
+
+ OutputListener listener = new OutputListener(mp.getAudioSessionId());
+
+ Thread.sleep(SLEEP_TIME);
+ assertFalse("noise heard before test started", listener.heardSound());
+
+ mp.start();
+ Thread.sleep(SLEEP_TIME);
+ assertFalse("player was still playing after " + SLEEP_TIME + " ms", mp.isPlaying());
+ assertTrue("nothing heard while test ran", listener.heardSound());
+ listener.reset();
+ mp.seekTo(0);
+ mp.start();
+ Thread.sleep(SLEEP_TIME);
+ assertTrue("nothing heard when sound was replayed", listener.heardSound());
+ listener.release();
+ } finally {
+ mp.release();
+ }
+ }
+
public void testPlayVideo() throws Exception {
playVideoTest(R.raw.testvideo, 352, 288);
}
@@ -945,24 +1037,24 @@
// Waits until at least one subtitle is fired. Timeout is 1 sec.
selectSubtitleTrack(0);
mOnTimedTextCalled.reset();
- assertTrue(mOnTimedTextCalled.waitForSignal(1000));
+ assertTrue(mOnTimedTextCalled.waitForSignal(1500));
// Try deselecting track.
deselectSubtitleTrack(0);
mOnTimedTextCalled.reset();
- assertFalse(mOnTimedTextCalled.waitForSignal(1000));
+ assertFalse(mOnTimedTextCalled.waitForSignal(1500));
}
// Run the same test for external subtitle track.
for (int i = 0; i < 2; i++) {
selectSubtitleTrack(2);
mOnTimedTextCalled.reset();
- assertTrue(mOnTimedTextCalled.waitForSignal(1000));
+ assertTrue(mOnTimedTextCalled.waitForSignal(1500));
// Try deselecting track.
deselectSubtitleTrack(2);
mOnTimedTextCalled.reset();
- assertFalse(mOnTimedTextCalled.waitForSignal(1000));
+ assertFalse(mOnTimedTextCalled.waitForSignal(1500));
}
try {
@@ -985,7 +1077,7 @@
mMediaPlayer.setOnTimedTextListener(new MediaPlayer.OnTimedTextListener() {
@Override
public void onTimedText(MediaPlayer mp, TimedText text) {
- final int toleranceMs = 150;
+ final int toleranceMs = 500;
final int durationMs = 500;
int posMs = mMediaPlayer.getCurrentPosition();
if (text != null) {
@@ -1030,19 +1122,19 @@
// Waits until at least two subtitles are fired. Timeout is 2 sec.
// Please refer the test srt files:
// test_subtitle1_srt.3gp and test_subtitle2_srt.3gp
- assertTrue(mOnTimedTextCalled.waitForCountedSignals(2, 2000) >= 2);
+ assertTrue(mOnTimedTextCalled.waitForCountedSignals(2, 2500) >= 2);
selectSubtitleTrack(1);
mOnTimedTextCalled.reset();
- assertTrue(mOnTimedTextCalled.waitForCountedSignals(2, 2000) >= 2);
+ assertTrue(mOnTimedTextCalled.waitForCountedSignals(2, 2500) >= 2);
selectSubtitleTrack(2);
mOnTimedTextCalled.reset();
- assertTrue(mOnTimedTextCalled.waitForCountedSignals(2, 2000) >= 2);
+ assertTrue(mOnTimedTextCalled.waitForCountedSignals(2, 2500) >= 2);
selectSubtitleTrack(3);
mOnTimedTextCalled.reset();
- assertTrue(mOnTimedTextCalled.waitForCountedSignals(2, 2000) >= 2);
+ assertTrue(mOnTimedTextCalled.waitForCountedSignals(2, 2500) >= 2);
mMediaPlayer.stop();
}
diff --git a/tests/tests/media/src/android/media/cts/Vp8CodecTestBase.java b/tests/tests/media/src/android/media/cts/Vp8CodecTestBase.java
index a4051c9..40d09a5 100644
--- a/tests/tests/media/src/android/media/cts/Vp8CodecTestBase.java
+++ b/tests/tests/media/src/android/media/cts/Vp8CodecTestBase.java
@@ -629,9 +629,10 @@
}
if (result >= 0) {
int outputBufIndex = result;
+ int bufferSize = Math.min(frameWidth * frameHeight * 3 / 2, bufferInfo.size);
outPresentationTimeUs = bufferInfo.presentationTimeUs;
Log.v(TAG, "Writing buffer # " + outputFrameIndex +
- ". Size: " + bufferInfo.size +
+ ". Size: " + bufferSize +
". InTime: " + (inPresentationTimeUs + 500)/1000 +
". OutTime: " + (outPresentationTimeUs + 500)/1000);
if ((bufferInfo.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0) {
@@ -639,12 +640,12 @@
Log.d(TAG, " Output EOS for frame # " + outputFrameIndex);
}
- if (bufferInfo.size > 0) {
+ if (bufferSize > 0) {
// Save decoder output to yuv file.
if (yuv != null) {
- byte[] frame = new byte[bufferInfo.size];
+ byte[] frame = new byte[bufferSize];
outputBuffers[outputBufIndex].position(bufferInfo.offset);
- outputBuffers[outputBufIndex].get(frame, 0, bufferInfo.size);
+ outputBuffers[outputBufIndex].get(frame, 0, bufferSize);
// Convert NV12 to YUV420 if necessary
if (frameColorFormat != CodecCapabilities.COLOR_FormatYUV420Planar) {
frame = NV12ToYUV420(frameWidth, frameHeight,
@@ -657,7 +658,7 @@
// Update statistics - store presentation time delay in offset
long presentationTimeUsDelta = inPresentationTimeUs - outPresentationTimeUs;
MediaCodec.BufferInfo bufferInfoCopy = new MediaCodec.BufferInfo();
- bufferInfoCopy.set((int)presentationTimeUsDelta, bufferInfo.size,
+ bufferInfoCopy.set((int)presentationTimeUsDelta, bufferSize,
outPresentationTimeUs, bufferInfo.flags);
bufferInfos.add(bufferInfoCopy);
}
diff --git a/tests/tests/permission/src/android/permission/cts/TelephonyManagerPermissionTest.java b/tests/tests/permission/src/android/permission/cts/TelephonyManagerPermissionTest.java
index 2681c0f..607f301 100644
--- a/tests/tests/permission/src/android/permission/cts/TelephonyManagerPermissionTest.java
+++ b/tests/tests/permission/src/android/permission/cts/TelephonyManagerPermissionTest.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.content.pm.PackageManager;
+import android.media.AudioManager;
import android.telephony.TelephonyManager;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
@@ -29,6 +30,7 @@
private boolean mHasTelephony;
TelephonyManager mTelephonyManager = null;
+ private AudioManager mAudioManager;
@Override
protected void setUp() throws Exception {
@@ -37,6 +39,8 @@
PackageManager.FEATURE_TELEPHONY);
mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
assertNotNull(mTelephonyManager);
+ mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+ assertNotNull(mAudioManager);
}
/**
@@ -138,4 +142,21 @@
// expected
}
}
+ /**
+ * Verify that AudioManager.setMode requires Permission.
+ * <p>
+ * Requires Permissions:
+ * {@link android.Manifest.permission#MODIFY_AUDIO_SETTINGS} and
+ * {@link android.Manifest.permission#MODIFY_PHONE_STATE} for
+ * {@link AudioManager#MODE_IN_CALL}.
+ */
+ @SmallTest
+ public void testSetMode() {
+ if (!mHasTelephony) {
+ return;
+ }
+ int audioMode = mAudioManager.getMode();
+ mAudioManager.setMode(AudioManager.MODE_IN_CALL);
+ assertEquals(audioMode, mAudioManager.getMode());
+ }
}
diff --git a/tests/tests/provider/Android.mk b/tests/tests/provider/Android.mk
index 4c5875b..81ff9ee 100644
--- a/tests/tests/provider/Android.mk
+++ b/tests/tests/provider/Android.mk
@@ -23,12 +23,10 @@
LOCAL_JAVA_LIBRARIES := android.test.runner telephony-common
-LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+LOCAL_STATIC_JAVA_LIBRARIES := ctsdeviceutil ctstestrunner
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := CtsProviderTestCases
-LOCAL_INSTRUMENTATION_FOR := CtsTestStubs
-
include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/provider/AndroidManifest.xml b/tests/tests/provider/AndroidManifest.xml
index 7bf44b7..abda46c 100644
--- a/tests/tests/provider/AndroidManifest.xml
+++ b/tests/tests/provider/AndroidManifest.xml
@@ -23,10 +23,36 @@
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
+ <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
+ <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
+ <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" />
+ <uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS" />
+ <uses-permission android:name="android.permission.WRITE_CALENDAR" />
+ <uses-permission android:name="android.permission.READ_CALENDAR" />
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+ <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY" />
+ <uses-permission android:name="android.permission.READ_USER_DICTIONARY" />
+ <uses-permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL" />
+ <uses-permission android:name="android.permission.WRITE_CALL_LOG" />
+ <uses-permission android:name="android.permission.WRITE_CONTACTS" />
+ <uses-permission android:name="android.permission.WRITE_SOCIAL_STREAM" />
+ <uses-permission android:name="android.permission.READ_CALL_LOG" />
+ <uses-permission android:name="android.permission.READ_CONTACTS" />
+ <uses-permission android:name="android.permission.READ_SOCIAL_STREAM" />
<application>
<uses-library android:name="android.test.runner"/>
+ <activity android:name="android.provider.cts.BrowserStubActivity"
+ android:label="BrowserStubActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
<service android:name="android.provider.cts.contacts.account.MockAccountService"
process="com.android.cts.provider"
android:exported="true">
@@ -41,14 +67,14 @@
</application>
<instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.cts.stub"
+ android:targetPackage="com.android.cts.provider"
android:label="CTS tests of android.provider">
<meta-data android:name="listener"
android:value="com.android.cts.runner.CtsTestRunListener" />
</instrumentation>
<instrumentation android:name="android.provider.cts.CalendarTest$CalendarEmmaTestRunner"
- android:targetPackage="com.android.cts.stub"
+ android:targetPackage="com.android.cts.provider"
android:label="Augmented CTS tests of Calendar provider"/>
</manifest>
diff --git a/tests/tests/provider/res/drawable/scenery.jpg b/tests/tests/provider/res/drawable/scenery.jpg
new file mode 100644
index 0000000..7a6145b
--- /dev/null
+++ b/tests/tests/provider/res/drawable/scenery.jpg
Binary files differ
diff --git a/tests/tests/provider/res/drawable/size_48x48.jpg b/tests/tests/provider/res/drawable/size_48x48.jpg
new file mode 100644
index 0000000..5c2291e
--- /dev/null
+++ b/tests/tests/provider/res/drawable/size_48x48.jpg
Binary files differ
diff --git a/tests/tests/provider/res/drawable/testimage.jpg b/tests/tests/provider/res/drawable/testimage.jpg
new file mode 100644
index 0000000..754df0c
--- /dev/null
+++ b/tests/tests/provider/res/drawable/testimage.jpg
Binary files differ
diff --git a/tests/tests/provider/res/raw/scenery.jpg b/tests/tests/provider/res/raw/scenery.jpg
new file mode 100644
index 0000000..7d1f5e1
--- /dev/null
+++ b/tests/tests/provider/res/raw/scenery.jpg
Binary files differ
diff --git a/tests/tests/provider/res/raw/testmp3.mp3 b/tests/tests/provider/res/raw/testmp3.mp3
new file mode 100755
index 0000000..657faf7
--- /dev/null
+++ b/tests/tests/provider/res/raw/testmp3.mp3
Binary files differ
diff --git a/tests/tests/provider/res/raw/testmp3_2.mp3 b/tests/tests/provider/res/raw/testmp3_2.mp3
new file mode 100644
index 0000000..6a70c69
--- /dev/null
+++ b/tests/tests/provider/res/raw/testmp3_2.mp3
Binary files differ
diff --git a/tests/tests/provider/res/raw/testvideo.3gp b/tests/tests/provider/res/raw/testvideo.3gp
new file mode 100644
index 0000000..1503272
--- /dev/null
+++ b/tests/tests/provider/res/raw/testvideo.3gp
Binary files differ
diff --git a/tests/tests/provider/res/values/arrays.xml b/tests/tests/provider/res/values/arrays.xml
new file mode 100644
index 0000000..71e0133
--- /dev/null
+++ b/tests/tests/provider/res/values/arrays.xml
@@ -0,0 +1,57 @@
+<?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.
+ -->
+
+<resources>
+ <item type="integer" name="reference" format="integer">101</item>
+
+ <string-array name="strings">
+ <item>zero</item>
+ <item>1</item>
+ <item>@string/reference</item>
+ </string-array>
+
+ <integer-array name="integers">
+ <item>0</item>
+ <item>1</item>
+ <item>@integer/reference</item>
+ </integer-array>
+
+ <array name="difficultyLevel">
+ <item>Easy</item>
+ <item>Medium</item>
+ <item>Hard</item>
+ </array>
+
+ <string-array name="string">
+ <item>Test String 1</item>
+ <item>Test String 2</item>
+ <item>Test String 3</item>
+ </string-array>
+
+ <integer-array name="table_row_layout">
+ <item>1</item>
+ <item>2</item>
+ <item>3</item>
+ <item>4</item>
+ <item>5</item>
+ <item>6</item>
+ <item>7</item>
+ <item>8</item>
+ <item>9</item>
+ <item>10</item>
+ </integer-array>
+</resources>
diff --git a/tests/tests/provider/res/values/strings.xml b/tests/tests/provider/res/values/strings.xml
index b599c31..eb10ca1 100644
--- a/tests/tests/provider/res/values/strings.xml
+++ b/tests/tests/provider/res/values/strings.xml
@@ -15,6 +15,168 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="permlab_testGranted">Test Granted</string>
+ <string name="permdesc_testGranted">Used for running CTS tests, for testing operations
+ where we have the permission.</string>
+ <string name="permlab_testDynamic">Test Dynamic</string>
+ <string name="permdesc_testDynamic">Used for running CTS tests, for testing adding
+ dynamic permissions.</string>
+ <string name="permlab_testDenied">Test Denied</string>
+ <string name="permdesc_testDenied">Used for running CTS tests, for testing operations
+ where we do not have the permission.</string>
+ <string name="explain">1. click start. \n2. if above image shaked, then press pass button,
+ else press failed button.</string>
+ <string name="text_view_hello">Hello! Text view!</string>
+ <string name="text_view_hello_two_lines">Hello! \nText view!</string>
+ <string name="text_view_simple_hint">This is a hint.</string>
+ <string name="text_view_hint">This is a string for testing hint of textview.</string>
+ <string name="activity_forwarding">App/Forwarding</string>
+ <string name="forwarding">$$$</string>
+ <string name="go">Go</string>
+ <string name="back">Back</string>
+ <string name="forward_target">
+ Press back button and notice we don\'t see the previous activity.
+ </string>
+ <string name="edit_text">testing</string>
+ <string name="text">DialogTest</string>
+ <string name="text_country">Country</string>
+ <string name="text_name">Name</string>
+ <string name="hello_world">Hello, World!</string>
+ <string name="hello_android">Hello, Android!</string>
+ <string name="alert_dialog_username">Name:</string>
+ <string name="alert_dialog_password">Password:</string>
+ <string name="alert_dialog_positive">Positive</string>
+ <string name="alert_dialog_negative">Negative</string>
+ <string name="alert_dialog_neutral">Neutral</string>
+ <string name="notify">Notify </string>
+ <string name="tabs_1">testing</string>
+ <string name="table_layout_first">first</string>
+ <string name="table_layout_second">second</string>
+ <string name="table_layout_third">third</string>
+ <string name="table_layout_long">Very long to make the string out of the screen</string>
+ <string name="chronometer_text">Test Chronometer</string>
+ <string name="am">AM</string>
+ <string name="pm">PM</string>
+ <string name="viewgroup_test">ViewGroup test</string>
+ <string name="viewanimator_test">ViewAnimator test</string>
+ <string name="id_ok">OK</string>
+ <string name="id_cancel">Cancel</string>
+ <string name="context_test_string1">This is %s string.</string>
+ <string name="context_test_string2">This is test string.</string>
+ <string name="animationutils_test_instructions">Choose different animations</string>
+ <string name="animationutils_test_alpha">Alpha animation</string>
+ <string name="animationutils_test_scale">Scale animation</string>
+ <string name="animationutils_test_rotate">Rotate animation</string>
+ <string name="animationutils_test_translate">Translate animation</string>
+ <string name="animationutils_test_set">Animation set</string>
+ <string name="animationutils_test_layout">Layout animation</string>
+ <string name="animationutils_test_gridlayout">Grid layout animation</string>
+ <string name="twolinelistitem_test_text1">text1</string>
+ <string name="twolinelistitem_test_text2">text2</string>
+ <string name="metadata_text">metadata text</string>
+ <string name="horizontal_text_1">horizontal 1</string>
+ <string name="horizontal_text_2">horizontal 2</string>
+ <string name="horizontal_text_3">horizontal 3</string>
+ <string name="vertical_text_1">vertical 1</string>
+ <string name="vertical_text_2">vertical 2</string>
+ <string name="vertical_text_3">vertical 3</string>
+ <string name="reference">here</string>
+ <string name="coerceIntegerToString">100</string>
+ <string name="coerceBooleanToString">true</string>
+ <string name="coerceColorToString">#fff</string>
+ <string name="coerceFloatToString">100.0</string>
+ <string name="coerceDimensionToString">100px</string>
+ <string name="coerceFractionToString">100<xliff:g id="percent">%</xliff:g></string>
+ <string name="formattedStringNone">Format[]</string>
+ <string name="formattedStringOne">Format[<xliff:g id="format">%d</xliff:g>]</string>
+ <string name="formattedStringTwo">Format[<xliff:g id="format">%3$d,%2$s</xliff:g>]</string>
+ <string name="checkboxpref_key">checkboxpref_key</string>
+ <string name="checkboxpref_title">title of preference</string>
+ <string name="checkboxpref_summary">summary of preference</string>
+ <string name="checkboxpref_summary_on">summary on of preference</string>
+ <string name="checkboxpref_summary_off">summary off of preference</string>
+ <string name="checkboxpref_depend">checkboxpref_depend</string>
+ <string name="checkboxpref_depend_title"> depend title of preference</string>
+ <string name="checkboxpref_depend_summary"> depend summary of preference</string>
+ <string name="edittextpref_key">edittextpref_key</string>
+ <string name="edittextpref_default_value">default value of preference</string>
+ <string name="edittextpref_title">title of edit text preference</string>
+ <string name="edittextpref_summary">summary of edit text preference</string>
+ <string name="edittextpref_dialog_title">dialog title of edit text preference</string>
+ <string name="edittextpref_text">text of edit text preference</string>
+ <string name="listpref_key">listpref_key</string>
+ <string name="listpref_title">title of list preference</string>
+ <string name="listpref_summary">summary of list preference</string>
+ <string name="listpref_dialogtitle">dialog title of list preference</string>
+ <string name="easy">Easy</string>
+ <string name="medium">Medium</string>
+ <string name="hard">Hard</string>
+ <string name="footer_view">Footer view</string>
+ <string name="header_view">Header view</string>
+ <string name="dialogpref_title">title of dialog preference </string>
+ <string name="dialogpref_dialog_title">dialog title of dialog preference </string>
+ <string name="dialogpref_key">dialogpref_key</string>
+ <string name="dialogpref_default_value">default value of dialog preference</string>
+ <string name="dialogpref_summary">summary of dialog preference</string>
+ <string name="dialogpref_message">message of dialog preference</string>
+ <string name="dialogpref_sure">Sure</string>
+ <string name="dialogpref_cancel">Cancel</string>
+ <string name="pref_key">pref_key</string>
+ <string name="pref_title">title of preference</string>
+ <string name="pref_summary">summary of preference</string>
+ <string name="pref_depend_key">pref_depend_key</string>
+ <string name="pref_depend_title"> depend title of preference</string>
+ <string name="pref_depend_summary"> depend summary of preference</string>
+ <string name="android_intent_action_preference">android.intent.action.PREFERENCE</string>
+ <string name="def_pref_key">def_pref_key</string>
+ <string name="def_pref_title">default preference</string>
+ <string name="def_pref_summary">This is default preference of cts</string>
+ <string name="relative_view1">view 1</string>
+ <string name="relative_view2">view 2</string>
+ <string name="relative_view3">view 3</string>
+ <string name="relative_view4">view 4</string>
+ <string name="relative_view5">view 5</string>
+ <string name="relative_view6">view 6</string>
+ <string name="relative_view7">view 7</string>
+ <string name="relative_view8">view 8</string>
+ <string name="relative_view9">view 9</string>
+ <string name="relative_view10">view 10</string>
+ <string name="relative_view11">view 11</string>
+ <string name="relative_view12">view 12</string>
+ <string name="relative_view13">view 13</string>
+ <string name="country">Country:</string>
+ <string name="symbol">Symbol:</string>
+ <string name="country_warning">No such country registered</string>
+ <string name="version_cur">base</string>
+ <string name="version_old">base</string>
+ <string name="version_v3">base</string>
+ <string name="authenticator_label">Android CTS</string>
+ <string name="search_label">Android CTS</string>
+ <string name="tag1">tag 1</string>
+ <string name="tag2">tag 2</string>
+
+ <string name="button">Button</string>
+ <string name="holo_test">Holo Test</string>
+ <string name="holo_generator">Holo Generator</string>
+ <string name="holo_light_test">Holo Light Test</string>
+ <string name="holo_light_generator">Holo Light Generator</string>
+ <string name="reference_image">Reference Image: </string>
+ <string name="generated_image">Generated Image: </string>
+ <string name="themes_prompt">Select a Theme:</string>
+ <string name="sample_text">Sample text goes here. I wanted something creative and whimsical
+ but then I just got bored...</string>
+ <string name="long_text">This is a really long string which exceeds the width of the view.
+New devices have a much larger screen which actually enables long strings to be displayed
+with no fading. I have made this string longer to fix this case. If you are correcting this
+text, I would love to see the kind of devices you guys now use! Guys, maybe some devices need longer string!
+I think so, so how about double this string, like copy and paste!
+This is a really long string which exceeds the width of the view.
+New devices have a much larger screen which actually enables long strings to be displayed
+with no fading. I have made this string longer to fix this case. If you are correcting this
+text, I would love to see the kind of devices you guys now use! Guys, maybe some devices need longer string!
+I think so, so how about double this string, like copy and paste! </string>
+ <string name="rectangle200">"M 0,0 l 200,0 l 0, 200 l -200, 0 z"</string>
+
<!-- Label for this package -->
<string name="label">Contacts provider</string>
</resources>
diff --git a/tests/src/android/provider/cts/BrowserStubActivity.java b/tests/tests/provider/src/android/provider/cts/BrowserStubActivity.java
similarity index 100%
rename from tests/src/android/provider/cts/BrowserStubActivity.java
rename to tests/tests/provider/src/android/provider/cts/BrowserStubActivity.java
diff --git a/tests/tests/provider/src/android/provider/cts/ContactsContract_PhotoTest.java b/tests/tests/provider/src/android/provider/cts/ContactsContract_PhotoTest.java
index fbd092f..45ba8b8 100644
--- a/tests/tests/provider/src/android/provider/cts/ContactsContract_PhotoTest.java
+++ b/tests/tests/provider/src/android/provider/cts/ContactsContract_PhotoTest.java
@@ -19,7 +19,6 @@
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
-import android.os.cts.FileUtils;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.provider.ContactsContract.Contacts;
diff --git a/tests/tests/provider/src/android/provider/cts/ContactsTest.java b/tests/tests/provider/src/android/provider/cts/ContactsTest.java
index db1c4f7..9a3fc19 100644
--- a/tests/tests/provider/src/android/provider/cts/ContactsTest.java
+++ b/tests/tests/provider/src/android/provider/cts/ContactsTest.java
@@ -219,12 +219,12 @@
try {
Context context = getInstrumentation().getTargetContext();
InputStream inputStream = context.getResources().openRawResource(
- com.android.cts.stub.R.drawable.testimage);
+ com.android.cts.provider.R.drawable.testimage);
int size = inputStream.available();
byte[] data = new byte[size];
inputStream.read(data);
BitmapDrawable sourceDrawable = (BitmapDrawable) context.getResources().getDrawable(
- com.android.cts.stub.R.drawable.testimage);
+ com.android.cts.provider.R.drawable.testimage);
// Test: insert
ContentValues value = new ContentValues();
value.put(Photos.PERSON_ID, 1);
diff --git a/tests/tests/provider/src/android/provider/cts/Contacts_PeopleTest.java b/tests/tests/provider/src/android/provider/cts/Contacts_PeopleTest.java
index e5085b8..6b5de96 100644
--- a/tests/tests/provider/src/android/provider/cts/Contacts_PeopleTest.java
+++ b/tests/tests/provider/src/android/provider/cts/Contacts_PeopleTest.java
@@ -257,7 +257,7 @@
Context context = getInstrumentation().getTargetContext();
try {
InputStream inputStream = context.getResources().openRawResource(
- com.android.cts.stub.R.drawable.testimage);
+ com.android.cts.provider.R.drawable.testimage);
int size = inputStream.available();
byte[] data = new byte[size];
inputStream.read(data);
@@ -275,12 +275,12 @@
assertNull(photoStream);
bitmap = People.loadContactPhoto(context, mPeopleRowsAdded.get(0),
- com.android.cts.stub.R.drawable.size_48x48, null);
+ com.android.cts.provider.R.drawable.size_48x48, null);
assertEquals(96, bitmap.getWidth());
assertEquals(64, bitmap.getHeight());
bitmap = People.loadContactPhoto(context, null,
- com.android.cts.stub.R.drawable.size_48x48, null);
+ com.android.cts.provider.R.drawable.size_48x48, null);
assertNotNull(bitmap);
} catch (IOException e) {
fail("Unexpected IOException");
diff --git a/tests/tests/provider/src/android/provider/cts/FileUtils.java b/tests/tests/provider/src/android/provider/cts/FileUtils.java
new file mode 100644
index 0000000..0766e6d
--- /dev/null
+++ b/tests/tests/provider/src/android/provider/cts/FileUtils.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2011 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 android.provider.cts;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/** Bits and pieces copied from hidden API of android.os.FileUtils. */
+public class FileUtils {
+
+ /**
+ * Copy data from a source stream to destFile.
+ * Return true if succeed, return false if failed.
+ */
+ public static boolean copyToFile(InputStream inputStream, File destFile) {
+ try {
+ if (destFile.exists()) {
+ destFile.delete();
+ }
+ FileOutputStream out = new FileOutputStream(destFile);
+ try {
+ byte[] buffer = new byte[4096];
+ int bytesRead;
+ while ((bytesRead = inputStream.read(buffer)) >= 0) {
+ out.write(buffer, 0, bytesRead);
+ }
+ } finally {
+ out.flush();
+ try {
+ out.getFD().sync();
+ } catch (IOException e) {
+ }
+ out.close();
+ }
+ return true;
+ } catch (IOException e) {
+ return false;
+ }
+ }
+
+ public static void createFile(File file, int numBytes) throws IOException {
+ File parentFile = file.getParentFile();
+ if (parentFile != null) {
+ parentFile.mkdirs();
+ }
+ byte[] buffer = new byte[numBytes];
+ FileOutputStream output = new FileOutputStream(file);
+ try {
+ output.write(buffer);
+ } finally {
+ output.close();
+ }
+ }
+
+ public static byte[] readInputStreamFully(InputStream is) {
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ byte[] buffer = new byte[32768];
+ int count;
+ try {
+ while ((count = is.read(buffer)) != -1) {
+ os.write(buffer, 0, count);
+ }
+ is.close();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return os.toByteArray();
+ }
+}
diff --git a/tests/src/android/provider/cts/MediaStoreAudioTestHelper.java b/tests/tests/provider/src/android/provider/cts/MediaStoreAudioTestHelper.java
similarity index 100%
rename from tests/src/android/provider/cts/MediaStoreAudioTestHelper.java
rename to tests/tests/provider/src/android/provider/cts/MediaStoreAudioTestHelper.java
diff --git a/tests/tests/provider/src/android/provider/cts/MediaStore_Audio_AlbumsTest.java b/tests/tests/provider/src/android/provider/cts/MediaStore_Audio_AlbumsTest.java
index b265cbf..bad1108 100644
--- a/tests/tests/provider/src/android/provider/cts/MediaStore_Audio_AlbumsTest.java
+++ b/tests/tests/provider/src/android/provider/cts/MediaStore_Audio_AlbumsTest.java
@@ -16,7 +16,7 @@
package android.provider.cts;
-import com.android.cts.stub.R;
+import com.android.cts.provider.R;
import android.content.ContentResolver;
import android.content.ContentValues;
diff --git a/tests/tests/provider/src/android/provider/cts/MediaStore_FilesTest.java b/tests/tests/provider/src/android/provider/cts/MediaStore_FilesTest.java
index 356fe3c..67396d4 100644
--- a/tests/tests/provider/src/android/provider/cts/MediaStore_FilesTest.java
+++ b/tests/tests/provider/src/android/provider/cts/MediaStore_FilesTest.java
@@ -16,7 +16,7 @@
package android.provider.cts;
-import com.android.cts.stub.R;
+import com.android.cts.provider.R;
import android.content.ContentResolver;
import android.content.ContentUris;
diff --git a/tests/tests/provider/src/android/provider/cts/MediaStore_Images_MediaTest.java b/tests/tests/provider/src/android/provider/cts/MediaStore_Images_MediaTest.java
index e68286f..bc86b0a 100644
--- a/tests/tests/provider/src/android/provider/cts/MediaStore_Images_MediaTest.java
+++ b/tests/tests/provider/src/android/provider/cts/MediaStore_Images_MediaTest.java
@@ -16,7 +16,7 @@
package android.provider.cts;
-import com.android.cts.stub.R;
+import com.android.cts.provider.R;
import android.content.ContentResolver;
import android.content.ContentValues;
@@ -26,7 +26,6 @@
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
-import android.os.cts.FileUtils;
import android.provider.MediaStore.Images.Media;
import android.provider.MediaStore.Images.Thumbnails;
import android.test.InstrumentationTestCase;
diff --git a/tests/tests/provider/src/android/provider/cts/MediaStore_Images_ThumbnailsTest.java b/tests/tests/provider/src/android/provider/cts/MediaStore_Images_ThumbnailsTest.java
index 60bf011..025be2c 100644
--- a/tests/tests/provider/src/android/provider/cts/MediaStore_Images_ThumbnailsTest.java
+++ b/tests/tests/provider/src/android/provider/cts/MediaStore_Images_ThumbnailsTest.java
@@ -16,7 +16,7 @@
package android.provider.cts;
-import com.android.cts.stub.R;
+import com.android.cts.provider.R;
import android.content.ContentResolver;
import android.content.ContentUris;
diff --git a/tests/tests/provider/src/android/provider/cts/MediaStore_VideoTest.java b/tests/tests/provider/src/android/provider/cts/MediaStore_VideoTest.java
index 366fc57..2c9ebd1 100644
--- a/tests/tests/provider/src/android/provider/cts/MediaStore_VideoTest.java
+++ b/tests/tests/provider/src/android/provider/cts/MediaStore_VideoTest.java
@@ -16,7 +16,7 @@
package android.provider.cts;
-import com.android.cts.stub.R;
+import com.android.cts.provider.R;
import android.content.ContentResolver;
import android.content.ContentValues;
diff --git a/tests/tests/provider/src/android/provider/cts/MediaStore_Video_MediaTest.java b/tests/tests/provider/src/android/provider/cts/MediaStore_Video_MediaTest.java
index c9461b4..c3f5070 100644
--- a/tests/tests/provider/src/android/provider/cts/MediaStore_Video_MediaTest.java
+++ b/tests/tests/provider/src/android/provider/cts/MediaStore_Video_MediaTest.java
@@ -17,7 +17,7 @@
package android.provider.cts;
-import com.android.cts.stub.R;
+import com.android.cts.provider.R;
import android.content.ContentResolver;
import android.content.ContentValues;
@@ -25,7 +25,6 @@
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
-import android.os.cts.FileUtils;
import android.provider.MediaStore;
import android.provider.MediaStore.Video.Media;
import android.provider.MediaStore.Video.VideoColumns;
diff --git a/tests/tests/provider/src/android/provider/cts/MediaStore_Video_ThumbnailsTest.java b/tests/tests/provider/src/android/provider/cts/MediaStore_Video_ThumbnailsTest.java
index ac0bc03..e74cce4 100644
--- a/tests/tests/provider/src/android/provider/cts/MediaStore_Video_ThumbnailsTest.java
+++ b/tests/tests/provider/src/android/provider/cts/MediaStore_Video_ThumbnailsTest.java
@@ -16,7 +16,7 @@
package android.provider.cts;
-import com.android.cts.stub.R;
+import com.android.cts.provider.R;
import android.content.ContentResolver;
import android.content.ContentUris;
diff --git a/tests/src/android/provider/cts/PhotoUtil.java b/tests/tests/provider/src/android/provider/cts/PhotoUtil.java
similarity index 93%
rename from tests/src/android/provider/cts/PhotoUtil.java
rename to tests/tests/provider/src/android/provider/cts/PhotoUtil.java
index 9c3047f..3f5f873 100644
--- a/tests/src/android/provider/cts/PhotoUtil.java
+++ b/tests/tests/provider/src/android/provider/cts/PhotoUtil.java
@@ -16,10 +16,9 @@
package android.provider.cts;
-import com.android.cts.stub.R;
+import com.android.cts.provider.R;
import android.content.Context;
-import android.os.cts.FileUtils;
import java.io.InputStream;
diff --git a/tests/src/android/provider/cts/TestSearchRecentSuggestionsProvider.java b/tests/tests/provider/src/android/provider/cts/TestSearchRecentSuggestionsProvider.java
similarity index 100%
rename from tests/src/android/provider/cts/TestSearchRecentSuggestionsProvider.java
rename to tests/tests/provider/src/android/provider/cts/TestSearchRecentSuggestionsProvider.java
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/CoreMathVerifier.java b/tests/tests/renderscript/src/android/renderscript/cts/CoreMathVerifier.java
index c237ede..dfcf1f5 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/CoreMathVerifier.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/CoreMathVerifier.java
@@ -1332,6 +1332,9 @@
lgamma(in.max32()));
}
+ /* TODO Until -0 handling is corrected in bionic & associated drivers, we temporarily
+ * disable the verification of -0. We do this with a custom verifier. Once bionic
+ * is fixed, we can restore computeLgamma and remove verifyLgamma.
static public void computeLgamma(TestLgamma.ArgumentsFloatIntFloat args, Target t) {
t.setPrecision(16, 128, false);
Target.Floaty in = t.new32(args.inX);
@@ -1340,13 +1343,33 @@
LgammaResult resultMax = lgamma2(in.max32());
args.out = t.new32(result.lgamma, resultMin.lgamma, resultMax.lgamma);
args.outY = result.gammaSign;
+ }
+ */
+ static public String verifyLgamma(TestLgamma.ArgumentsFloatIntFloat args, Target t) {
+ t.setPrecision(16, 128, false);
+ Target.Floaty in = t.new32(args.inX);
+ LgammaResult result = lgamma2(in.mid32());
+ LgammaResult resultMin = lgamma2(in.min32());
+ LgammaResult resultMax = lgamma2(in.max32());
+ Target.Floaty expectedOut = t.new32(result.lgamma, resultMin.lgamma, resultMax.lgamma);
+ boolean isNegativeZero = args.inX == 0.f && 1.f / args.inX < 0.f;
/* TODO The current implementation of bionic does not handle the -0.f case correctly.
- * It should set the sign to -1 but sets it to 1. We correct the verifier here
- * until bionic is fixed.
+ * It should set the sign to -1 but sets it to 1.
*/
- if (args.inX == 0.f && 1.f / args.inX < 0.f) {
- args.outY = -1;
+ if (!expectedOut.couldBe(args.out) ||
+ (args.outY != result.gammaSign && !isNegativeZero)) {
+ StringBuilder message = new StringBuilder();
+ message.append(String.format("Input in %14.8g {%8x}:\n", args.inX, Float.floatToRawIntBits(args.inX)));
+ message.append("Expected out: ");
+ message.append(expectedOut.toString());
+ message.append("\n");
+ message.append(String.format("Actual out: %14.8g {%8x}", args.out, Float.floatToRawIntBits(args.out)));
+ message.append(String.format("Expected outY: %d\n", result.gammaSign));
+ message.append(String.format("Actual outY: %d\n", args.outY));
+ return message.toString();
}
+
+ return null;
}
// TODO The relaxed ulf for the various log are taken from the old tests.
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/TestLgamma.java b/tests/tests/renderscript/src/android/renderscript/cts/TestLgamma.java
index 8ec06e7..113df19 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/TestLgamma.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/TestLgamma.java
@@ -278,7 +278,7 @@
public class ArgumentsFloatIntFloat {
public float inX;
public int outY;
- public Target.Floaty out;
+ public float out;
}
private void checkLgammaFloatIntFloat() {
@@ -315,42 +315,26 @@
// Extract the inputs.
ArgumentsFloatIntFloat args = new ArgumentsFloatIntFloat();
args.inX = arrayInX[i];
- // Figure out what the outputs should have been.
+ // Extract the outputs.
+ args.outY = arrayOutY[i * 1 + j];
+ args.out = arrayOut[i * 1 + j];
+ // Ask the CoreMathVerifier to validate.
Target target = new Target(relaxed);
- CoreMathVerifier.computeLgamma(args, target);
- // Validate the outputs.
- boolean valid = true;
- if (args.outY != arrayOutY[i * 1 + j]) {
- valid = false;
- }
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
- valid = false;
- }
+ String errorMessage = CoreMathVerifier.verifyLgamma(args, target);
+ boolean valid = errorMessage == null;
if (!valid) {
StringBuilder message = new StringBuilder();
message.append("Input inX: ");
message.append(String.format("%14.8g {%8x} %15a",
args.inX, Float.floatToRawIntBits(args.inX), args.inX));
message.append("\n");
- message.append("Expected output outY: ");
+ message.append("Output outY: ");
message.append(String.format("%d", args.outY));
message.append("\n");
- message.append("Actual output outY: ");
- message.append(String.format("%d", arrayOutY[i * 1 + j]));
- if (args.outY != arrayOutY[i * 1 + j]) {
- message.append(" FAIL");
- }
+ message.append("Output out: ");
+ message.append(Float.toString(args.out));
message.append("\n");
- message.append("Expected output out: ");
- message.append(args.out.toString());
- message.append("\n");
- message.append("Actual output out: ");
- message.append(String.format("%14.8g {%8x} %15a",
- arrayOut[i * 1 + j], Float.floatToRawIntBits(arrayOut[i * 1 + j]), arrayOut[i * 1 + j]));
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
- message.append(" FAIL");
- }
- message.append("\n");
+ message.append(errorMessage);
assertTrue("Incorrect output for checkLgammaFloatIntFloat" +
(relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid);
}
@@ -392,42 +376,26 @@
// Extract the inputs.
ArgumentsFloatIntFloat args = new ArgumentsFloatIntFloat();
args.inX = arrayInX[i * 2 + j];
- // Figure out what the outputs should have been.
+ // Extract the outputs.
+ args.outY = arrayOutY[i * 2 + j];
+ args.out = arrayOut[i * 2 + j];
+ // Ask the CoreMathVerifier to validate.
Target target = new Target(relaxed);
- CoreMathVerifier.computeLgamma(args, target);
- // Validate the outputs.
- boolean valid = true;
- if (args.outY != arrayOutY[i * 2 + j]) {
- valid = false;
- }
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
- valid = false;
- }
+ String errorMessage = CoreMathVerifier.verifyLgamma(args, target);
+ boolean valid = errorMessage == null;
if (!valid) {
StringBuilder message = new StringBuilder();
message.append("Input inX: ");
message.append(String.format("%14.8g {%8x} %15a",
args.inX, Float.floatToRawIntBits(args.inX), args.inX));
message.append("\n");
- message.append("Expected output outY: ");
+ message.append("Output outY: ");
message.append(String.format("%d", args.outY));
message.append("\n");
- message.append("Actual output outY: ");
- message.append(String.format("%d", arrayOutY[i * 2 + j]));
- if (args.outY != arrayOutY[i * 2 + j]) {
- message.append(" FAIL");
- }
+ message.append("Output out: ");
+ message.append(Float.toString(args.out));
message.append("\n");
- message.append("Expected output out: ");
- message.append(args.out.toString());
- message.append("\n");
- message.append("Actual output out: ");
- message.append(String.format("%14.8g {%8x} %15a",
- arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j]));
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
- message.append(" FAIL");
- }
- message.append("\n");
+ message.append(errorMessage);
assertTrue("Incorrect output for checkLgammaFloat2Int2Float2" +
(relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid);
}
@@ -469,42 +437,26 @@
// Extract the inputs.
ArgumentsFloatIntFloat args = new ArgumentsFloatIntFloat();
args.inX = arrayInX[i * 4 + j];
- // Figure out what the outputs should have been.
+ // Extract the outputs.
+ args.outY = arrayOutY[i * 4 + j];
+ args.out = arrayOut[i * 4 + j];
+ // Ask the CoreMathVerifier to validate.
Target target = new Target(relaxed);
- CoreMathVerifier.computeLgamma(args, target);
- // Validate the outputs.
- boolean valid = true;
- if (args.outY != arrayOutY[i * 4 + j]) {
- valid = false;
- }
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
- valid = false;
- }
+ String errorMessage = CoreMathVerifier.verifyLgamma(args, target);
+ boolean valid = errorMessage == null;
if (!valid) {
StringBuilder message = new StringBuilder();
message.append("Input inX: ");
message.append(String.format("%14.8g {%8x} %15a",
args.inX, Float.floatToRawIntBits(args.inX), args.inX));
message.append("\n");
- message.append("Expected output outY: ");
+ message.append("Output outY: ");
message.append(String.format("%d", args.outY));
message.append("\n");
- message.append("Actual output outY: ");
- message.append(String.format("%d", arrayOutY[i * 4 + j]));
- if (args.outY != arrayOutY[i * 4 + j]) {
- message.append(" FAIL");
- }
+ message.append("Output out: ");
+ message.append(Float.toString(args.out));
message.append("\n");
- message.append("Expected output out: ");
- message.append(args.out.toString());
- message.append("\n");
- message.append("Actual output out: ");
- message.append(String.format("%14.8g {%8x} %15a",
- arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
- message.append(" FAIL");
- }
- message.append("\n");
+ message.append(errorMessage);
assertTrue("Incorrect output for checkLgammaFloat3Int3Float3" +
(relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid);
}
@@ -546,42 +498,26 @@
// Extract the inputs.
ArgumentsFloatIntFloat args = new ArgumentsFloatIntFloat();
args.inX = arrayInX[i * 4 + j];
- // Figure out what the outputs should have been.
+ // Extract the outputs.
+ args.outY = arrayOutY[i * 4 + j];
+ args.out = arrayOut[i * 4 + j];
+ // Ask the CoreMathVerifier to validate.
Target target = new Target(relaxed);
- CoreMathVerifier.computeLgamma(args, target);
- // Validate the outputs.
- boolean valid = true;
- if (args.outY != arrayOutY[i * 4 + j]) {
- valid = false;
- }
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
- valid = false;
- }
+ String errorMessage = CoreMathVerifier.verifyLgamma(args, target);
+ boolean valid = errorMessage == null;
if (!valid) {
StringBuilder message = new StringBuilder();
message.append("Input inX: ");
message.append(String.format("%14.8g {%8x} %15a",
args.inX, Float.floatToRawIntBits(args.inX), args.inX));
message.append("\n");
- message.append("Expected output outY: ");
+ message.append("Output outY: ");
message.append(String.format("%d", args.outY));
message.append("\n");
- message.append("Actual output outY: ");
- message.append(String.format("%d", arrayOutY[i * 4 + j]));
- if (args.outY != arrayOutY[i * 4 + j]) {
- message.append(" FAIL");
- }
+ message.append("Output out: ");
+ message.append(Float.toString(args.out));
message.append("\n");
- message.append("Expected output out: ");
- message.append(args.out.toString());
- message.append("\n");
- message.append("Actual output out: ");
- message.append(String.format("%14.8g {%8x} %15a",
- arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
- message.append(" FAIL");
- }
- message.append("\n");
+ message.append(errorMessage);
assertTrue("Incorrect output for checkLgammaFloat4Int4Float4" +
(relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid);
}
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAcos.java b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAcos.java
index bda06c7..430cf59 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAcos.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAcos.java
@@ -72,7 +72,7 @@
CoreMathVerifier.computeNativeAcos(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -87,7 +87,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 1 + j], Float.floatToRawIntBits(arrayOut[i * 1 + j]), arrayOut[i * 1 + j]));
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -131,7 +131,7 @@
CoreMathVerifier.computeNativeAcos(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -146,7 +146,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j]));
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -190,7 +190,7 @@
CoreMathVerifier.computeNativeAcos(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -205,7 +205,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -249,7 +249,7 @@
CoreMathVerifier.computeNativeAcos(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -264,7 +264,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAcosh.java b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAcosh.java
index 7e84c96..d4a840a 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAcosh.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAcosh.java
@@ -72,7 +72,7 @@
CoreMathVerifier.computeNativeAcosh(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -87,7 +87,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 1 + j], Float.floatToRawIntBits(arrayOut[i * 1 + j]), arrayOut[i * 1 + j]));
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -131,7 +131,7 @@
CoreMathVerifier.computeNativeAcosh(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -146,7 +146,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j]));
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -190,7 +190,7 @@
CoreMathVerifier.computeNativeAcosh(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -205,7 +205,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -249,7 +249,7 @@
CoreMathVerifier.computeNativeAcosh(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -264,7 +264,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAcospi.java b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAcospi.java
index 75a29ae..187b787 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAcospi.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAcospi.java
@@ -72,7 +72,7 @@
CoreMathVerifier.computeNativeAcospi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -87,7 +87,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 1 + j], Float.floatToRawIntBits(arrayOut[i * 1 + j]), arrayOut[i * 1 + j]));
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -131,7 +131,7 @@
CoreMathVerifier.computeNativeAcospi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -146,7 +146,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j]));
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -190,7 +190,7 @@
CoreMathVerifier.computeNativeAcospi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -205,7 +205,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -249,7 +249,7 @@
CoreMathVerifier.computeNativeAcospi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -264,7 +264,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAsin.java b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAsin.java
index 30bab7e..b9f61a6 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAsin.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAsin.java
@@ -72,7 +72,7 @@
CoreMathVerifier.computeNativeAsin(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -87,7 +87,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 1 + j], Float.floatToRawIntBits(arrayOut[i * 1 + j]), arrayOut[i * 1 + j]));
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -131,7 +131,7 @@
CoreMathVerifier.computeNativeAsin(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -146,7 +146,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j]));
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -190,7 +190,7 @@
CoreMathVerifier.computeNativeAsin(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -205,7 +205,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -249,7 +249,7 @@
CoreMathVerifier.computeNativeAsin(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -264,7 +264,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAsinh.java b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAsinh.java
index 8edf947..f8382a8 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAsinh.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAsinh.java
@@ -72,7 +72,7 @@
CoreMathVerifier.computeNativeAsinh(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -87,7 +87,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 1 + j], Float.floatToRawIntBits(arrayOut[i * 1 + j]), arrayOut[i * 1 + j]));
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -131,7 +131,7 @@
CoreMathVerifier.computeNativeAsinh(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -146,7 +146,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j]));
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -190,7 +190,7 @@
CoreMathVerifier.computeNativeAsinh(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -205,7 +205,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -249,7 +249,7 @@
CoreMathVerifier.computeNativeAsinh(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -264,7 +264,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAsinpi.java b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAsinpi.java
index 08eb07d..e0029b7 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAsinpi.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAsinpi.java
@@ -72,7 +72,7 @@
CoreMathVerifier.computeNativeAsinpi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -87,7 +87,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 1 + j], Float.floatToRawIntBits(arrayOut[i * 1 + j]), arrayOut[i * 1 + j]));
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -131,7 +131,7 @@
CoreMathVerifier.computeNativeAsinpi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -146,7 +146,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j]));
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -190,7 +190,7 @@
CoreMathVerifier.computeNativeAsinpi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -205,7 +205,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -249,7 +249,7 @@
CoreMathVerifier.computeNativeAsinpi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -264,7 +264,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtan.java b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtan.java
index 316eb6d..26225c5 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtan.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtan.java
@@ -72,7 +72,7 @@
CoreMathVerifier.computeNativeAtan(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -87,7 +87,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 1 + j], Float.floatToRawIntBits(arrayOut[i * 1 + j]), arrayOut[i * 1 + j]));
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -131,7 +131,7 @@
CoreMathVerifier.computeNativeAtan(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -146,7 +146,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j]));
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -190,7 +190,7 @@
CoreMathVerifier.computeNativeAtan(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -205,7 +205,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -249,7 +249,7 @@
CoreMathVerifier.computeNativeAtan(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -264,7 +264,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtan2.java b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtan2.java
index 5ca8f05..c33523c 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtan2.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtan2.java
@@ -79,7 +79,7 @@
CoreMathVerifier.computeNativeAtan2(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -98,7 +98,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 1 + j], Float.floatToRawIntBits(arrayOut[i * 1 + j]), arrayOut[i * 1 + j]));
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -148,7 +148,7 @@
CoreMathVerifier.computeNativeAtan2(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -167,7 +167,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j]));
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -217,7 +217,7 @@
CoreMathVerifier.computeNativeAtan2(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -236,7 +236,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -286,7 +286,7 @@
CoreMathVerifier.computeNativeAtan2(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -305,7 +305,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtan2pi.java b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtan2pi.java
index f05d924..dd62b78 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtan2pi.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtan2pi.java
@@ -79,7 +79,7 @@
CoreMathVerifier.computeNativeAtan2pi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -98,7 +98,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 1 + j], Float.floatToRawIntBits(arrayOut[i * 1 + j]), arrayOut[i * 1 + j]));
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -148,7 +148,7 @@
CoreMathVerifier.computeNativeAtan2pi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -167,7 +167,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j]));
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -217,7 +217,7 @@
CoreMathVerifier.computeNativeAtan2pi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -236,7 +236,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -286,7 +286,7 @@
CoreMathVerifier.computeNativeAtan2pi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -305,7 +305,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtanh.java b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtanh.java
index 95f4704..6161483 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtanh.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtanh.java
@@ -72,7 +72,7 @@
CoreMathVerifier.computeNativeAtanh(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -87,7 +87,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 1 + j], Float.floatToRawIntBits(arrayOut[i * 1 + j]), arrayOut[i * 1 + j]));
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -131,7 +131,7 @@
CoreMathVerifier.computeNativeAtanh(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -146,7 +146,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j]));
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -190,7 +190,7 @@
CoreMathVerifier.computeNativeAtanh(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -205,7 +205,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -249,7 +249,7 @@
CoreMathVerifier.computeNativeAtanh(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -264,7 +264,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtanpi.java b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtanpi.java
index bd07ad8..1e88568 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtanpi.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeAtanpi.java
@@ -72,7 +72,7 @@
CoreMathVerifier.computeNativeAtanpi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -87,7 +87,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 1 + j], Float.floatToRawIntBits(arrayOut[i * 1 + j]), arrayOut[i * 1 + j]));
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -131,7 +131,7 @@
CoreMathVerifier.computeNativeAtanpi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -146,7 +146,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j]));
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -190,7 +190,7 @@
CoreMathVerifier.computeNativeAtanpi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -205,7 +205,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -249,7 +249,7 @@
CoreMathVerifier.computeNativeAtanpi(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -264,7 +264,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeSincos.java b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeSincos.java
index c497ed0..380f2b4 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/TestNativeSincos.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/TestNativeSincos.java
@@ -79,10 +79,10 @@
CoreMathVerifier.computeNativeSincos(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.outCosptr.couldBe(arrayOutCosptr[i * 1 + j])) {
+ if (!args.outCosptr.couldBe(arrayOutCosptr[i * 1 + j], 0.0005)) {
valid = false;
}
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -97,7 +97,7 @@
message.append("Actual output outCosptr: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOutCosptr[i * 1 + j], Float.floatToRawIntBits(arrayOutCosptr[i * 1 + j]), arrayOutCosptr[i * 1 + j]));
- if (!args.outCosptr.couldBe(arrayOutCosptr[i * 1 + j])) {
+ if (!args.outCosptr.couldBe(arrayOutCosptr[i * 1 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -107,7 +107,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 1 + j], Float.floatToRawIntBits(arrayOut[i * 1 + j]), arrayOut[i * 1 + j]));
- if (!args.out.couldBe(arrayOut[i * 1 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -157,10 +157,10 @@
CoreMathVerifier.computeNativeSincos(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.outCosptr.couldBe(arrayOutCosptr[i * 2 + j])) {
+ if (!args.outCosptr.couldBe(arrayOutCosptr[i * 2 + j], 0.0005)) {
valid = false;
}
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -175,7 +175,7 @@
message.append("Actual output outCosptr: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOutCosptr[i * 2 + j], Float.floatToRawIntBits(arrayOutCosptr[i * 2 + j]), arrayOutCosptr[i * 2 + j]));
- if (!args.outCosptr.couldBe(arrayOutCosptr[i * 2 + j])) {
+ if (!args.outCosptr.couldBe(arrayOutCosptr[i * 2 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -185,7 +185,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j]));
- if (!args.out.couldBe(arrayOut[i * 2 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -235,10 +235,10 @@
CoreMathVerifier.computeNativeSincos(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.outCosptr.couldBe(arrayOutCosptr[i * 4 + j])) {
+ if (!args.outCosptr.couldBe(arrayOutCosptr[i * 4 + j], 0.0005)) {
valid = false;
}
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -253,7 +253,7 @@
message.append("Actual output outCosptr: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOutCosptr[i * 4 + j], Float.floatToRawIntBits(arrayOutCosptr[i * 4 + j]), arrayOutCosptr[i * 4 + j]));
- if (!args.outCosptr.couldBe(arrayOutCosptr[i * 4 + j])) {
+ if (!args.outCosptr.couldBe(arrayOutCosptr[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -263,7 +263,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -313,10 +313,10 @@
CoreMathVerifier.computeNativeSincos(args, target);
// Validate the outputs.
boolean valid = true;
- if (!args.outCosptr.couldBe(arrayOutCosptr[i * 4 + j])) {
+ if (!args.outCosptr.couldBe(arrayOutCosptr[i * 4 + j], 0.0005)) {
valid = false;
}
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
valid = false;
}
if (!valid) {
@@ -331,7 +331,7 @@
message.append("Actual output outCosptr: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOutCosptr[i * 4 + j], Float.floatToRawIntBits(arrayOutCosptr[i * 4 + j]), arrayOutCosptr[i * 4 + j]));
- if (!args.outCosptr.couldBe(arrayOutCosptr[i * 4 + j])) {
+ if (!args.outCosptr.couldBe(arrayOutCosptr[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
@@ -341,7 +341,7 @@
message.append("Actual output out: ");
message.append(String.format("%14.8g {%8x} %15a",
arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j]));
- if (!args.out.couldBe(arrayOut[i * 4 + j])) {
+ if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) {
message.append(" FAIL");
}
message.append("\n");
diff --git a/tests/tests/security/jni/android_security_cts_NativeCodeTest.cpp b/tests/tests/security/jni/android_security_cts_NativeCodeTest.cpp
index dde06a2..faa6eea 100644
--- a/tests/tests/security/jni/android_security_cts_NativeCodeTest.cpp
+++ b/tests/tests/security/jni/android_security_cts_NativeCodeTest.cpp
@@ -30,6 +30,7 @@
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
+#include <sys/utsname.h>
#include <fcntl.h>
#include <cutils/log.h>
#include <linux/perf_event.h>
@@ -102,6 +103,17 @@
struct iovec iov;
struct sock_diag_req* sock_diag_data;
+ int major, minor;
+ struct utsname uts;
+ if (uname(&uts) != -1 &&
+ sscanf(uts.release, "%d.%d", &major, &minor) == 2 &&
+ ((major > 3) || ((major == 3) && (minor > 8)))) {
+ // Kernels above 3.8 are patched against CVE-2013-1763
+ // This test generates false positives if run on > 3.8.
+ // b/17253473
+ return PASSED;
+ }
+
fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_SOCK_DIAG);
if (fd == -1) {
switch (errno) {
diff --git a/tests/tests/security/src/android/security/cts/SqliteJournalLeakTest.java b/tests/tests/security/src/android/security/cts/SqliteJournalLeakTest.java
deleted file mode 100644
index 109aa21..0000000
--- a/tests/tests/security/src/android/security/cts/SqliteJournalLeakTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2012 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 android.security.cts;
-
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Environment;
-import android.test.AndroidTestCase;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.InputStreamReader;
-import java.io.IOException;
-
-
-public class SqliteJournalLeakTest extends AndroidTestCase {
-
- private static final int REPEAT = 5;
-
- private static final String[] DATABASES = {
- "/com.android.bluetooth/databases/btopp.db",
- "/com.android.browser/app_appcache/ApplicationCache.db",
- "/com.android.browser/app_databases/Databases.db",
- "/com.android.browser/app_geolocation/CachedGeoposition.db",
- "/com.android.browser/app_geolocation/GeolocationPermissions.db",
- "/com.android.browser/app_icons/WebpageIcons.db",
- "/com.android.browser/databases/browser.db",
- "/com.android.browser/databases/launcher.db",
- "/com.android.browser/databases/webview.db",
- "/com.android.browser/databases/webviewCache.db",
- "/com.android.email/databases/EmailProvider.db",
- "/com.android.email/databases/EmailProviderBody.db",
- "/com.android.email/databases/webview.db",
- "/com.android.email/databases/webviewCache.db",
- "/com.android.providers.calendar/databases/calendar.db",
- "/com.android.providers.contacts/databases/contacts2.db",
- "/com.android.providers.downloads/databases/downloads.db",
- "/com.android.providers.drm/databases/drm.db",
- "/com.android.providers.media/databases/internal.db",
- "/com.android.providers.settings/databases/settings.db",
- "/com.android.providers.tasks/databases/tasks.db",
- "/com.android.providers.telephony/optable.db",
- "/com.android.providers.telephony/databases/mmssms.db",
- "/com.android.providers.telephony/databases/nwk_info.db",
- "/com.android.providers.telephony/databases/telephony.db",
- "/com.android.providers.telephony/databases/tether_dun.db",
- "/com.android.providers.userdictionary/databases/user_dict.db",
- "/com.android.settings/databases/webview.db",
- "/com.android.settings/databases/webviewCache.db",
- "/com.android.vending/databases/billing4.db",
- "/com.android.vending/databases/market_assets.db",
- "/com.android.vending/databases/suggestions.db",
- "/com.android.vending/databases/webview.db",
- "/com.android.vending/databases/webviewCache.db"
- };
-
- /**
- * This method triggers activities that should cause database writes.
- * The goal of this is to try to make potentially short-lived journal
- * files show up.
- */
- private void doActivity() {
- Intent webIntent = new Intent(Intent.ACTION_VIEW);
- webIntent.setData(Uri.parse("http:///localhost"));
- webIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- getContext().startActivity(webIntent);
- Intent dictIntent = new Intent("android.settings.USER_DICTIONARY_SETTINGS");
- dictIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- getContext().startActivity(dictIntent);
- }
-
- private void checkDatabases(String suffix) {
- String msg = " is world readable. Please set its permissions to 600"
- + " by setting -DSQLITE_DEFAULT_FILE_PERMISSIONS=0600 in external/sqlite/dist/"
- + "Android.mk; see CVE-2011-3901.";
- String base = Environment.getDataDirectory().getAbsolutePath();
- for(int i=REPEAT; i > 0; i--) {
- doActivity();
- for (String name : DATABASES) {
- name = base + "/data" + name + suffix;
- File f = new File(name);
- assertFalse(name + msg, f.canRead());
- }
- }
- }
-
- public void testJournal() {
- checkDatabases("-journal");
- }
-
- public void testWal() {
- checkDatabases("-wal");
- }
-
- public void testShm() {
- checkDatabases("-shm");
- }
-}
diff --git a/tests/tests/speech/Android.mk b/tests/tests/speech/Android.mk
index 75f7e4c..6bec012 100755
--- a/tests/tests/speech/Android.mk
+++ b/tests/tests/speech/Android.mk
@@ -29,6 +29,4 @@
LOCAL_SDK_VERSION := current
-LOCAL_INSTRUMENTATION_FOR := CtsTestStubs
-
include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/speech/AndroidManifest.xml b/tests/tests/speech/AndroidManifest.xml
index 788f7cc..2e7f0b6 100755
--- a/tests/tests/speech/AndroidManifest.xml
+++ b/tests/tests/speech/AndroidManifest.xml
@@ -21,12 +21,20 @@
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<application>
<uses-library android:name="android.test.runner" />
+
+ <service android:name="android.speech.tts.cts.StubTextToSpeechService">
+ <intent-filter>
+ <action android:name="android.intent.action.TTS_SERVICE" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </service>
+
</application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.cts.stub"
+ android:targetPackage="com.android.cts.speech"
android:label="CTS tests of android.speech">
<meta-data android:name="listener"
android:value="com.android.cts.runner.CtsTestRunListener" />
diff --git a/tests/src/android/speech/tts/cts/StubTextToSpeechService.java b/tests/tests/speech/src/android/speech/tts/cts/StubTextToSpeechService.java
similarity index 100%
rename from tests/src/android/speech/tts/cts/StubTextToSpeechService.java
rename to tests/tests/speech/src/android/speech/tts/cts/StubTextToSpeechService.java
diff --git a/tests/tests/speech/src/android/speech/tts/cts/TextToSpeechWrapper.java b/tests/tests/speech/src/android/speech/tts/cts/TextToSpeechWrapper.java
index cba242f..f0d55bf 100644
--- a/tests/tests/speech/src/android/speech/tts/cts/TextToSpeechWrapper.java
+++ b/tests/tests/speech/src/android/speech/tts/cts/TextToSpeechWrapper.java
@@ -34,7 +34,7 @@
public class TextToSpeechWrapper {
private static final String LOG_TAG = "TextToSpeechServiceTest";
- public static final String MOCK_TTS_ENGINE = "com.android.cts.stub";
+ public static final String MOCK_TTS_ENGINE = "com.android.cts.speech";
private final Context mContext;
private TextToSpeech mTts;
diff --git a/tests/tests/telecomm/src/android/telecom/cts/ConnectionTest.java b/tests/tests/telecomm/src/android/telecom/cts/ConnectionTest.java
index 08bc1de..e552733 100644
--- a/tests/tests/telecomm/src/android/telecom/cts/ConnectionTest.java
+++ b/tests/tests/telecomm/src/android/telecom/cts/ConnectionTest.java
@@ -17,7 +17,7 @@
package android.telecom.cts;
import android.telecom.Connection;
-import android.telephony.DisconnectCause;
+import android.telecom.DisconnectCause;
import android.test.AndroidTestCase;
import java.util.concurrent.Semaphore;
@@ -55,7 +55,8 @@
waitForStateChange(lock);
assertEquals(Connection.STATE_HOLDING, connection.getState());
- connection.setDisconnected(DisconnectCause.LOCAL, "Test call");
+ connection.setDisconnected(
+ new DisconnectCause(DisconnectCause.LOCAL, "Test call"));
waitForStateChange(lock);
assertEquals(Connection.STATE_DISCONNECTED, connection.getState());
@@ -66,8 +67,8 @@
}
public void testFailedState() {
- Connection connection =
- Connection.createFailedConnection(DisconnectCause.LOCAL, "Test call");
+ Connection connection = Connection.createFailedConnection(
+ new DisconnectCause(DisconnectCause.LOCAL, "Test call"));
assertEquals(Connection.STATE_DISCONNECTED, connection.getState());
connection.setRinging();
diff --git a/tests/tests/telecomm/src/android/telecom/cts/TelecomManagerTest.java b/tests/tests/telecomm/src/android/telecom/cts/TelecomManagerTest.java
index cdd2177..8f97d77 100644
--- a/tests/tests/telecomm/src/android/telecom/cts/TelecomManagerTest.java
+++ b/tests/tests/telecomm/src/android/telecom/cts/TelecomManagerTest.java
@@ -17,17 +17,27 @@
package android.telecom.cts;
import android.content.ComponentName;
+import android.content.pm.PackageManager;
import android.net.Uri;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.PhoneCapabilities;
import android.telecom.TelecomManager;
import android.test.AndroidTestCase;
+import android.util.Log;
import java.util.List;
public class TelecomManagerTest extends AndroidTestCase {
+ private static final String TAG = "TelecommManagerTest";
+
public void testRegisterAccountsBlocked() {
+ PackageManager pm = getContext().getPackageManager();
+ if (!pm.hasSystemFeature(PackageManager.FEATURE_CONNECTION_SERVICE)) {
+ Log.d(TAG, "Skipping the test because FEATURE_CONNECTION_SERVICE is disabled.");
+ return;
+ }
+
PhoneAccount phoneAccount = new PhoneAccount.Builder(
new PhoneAccountHandle(
new ComponentName(getContext(), TelecomManagerTest.class),
@@ -41,13 +51,13 @@
.build();
TelecomManager tm = TelecomManager.from(getContext());
- List<PhoneAccountHandle> handles = tm.getEnabledPhoneAccounts();
+ List<PhoneAccountHandle> handles = tm.getCallCapablePhoneAccounts();
try {
tm.registerPhoneAccount(phoneAccount);
fail("This should have failed (CTS can't get the permission)");
} catch (SecurityException e) {
- assertEquals(handles, tm.getEnabledPhoneAccounts());
+ assertEquals(handles, tm.getCallCapablePhoneAccounts());
}
}
}
diff --git a/tests/tests/text/Android.mk b/tests/tests/text/Android.mk
index ae14124..df2d324 100644
--- a/tests/tests/text/Android.mk
+++ b/tests/tests/text/Android.mk
@@ -23,14 +23,12 @@
LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+LOCAL_STATIC_JAVA_LIBRARIES := ctsdeviceutil ctstestrunner
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := CtsTextTestCases
-LOCAL_INSTRUMENTATION_FOR := CtsTestStubs
-
# uncomment when dalvik.annotation.Test* are removed or part of SDK
#LOCAL_SDK_VERSION := current
diff --git a/tests/tests/text/AndroidManifest.xml b/tests/tests/text/AndroidManifest.xml
index 63f6d59..0b31354 100644
--- a/tests/tests/text/AndroidManifest.xml
+++ b/tests/tests/text/AndroidManifest.xml
@@ -19,12 +19,64 @@
package="com.android.cts.text">
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
+ <uses-permission android:name="android.permission.WRITE_SETTINGS" />
<application>
- <uses-library android:name="android.test.runner" />
+ <uses-library android:name="android.test.runner"
+ android:maxRecents="1"/>
+
+ <activity android:name="android.text.cts.EmojiCtsActivity"
+ android:label="AvailableIntentsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.text.method.cts.KeyListenerCtsActivity"
+ android:label="KeyListenerCtsActivity"/>
+
+ <activity android:name="android.text.method.cts.CtsActivity"
+ android:label="CtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.text.style.cts.URLSpanCtsActivity"
+ android:label="URLSpanCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.text.style.cts.MockURLSpanTestActivity"
+ android:label="MockURLSpanTestActivity"
+ android:launchMode="singleTask"
+ android:alwaysRetainTaskState="true"
+ android:configChanges="orientation|keyboardHidden">
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ <data android:scheme="ctstest" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.text.method.cts.CtsActivity"
+ android:label="CtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
</application>
<instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.cts.stub"
+ android:targetPackage="com.android.cts.text"
android:label="CTS tests of android.text">
<meta-data android:name="listener"
android:value="com.android.cts.runner.CtsTestRunListener" />
diff --git a/tests/tests/text/res/drawable/pass.jpg b/tests/tests/text/res/drawable/pass.jpg
new file mode 100644
index 0000000..2f4b083
--- /dev/null
+++ b/tests/tests/text/res/drawable/pass.jpg
Binary files differ
diff --git a/tests/tests/text/res/drawable/scenery.jpg b/tests/tests/text/res/drawable/scenery.jpg
new file mode 100644
index 0000000..7a6145b
--- /dev/null
+++ b/tests/tests/text/res/drawable/scenery.jpg
Binary files differ
diff --git a/tests/src/android/widget/cts/StubActivity.java b/tests/tests/text/res/layout/keylistener_layout.xml
similarity index 70%
copy from tests/src/android/widget/cts/StubActivity.java
copy to tests/tests/text/res/layout/keylistener_layout.xml
index fe4002c..96a419d 100644
--- a/tests/src/android/widget/cts/StubActivity.java
+++ b/tests/tests/text/res/layout/keylistener_layout.xml
@@ -1,4 +1,5 @@
-/*
+<?xml version="1.0" encoding="utf-8"?>
+<!--
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -12,15 +13,10 @@
* 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.
- */
+ -->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/keylistener_textview"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+/>
-package android.widget.cts;
-
-import android.app.Activity;
-
-/**
- * Stub activity for helping test. It's an empty activity.
- */
-public class StubActivity extends Activity {
-
-}
diff --git a/tests/tests/text/res/layout/urlspan_layout.xml b/tests/tests/text/res/layout/urlspan_layout.xml
new file mode 100644
index 0000000..2ca95ac
--- /dev/null
+++ b/tests/tests/text/res/layout/urlspan_layout.xml
@@ -0,0 +1,30 @@
+<?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="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView android:id="@+id/url"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingLeft="4dip"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:text="@string/text_view_hello"/>
+
+</LinearLayout>
diff --git a/tests/src/android/widget/cts/ListViewStubActivity.java b/tests/tests/text/res/layout/webview_layout.xml
similarity index 60%
copy from tests/src/android/widget/cts/ListViewStubActivity.java
copy to tests/tests/text/res/layout/webview_layout.xml
index 77c3e5e..7a0ed0d 100644
--- a/tests/src/android/widget/cts/ListViewStubActivity.java
+++ b/tests/tests/text/res/layout/webview_layout.xml
@@ -1,4 +1,5 @@
-/*
+<?xml version="1.0" encoding="utf-8"?>
+<!--
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -12,19 +13,13 @@
* 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:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
-package android.widget.cts;
-
-import com.android.cts.stub.R;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-public class ListViewStubActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.listview_layout);
- }
-}
+ <WebView android:id="@+id/web_page"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+</LinearLayout>
diff --git a/tests/tests/text/res/values/attrs.xml b/tests/tests/text/res/values/attrs.xml
new file mode 100644
index 0000000..4c3d9db
--- /dev/null
+++ b/tests/tests/text/res/values/attrs.xml
@@ -0,0 +1,145 @@
+<?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.
+ -->
+
+<resources>
+ <declare-styleable name="Style1">
+ <attr name="Type1" format="integer">
+ <enum name="type" value="28" />
+ <enum name="data" value="0xff00ff00" />
+ <enum name="asset_cookie" value="0" />
+ <enum name="resource_id" value="0" />
+ <enum name="changing_config" value="0" />
+ </attr>
+ <attr name="Type2" format="integer">
+ <enum name="type" value="28" />
+ <enum name="data" value="0xff0000ff" />
+ <enum name="asset_cookie" value="0" />
+ <enum name="resource_id" value="0" />
+ <enum name="changing_config" value="0" />
+ </attr>
+ </declare-styleable>
+ <attr name="type1" format="boolean"/>
+ <attr name="type2" format="boolean"/>
+ <attr name="type3" format="color"/>
+ <attr name="type4" format="reference|color"/>
+ <attr name="type5" format="dimension"/>
+ <attr name="type6" format="dimension"/>
+ <attr name="type7" format="dimension"/>
+ <attr name="type8" format="reference"/>
+ <attr name="type9" format="float"/>
+ <attr name="type10" format="fraction"/>
+ <attr name="type11" format="integer"/>
+ <attr name="type12" format="integer"/>
+ <attr name="type13" format="reference|string"/>
+ <attr name="type14" format="string"/>
+ <attr name="type15" format="reference"/>
+ <attr name="type16" format="string"/>
+ <declare-styleable name="style1">
+ <attr name="type1"/>
+ <attr name="type2"/>
+ <attr name="type3"/>
+ <attr name="type4"/>
+ <attr name="type5"/>
+ <attr name="type6"/>
+ <attr name="type7"/>
+ <attr name="type8"/>
+ <attr name="type9"/>
+ <attr name="type10"/>
+ <attr name="type11"/>
+ <attr name="type12"/>
+ <attr name="type13"/>
+ <attr name="type14"/>
+ <attr name="type15"/>
+ <attr name="type16"/>
+ </declare-styleable>
+ <attr name="testEnum">
+ <enum name="val1" value="1" />
+ <enum name="val2" value="2" />
+ <enum name="val10" value="10" />
+ </attr>
+ <attr name="testFlags">
+ <flag name="bit1" value="0x1" />
+ <flag name="bit2" value="0x2" />
+ <flag name="bit31" value="0x40000000" />
+ </attr>
+ <attr name="testString" format="string" />
+ <declare-styleable name="EnumStyle">
+ <attr name="testEnum" />
+ </declare-styleable>
+ <declare-styleable name="FlagStyle">
+ <attr name="testFlags" />
+ </declare-styleable>
+ <declare-styleable name="TestConfig">
+ <attr name="testString" />
+ </declare-styleable>
+ <!-- Size of text. Recommended dimension type for text is "sp" for scaled-pixels (example: 15sp).
+ Supported values include the following:<p/>
+ <ul>
+ <li><b>px</b> Pixels</li>
+ <li><b>sp</b> Scaled pixels (scaled to relative pixel size on screen). See {@link android.util.DisplayMetrics} for more information.</li>
+ <li><b>pt</b> Points</li>
+ <li><b>dip</b> Device independent pixels. See {@link android.util.DisplayMetrics} for more information.</li>
+ </ul>
+ -->
+ <attr name="textSize" format="dimension" />
+ <attr name="typeface">
+ <enum name="normal" value="0" />
+ <enum name="sans" value="1" />
+ <enum name="serif" value="2" />
+ <enum name="monospace" value="3" />
+ </attr>
+ <!-- Default text typeface style. -->
+ <attr name="textStyle">
+ <flag name="normal" value="0" />
+ <flag name="bold" value="1" />
+ <flag name="italic" value="2" />
+ </attr>
+ <!-- Color of text (usually same as colorForeground). -->
+ <attr name="textColor" format="reference|color" />
+ <!-- Color of highlighted text. -->
+ <attr name="textColorHighlight" format="reference|color" />
+ <!-- Color of hint text (displayed when the field is empty). -->
+ <attr name="textColorHint" format="reference|color" />
+ <!-- Color of link text (URLs). -->
+ <attr name="textColorLink" format="reference|color" />
+ <declare-styleable name="TextAppearance">
+ <attr name="textColor"/>
+ <attr name="textSize"/>
+ <attr name="textStyle"/>
+ <attr name="typeface"/>
+ <attr name="textColorHighlight"/>
+ <attr name="textColorHint"/>
+ <attr name="textColorLink"/>
+ </declare-styleable>
+ <!-- Integer used to uniquely identify theme overrides. -->
+ <attr name="themeType" format="integer"/>
+ <!-- Theme reference used to override parent theme. -->
+ <attr name="themeOverrideAttr" format="reference"/>
+
+ <!-- Drawable theming attributes -->
+ <attr name="themeBoolean" />
+ <attr name="themeColor" />
+ <attr name="themeFloat" />
+ <attr name="themeInteger" />
+ <attr name="themeDimension" />
+ <attr name="themeDrawable" />
+ <attr name="themeBitmap" />
+ <attr name="themeNinePatch" />
+ <attr name="themeGravity" />
+ <attr name="themeTileMode" />
+ <attr name="themeAngle" />
+</resources>
diff --git a/tests/tests/text/res/values/strings.xml b/tests/tests/text/res/values/strings.xml
new file mode 100644
index 0000000..c167278
--- /dev/null
+++ b/tests/tests/text/res/values/strings.xml
@@ -0,0 +1,179 @@
+<?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.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="permlab_testGranted">Test Granted</string>
+ <string name="permdesc_testGranted">Used for running CTS tests, for testing operations
+ where we have the permission.</string>
+ <string name="permlab_testDynamic">Test Dynamic</string>
+ <string name="permdesc_testDynamic">Used for running CTS tests, for testing adding
+ dynamic permissions.</string>
+ <string name="permlab_testDenied">Test Denied</string>
+ <string name="permdesc_testDenied">Used for running CTS tests, for testing operations
+ where we do not have the permission.</string>
+ <string name="explain">1. click start. \n2. if above image shaked, then press pass button,
+ else press failed button.</string>
+ <string name="text_view_hello">Hello! Text view!</string>
+ <string name="text_view_hello_two_lines">Hello! \nText view!</string>
+ <string name="text_view_simple_hint">This is a hint.</string>
+ <string name="text_view_hint">This is a string for testing hint of textview.</string>
+ <string name="activity_forwarding">App/Forwarding</string>
+ <string name="forwarding">$$$</string>
+ <string name="go">Go</string>
+ <string name="back">Back</string>
+ <string name="forward_target">
+ Press back button and notice we don\'t see the previous activity.
+ </string>
+ <string name="edit_text">testing</string>
+ <string name="text">DialogTest</string>
+ <string name="text_country">Country</string>
+ <string name="text_name">Name</string>
+ <string name="hello_world">Hello, World!</string>
+ <string name="hello_android">Hello, Android!</string>
+ <string name="alert_dialog_username">Name:</string>
+ <string name="alert_dialog_password">Password:</string>
+ <string name="alert_dialog_positive">Positive</string>
+ <string name="alert_dialog_negative">Negative</string>
+ <string name="alert_dialog_neutral">Neutral</string>
+ <string name="notify">Notify </string>
+ <string name="tabs_1">testing</string>
+ <string name="table_layout_first">first</string>
+ <string name="table_layout_second">second</string>
+ <string name="table_layout_third">third</string>
+ <string name="table_layout_long">Very long to make the string out of the screen</string>
+ <string name="chronometer_text">Test Chronometer</string>
+ <string name="am">AM</string>
+ <string name="pm">PM</string>
+ <string name="viewgroup_test">ViewGroup test</string>
+ <string name="viewanimator_test">ViewAnimator test</string>
+ <string name="id_ok">OK</string>
+ <string name="id_cancel">Cancel</string>
+ <string name="context_test_string1">This is %s string.</string>
+ <string name="context_test_string2">This is test string.</string>
+ <string name="animationutils_test_instructions">Choose different animations</string>
+ <string name="animationutils_test_alpha">Alpha animation</string>
+ <string name="animationutils_test_scale">Scale animation</string>
+ <string name="animationutils_test_rotate">Rotate animation</string>
+ <string name="animationutils_test_translate">Translate animation</string>
+ <string name="animationutils_test_set">Animation set</string>
+ <string name="animationutils_test_layout">Layout animation</string>
+ <string name="animationutils_test_gridlayout">Grid layout animation</string>
+ <string name="twolinelistitem_test_text1">text1</string>
+ <string name="twolinelistitem_test_text2">text2</string>
+ <string name="metadata_text">metadata text</string>
+ <string name="horizontal_text_1">horizontal 1</string>
+ <string name="horizontal_text_2">horizontal 2</string>
+ <string name="horizontal_text_3">horizontal 3</string>
+ <string name="vertical_text_1">vertical 1</string>
+ <string name="vertical_text_2">vertical 2</string>
+ <string name="vertical_text_3">vertical 3</string>
+ <string name="reference">here</string>
+ <string name="coerceIntegerToString">100</string>
+ <string name="coerceBooleanToString">true</string>
+ <string name="coerceColorToString">#fff</string>
+ <string name="coerceFloatToString">100.0</string>
+ <string name="coerceDimensionToString">100px</string>
+ <string name="coerceFractionToString">100<xliff:g id="percent">%</xliff:g></string>
+ <string name="formattedStringNone">Format[]</string>
+ <string name="formattedStringOne">Format[<xliff:g id="format">%d</xliff:g>]</string>
+ <string name="formattedStringTwo">Format[<xliff:g id="format">%3$d,%2$s</xliff:g>]</string>
+ <string name="checkboxpref_key">checkboxpref_key</string>
+ <string name="checkboxpref_title">title of preference</string>
+ <string name="checkboxpref_summary">summary of preference</string>
+ <string name="checkboxpref_summary_on">summary on of preference</string>
+ <string name="checkboxpref_summary_off">summary off of preference</string>
+ <string name="checkboxpref_depend">checkboxpref_depend</string>
+ <string name="checkboxpref_depend_title"> depend title of preference</string>
+ <string name="checkboxpref_depend_summary"> depend summary of preference</string>
+ <string name="edittextpref_key">edittextpref_key</string>
+ <string name="edittextpref_default_value">default value of preference</string>
+ <string name="edittextpref_title">title of edit text preference</string>
+ <string name="edittextpref_summary">summary of edit text preference</string>
+ <string name="edittextpref_dialog_title">dialog title of edit text preference</string>
+ <string name="edittextpref_text">text of edit text preference</string>
+ <string name="listpref_key">listpref_key</string>
+ <string name="listpref_title">title of list preference</string>
+ <string name="listpref_summary">summary of list preference</string>
+ <string name="listpref_dialogtitle">dialog title of list preference</string>
+ <string name="easy">Easy</string>
+ <string name="medium">Medium</string>
+ <string name="hard">Hard</string>
+ <string name="footer_view">Footer view</string>
+ <string name="header_view">Header view</string>
+ <string name="dialogpref_title">title of dialog preference </string>
+ <string name="dialogpref_dialog_title">dialog title of dialog preference </string>
+ <string name="dialogpref_key">dialogpref_key</string>
+ <string name="dialogpref_default_value">default value of dialog preference</string>
+ <string name="dialogpref_summary">summary of dialog preference</string>
+ <string name="dialogpref_message">message of dialog preference</string>
+ <string name="dialogpref_sure">Sure</string>
+ <string name="dialogpref_cancel">Cancel</string>
+ <string name="pref_key">pref_key</string>
+ <string name="pref_title">title of preference</string>
+ <string name="pref_summary">summary of preference</string>
+ <string name="pref_depend_key">pref_depend_key</string>
+ <string name="pref_depend_title"> depend title of preference</string>
+ <string name="pref_depend_summary"> depend summary of preference</string>
+ <string name="android_intent_action_preference">android.intent.action.PREFERENCE</string>
+ <string name="def_pref_key">def_pref_key</string>
+ <string name="def_pref_title">default preference</string>
+ <string name="def_pref_summary">This is default preference of cts</string>
+ <string name="relative_view1">view 1</string>
+ <string name="relative_view2">view 2</string>
+ <string name="relative_view3">view 3</string>
+ <string name="relative_view4">view 4</string>
+ <string name="relative_view5">view 5</string>
+ <string name="relative_view6">view 6</string>
+ <string name="relative_view7">view 7</string>
+ <string name="relative_view8">view 8</string>
+ <string name="relative_view9">view 9</string>
+ <string name="relative_view10">view 10</string>
+ <string name="relative_view11">view 11</string>
+ <string name="relative_view12">view 12</string>
+ <string name="relative_view13">view 13</string>
+ <string name="country">Country:</string>
+ <string name="symbol">Symbol:</string>
+ <string name="country_warning">No such country registered</string>
+ <string name="version_cur">base</string>
+ <string name="version_old">base</string>
+ <string name="version_v3">base</string>
+ <string name="authenticator_label">Android CTS</string>
+ <string name="search_label">Android CTS</string>
+ <string name="tag1">tag 1</string>
+ <string name="tag2">tag 2</string>
+
+ <string name="button">Button</string>
+ <string name="holo_test">Holo Test</string>
+ <string name="holo_generator">Holo Generator</string>
+ <string name="holo_light_test">Holo Light Test</string>
+ <string name="holo_light_generator">Holo Light Generator</string>
+ <string name="reference_image">Reference Image: </string>
+ <string name="generated_image">Generated Image: </string>
+ <string name="themes_prompt">Select a Theme:</string>
+ <string name="sample_text">Sample text goes here. I wanted something creative and whimsical
+but then I just got bored...</string>
+ <string name="long_text">This is a really long string which exceeds the width of the view.
+New devices have a much larger screen which actually enables long strings to be displayed
+with no fading. I have made this string longer to fix this case. If you are correcting this
+text, I would love to see the kind of devices you guys now use! Guys, maybe some devices need longer string!
+I think so, so how about double this string, like copy and paste!
+This is a really long string which exceeds the width of the view.
+New devices have a much larger screen which actually enables long strings to be displayed
+with no fading. I have made this string longer to fix this case. If you are correcting this
+text, I would love to see the kind of devices you guys now use! Guys, maybe some devices need longer string!
+I think so, so how about double this string, like copy and paste! </string>
+ <string name="rectangle200">"M 0,0 l 200,0 l 0, 200 l -200, 0 z"</string>
+</resources>
diff --git a/tests/src/android/webkit/cts/WebViewStubActivity.java b/tests/tests/text/src/android/text/cts/EmojiCtsActivity.java
similarity index 75%
copy from tests/src/android/webkit/cts/WebViewStubActivity.java
copy to tests/tests/text/src/android/text/cts/EmojiCtsActivity.java
index 62adc39..eb88426 100644
--- a/tests/src/android/webkit/cts/WebViewStubActivity.java
+++ b/tests/tests/text/src/android/text/cts/EmojiCtsActivity.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 The Android Open Source Project
+ * Copyright (C) 2013 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.
@@ -14,17 +14,15 @@
* limitations under the License.
*/
-package android.webkit.cts;
+package android.text.cts;
-import com.android.cts.stub.R;
+import com.android.cts.text.R;
import android.app.Activity;
import android.os.Bundle;
-import android.view.ViewGroup;
-import android.view.ViewParent;
import android.webkit.WebView;
-public class WebViewStubActivity extends Activity {
+public class EmojiCtsActivity extends Activity {
private WebView mWebView;
@Override
@@ -45,10 +43,6 @@
@Override
public void onDestroy() {
if (mWebView != null) {
- ViewParent parent = mWebView.getParent();
- if (parent instanceof ViewGroup) {
- ((ViewGroup) parent).removeView(mWebView);
- }
mWebView.destroy();
}
super.onDestroy();
diff --git a/tests/tests/text/src/android/text/cts/EmojiTest.java b/tests/tests/text/src/android/text/cts/EmojiTest.java
index 4bcc0e1..5e2ca93 100644
--- a/tests/tests/text/src/android/text/cts/EmojiTest.java
+++ b/tests/tests/text/src/android/text/cts/EmojiTest.java
@@ -25,15 +25,13 @@
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
-import android.webkit.cts.NullWebViewUtils;
-import android.webkit.cts.WebViewOnUiThread;
import android.widget.TextView;
import android.widget.EditText;
-public class EmojiTest extends ActivityInstrumentationTestCase2<EmojiStubActivity> {
+public class EmojiTest extends ActivityInstrumentationTestCase2<EmojiCtsActivity> {
public EmojiTest() {
- super("com.android.cts.stub", EmojiStubActivity.class);
+ super("com.android.cts.stub", EmojiCtsActivity.class);
}
protected void setUp() throws Exception {
@@ -94,7 +92,7 @@
// Trigger activity bringup so we can determine if a WebView is available on this
// device.
- EmojiStubActivity activity = getActivity();
+ EmojiCtsActivity activity = getActivity();
if (NullWebViewUtils.isWebViewAvailable()) {
CaptureWebView cwebview = new CaptureWebView(getInstrumentation().getContext());
mBitmapA = cwebview.capture(Character.toChars(comparedCodePoints[i][0]));
diff --git a/tests/tests/text/src/android/text/cts/NullWebViewUtils.java b/tests/tests/text/src/android/text/cts/NullWebViewUtils.java
new file mode 100644
index 0000000..86d0843
--- /dev/null
+++ b/tests/tests/text/src/android/text/cts/NullWebViewUtils.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2010 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 android.text.cts;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+
+/**
+ * Utilities to enable the android.webkit.* CTS tests (and others that rely on a functioning
+ * android.webkit.WebView implementation) to determine whether a functioning WebView is present
+ * on the device or not.
+ *
+ * Test cases that require android.webkit.* classes should wrap their first usage of WebView in a
+ * try catch block, and pass any exception that is thrown to
+ * NullWebViewUtils.determineIfWebViewAvailable. The return value of
+ * NullWebViewUtils.isWebViewAvailable will then determine if the test should expect to be able to
+ * use a WebView.
+ */
+public class NullWebViewUtils {
+
+ private static boolean sWebViewUnavailable;
+
+ /**
+ * @param context Current Activity context, used to query the PackageManager.
+ * @param t An exception thrown by trying to invoke android.webkit.* APIs.
+ */
+ public static void determineIfWebViewAvailable(Context context, Throwable t) {
+ sWebViewUnavailable = !hasWebViewFeature(context) && checkCauseWasUnsupportedOperation(t);
+ }
+
+ /**
+ * After calling determineIfWebViewAvailable, this returns whether a WebView is available on the
+ * device and wheter the test can rely on it.
+ * @return True iff. PackageManager determined that there is no WebView on the device and the
+ * exception thrown from android.webkit.* was UnsupportedOperationException.
+ */
+ public static boolean isWebViewAvailable() {
+ return !sWebViewUnavailable;
+ }
+
+ private static boolean hasWebViewFeature(Context context) {
+ // Query the system property that determins if there is a functional WebView on the device.
+ PackageManager pm = context.getPackageManager();
+ return pm.hasSystemFeature(PackageManager.FEATURE_WEBVIEW);
+ }
+
+ private static boolean checkCauseWasUnsupportedOperation(Throwable t) {
+ if (t == null) return false;
+ while (t.getCause() != null) {
+ t = t.getCause();
+ }
+ return t instanceof UnsupportedOperationException;
+ }
+
+ /**
+ * Some CTS tests (by design) first use android.webkit.* from a background thread. This helper
+ * allows the test to catch the UnsupportedOperationException from that background thread, and
+ * then query the result from the test main thread.
+ */
+ public static class NullWebViewFromThreadExceptionHandler
+ implements Thread.UncaughtExceptionHandler {
+ private Throwable mPendingException;
+
+ @Override
+ public void uncaughtException(Thread t, Throwable e) {
+ mPendingException = e;
+ }
+
+ public boolean isWebViewAvailable(Context context) {
+ return hasWebViewFeature(context) ||
+ !checkCauseWasUnsupportedOperation(mPendingException);
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/tests/text/src/android/text/cts/WebViewOnUiThread.java b/tests/tests/text/src/android/text/cts/WebViewOnUiThread.java
new file mode 100644
index 0000000..3d62ce4
--- /dev/null
+++ b/tests/tests/text/src/android/text/cts/WebViewOnUiThread.java
@@ -0,0 +1,980 @@
+/*
+ * Copyright (C) 2011 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 android.text.cts;
+
+import android.cts.util.PollingCheck;
+import android.graphics.Bitmap;
+import android.graphics.Picture;
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.os.Looper;
+import android.os.Message;
+import android.os.SystemClock;
+import android.print.PrintDocumentAdapter;
+import android.test.InstrumentationTestCase;
+import android.util.DisplayMetrics;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewParent;
+import android.webkit.DownloadListener;
+import android.webkit.CookieManager;
+import android.webkit.ValueCallback;
+import android.webkit.WebBackForwardList;
+import android.webkit.WebChromeClient;
+import android.webkit.WebSettings;
+import android.webkit.WebView.HitTestResult;
+import android.webkit.WebView.PictureListener;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+
+import junit.framework.Assert;
+
+import java.io.File;
+import java.util.concurrent.Callable;
+import java.util.Map;
+
+/**
+ * Many tests need to run WebView code in the UI thread. This class
+ * wraps a WebView so that calls are ensured to arrive on the UI thread.
+ *
+ * All methods may be run on either the UI thread or test thread.
+ */
+public class WebViewOnUiThread {
+ /**
+ * The maximum time, in milliseconds (10 seconds) to wait for a load
+ * to be triggered.
+ */
+ private static final long LOAD_TIMEOUT = 10000;
+
+ /**
+ * Set to true after onPageFinished is called.
+ */
+ private boolean mLoaded;
+
+ /**
+ * Set to true after onNewPicture is called. Reset when onPageStarted
+ * is called.
+ */
+ private boolean mNewPicture;
+
+ /**
+ * The progress, in percentage, of the page load. Valid values are between
+ * 0 and 100.
+ */
+ private int mProgress;
+
+ /**
+ * The test that this class is being used in. Used for runTestOnUiThread.
+ */
+ private InstrumentationTestCase mTest;
+
+ /**
+ * The WebView that calls will be made on.
+ */
+ private WebView mWebView;
+
+ /**
+ * Initializes the webView with a WebViewClient, WebChromeClient,
+ * and PictureListener to prepare for loadUrlAndWaitForCompletion.
+ *
+ * A new WebViewOnUiThread should be called during setUp so as to
+ * reinitialize between calls.
+ *
+ * @param test The test in which this is being run.
+ * @param webView The webView that the methods should call.
+ * @see loadUrlAndWaitForCompletion
+ */
+ public WebViewOnUiThread(InstrumentationTestCase test, WebView webView) {
+ mTest = test;
+ mWebView = webView;
+ final WebViewClient webViewClient = new WaitForLoadedClient(this);
+ final WebChromeClient webChromeClient = new WaitForProgressClient(this);
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setWebViewClient(webViewClient);
+ mWebView.setWebChromeClient(webChromeClient);
+ mWebView.setPictureListener(new WaitForNewPicture());
+ }
+ });
+ }
+
+ /**
+ * Called after a test is complete and the WebView should be disengaged from
+ * the tests.
+ */
+ public void cleanUp() {
+ clearHistory();
+ clearCache(true);
+ setPictureListener(null);
+ setWebChromeClient(null);
+ setWebViewClient(null);
+ }
+
+ /**
+ * Called from WaitForNewPicture, this is used to indicate that
+ * the page has been drawn.
+ */
+ synchronized public void onNewPicture() {
+ mNewPicture = true;
+ this.notifyAll();
+ }
+
+ /**
+ * Called from WaitForLoadedClient, this is used to clear the picture
+ * draw state so that draws before the URL begins loading don't count.
+ */
+ synchronized public void onPageStarted() {
+ mNewPicture = false; // Earlier paints won't count.
+ }
+
+ /**
+ * Called from WaitForLoadedClient, this is used to indicate that
+ * the page is loaded, but not drawn yet.
+ */
+ synchronized public void onPageFinished() {
+ mLoaded = true;
+ this.notifyAll();
+ }
+
+ /**
+ * Called from the WebChrome client, this sets the current progress
+ * for a page.
+ * @param progress The progress made so far between 0 and 100.
+ */
+ synchronized public void onProgressChanged(int progress) {
+ mProgress = progress;
+ this.notifyAll();
+ }
+
+ public void setWebViewClient(final WebViewClient webViewClient) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setWebViewClient(webViewClient);
+ }
+ });
+ }
+
+ public void setWebChromeClient(final WebChromeClient webChromeClient) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setWebChromeClient(webChromeClient);
+ }
+ });
+ }
+
+ public void setPictureListener(final PictureListener pictureListener) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setPictureListener(pictureListener);
+ }
+ });
+ }
+
+ public void setNetworkAvailable(final boolean available) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setNetworkAvailable(available);
+ }
+ });
+ }
+
+ public void setDownloadListener(final DownloadListener listener) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setDownloadListener(listener);
+ }
+ });
+ }
+
+ public void setBackgroundColor(final int color) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setBackgroundColor(color);
+ }
+ });
+ }
+
+ public void clearCache(final boolean includeDiskFiles) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.clearCache(includeDiskFiles);
+ }
+ });
+ }
+
+ public void clearHistory() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.clearHistory();
+ }
+ });
+ }
+
+ public void requestFocus() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.requestFocus();
+ }
+ });
+ }
+
+ public boolean canZoomIn() {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.canZoomIn();
+ }
+ });
+ }
+
+ public boolean zoomIn() {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.zoomIn();
+ }
+ });
+ }
+
+ public boolean zoomOut() {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.zoomOut();
+ }
+ });
+ }
+
+ public void setFindListener(final WebView.FindListener listener) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setFindListener(listener);
+ }
+ });
+ }
+
+ public void removeJavascriptInterface(final String interfaceName) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.removeJavascriptInterface(interfaceName);
+ }
+ });
+ }
+
+ public void addJavascriptInterface(final Object object, final String name) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.addJavascriptInterface(object, name);
+ }
+ });
+ }
+
+ public void flingScroll(final int vx, final int vy) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.flingScroll(vx, vy);
+ }
+ });
+ }
+
+ public void requestFocusNodeHref(final Message hrefMsg) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.requestFocusNodeHref(hrefMsg);
+ }
+ });
+ }
+
+ public void requestImageRef(final Message msg) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.requestImageRef(msg);
+ }
+ });
+ }
+
+ public void setInitialScale(final int scaleInPercent) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setInitialScale(scaleInPercent);
+ }
+ });
+ }
+
+ public void clearSslPreferences() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.clearSslPreferences();
+ }
+ });
+ }
+
+ public void clearClientCertPreferences(final Runnable onCleared) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ WebView.clearClientCertPreferences(onCleared);
+ }
+ });
+ }
+
+ public void resumeTimers() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.resumeTimers();
+ }
+ });
+ }
+
+ public void findNext(final boolean forward) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.findNext(forward);
+ }
+ });
+ }
+
+ public void clearMatches() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.clearMatches();
+ }
+ });
+ }
+
+ /**
+ * Calls loadUrl on the WebView and then waits onPageFinished,
+ * onNewPicture and onProgressChange to reach 100.
+ * Test fails if the load timeout elapses.
+ * @param url The URL to load.
+ */
+ public void loadUrlAndWaitForCompletion(final String url) {
+ callAndWait(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.loadUrl(url);
+ }
+ });
+ }
+
+ /**
+ * Calls loadUrl on the WebView and then waits onPageFinished,
+ * onNewPicture and onProgressChange to reach 100.
+ * Test fails if the load timeout elapses.
+ * @param url The URL to load.
+ * @param extraHeaders The additional headers to be used in the HTTP request.
+ */
+ public void loadUrlAndWaitForCompletion(final String url,
+ final Map<String, String> extraHeaders) {
+ callAndWait(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.loadUrl(url, extraHeaders);
+ }
+ });
+ }
+
+ public void loadUrl(final String url) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.loadUrl(url);
+ }
+ });
+ }
+
+ public void stopLoading() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.stopLoading();
+ }
+ });
+ }
+
+ public void postUrlAndWaitForCompletion(final String url, final byte[] postData) {
+ callAndWait(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.postUrl(url, postData);
+ }
+ });
+ }
+
+ public void loadDataAndWaitForCompletion(final String data,
+ final String mimeType, final String encoding) {
+ callAndWait(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.loadData(data, mimeType, encoding);
+ }
+ });
+ }
+
+ public void loadDataWithBaseURLAndWaitForCompletion(final String baseUrl,
+ final String data, final String mimeType, final String encoding,
+ final String historyUrl) {
+ callAndWait(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.loadDataWithBaseURL(baseUrl, data, mimeType, encoding,
+ historyUrl);
+ }
+ });
+ }
+
+ /**
+ * Reloads a page and waits for it to complete reloading. Use reload
+ * if it is a form resubmission and the onFormResubmission responds
+ * by telling WebView not to resubmit it.
+ */
+ public void reloadAndWaitForCompletion() {
+ callAndWait(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.reload();
+ }
+ });
+ }
+
+ /**
+ * Reload the previous URL. Use reloadAndWaitForCompletion unless
+ * it is a form resubmission and the onFormResubmission responds
+ * by telling WebView not to resubmit it.
+ */
+ public void reload() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.reload();
+ }
+ });
+ }
+
+ /**
+ * Use this only when JavaScript causes a page load to wait for the
+ * page load to complete. Otherwise use loadUrlAndWaitForCompletion or
+ * similar functions.
+ */
+ public void waitForLoadCompletion() {
+ waitForCriteria(LOAD_TIMEOUT,
+ new Callable<Boolean>() {
+ @Override
+ public Boolean call() {
+ return isLoaded();
+ }
+ });
+ clearLoad();
+ }
+
+ private void waitForCriteria(long timeout, Callable<Boolean> doneCriteria) {
+ if (isUiThread()) {
+ waitOnUiThread(timeout, doneCriteria);
+ } else {
+ waitOnTestThread(timeout, doneCriteria);
+ }
+ }
+
+ public String getTitle() {
+ return getValue(new ValueGetter<String>() {
+ @Override
+ public String capture() {
+ return mWebView.getTitle();
+ }
+ });
+ }
+
+ public WebSettings getSettings() {
+ return getValue(new ValueGetter<WebSettings>() {
+ @Override
+ public WebSettings capture() {
+ return mWebView.getSettings();
+ }
+ });
+ }
+
+ public WebBackForwardList copyBackForwardList() {
+ return getValue(new ValueGetter<WebBackForwardList>() {
+ @Override
+ public WebBackForwardList capture() {
+ return mWebView.copyBackForwardList();
+ }
+ });
+ }
+
+ public Bitmap getFavicon() {
+ return getValue(new ValueGetter<Bitmap>() {
+ @Override
+ public Bitmap capture() {
+ return mWebView.getFavicon();
+ }
+ });
+ }
+
+ public String getUrl() {
+ return getValue(new ValueGetter<String>() {
+ @Override
+ public String capture() {
+ return mWebView.getUrl();
+ }
+ });
+ }
+
+ public int getProgress() {
+ return getValue(new ValueGetter<Integer>() {
+ @Override
+ public Integer capture() {
+ return mWebView.getProgress();
+ }
+ });
+ }
+
+ public int getHeight() {
+ return getValue(new ValueGetter<Integer>() {
+ @Override
+ public Integer capture() {
+ return mWebView.getHeight();
+ }
+ });
+ }
+
+ public int getContentHeight() {
+ return getValue(new ValueGetter<Integer>() {
+ @Override
+ public Integer capture() {
+ return mWebView.getContentHeight();
+ }
+ });
+ }
+
+ public boolean savePicture(final Bundle b, final File dest) {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.savePicture(b, dest);
+ }
+ });
+ }
+
+ public boolean pageUp(final boolean top) {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.pageUp(top);
+ }
+ });
+ }
+
+ public boolean pageDown(final boolean bottom) {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.pageDown(bottom);
+ }
+ });
+ }
+
+ public int[] getLocationOnScreen() {
+ final int[] location = new int[2];
+ return getValue(new ValueGetter<int[]>() {
+ @Override
+ public int[] capture() {
+ mWebView.getLocationOnScreen(location);
+ return location;
+ }
+ });
+ }
+
+ public float getScale() {
+ return getValue(new ValueGetter<Float>() {
+ @Override
+ public Float capture() {
+ return mWebView.getScale();
+ }
+ });
+ }
+
+ public boolean requestFocus(final int direction,
+ final Rect previouslyFocusedRect) {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.requestFocus(direction, previouslyFocusedRect);
+ }
+ });
+ }
+
+ public HitTestResult getHitTestResult() {
+ return getValue(new ValueGetter<HitTestResult>() {
+ @Override
+ public HitTestResult capture() {
+ return mWebView.getHitTestResult();
+ }
+ });
+ }
+
+ public int getScrollX() {
+ return getValue(new ValueGetter<Integer>() {
+ @Override
+ public Integer capture() {
+ return mWebView.getScrollX();
+ }
+ });
+ }
+
+ public int getScrollY() {
+ return getValue(new ValueGetter<Integer>() {
+ @Override
+ public Integer capture() {
+ return mWebView.getScrollY();
+ }
+ });
+ }
+
+ public final DisplayMetrics getDisplayMetrics() {
+ return getValue(new ValueGetter<DisplayMetrics>() {
+ @Override
+ public DisplayMetrics capture() {
+ return mWebView.getContext().getResources().getDisplayMetrics();
+ }
+ });
+ }
+
+ public boolean requestChildRectangleOnScreen(final View child,
+ final Rect rect,
+ final boolean immediate) {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.requestChildRectangleOnScreen(child, rect,
+ immediate);
+ }
+ });
+ }
+
+ public int findAll(final String find) {
+ return getValue(new ValueGetter<Integer>() {
+ @Override
+ public Integer capture() {
+ return mWebView.findAll(find);
+ }
+ });
+ }
+
+ public Picture capturePicture() {
+ return getValue(new ValueGetter<Picture>() {
+ @Override
+ public Picture capture() {
+ return mWebView.capturePicture();
+ }
+ });
+ }
+
+ public void evaluateJavascript(final String script, final ValueCallback<String> result) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.evaluateJavascript(script, result);
+ }
+ });
+ }
+
+ public WebView createWebView() {
+ return getValue(new ValueGetter<WebView>() {
+ @Override
+ public WebView capture() {
+ return new WebView(mWebView.getContext());
+ }
+ });
+ }
+
+ public PrintDocumentAdapter createPrintDocumentAdapter() {
+ return getValue(new ValueGetter<PrintDocumentAdapter>() {
+ @Override
+ public PrintDocumentAdapter capture() {
+ return mWebView.createPrintDocumentAdapter();
+ }
+ });
+ }
+
+ public void setLayoutHeightToMatchParent() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ ViewParent parent = mWebView.getParent();
+ if (parent instanceof ViewGroup) {
+ ((ViewGroup) parent).getLayoutParams().height =
+ ViewGroup.LayoutParams.MATCH_PARENT;
+ }
+ mWebView.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
+ mWebView.requestLayout();
+ }
+ });
+ }
+
+ public void setAcceptThirdPartyCookies(final boolean accept) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView, accept);
+ }
+ });
+ }
+
+ public boolean acceptThirdPartyCookies() {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return CookieManager.getInstance().acceptThirdPartyCookies(mWebView);
+ }
+ });
+ }
+
+ /**
+ * Helper for running code on the UI thread where an exception is
+ * a test failure. If this is already the UI thread then it runs
+ * the code immediately.
+ *
+ * @see runTestOnUiThread
+ * @param r The code to run in the UI thread
+ */
+ public void runOnUiThread(Runnable r) {
+ try {
+ if (isUiThread()) {
+ r.run();
+ } else {
+ mTest.runTestOnUiThread(r);
+ }
+ } catch (Throwable t) {
+ Assert.fail("Unexpected error while running on UI thread: "
+ + t.getMessage());
+ }
+ }
+
+ /**
+ * Accessor for underlying WebView.
+ * @return The WebView being wrapped by this class.
+ */
+ public WebView getWebView() {
+ return mWebView;
+ }
+
+ private<T> T getValue(ValueGetter<T> getter) {
+ runOnUiThread(getter);
+ return getter.getValue();
+ }
+
+ private abstract class ValueGetter<T> implements Runnable {
+ private T mValue;
+
+ @Override
+ public void run() {
+ mValue = capture();
+ }
+
+ protected abstract T capture();
+
+ public T getValue() {
+ return mValue;
+ }
+ }
+
+ /**
+ * Returns true if the current thread is the UI thread based on the
+ * Looper.
+ */
+ private static boolean isUiThread() {
+ return (Looper.myLooper() == Looper.getMainLooper());
+ }
+
+ /**
+ * @return Whether or not the load has finished.
+ */
+ private synchronized boolean isLoaded() {
+ return mLoaded && mNewPicture && mProgress == 100;
+ }
+
+ /**
+ * Makes a WebView call, waits for completion and then resets the
+ * load state in preparation for the next load call.
+ * @param call The call to make on the UI thread prior to waiting.
+ */
+ private void callAndWait(Runnable call) {
+ Assert.assertTrue("WebViewOnUiThread.load*AndWaitForCompletion calls "
+ + "may not be mixed with load* calls directly on WebView "
+ + "without calling waitForLoadCompletion after the load",
+ !isLoaded());
+ clearLoad(); // clear any extraneous signals from a previous load.
+ runOnUiThread(call);
+ waitForLoadCompletion();
+ }
+
+ /**
+ * Called whenever a load has been completed so that a subsequent call to
+ * waitForLoadCompletion doesn't return immediately.
+ */
+ synchronized private void clearLoad() {
+ mLoaded = false;
+ mNewPicture = false;
+ mProgress = 0;
+ }
+
+ /**
+ * Uses a polling mechanism, while pumping messages to check when the
+ * criteria is met.
+ */
+ private void waitOnUiThread(long timeout, final Callable<Boolean> doneCriteria) {
+ new PollingCheck(timeout) {
+ @Override
+ protected boolean check() {
+ pumpMessages();
+ try {
+ return doneCriteria.call();
+ } catch (Exception e) {
+ Assert.fail("Unexpected error while checking the criteria: "
+ + e.getMessage());
+ return true;
+ }
+ }
+ }.run();
+ }
+
+ /**
+ * Uses a wait/notify to check when the criteria is met.
+ */
+ private synchronized void waitOnTestThread(long timeout, Callable<Boolean> doneCriteria) {
+ try {
+ long waitEnd = SystemClock.uptimeMillis() + timeout;
+ long timeRemaining = timeout;
+ while (!doneCriteria.call() && timeRemaining > 0) {
+ this.wait(timeRemaining);
+ timeRemaining = waitEnd - SystemClock.uptimeMillis();
+ }
+ Assert.assertTrue("Action failed to complete before timeout", doneCriteria.call());
+ } catch (InterruptedException e) {
+ // We'll just drop out of the loop and fail
+ } catch (Exception e) {
+ Assert.fail("Unexpected error while checking the criteria: "
+ + e.getMessage());
+ }
+ }
+
+ /**
+ * Pumps all currently-queued messages in the UI thread and then exits.
+ * This is useful to force processing while running tests in the UI thread.
+ */
+ private void pumpMessages() {
+ class ExitLoopException extends RuntimeException {
+ }
+
+ // Force loop to exit when processing this. Loop.quit() doesn't
+ // work because this is the main Loop.
+ mWebView.getHandler().post(new Runnable() {
+ @Override
+ public void run() {
+ throw new ExitLoopException(); // exit loop!
+ }
+ });
+ try {
+ // Pump messages until our message gets through.
+ Looper.loop();
+ } catch (ExitLoopException e) {
+ }
+ }
+
+ /**
+ * A WebChromeClient used to capture the onProgressChanged for use
+ * in waitFor functions. If a test must override the WebChromeClient,
+ * it can derive from this class or call onProgressChanged
+ * directly.
+ */
+ public static class WaitForProgressClient extends WebChromeClient {
+ private WebViewOnUiThread mOnUiThread;
+
+ public WaitForProgressClient(WebViewOnUiThread onUiThread) {
+ mOnUiThread = onUiThread;
+ }
+
+ @Override
+ public void onProgressChanged(WebView view, int newProgress) {
+ super.onProgressChanged(view, newProgress);
+ mOnUiThread.onProgressChanged(newProgress);
+ }
+ }
+
+ /**
+ * A WebViewClient that captures the onPageFinished for use in
+ * waitFor functions. Using initializeWebView sets the WaitForLoadedClient
+ * into the WebView. If a test needs to set a specific WebViewClient and
+ * needs the waitForCompletion capability then it should derive from
+ * WaitForLoadedClient or call WebViewOnUiThread.onPageFinished.
+ */
+ public static class WaitForLoadedClient extends WebViewClient {
+ private WebViewOnUiThread mOnUiThread;
+
+ public WaitForLoadedClient(WebViewOnUiThread onUiThread) {
+ mOnUiThread = onUiThread;
+ }
+
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ super.onPageFinished(view, url);
+ mOnUiThread.onPageFinished();
+ }
+
+ @Override
+ public void onPageStarted(WebView view, String url, Bitmap favicon) {
+ super.onPageStarted(view, url, favicon);
+ mOnUiThread.onPageStarted();
+ }
+ }
+
+ /**
+ * A PictureListener that captures the onNewPicture for use in
+ * waitForLoadCompletion. Using initializeWebView sets the PictureListener
+ * into the WebView. If a test needs to set a specific PictureListener and
+ * needs the waitForCompletion capability then it should call
+ * WebViewOnUiThread.onNewPicture.
+ */
+ private class WaitForNewPicture implements PictureListener {
+ @Override
+ public void onNewPicture(WebView view, Picture picture) {
+ WebViewOnUiThread.this.onNewPicture();
+ }
+ }
+}
diff --git a/tests/tests/text/src/android/text/cts/WidgetTestUtils.java b/tests/tests/text/src/android/text/cts/WidgetTestUtils.java
new file mode 100644
index 0000000..d41b242
--- /dev/null
+++ b/tests/tests/text/src/android/text/cts/WidgetTestUtils.java
@@ -0,0 +1,138 @@
+/*
+ * 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.
+ */
+
+package android.text.cts;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+
+import java.io.IOException;
+
+import junit.framework.Assert;
+
+/**
+ * The useful methods for widget test.
+ */
+public class WidgetTestUtils {
+ /**
+ * Assert that two bitmaps are equal.
+ *
+ * @param Bitmap b1 the first bitmap which needs to compare.
+ * @param Bitmap b2 the second bitmap which needs to compare.
+ */
+ public static void assertEquals(Bitmap b1, Bitmap b2) {
+ if (b1 == b2) {
+ return;
+ }
+
+ if (b1 == null || b2 == null) {
+ Assert.fail("the bitmaps are not equal");
+ }
+
+ // b1 and b2 are all not null.
+ if (b1.getWidth() != b2.getWidth() || b1.getHeight() != b2.getHeight()
+ || b1.getConfig() != b2.getConfig()) {
+ Assert.fail("the bitmaps are not equal");
+ }
+
+ int w = b1.getWidth();
+ int h = b1.getHeight();
+ int s = w * h;
+ int[] pixels1 = new int[s];
+ int[] pixels2 = new int[s];
+
+ b1.getPixels(pixels1, 0, w, 0, 0, w, h);
+ b2.getPixels(pixels2, 0, w, 0, 0, w, h);
+
+ for (int i = 0; i < s; i++) {
+ if (pixels1[i] != pixels2[i]) {
+ Assert.fail("the bitmaps are not equal");
+ }
+ }
+ }
+
+ /**
+ * Find beginning of the special element.
+ * @param parser XmlPullParser will be parsed.
+ * @param firstElementName the target element name.
+ *
+ * @throws XmlPullParserException if XML Pull Parser related faults occur.
+ * @throws IOException if I/O-related error occur when parsing.
+ */
+ public static final void beginDocument(XmlPullParser parser, String firstElementName)
+ throws XmlPullParserException, IOException {
+ Assert.assertNotNull(parser);
+ Assert.assertNotNull(firstElementName);
+
+ int type;
+ while ((type = parser.next()) != XmlPullParser.START_TAG
+ && type != XmlPullParser.END_DOCUMENT) {
+ ;
+ }
+
+ if (!parser.getName().equals(firstElementName)) {
+ throw new XmlPullParserException("Unexpected start tag: found " + parser.getName()
+ + ", expected " + firstElementName);
+ }
+ }
+
+ /**
+ * Compare the expected pixels with actual, scaling for the target context density
+ *
+ * @throws AssertionFailedError
+ */
+ public static void assertScaledPixels(int expected, int actual, Context context) {
+ Assert.assertEquals(expected * context.getResources().getDisplayMetrics().density,
+ actual, 3);
+ }
+
+ /** Converts dips into pixels using the {@link Context}'s density. */
+ public static int convertDipToPixels(Context context, int dip) {
+ float density = context.getResources().getDisplayMetrics().density;
+ return Math.round(density * dip);
+ }
+
+ /**
+ * Retrieve a bitmap that can be used for comparison on any density
+ * @param resources
+ * @return the {@link Bitmap} or <code>null</code>
+ */
+ public static Bitmap getUnscaledBitmap(Resources resources, int resId) {
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inScaled = false;
+ return BitmapFactory.decodeResource(resources, resId, options);
+ }
+
+ /**
+ * Retrieve a dithered bitmap that can be used for comparison on any density
+ * @param resources
+ * @param config the preferred config for the returning bitmap
+ * @return the {@link Bitmap} or <code>null</code>
+ */
+ public static Bitmap getUnscaledAndDitheredBitmap(Resources resources,
+ int resId, Bitmap.Config config) {
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inDither = true;
+ options.inScaled = false;
+ options.inPreferredConfig = config;
+ return BitmapFactory.decodeResource(resources, resId, options);
+ }
+}
diff --git a/tests/tests/text/src/android/text/format/cts/LocaleUtils.java b/tests/tests/text/src/android/text/format/cts/LocaleUtils.java
new file mode 100644
index 0000000..131d745
--- /dev/null
+++ b/tests/tests/text/src/android/text/format/cts/LocaleUtils.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2010 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 android.text.format.cts;
+
+import android.content.Context;
+
+import java.util.Locale;
+
+public class LocaleUtils {
+
+ /** Return whether or not the given locale is the device's current locale. */
+ public static boolean isCurrentLocale(Context context, Locale locale) {
+ // TODO: Change the locale on the device using public API if it becomes available.
+ Locale currentLocale = context.getResources().getConfiguration().locale;
+ return locale.equals(currentLocale);
+ }
+}
diff --git a/tests/tests/text/src/android/text/method/cts/ArrowKeyMovementMethodTest.java b/tests/tests/text/src/android/text/method/cts/ArrowKeyMovementMethodTest.java
index e20920a..74fab00 100644
--- a/tests/tests/text/src/android/text/method/cts/ArrowKeyMovementMethodTest.java
+++ b/tests/tests/text/src/android/text/method/cts/ArrowKeyMovementMethodTest.java
@@ -42,7 +42,7 @@
*
* @see android.widget.cts.TextViewTest
*/
-public class ArrowKeyMovementMethodTest extends ActivityInstrumentationTestCase2<StubActivity> {
+public class ArrowKeyMovementMethodTest extends ActivityInstrumentationTestCase2<CtsActivity> {
private static final String THREE_LINES_TEXT = "first line\nsecond line\nlast line";
private static final int END_OF_ALL_TEXT = THREE_LINES_TEXT.length();
private static final int END_OF_1ST_LINE = THREE_LINES_TEXT.indexOf('\n');
@@ -56,7 +56,7 @@
private MyMetaKeyKeyListener mMetaListener;
public ArrowKeyMovementMethodTest() {
- super("com.android.cts.stub", StubActivity.class);
+ super("com.android.cts.stub", CtsActivity.class);
}
@Override
diff --git a/tests/tests/text/src/android/text/method/cts/CharacterPickerDialogTest.java b/tests/tests/text/src/android/text/method/cts/CharacterPickerDialogTest.java
index 1e7150b..3c20988 100644
--- a/tests/tests/text/src/android/text/method/cts/CharacterPickerDialogTest.java
+++ b/tests/tests/text/src/android/text/method/cts/CharacterPickerDialogTest.java
@@ -30,11 +30,11 @@
import android.widget.TextView;
public class CharacterPickerDialogTest extends
- ActivityInstrumentationTestCase2<StubActivity> {
+ ActivityInstrumentationTestCase2<CtsActivity> {
private Activity mActivity;
public CharacterPickerDialogTest() {
- super("com.android.cts.stub", StubActivity.class);
+ super("com.android.cts.stub", CtsActivity.class);
}
@Override
diff --git a/tests/tests/text/src/android/text/method/cts/CtsActivity.java b/tests/tests/text/src/android/text/method/cts/CtsActivity.java
new file mode 100644
index 0000000..edf3a0e
--- /dev/null
+++ b/tests/tests/text/src/android/text/method/cts/CtsActivity.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2009 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 android.text.method.cts;
+
+import android.app.Activity;
+import android.text.method.ArrowKeyMovementMethod;
+import android.text.method.LinkMovementMethod;
+import android.text.method.ScrollingMovementMethod;
+
+/**
+ * This Activity is used for testing:
+ * {@link LinkMovementMethod}
+ * {@link ArrowKeyMovementMethod}
+ * {@link ScrollingMovementMethod}
+ *
+ * The content view will be set in the test cases.
+ *
+ * @see LinkMovementMethodTest
+ * @see ArrowKeyMovementMethodTest
+ * @see ScrollingMovementMethodTest
+ */
+public class CtsActivity extends Activity {
+}
diff --git a/tests/tests/text/src/android/text/method/cts/KeyListenerCtsActivity.java b/tests/tests/text/src/android/text/method/cts/KeyListenerCtsActivity.java
new file mode 100644
index 0000000..c6483a2
--- /dev/null
+++ b/tests/tests/text/src/android/text/method/cts/KeyListenerCtsActivity.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2009 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 android.text.method.cts;
+
+import com.android.cts.text.R;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.os.SystemClock;
+import android.text.method.BaseKeyListener;
+import android.text.method.DateKeyListener;
+import android.text.method.DateTimeKeyListener;
+import android.text.method.DigitsKeyListener;
+import android.text.method.MultiTapKeyListener;
+import android.text.method.NumberKeyListener;
+import android.text.method.QwertyKeyListener;
+import android.text.method.TextKeyListener;
+import android.text.method.TimeKeyListener;
+import android.util.Log;
+
+/**
+ * This Activity is used for testing:
+ * {@link DigitsKeyListener}
+ * {@link BaseKeyListener}
+ * {@link MultiTapKeyListener}
+ * {@link NumberKeyListener}
+ * {@link QwertyKeyListener}
+ * {@link TextKeyListener}
+ * {@link DateKeyListener}
+ * {@link DateTimeKeyListener}
+ * {@link TimeKeyListener}
+ *
+ * @see DigitsKeyListener
+ * @see BaseKeyListener
+ * @see MultiTapKeyListener
+ * @see NumberKeyListener
+ * @see QwertyKeyListener
+ * @see TextKeyListener
+ * @see DateKeyListener
+ * @see DateTimeKeyListener
+ * @see TimeKeyListener
+ */
+
+public class KeyListenerCtsActivity extends Activity {
+ private boolean mHasWindowFocus = false;
+ private Object mHasWindowFocusLock = new Object();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.keylistener_layout);
+ }
+
+ @Override
+ public void onWindowFocusChanged(boolean hasFocus) {
+ super.onWindowFocusChanged(hasFocus);
+ if (!hasFocus) {
+ Log.w("KeyListenerCtsActivity", "KeyListenerCtsActivity lost window focus");
+ }
+ synchronized(mHasWindowFocusLock) {
+ mHasWindowFocus = hasFocus;
+ mHasWindowFocusLock.notify();
+ }
+ }
+
+ /**
+ * Blocks the calling thread until the {@link KeyListenerCtsActivity} has window focus or the
+ * specified duration (in milliseconds) has passed.
+ */
+ public boolean waitForWindowFocus(long durationMillis) {
+ long elapsedMillis = SystemClock.elapsedRealtime();
+ synchronized(mHasWindowFocusLock) {
+ mHasWindowFocus = hasWindowFocus();
+ while (!mHasWindowFocus && durationMillis > 0) {
+ long newElapsedMillis = SystemClock.elapsedRealtime();
+ durationMillis -= (newElapsedMillis - elapsedMillis);
+ elapsedMillis = newElapsedMillis;
+ if (durationMillis > 0) {
+ try {
+ mHasWindowFocusLock.wait(durationMillis);
+ } catch (InterruptedException e) {
+ }
+ }
+ }
+ return mHasWindowFocus;
+ }
+ }
+}
diff --git a/tests/tests/text/src/android/text/method/cts/KeyListenerTestCase.java b/tests/tests/text/src/android/text/method/cts/KeyListenerTestCase.java
index 375ea54..a5a76af 100644
--- a/tests/tests/text/src/android/text/method/cts/KeyListenerTestCase.java
+++ b/tests/tests/text/src/android/text/method/cts/KeyListenerTestCase.java
@@ -16,12 +16,12 @@
package android.text.method.cts;
-import com.android.cts.stub.R;
+import com.android.cts.text.R;
import android.app.Instrumentation;
import android.test.ActivityInstrumentationTestCase2;
import android.text.format.DateUtils;
-import android.text.method.cts.KeyListenerStubActivity;
+import android.text.method.cts.KeyListenerCtsActivity;
import android.text.method.KeyListener;
import android.view.WindowManager;
import android.widget.TextView;
@@ -47,13 +47,13 @@
* @see TextKeyKeyListenerTest
*/
public abstract class KeyListenerTestCase extends
- ActivityInstrumentationTestCase2<KeyListenerStubActivity> {
- protected KeyListenerStubActivity mActivity;
+ ActivityInstrumentationTestCase2<KeyListenerCtsActivity> {
+ protected KeyListenerCtsActivity mActivity;
protected Instrumentation mInstrumentation;
protected TextView mTextView;
public KeyListenerTestCase() {
- super("com.android.cts.stub", KeyListenerStubActivity.class);
+ super("com.android.cts.stub", KeyListenerCtsActivity.class);
}
@Override
diff --git a/tests/tests/text/src/android/text/method/cts/LinkMovementMethodTest.java b/tests/tests/text/src/android/text/method/cts/LinkMovementMethodTest.java
index b67f313..8027d49 100644
--- a/tests/tests/text/src/android/text/method/cts/LinkMovementMethodTest.java
+++ b/tests/tests/text/src/android/text/method/cts/LinkMovementMethodTest.java
@@ -42,7 +42,7 @@
* @see android.widget.cts.TextViewTest
*/
public class LinkMovementMethodTest extends
- ActivityInstrumentationTestCase2<StubActivity> {
+ ActivityInstrumentationTestCase2<CtsActivity> {
private static final String CONTENT = "clickable\nunclickable\nclickable";
private LinkMovementMethod mMethod;
@@ -56,7 +56,7 @@
private MockClickableSpan mClickable1;
public LinkMovementMethodTest() {
- super("com.android.cts.stub", StubActivity.class);
+ super("com.android.cts.stub", CtsActivity.class);
}
@Override
diff --git a/tests/tests/text/src/android/text/method/cts/PasswordTransformationMethodTest.java b/tests/tests/text/src/android/text/method/cts/PasswordTransformationMethodTest.java
index 471f67a..66e4fc8 100644
--- a/tests/tests/text/src/android/text/method/cts/PasswordTransformationMethodTest.java
+++ b/tests/tests/text/src/android/text/method/cts/PasswordTransformationMethodTest.java
@@ -35,7 +35,7 @@
* Test {@link PasswordTransformationMethod}.
*/
public class PasswordTransformationMethodTest extends
- ActivityInstrumentationTestCase2<StubActivity> {
+ ActivityInstrumentationTestCase2<CtsActivity> {
private static final int EDIT_TXT_ID = 1;
/** original text */
@@ -49,7 +49,7 @@
private boolean isPasswordPrefSaved;
- private StubActivity mActivity;
+ private CtsActivity mActivity;
private MockPasswordTransformationMethod mMethod;
@@ -58,7 +58,7 @@
private CharSequence mTransformedText;
public PasswordTransformationMethodTest() {
- super("com.android.cts.stub", StubActivity.class);
+ super("com.android.cts.stub", CtsActivity.class);
}
@Override
diff --git a/tests/tests/text/src/android/text/method/cts/ReplacementTransformationMethodTest.java b/tests/tests/text/src/android/text/method/cts/ReplacementTransformationMethodTest.java
index 3c05f30..7dabd16 100644
--- a/tests/tests/text/src/android/text/method/cts/ReplacementTransformationMethodTest.java
+++ b/tests/tests/text/src/android/text/method/cts/ReplacementTransformationMethodTest.java
@@ -27,7 +27,7 @@
* Test {@link ReplacementTransformationMethod}.
*/
public class ReplacementTransformationMethodTest extends
- ActivityInstrumentationTestCase2<StubActivity> {
+ ActivityInstrumentationTestCase2<CtsActivity> {
private final char[] ORIGINAL = new char[] { '0', '1' };
private final char[] ORIGINAL_WITH_MORE_CHARS = new char[] { '0', '1', '2' };
private final char[] ORIGINAL_WITH_SAME_CHARS = new char[] { '0', '0' };
@@ -37,7 +37,7 @@
private EditText mEditText;
public ReplacementTransformationMethodTest() {
- super("com.android.cts.stub", StubActivity.class);
+ super("com.android.cts.stub", CtsActivity.class);
}
@Override
diff --git a/tests/tests/text/src/android/text/method/cts/ScrollingMovementMethodTest.java b/tests/tests/text/src/android/text/method/cts/ScrollingMovementMethodTest.java
index b119c9d..f9a7d0d 100644
--- a/tests/tests/text/src/android/text/method/cts/ScrollingMovementMethodTest.java
+++ b/tests/tests/text/src/android/text/method/cts/ScrollingMovementMethodTest.java
@@ -33,7 +33,7 @@
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;
import android.widget.TextView.BufferType;
-import android.widget.cts.WidgetTestUtils;
+import android.text.cts.WidgetTestUtils;
/**
* Test {@link ScrollingMovementMethod}. The class is an implementation of interface
@@ -43,7 +43,7 @@
*
* @see android.widget.cts.TextViewTest
*/
-public class ScrollingMovementMethodTest extends ActivityInstrumentationTestCase2<StubActivity> {
+public class ScrollingMovementMethodTest extends ActivityInstrumentationTestCase2<CtsActivity> {
private static final int LITTLE_SPACE = 20;
private static final String THREE_LINES_TEXT = "first line\nsecond line\nlast line";
@@ -55,7 +55,7 @@
private int mScaledTouchSlop;
public ScrollingMovementMethodTest() {
- super("com.android.cts.stub", StubActivity.class);
+ super("com.android.cts.stub", CtsActivity.class);
}
@Override
diff --git a/tests/tests/text/src/android/text/method/cts/SingleLineTransformationMethodTest.java b/tests/tests/text/src/android/text/method/cts/SingleLineTransformationMethodTest.java
index 8d88a8a..89f1026 100644
--- a/tests/tests/text/src/android/text/method/cts/SingleLineTransformationMethodTest.java
+++ b/tests/tests/text/src/android/text/method/cts/SingleLineTransformationMethodTest.java
@@ -26,9 +26,9 @@
* Test {@link SingleLineTransformationMethod}.
*/
public class SingleLineTransformationMethodTest
- extends ActivityInstrumentationTestCase2<StubActivity> {
+ extends ActivityInstrumentationTestCase2<CtsActivity> {
public SingleLineTransformationMethodTest() {
- super("com.android.cts.stub", StubActivity.class);
+ super("com.android.cts.stub", CtsActivity.class);
}
public void testConstructor() {
diff --git a/tests/tests/text/src/android/text/method/cts/TextMethodUtils.java b/tests/tests/text/src/android/text/method/cts/TextMethodUtils.java
new file mode 100644
index 0000000..0785cff
--- /dev/null
+++ b/tests/tests/text/src/android/text/method/cts/TextMethodUtils.java
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+
+package android.text.method.cts;
+
+import android.view.KeyEvent;
+
+import junit.framework.Assert;
+
+public class TextMethodUtils {
+ /**
+ * Assert that two char arrays are equal.
+ *
+ * @param expected the expected char array.
+ * @param actual the actual char array.
+ */
+ public static void assertEquals(char[] expected, char[] actual) {
+ if (expected != actual) {
+ if (expected == null || actual == null) {
+ Assert.fail("the char arrays are not equal");
+ }
+
+ Assert.assertEquals(String.valueOf(expected), String.valueOf(actual));
+ }
+ }
+
+ /**
+ * Get an unaccepted key code.
+ *
+ * @param acceptedChars accepted chars array.
+ * @return return key code if we find unaccepted one, or return -1.
+ */
+ public static int getUnacceptedKeyCode(char[] acceptedChars) {
+ for (int keyCode = KeyEvent.KEYCODE_A; keyCode <= KeyEvent.KEYCODE_Z; keyCode++) {
+ KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
+ if ('\0' == event.getMatch(acceptedChars)) {
+ return keyCode;
+ }
+ }
+ return -1;
+ }
+}
diff --git a/tests/tests/text/src/android/text/method/cts/TouchTest.java b/tests/tests/text/src/android/text/method/cts/TouchTest.java
index 58e889a..2d3d146 100644
--- a/tests/tests/text/src/android/text/method/cts/TouchTest.java
+++ b/tests/tests/text/src/android/text/method/cts/TouchTest.java
@@ -29,7 +29,7 @@
import android.view.MotionEvent;
import android.widget.TextView;
-public class TouchTest extends ActivityInstrumentationTestCase2<StubActivity> {
+public class TouchTest extends ActivityInstrumentationTestCase2<CtsActivity> {
private Activity mActivity;
private static final String LONG_TEXT = "Scrolls the specified widget to the specified " +
"coordinates, except constrains the X scrolling position to the horizontal regions " +
@@ -43,7 +43,7 @@
private boolean mReturnFromTouchEvent;
public TouchTest() {
- super("com.android.cts.stub", StubActivity.class);
+ super("com.android.cts.stub", CtsActivity.class);
}
@Override
diff --git a/tests/tests/text/src/android/text/style/cts/DrawableMarginSpanTest.java b/tests/tests/text/src/android/text/style/cts/DrawableMarginSpanTest.java
index bea0944..3813a94 100644
--- a/tests/tests/text/src/android/text/style/cts/DrawableMarginSpanTest.java
+++ b/tests/tests/text/src/android/text/style/cts/DrawableMarginSpanTest.java
@@ -16,7 +16,7 @@
package android.text.style.cts;
-import com.android.cts.stub.R;
+import com.android.cts.text.R;
import android.graphics.Canvas;
diff --git a/tests/tests/text/src/android/text/style/cts/DynamicDrawableSpanTest.java b/tests/tests/text/src/android/text/style/cts/DynamicDrawableSpanTest.java
index 0cd072a..9723556 100644
--- a/tests/tests/text/src/android/text/style/cts/DynamicDrawableSpanTest.java
+++ b/tests/tests/text/src/android/text/style/cts/DynamicDrawableSpanTest.java
@@ -16,7 +16,7 @@
package android.text.style.cts;
-import com.android.cts.stub.R;
+import com.android.cts.text.R;
import android.graphics.Canvas;
diff --git a/tests/tests/text/src/android/text/style/cts/ImageSpanTest.java b/tests/tests/text/src/android/text/style/cts/ImageSpanTest.java
index 1499d62..a98c748 100644
--- a/tests/tests/text/src/android/text/style/cts/ImageSpanTest.java
+++ b/tests/tests/text/src/android/text/style/cts/ImageSpanTest.java
@@ -16,7 +16,7 @@
package android.text.style.cts;
-import com.android.cts.stub.R;
+import com.android.cts.text.R;
import android.content.Context;
@@ -27,7 +27,7 @@
import android.test.AndroidTestCase;
import android.text.style.DynamicDrawableSpan;
import android.text.style.ImageSpan;
-import android.widget.cts.WidgetTestUtils;
+import android.text.cts.WidgetTestUtils;
public class ImageSpanTest extends AndroidTestCase {
public void testConstructor() {
diff --git a/tests/src/android/widget/cts/ListViewStubActivity.java b/tests/tests/text/src/android/text/style/cts/MockURLSpanTestActivity.java
similarity index 77%
copy from tests/src/android/widget/cts/ListViewStubActivity.java
copy to tests/tests/text/src/android/text/style/cts/MockURLSpanTestActivity.java
index 77c3e5e..dbd154b 100644
--- a/tests/src/android/widget/cts/ListViewStubActivity.java
+++ b/tests/tests/text/src/android/text/style/cts/MockURLSpanTestActivity.java
@@ -14,17 +14,20 @@
* limitations under the License.
*/
-package android.widget.cts;
+package android.text.style.cts;
-import com.android.cts.stub.R;
+import com.android.cts.text.R;
import android.app.Activity;
import android.os.Bundle;
-public class ListViewStubActivity extends Activity {
+/**
+ * A Mock application for {@link URLSpan} test.
+ */
+public class MockURLSpanTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.listview_layout);
+ setContentView(R.layout.urlspan_layout);
}
}
diff --git a/tests/src/android/widget/cts/ProgressBarStubActivity.java b/tests/tests/text/src/android/text/style/cts/URLSpanCtsActivity.java
similarity index 78%
copy from tests/src/android/widget/cts/ProgressBarStubActivity.java
copy to tests/tests/text/src/android/text/style/cts/URLSpanCtsActivity.java
index 57cfa1a..8d885bc 100644
--- a/tests/src/android/widget/cts/ProgressBarStubActivity.java
+++ b/tests/tests/text/src/android/text/style/cts/URLSpanCtsActivity.java
@@ -14,21 +14,20 @@
* limitations under the License.
*/
-package android.widget.cts;
+package android.text.style.cts;
+
+import com.android.cts.text.R;
import android.app.Activity;
import android.os.Bundle;
/**
- * An application for ProgressBar test
- *
+ * A minimal application for {@link URLSpan} test.
*/
-public class ProgressBarStubActivity extends Activity {
- /**
- * Called with the activity is first created.
- */
+public class URLSpanCtsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setContentView(R.layout.urlspan_layout);
}
}
diff --git a/tests/tests/text/src/android/text/style/cts/URLSpanTest.java b/tests/tests/text/src/android/text/style/cts/URLSpanTest.java
index 3209b66..832e48d 100644
--- a/tests/tests/text/src/android/text/style/cts/URLSpanTest.java
+++ b/tests/tests/text/src/android/text/style/cts/URLSpanTest.java
@@ -16,7 +16,7 @@
package android.text.style.cts;
-import com.android.cts.stub.R;
+import com.android.cts.text.R;
import android.app.Activity;
@@ -27,13 +27,13 @@
import android.text.style.URLSpan;
import android.widget.TextView;
-public class URLSpanTest extends ActivityInstrumentationTestCase2<URLSpanStubActivity> {
+public class URLSpanTest extends ActivityInstrumentationTestCase2<URLSpanCtsActivity> {
// The scheme of TEST_URL must be "ctstest" to launch MockURLSpanTestActivity
private static final String TEST_URL = "ctstest://urlSpan/test";
private Activity mActivity;
public URLSpanTest() {
- super("com.android.cts.stub", URLSpanStubActivity.class);
+ super("com.android.cts.stub", URLSpanCtsActivity.class);
}
@Override
diff --git a/tests/tests/util/Android.mk b/tests/tests/util/Android.mk
index 6ede3fb..75d23d7 100644
--- a/tests/tests/util/Android.mk
+++ b/tests/tests/util/Android.mk
@@ -27,8 +27,6 @@
LOCAL_PACKAGE_NAME := CtsUtilTestCases
-LOCAL_INSTRUMENTATION_FOR := CtsTestStubs
-
LOCAL_SDK_VERSION := current
include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/util/AndroidManifest.xml b/tests/tests/util/AndroidManifest.xml
index ab417bd..e40087a 100644
--- a/tests/tests/util/AndroidManifest.xml
+++ b/tests/tests/util/AndroidManifest.xml
@@ -19,12 +19,13 @@
package="com.android.cts.util">
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
+ <uses-permission android:name="android.permission.READ_LOGS" />
<application>
<uses-library android:name="android.test.runner" />
</application>
<instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.cts.stub"
+ android:targetPackage="com.android.cts.util"
android:label="CTS tests of android.util">
<meta-data android:name="listener"
android:value="com.android.cts.runner.CtsTestRunListener" />
diff --git a/tests/tests/util/res/layout/xml_test.xml b/tests/tests/util/res/layout/xml_test.xml
new file mode 100644
index 0000000..4702281
--- /dev/null
+++ b/tests/tests/util/res/layout/xml_test.xml
@@ -0,0 +1,20 @@
+<?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="match_parent"
+ android:layout_height="wrap_content">
+</LinearLayout>
diff --git a/tests/tests/util/src/android/util/cts/XmlTest.java b/tests/tests/util/src/android/util/cts/XmlTest.java
index 24f8c74..833bd3c 100644
--- a/tests/tests/util/src/android/util/cts/XmlTest.java
+++ b/tests/tests/util/src/android/util/cts/XmlTest.java
@@ -391,7 +391,7 @@
public void testAsAttributeSet() {
XmlResourceParser xp = getContext().getResources().getLayout(
- com.android.cts.stub.R.layout.xml_test);
+ com.android.cts.util.R.layout.xml_test);
int eventType = -1;
try {
eventType = xp.getEventType();
diff --git a/tests/tests/view/res/layout/textview_layout.xml b/tests/tests/view/res/layout/textview_layout.xml
index cb3a85e..c09b93a 100644
--- a/tests/tests/view/res/layout/textview_layout.xml
+++ b/tests/tests/view/res/layout/textview_layout.xml
@@ -36,6 +36,7 @@
android:typeface="normal"
android:textSize="20px"
android:textStyle="normal"
+ android:textAppearance="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
diff --git a/tests/tests/webkit/Android.mk b/tests/tests/webkit/Android.mk
index a307f99..1d593df 100644
--- a/tests/tests/webkit/Android.mk
+++ b/tests/tests/webkit/Android.mk
@@ -23,14 +23,12 @@
LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+LOCAL_STATIC_JAVA_LIBRARIES := ctsdeviceutil ctstestserver ctstestrunner
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := CtsWebkitTestCases
-LOCAL_INSTRUMENTATION_FOR := CtsTestStubs
-
# uncomment when dalvik.annotation.Test* are removed or part of SDK
#LOCAL_SDK_VERSION := current
diff --git a/tests/tests/webkit/AndroidManifest.xml b/tests/tests/webkit/AndroidManifest.xml
index 776f695..a5bc2bb 100644
--- a/tests/tests/webkit/AndroidManifest.xml
+++ b/tests/tests/webkit/AndroidManifest.xml
@@ -21,15 +21,45 @@
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
- <application>
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+ <application android:maxRecents="1">
<provider android:name="android.webkit.cts.MockContentProvider"
android:exported="true"
android:authorities="android.webkit.cts.MockContentProvider" />
<uses-library android:name="android.test.runner" />
+
+ <activity android:name="android.webkit.cts.CookieSyncManagerCtsActivity"
+ android:label="CookieSyncManagerCtsActivity"
+ android:screenOrientation="nosensor">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.webkit.cts.WebViewCtsActivity"
+ android:label="WebViewCtsActivity"
+ android:screenOrientation="nosensor">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.webkit.cts.WebViewStartupCtsActivity"
+ android:label="WebViewStartupCtsActivity"
+ android:screenOrientation="nosensor">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
</application>
<instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.cts.stub"
+ android:targetPackage="com.android.cts.webkit"
android:label="CTS tests of android.webkit">
<meta-data android:name="listener"
android:value="com.android.cts.runner.CtsTestRunListener" />
diff --git a/tests/assets/images/robot.png b/tests/tests/webkit/assets/images/robot.png
similarity index 100%
rename from tests/assets/images/robot.png
rename to tests/tests/webkit/assets/images/robot.png
Binary files differ
diff --git a/tests/tests/webkit/assets/images/tomato.png b/tests/tests/webkit/assets/images/tomato.png
new file mode 100644
index 0000000..44c590d
--- /dev/null
+++ b/tests/tests/webkit/assets/images/tomato.png
Binary files differ
diff --git a/tests/assets/webkit/blank_tag.html b/tests/tests/webkit/assets/webkit/blank_tag.html
similarity index 100%
rename from tests/assets/webkit/blank_tag.html
rename to tests/tests/webkit/assets/webkit/blank_tag.html
diff --git a/tests/assets/webkit/embedded_image.html b/tests/tests/webkit/assets/webkit/embedded_image.html
similarity index 100%
rename from tests/assets/webkit/embedded_image.html
rename to tests/tests/webkit/assets/webkit/embedded_image.html
diff --git a/tests/assets/webkit/favicon.png b/tests/tests/webkit/assets/webkit/favicon.png
similarity index 100%
rename from tests/assets/webkit/favicon.png
rename to tests/tests/webkit/assets/webkit/favicon.png
Binary files differ
diff --git a/tests/assets/webkit/fonts.html b/tests/tests/webkit/assets/webkit/fonts.html
similarity index 100%
rename from tests/assets/webkit/fonts.html
rename to tests/tests/webkit/assets/webkit/fonts.html
diff --git a/tests/assets/webkit/iframe_blank_tag.html b/tests/tests/webkit/assets/webkit/iframe_blank_tag.html
similarity index 100%
rename from tests/assets/webkit/iframe_blank_tag.html
rename to tests/tests/webkit/assets/webkit/iframe_blank_tag.html
diff --git a/tests/assets/webkit/javascript.html b/tests/tests/webkit/assets/webkit/javascript.html
similarity index 100%
rename from tests/assets/webkit/javascript.html
rename to tests/tests/webkit/assets/webkit/javascript.html
diff --git a/tests/assets/webkit/jsalert.html b/tests/tests/webkit/assets/webkit/jsalert.html
similarity index 100%
rename from tests/assets/webkit/jsalert.html
rename to tests/tests/webkit/assets/webkit/jsalert.html
diff --git a/tests/assets/webkit/jsconfirm.html b/tests/tests/webkit/assets/webkit/jsconfirm.html
similarity index 100%
rename from tests/assets/webkit/jsconfirm.html
rename to tests/tests/webkit/assets/webkit/jsconfirm.html
diff --git a/tests/assets/webkit/jsform.html b/tests/tests/webkit/assets/webkit/jsform.html
similarity index 100%
rename from tests/assets/webkit/jsform.html
rename to tests/tests/webkit/assets/webkit/jsform.html
diff --git a/tests/assets/webkit/jsprompt.html b/tests/tests/webkit/assets/webkit/jsprompt.html
similarity index 100%
rename from tests/assets/webkit/jsprompt.html
rename to tests/tests/webkit/assets/webkit/jsprompt.html
diff --git a/tests/assets/webkit/jsunload.html b/tests/tests/webkit/assets/webkit/jsunload.html
similarity index 100%
rename from tests/assets/webkit/jsunload.html
rename to tests/tests/webkit/assets/webkit/jsunload.html
diff --git a/tests/assets/webkit/jswindow.html b/tests/tests/webkit/assets/webkit/jswindow.html
similarity index 100%
rename from tests/assets/webkit/jswindow.html
rename to tests/tests/webkit/assets/webkit/jswindow.html
diff --git a/tests/assets/webkit/network_state.html b/tests/tests/webkit/assets/webkit/network_state.html
similarity index 100%
rename from tests/assets/webkit/network_state.html
rename to tests/tests/webkit/assets/webkit/network_state.html
diff --git a/tests/assets/webkit/page_with_link.html b/tests/tests/webkit/assets/webkit/page_with_link.html
similarity index 100%
rename from tests/assets/webkit/page_with_link.html
rename to tests/tests/webkit/assets/webkit/page_with_link.html
diff --git a/tests/assets/webkit/popup.html b/tests/tests/webkit/assets/webkit/popup.html
similarity index 100%
rename from tests/assets/webkit/popup.html
rename to tests/tests/webkit/assets/webkit/popup.html
diff --git a/tests/assets/webkit/popup_base.html b/tests/tests/webkit/assets/webkit/popup_base.html
similarity index 100%
rename from tests/assets/webkit/popup_base.html
rename to tests/tests/webkit/assets/webkit/popup_base.html
diff --git a/tests/assets/webkit/test_anchor.html b/tests/tests/webkit/assets/webkit/test_anchor.html
similarity index 100%
rename from tests/assets/webkit/test_anchor.html
rename to tests/tests/webkit/assets/webkit/test_anchor.html
diff --git a/tests/assets/webkit/test_blankPage.html b/tests/tests/webkit/assets/webkit/test_blankPage.html
similarity index 100%
rename from tests/assets/webkit/test_blankPage.html
rename to tests/tests/webkit/assets/webkit/test_blankPage.html
diff --git a/tests/assets/webkit/test_br_tag.html b/tests/tests/webkit/assets/webkit/test_br_tag.html
similarity index 100%
rename from tests/assets/webkit/test_br_tag.html
rename to tests/tests/webkit/assets/webkit/test_br_tag.html
diff --git a/tests/assets/webkit/test_databaseaccess.html b/tests/tests/webkit/assets/webkit/test_databaseaccess.html
similarity index 100%
rename from tests/assets/webkit/test_databaseaccess.html
rename to tests/tests/webkit/assets/webkit/test_databaseaccess.html
diff --git a/tests/assets/webkit/test_favicon.html b/tests/tests/webkit/assets/webkit/test_favicon.html
similarity index 100%
rename from tests/assets/webkit/test_favicon.html
rename to tests/tests/webkit/assets/webkit/test_favicon.html
diff --git a/tests/assets/webkit/test_firstPage.html b/tests/tests/webkit/assets/webkit/test_firstPage.html
similarity index 100%
rename from tests/assets/webkit/test_firstPage.html
rename to tests/tests/webkit/assets/webkit/test_firstPage.html
diff --git a/tests/assets/webkit/test_hello_world.html b/tests/tests/webkit/assets/webkit/test_hello_world.html
similarity index 100%
rename from tests/assets/webkit/test_hello_world.html
rename to tests/tests/webkit/assets/webkit/test_hello_world.html
diff --git a/tests/assets/webkit/test_iframeaccess.html b/tests/tests/webkit/assets/webkit/test_iframeaccess.html
similarity index 100%
rename from tests/assets/webkit/test_iframeaccess.html
rename to tests/tests/webkit/assets/webkit/test_iframeaccess.html
diff --git a/tests/assets/webkit/test_imageaccess.html b/tests/tests/webkit/assets/webkit/test_imageaccess.html
similarity index 100%
rename from tests/assets/webkit/test_imageaccess.html
rename to tests/tests/webkit/assets/webkit/test_imageaccess.html
diff --git a/tests/assets/webkit/test_jsInterface.html b/tests/tests/webkit/assets/webkit/test_jsInterface.html
similarity index 100%
rename from tests/assets/webkit/test_jsInterface.html
rename to tests/tests/webkit/assets/webkit/test_jsInterface.html
diff --git a/tests/assets/webkit/test_queryparam.html b/tests/tests/webkit/assets/webkit/test_queryparam.html
similarity index 100%
rename from tests/assets/webkit/test_queryparam.html
rename to tests/tests/webkit/assets/webkit/test_queryparam.html
diff --git a/tests/assets/webkit/test_secondPage.html b/tests/tests/webkit/assets/webkit/test_secondPage.html
similarity index 100%
rename from tests/assets/webkit/test_secondPage.html
rename to tests/tests/webkit/assets/webkit/test_secondPage.html
diff --git a/tests/assets/webkit/test_stop_loading.html b/tests/tests/webkit/assets/webkit/test_stop_loading.html
similarity index 100%
rename from tests/assets/webkit/test_stop_loading.html
rename to tests/tests/webkit/assets/webkit/test_stop_loading.html
diff --git a/tests/assets/webkit/test_thirdPage.html b/tests/tests/webkit/assets/webkit/test_thirdPage.html
similarity index 100%
rename from tests/assets/webkit/test_thirdPage.html
rename to tests/tests/webkit/assets/webkit/test_thirdPage.html
diff --git a/tests/assets/webkit/test_timer.html b/tests/tests/webkit/assets/webkit/test_timer.html
similarity index 100%
rename from tests/assets/webkit/test_timer.html
rename to tests/tests/webkit/assets/webkit/test_timer.html
diff --git a/tests/src/android/widget/cts/ListViewStubActivity.java b/tests/tests/webkit/res/layout/webview_layout.xml
similarity index 60%
copy from tests/src/android/widget/cts/ListViewStubActivity.java
copy to tests/tests/webkit/res/layout/webview_layout.xml
index 77c3e5e..7a0ed0d 100644
--- a/tests/src/android/widget/cts/ListViewStubActivity.java
+++ b/tests/tests/webkit/res/layout/webview_layout.xml
@@ -1,4 +1,5 @@
-/*
+<?xml version="1.0" encoding="utf-8"?>
+<!--
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -12,19 +13,13 @@
* 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:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
-package android.widget.cts;
-
-import com.android.cts.stub.R;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-public class ListViewStubActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.listview_layout);
- }
-}
+ <WebView android:id="@+id/web_page"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+</LinearLayout>
diff --git a/tests/tests/webkit/src/android/webkit/cts/CookieManagerTest.java b/tests/tests/webkit/src/android/webkit/cts/CookieManagerTest.java
index 6de18ed..9db7c21 100644
--- a/tests/tests/webkit/src/android/webkit/cts/CookieManagerTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/CookieManagerTest.java
@@ -32,7 +32,7 @@
import java.util.regex.Pattern;
public class CookieManagerTest extends
- ActivityInstrumentationTestCase2<CookieSyncManagerStubActivity> {
+ ActivityInstrumentationTestCase2<CookieSyncManagerCtsActivity> {
private static final int TEST_TIMEOUT = 5000;
@@ -41,7 +41,7 @@
private WebViewOnUiThread mOnUiThread;
public CookieManagerTest() {
- super("com.android.cts.stub", CookieSyncManagerStubActivity.class);
+ super("com.android.cts.webkit", CookieSyncManagerCtsActivity.class);
}
@Override
diff --git a/tests/src/android/webkit/cts/CookieSyncManagerStubActivity.java b/tests/tests/webkit/src/android/webkit/cts/CookieSyncManagerCtsActivity.java
similarity index 96%
rename from tests/src/android/webkit/cts/CookieSyncManagerStubActivity.java
rename to tests/tests/webkit/src/android/webkit/cts/CookieSyncManagerCtsActivity.java
index a5ac6ec..51eeed3 100644
--- a/tests/src/android/webkit/cts/CookieSyncManagerStubActivity.java
+++ b/tests/tests/webkit/src/android/webkit/cts/CookieSyncManagerCtsActivity.java
@@ -21,7 +21,7 @@
import android.webkit.CookieSyncManager;
import android.webkit.WebView;
-public class CookieSyncManagerStubActivity extends Activity {
+public class CookieSyncManagerCtsActivity extends Activity {
private WebView mWebView;
@Override
diff --git a/tests/tests/webkit/src/android/webkit/cts/CookieTest.java b/tests/tests/webkit/src/android/webkit/cts/CookieTest.java
index 7f3b183..bc5e3b0 100644
--- a/tests/tests/webkit/src/android/webkit/cts/CookieTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/CookieTest.java
@@ -23,13 +23,13 @@
/**
* Original framework tests for CookieManager
*/
-public class CookieTest extends ActivityInstrumentationTestCase2<CookieSyncManagerStubActivity> {
+public class CookieTest extends ActivityInstrumentationTestCase2<CookieSyncManagerCtsActivity> {
private CookieManager mCookieManager;
private static final long WAIT_TIME = 50;
public CookieTest() {
- super("com.android.cts.stub", CookieSyncManagerStubActivity.class);
+ super("com.android.cts.webkit", CookieSyncManagerCtsActivity.class);
}
@Override
diff --git a/tests/tests/webkit/src/android/webkit/cts/GeolocationTest.java b/tests/tests/webkit/src/android/webkit/cts/GeolocationTest.java
index 8ab9eb6..754af37 100644
--- a/tests/tests/webkit/src/android/webkit/cts/GeolocationTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/GeolocationTest.java
@@ -52,7 +52,7 @@
import junit.framework.Assert;
-public class GeolocationTest extends ActivityInstrumentationTestCase2<WebViewStubActivity> {
+public class GeolocationTest extends ActivityInstrumentationTestCase2<WebViewCtsActivity> {
// TODO Write additional tests to cover:
// - test that the errors are correct
@@ -108,7 +108,7 @@
private List<String> mProviders;
public GeolocationTest() throws Exception {
- super("com.android.cts.stub", WebViewStubActivity.class);
+ super("com.android.cts.webkit", WebViewCtsActivity.class);
}
// Both this test and WebViewOnUiThread need to override some of the methods on WebViewClient,
diff --git a/tests/tests/webkit/src/android/webkit/cts/HttpAuthHandlerTest.java b/tests/tests/webkit/src/android/webkit/cts/HttpAuthHandlerTest.java
index b078c7a..fbda04b 100644
--- a/tests/tests/webkit/src/android/webkit/cts/HttpAuthHandlerTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/HttpAuthHandlerTest.java
@@ -24,7 +24,7 @@
import org.apache.http.HttpStatus;
-public class HttpAuthHandlerTest extends ActivityInstrumentationTestCase2<WebViewStubActivity> {
+public class HttpAuthHandlerTest extends ActivityInstrumentationTestCase2<WebViewCtsActivity> {
private static final long TIMEOUT = 10000;
@@ -37,7 +37,7 @@
private WebViewOnUiThread mOnUiThread;
public HttpAuthHandlerTest() {
- super("com.android.cts.stub", WebViewStubActivity.class);
+ super("com.android.cts.webkit", WebViewCtsActivity.class);
}
@Override
diff --git a/tests/tests/webkit/src/android/webkit/cts/NullWebViewUtils.java b/tests/tests/webkit/src/android/webkit/cts/NullWebViewUtils.java
new file mode 100644
index 0000000..c52219f
--- /dev/null
+++ b/tests/tests/webkit/src/android/webkit/cts/NullWebViewUtils.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2010 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 android.webkit.cts;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+
+/**
+ * Utilities to enable the android.webkit.* CTS tests (and others that rely on a functioning
+ * android.webkit.WebView implementation) to determine whether a functioning WebView is present
+ * on the device or not.
+ *
+ * Test cases that require android.webkit.* classes should wrap their first usage of WebView in a
+ * try catch block, and pass any exception that is thrown to
+ * NullWebViewUtils.determineIfWebViewAvailable. The return value of
+ * NullWebViewUtils.isWebViewAvailable will then determine if the test should expect to be able to
+ * use a WebView.
+ */
+public class NullWebViewUtils {
+
+ private static boolean sWebViewUnavailable;
+
+ /**
+ * @param context Current Activity context, used to query the PackageManager.
+ * @param t An exception thrown by trying to invoke android.webkit.* APIs.
+ */
+ public static void determineIfWebViewAvailable(Context context, Throwable t) {
+ sWebViewUnavailable = !hasWebViewFeature(context) && checkCauseWasUnsupportedOperation(t);
+ }
+
+ /**
+ * After calling determineIfWebViewAvailable, this returns whether a WebView is available on the
+ * device and wheter the test can rely on it.
+ * @return True iff. PackageManager determined that there is no WebView on the device and the
+ * exception thrown from android.webkit.* was UnsupportedOperationException.
+ */
+ public static boolean isWebViewAvailable() {
+ return !sWebViewUnavailable;
+ }
+
+ private static boolean hasWebViewFeature(Context context) {
+ // Query the system property that determins if there is a functional WebView on the device.
+ PackageManager pm = context.getPackageManager();
+ return pm.hasSystemFeature(PackageManager.FEATURE_WEBVIEW);
+ }
+
+ private static boolean checkCauseWasUnsupportedOperation(Throwable t) {
+ if (t == null) return false;
+ while (t.getCause() != null) {
+ t = t.getCause();
+ }
+ return t instanceof UnsupportedOperationException;
+ }
+
+ /**
+ * Some CTS tests (by design) first use android.webkit.* from a background thread. This helper
+ * allows the test to catch the UnsupportedOperationException from that background thread, and
+ * then query the result from the test main thread.
+ */
+ public static class NullWebViewFromThreadExceptionHandler
+ implements Thread.UncaughtExceptionHandler {
+ private Throwable mPendingException;
+
+ @Override
+ public void uncaughtException(Thread t, Throwable e) {
+ mPendingException = e;
+ }
+
+ public boolean isWebViewAvailable(Context context) {
+ return hasWebViewFeature(context) ||
+ !checkCauseWasUnsupportedOperation(mPendingException);
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebBackForwardListTest.java b/tests/tests/webkit/src/android/webkit/cts/WebBackForwardListTest.java
index 71893f4..21a5b98 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebBackForwardListTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebBackForwardListTest.java
@@ -23,14 +23,14 @@
import android.webkit.WebView;
-public class WebBackForwardListTest extends ActivityInstrumentationTestCase2<WebViewStubActivity> {
+public class WebBackForwardListTest extends ActivityInstrumentationTestCase2<WebViewCtsActivity> {
private static final int TEST_TIMEOUT = 10000;
private WebViewOnUiThread mOnUiThread;
public WebBackForwardListTest() {
- super("com.android.cts.stub", WebViewStubActivity.class);
+ super("com.android.cts.webkit", WebViewCtsActivity.class);
}
@Override
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebChromeClientTest.java b/tests/tests/webkit/src/android/webkit/cts/WebChromeClientTest.java
index fca14e2..6a94a99 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebChromeClientTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebChromeClientTest.java
@@ -28,7 +28,7 @@
import android.webkit.WebView;
import android.webkit.cts.WebViewOnUiThread.WaitForProgressClient;
-public class WebChromeClientTest extends ActivityInstrumentationTestCase2<WebViewStubActivity> {
+public class WebChromeClientTest extends ActivityInstrumentationTestCase2<WebViewCtsActivity> {
private static final long TEST_TIMEOUT = 5000L;
private CtsTestServer mWebServer;
@@ -38,7 +38,7 @@
private boolean mBlockWindowCreationAsync;
public WebChromeClientTest() {
- super(WebViewStubActivity.class);
+ super(WebViewCtsActivity.class);
}
@Override
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebHistoryItemTest.java b/tests/tests/webkit/src/android/webkit/cts/WebHistoryItemTest.java
index 7d276e9..d4f326b 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebHistoryItemTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebHistoryItemTest.java
@@ -25,7 +25,7 @@
import android.webkit.WebIconDatabase;
import android.webkit.WebView;
-public class WebHistoryItemTest extends ActivityInstrumentationTestCase2<WebViewStubActivity> {
+public class WebHistoryItemTest extends ActivityInstrumentationTestCase2<WebViewCtsActivity> {
private final static long TEST_TIMEOUT = 10000;
private CtsTestServer mWebServer;
private WebViewOnUiThread mOnUiThread;
@@ -47,7 +47,7 @@
};
public WebHistoryItemTest() {
- super("com.android.cts.stub", WebViewStubActivity.class);
+ super("com.android.cts.webkit", WebViewCtsActivity.class);
}
@Override
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebSettingsTest.java b/tests/tests/webkit/src/android/webkit/cts/WebSettingsTest.java
index 1515a8a..3e7a592 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebSettingsTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebSettingsTest.java
@@ -40,7 +40,7 @@
/**
* Tests for {@link android.webkit.WebSettings}
*/
-public class WebSettingsTest extends ActivityInstrumentationTestCase2<WebViewStubActivity> {
+public class WebSettingsTest extends ActivityInstrumentationTestCase2<WebViewCtsActivity> {
private static final int WEBVIEW_TIMEOUT = 5000;
private static final String LOG_TAG = "WebSettingsTest";
@@ -63,7 +63,7 @@
private Context mContext;
public WebSettingsTest() {
- super("com.android.cts.stub", WebViewStubActivity.class);
+ super("com.android.cts.webkit", WebViewCtsActivity.class);
}
@Override
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebViewClientTest.java b/tests/tests/webkit/src/android/webkit/cts/WebViewClientTest.java
index a8044d2..05f6f00 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebViewClientTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewClientTest.java
@@ -38,7 +38,7 @@
import java.util.HashMap;
import java.util.Map;
-public class WebViewClientTest extends ActivityInstrumentationTestCase2<WebViewStubActivity> {
+public class WebViewClientTest extends ActivityInstrumentationTestCase2<WebViewCtsActivity> {
private static final long TEST_TIMEOUT = 5000;
private static final String TEST_URL = "http://foo.com/";
@@ -46,13 +46,13 @@
private CtsTestServer mWebServer;
public WebViewClientTest() {
- super("com.android.cts.stub", WebViewStubActivity.class);
+ super("com.android.cts.webkit", WebViewCtsActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
- final WebViewStubActivity activity = getActivity();
+ final WebViewCtsActivity activity = getActivity();
WebView webview = activity.getWebView();
if (webview != null) {
new PollingCheck(TEST_TIMEOUT) {
diff --git a/tests/src/android/webkit/cts/WebViewStubActivity.java b/tests/tests/webkit/src/android/webkit/cts/WebViewCtsActivity.java
similarity index 94%
rename from tests/src/android/webkit/cts/WebViewStubActivity.java
rename to tests/tests/webkit/src/android/webkit/cts/WebViewCtsActivity.java
index 62adc39..d809a42 100644
--- a/tests/src/android/webkit/cts/WebViewStubActivity.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewCtsActivity.java
@@ -16,7 +16,7 @@
package android.webkit.cts;
-import com.android.cts.stub.R;
+import com.android.cts.webkit.R;
import android.app.Activity;
import android.os.Bundle;
@@ -24,7 +24,7 @@
import android.view.ViewParent;
import android.webkit.WebView;
-public class WebViewStubActivity extends Activity {
+public class WebViewCtsActivity extends Activity {
private WebView mWebView;
@Override
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebViewOnUiThread.java b/tests/tests/webkit/src/android/webkit/cts/WebViewOnUiThread.java
new file mode 100644
index 0000000..9b2d803
--- /dev/null
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewOnUiThread.java
@@ -0,0 +1,1008 @@
+/*
+ * Copyright (C) 2011 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 android.webkit.cts;
+
+import android.cts.util.PollingCheck;
+import android.graphics.Bitmap;
+import android.graphics.Picture;
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.os.Looper;
+import android.os.Message;
+import android.os.SystemClock;
+import android.print.PrintDocumentAdapter;
+import android.test.InstrumentationTestCase;
+import android.util.DisplayMetrics;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewParent;
+import android.webkit.DownloadListener;
+import android.webkit.CookieManager;
+import android.webkit.ValueCallback;
+import android.webkit.WebBackForwardList;
+import android.webkit.WebChromeClient;
+import android.webkit.WebSettings;
+import android.webkit.WebView.HitTestResult;
+import android.webkit.WebView.PictureListener;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+
+import junit.framework.Assert;
+
+import java.io.File;
+import java.util.concurrent.Callable;
+import java.util.Map;
+
+/**
+ * Many tests need to run WebView code in the UI thread. This class
+ * wraps a WebView so that calls are ensured to arrive on the UI thread.
+ *
+ * All methods may be run on either the UI thread or test thread.
+ */
+public class WebViewOnUiThread {
+ /**
+ * The maximum time, in milliseconds (10 seconds) to wait for a load
+ * to be triggered.
+ */
+ private static final long LOAD_TIMEOUT = 10000;
+
+ /**
+ * Set to true after onPageFinished is called.
+ */
+ private boolean mLoaded;
+
+ /**
+ * Set to true after onNewPicture is called. Reset when onPageStarted
+ * is called.
+ */
+ private boolean mNewPicture;
+
+ /**
+ * The progress, in percentage, of the page load. Valid values are between
+ * 0 and 100.
+ */
+ private int mProgress;
+
+ /**
+ * The test that this class is being used in. Used for runTestOnUiThread.
+ */
+ private InstrumentationTestCase mTest;
+
+ /**
+ * The WebView that calls will be made on.
+ */
+ private WebView mWebView;
+
+ /**
+ * Initializes the webView with a WebViewClient, WebChromeClient,
+ * and PictureListener to prepare for loadUrlAndWaitForCompletion.
+ *
+ * A new WebViewOnUiThread should be called during setUp so as to
+ * reinitialize between calls.
+ *
+ * @param test The test in which this is being run.
+ * @param webView The webView that the methods should call.
+ * @see loadUrlAndWaitForCompletion
+ */
+ public WebViewOnUiThread(InstrumentationTestCase test, WebView webView) {
+ mTest = test;
+ mWebView = webView;
+ final WebViewClient webViewClient = new WaitForLoadedClient(this);
+ final WebChromeClient webChromeClient = new WaitForProgressClient(this);
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setWebViewClient(webViewClient);
+ mWebView.setWebChromeClient(webChromeClient);
+ mWebView.setPictureListener(new WaitForNewPicture());
+ }
+ });
+ }
+
+ /**
+ * Called after a test is complete and the WebView should be disengaged from
+ * the tests.
+ */
+ public void cleanUp() {
+ clearHistory();
+ clearCache(true);
+ setPictureListener(null);
+ setWebChromeClient(null);
+ setWebViewClient(null);
+ }
+
+ /**
+ * Called from WaitForNewPicture, this is used to indicate that
+ * the page has been drawn.
+ */
+ synchronized public void onNewPicture() {
+ mNewPicture = true;
+ this.notifyAll();
+ }
+
+ /**
+ * Called from WaitForLoadedClient, this is used to clear the picture
+ * draw state so that draws before the URL begins loading don't count.
+ */
+ synchronized public void onPageStarted() {
+ mNewPicture = false; // Earlier paints won't count.
+ }
+
+ /**
+ * Called from WaitForLoadedClient, this is used to indicate that
+ * the page is loaded, but not drawn yet.
+ */
+ synchronized public void onPageFinished() {
+ mLoaded = true;
+ this.notifyAll();
+ }
+
+ /**
+ * Called from the WebChrome client, this sets the current progress
+ * for a page.
+ * @param progress The progress made so far between 0 and 100.
+ */
+ synchronized public void onProgressChanged(int progress) {
+ mProgress = progress;
+ this.notifyAll();
+ }
+
+ public void setWebViewClient(final WebViewClient webViewClient) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setWebViewClient(webViewClient);
+ }
+ });
+ }
+
+ public void setWebChromeClient(final WebChromeClient webChromeClient) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setWebChromeClient(webChromeClient);
+ }
+ });
+ }
+
+ public void setPictureListener(final PictureListener pictureListener) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setPictureListener(pictureListener);
+ }
+ });
+ }
+
+ public void setNetworkAvailable(final boolean available) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setNetworkAvailable(available);
+ }
+ });
+ }
+
+ public void setDownloadListener(final DownloadListener listener) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setDownloadListener(listener);
+ }
+ });
+ }
+
+ public void setBackgroundColor(final int color) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setBackgroundColor(color);
+ }
+ });
+ }
+
+ public void clearCache(final boolean includeDiskFiles) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.clearCache(includeDiskFiles);
+ }
+ });
+ }
+
+ public void clearHistory() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.clearHistory();
+ }
+ });
+ }
+
+ public void requestFocus() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.requestFocus();
+ }
+ });
+ }
+
+ public boolean canZoomIn() {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.canZoomIn();
+ }
+ });
+ }
+
+ public boolean canZoomOut() {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.canZoomOut();
+ }
+ });
+ }
+
+ public boolean zoomIn() {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.zoomIn();
+ }
+ });
+ }
+
+ public boolean zoomOut() {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.zoomOut();
+ }
+ });
+ }
+
+ public void zoomBy(final float zoomFactor) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.zoomBy(zoomFactor);
+ }
+ });
+ }
+
+ public void setFindListener(final WebView.FindListener listener) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setFindListener(listener);
+ }
+ });
+ }
+
+ public void removeJavascriptInterface(final String interfaceName) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.removeJavascriptInterface(interfaceName);
+ }
+ });
+ }
+
+ public void addJavascriptInterface(final Object object, final String name) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.addJavascriptInterface(object, name);
+ }
+ });
+ }
+
+ public void flingScroll(final int vx, final int vy) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.flingScroll(vx, vy);
+ }
+ });
+ }
+
+ public void requestFocusNodeHref(final Message hrefMsg) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.requestFocusNodeHref(hrefMsg);
+ }
+ });
+ }
+
+ public void requestImageRef(final Message msg) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.requestImageRef(msg);
+ }
+ });
+ }
+
+ public void setInitialScale(final int scaleInPercent) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.setInitialScale(scaleInPercent);
+ }
+ });
+ }
+
+ public void clearSslPreferences() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.clearSslPreferences();
+ }
+ });
+ }
+
+ public void clearClientCertPreferences(final Runnable onCleared) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ WebView.clearClientCertPreferences(onCleared);
+ }
+ });
+ }
+
+ public void resumeTimers() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.resumeTimers();
+ }
+ });
+ }
+
+ public void findNext(final boolean forward) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.findNext(forward);
+ }
+ });
+ }
+
+ public void clearMatches() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.clearMatches();
+ }
+ });
+ }
+
+ /**
+ * Calls loadUrl on the WebView and then waits onPageFinished,
+ * onNewPicture and onProgressChange to reach 100.
+ * Test fails if the load timeout elapses.
+ * @param url The URL to load.
+ */
+ public void loadUrlAndWaitForCompletion(final String url) {
+ callAndWait(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.loadUrl(url);
+ }
+ });
+ }
+
+ /**
+ * Calls loadUrl on the WebView and then waits onPageFinished,
+ * onNewPicture and onProgressChange to reach 100.
+ * Test fails if the load timeout elapses.
+ * @param url The URL to load.
+ * @param extraHeaders The additional headers to be used in the HTTP request.
+ */
+ public void loadUrlAndWaitForCompletion(final String url,
+ final Map<String, String> extraHeaders) {
+ callAndWait(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.loadUrl(url, extraHeaders);
+ }
+ });
+ }
+
+ public void loadUrl(final String url) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.loadUrl(url);
+ }
+ });
+ }
+
+ public void stopLoading() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.stopLoading();
+ }
+ });
+ }
+
+ public void postUrlAndWaitForCompletion(final String url, final byte[] postData) {
+ callAndWait(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.postUrl(url, postData);
+ }
+ });
+ }
+
+ public void loadDataAndWaitForCompletion(final String data,
+ final String mimeType, final String encoding) {
+ callAndWait(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.loadData(data, mimeType, encoding);
+ }
+ });
+ }
+
+ public void loadDataWithBaseURLAndWaitForCompletion(final String baseUrl,
+ final String data, final String mimeType, final String encoding,
+ final String historyUrl) {
+ callAndWait(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.loadDataWithBaseURL(baseUrl, data, mimeType, encoding,
+ historyUrl);
+ }
+ });
+ }
+
+ /**
+ * Reloads a page and waits for it to complete reloading. Use reload
+ * if it is a form resubmission and the onFormResubmission responds
+ * by telling WebView not to resubmit it.
+ */
+ public void reloadAndWaitForCompletion() {
+ callAndWait(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.reload();
+ }
+ });
+ }
+
+ /**
+ * Reload the previous URL. Use reloadAndWaitForCompletion unless
+ * it is a form resubmission and the onFormResubmission responds
+ * by telling WebView not to resubmit it.
+ */
+ public void reload() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.reload();
+ }
+ });
+ }
+
+ /**
+ * Use this only when JavaScript causes a page load to wait for the
+ * page load to complete. Otherwise use loadUrlAndWaitForCompletion or
+ * similar functions.
+ */
+ public void waitForLoadCompletion() {
+ waitForCriteria(LOAD_TIMEOUT,
+ new Callable<Boolean>() {
+ @Override
+ public Boolean call() {
+ return isLoaded();
+ }
+ });
+ clearLoad();
+ }
+
+ private void waitForCriteria(long timeout, Callable<Boolean> doneCriteria) {
+ if (isUiThread()) {
+ waitOnUiThread(timeout, doneCriteria);
+ } else {
+ waitOnTestThread(timeout, doneCriteria);
+ }
+ }
+
+ public String getTitle() {
+ return getValue(new ValueGetter<String>() {
+ @Override
+ public String capture() {
+ return mWebView.getTitle();
+ }
+ });
+ }
+
+ public WebSettings getSettings() {
+ return getValue(new ValueGetter<WebSettings>() {
+ @Override
+ public WebSettings capture() {
+ return mWebView.getSettings();
+ }
+ });
+ }
+
+ public WebBackForwardList copyBackForwardList() {
+ return getValue(new ValueGetter<WebBackForwardList>() {
+ @Override
+ public WebBackForwardList capture() {
+ return mWebView.copyBackForwardList();
+ }
+ });
+ }
+
+ public Bitmap getFavicon() {
+ return getValue(new ValueGetter<Bitmap>() {
+ @Override
+ public Bitmap capture() {
+ return mWebView.getFavicon();
+ }
+ });
+ }
+
+ public String getUrl() {
+ return getValue(new ValueGetter<String>() {
+ @Override
+ public String capture() {
+ return mWebView.getUrl();
+ }
+ });
+ }
+
+ public int getProgress() {
+ return getValue(new ValueGetter<Integer>() {
+ @Override
+ public Integer capture() {
+ return mWebView.getProgress();
+ }
+ });
+ }
+
+ public int getHeight() {
+ return getValue(new ValueGetter<Integer>() {
+ @Override
+ public Integer capture() {
+ return mWebView.getHeight();
+ }
+ });
+ }
+
+ public int getContentHeight() {
+ return getValue(new ValueGetter<Integer>() {
+ @Override
+ public Integer capture() {
+ return mWebView.getContentHeight();
+ }
+ });
+ }
+
+ public boolean savePicture(final Bundle b, final File dest) {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.savePicture(b, dest);
+ }
+ });
+ }
+
+ public boolean pageUp(final boolean top) {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.pageUp(top);
+ }
+ });
+ }
+
+ public boolean pageDown(final boolean bottom) {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.pageDown(bottom);
+ }
+ });
+ }
+
+ public int[] getLocationOnScreen() {
+ final int[] location = new int[2];
+ return getValue(new ValueGetter<int[]>() {
+ @Override
+ public int[] capture() {
+ mWebView.getLocationOnScreen(location);
+ return location;
+ }
+ });
+ }
+
+ public float getScale() {
+ return getValue(new ValueGetter<Float>() {
+ @Override
+ public Float capture() {
+ return mWebView.getScale();
+ }
+ });
+ }
+
+ public boolean requestFocus(final int direction,
+ final Rect previouslyFocusedRect) {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.requestFocus(direction, previouslyFocusedRect);
+ }
+ });
+ }
+
+ public HitTestResult getHitTestResult() {
+ return getValue(new ValueGetter<HitTestResult>() {
+ @Override
+ public HitTestResult capture() {
+ return mWebView.getHitTestResult();
+ }
+ });
+ }
+
+ public int getScrollX() {
+ return getValue(new ValueGetter<Integer>() {
+ @Override
+ public Integer capture() {
+ return mWebView.getScrollX();
+ }
+ });
+ }
+
+ public int getScrollY() {
+ return getValue(new ValueGetter<Integer>() {
+ @Override
+ public Integer capture() {
+ return mWebView.getScrollY();
+ }
+ });
+ }
+
+ public final DisplayMetrics getDisplayMetrics() {
+ return getValue(new ValueGetter<DisplayMetrics>() {
+ @Override
+ public DisplayMetrics capture() {
+ return mWebView.getContext().getResources().getDisplayMetrics();
+ }
+ });
+ }
+
+ public boolean requestChildRectangleOnScreen(final View child,
+ final Rect rect,
+ final boolean immediate) {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return mWebView.requestChildRectangleOnScreen(child, rect,
+ immediate);
+ }
+ });
+ }
+
+ public int findAll(final String find) {
+ return getValue(new ValueGetter<Integer>() {
+ @Override
+ public Integer capture() {
+ return mWebView.findAll(find);
+ }
+ });
+ }
+
+ public Picture capturePicture() {
+ return getValue(new ValueGetter<Picture>() {
+ @Override
+ public Picture capture() {
+ return mWebView.capturePicture();
+ }
+ });
+ }
+
+ public void evaluateJavascript(final String script, final ValueCallback<String> result) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.evaluateJavascript(script, result);
+ }
+ });
+ }
+
+ public void saveWebArchive(final String basename, final boolean autoname,
+ final ValueCallback<String> callback) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mWebView.saveWebArchive(basename, autoname, callback);
+ }
+ });
+ }
+
+ public WebView createWebView() {
+ return getValue(new ValueGetter<WebView>() {
+ @Override
+ public WebView capture() {
+ return new WebView(mWebView.getContext());
+ }
+ });
+ }
+
+ public PrintDocumentAdapter createPrintDocumentAdapter() {
+ return getValue(new ValueGetter<PrintDocumentAdapter>() {
+ @Override
+ public PrintDocumentAdapter capture() {
+ return mWebView.createPrintDocumentAdapter();
+ }
+ });
+ }
+
+ public void setLayoutHeightToMatchParent() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ ViewParent parent = mWebView.getParent();
+ if (parent instanceof ViewGroup) {
+ ((ViewGroup) parent).getLayoutParams().height =
+ ViewGroup.LayoutParams.MATCH_PARENT;
+ }
+ mWebView.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
+ mWebView.requestLayout();
+ }
+ });
+ }
+
+ public void setAcceptThirdPartyCookies(final boolean accept) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView, accept);
+ }
+ });
+ }
+
+ public boolean acceptThirdPartyCookies() {
+ return getValue(new ValueGetter<Boolean>() {
+ @Override
+ public Boolean capture() {
+ return CookieManager.getInstance().acceptThirdPartyCookies(mWebView);
+ }
+ });
+ }
+
+ /**
+ * Helper for running code on the UI thread where an exception is
+ * a test failure. If this is already the UI thread then it runs
+ * the code immediately.
+ *
+ * @see runTestOnUiThread
+ * @param r The code to run in the UI thread
+ */
+ public void runOnUiThread(Runnable r) {
+ try {
+ if (isUiThread()) {
+ r.run();
+ } else {
+ mTest.runTestOnUiThread(r);
+ }
+ } catch (Throwable t) {
+ Assert.fail("Unexpected error while running on UI thread: "
+ + t.getMessage());
+ }
+ }
+
+ /**
+ * Accessor for underlying WebView.
+ * @return The WebView being wrapped by this class.
+ */
+ public WebView getWebView() {
+ return mWebView;
+ }
+
+ private<T> T getValue(ValueGetter<T> getter) {
+ runOnUiThread(getter);
+ return getter.getValue();
+ }
+
+ private abstract class ValueGetter<T> implements Runnable {
+ private T mValue;
+
+ @Override
+ public void run() {
+ mValue = capture();
+ }
+
+ protected abstract T capture();
+
+ public T getValue() {
+ return mValue;
+ }
+ }
+
+ /**
+ * Returns true if the current thread is the UI thread based on the
+ * Looper.
+ */
+ private static boolean isUiThread() {
+ return (Looper.myLooper() == Looper.getMainLooper());
+ }
+
+ /**
+ * @return Whether or not the load has finished.
+ */
+ private synchronized boolean isLoaded() {
+ return mLoaded && mNewPicture && mProgress == 100;
+ }
+
+ /**
+ * Makes a WebView call, waits for completion and then resets the
+ * load state in preparation for the next load call.
+ * @param call The call to make on the UI thread prior to waiting.
+ */
+ private void callAndWait(Runnable call) {
+ Assert.assertTrue("WebViewOnUiThread.load*AndWaitForCompletion calls "
+ + "may not be mixed with load* calls directly on WebView "
+ + "without calling waitForLoadCompletion after the load",
+ !isLoaded());
+ clearLoad(); // clear any extraneous signals from a previous load.
+ runOnUiThread(call);
+ waitForLoadCompletion();
+ }
+
+ /**
+ * Called whenever a load has been completed so that a subsequent call to
+ * waitForLoadCompletion doesn't return immediately.
+ */
+ synchronized private void clearLoad() {
+ mLoaded = false;
+ mNewPicture = false;
+ mProgress = 0;
+ }
+
+ /**
+ * Uses a polling mechanism, while pumping messages to check when the
+ * criteria is met.
+ */
+ private void waitOnUiThread(long timeout, final Callable<Boolean> doneCriteria) {
+ new PollingCheck(timeout) {
+ @Override
+ protected boolean check() {
+ pumpMessages();
+ try {
+ return doneCriteria.call();
+ } catch (Exception e) {
+ Assert.fail("Unexpected error while checking the criteria: "
+ + e.getMessage());
+ return true;
+ }
+ }
+ }.run();
+ }
+
+ /**
+ * Uses a wait/notify to check when the criteria is met.
+ */
+ private synchronized void waitOnTestThread(long timeout, Callable<Boolean> doneCriteria) {
+ try {
+ long waitEnd = SystemClock.uptimeMillis() + timeout;
+ long timeRemaining = timeout;
+ while (!doneCriteria.call() && timeRemaining > 0) {
+ this.wait(timeRemaining);
+ timeRemaining = waitEnd - SystemClock.uptimeMillis();
+ }
+ Assert.assertTrue("Action failed to complete before timeout", doneCriteria.call());
+ } catch (InterruptedException e) {
+ // We'll just drop out of the loop and fail
+ } catch (Exception e) {
+ Assert.fail("Unexpected error while checking the criteria: "
+ + e.getMessage());
+ }
+ }
+
+ /**
+ * Pumps all currently-queued messages in the UI thread and then exits.
+ * This is useful to force processing while running tests in the UI thread.
+ */
+ private void pumpMessages() {
+ class ExitLoopException extends RuntimeException {
+ }
+
+ // Force loop to exit when processing this. Loop.quit() doesn't
+ // work because this is the main Loop.
+ mWebView.getHandler().post(new Runnable() {
+ @Override
+ public void run() {
+ throw new ExitLoopException(); // exit loop!
+ }
+ });
+ try {
+ // Pump messages until our message gets through.
+ Looper.loop();
+ } catch (ExitLoopException e) {
+ }
+ }
+
+ /**
+ * A WebChromeClient used to capture the onProgressChanged for use
+ * in waitFor functions. If a test must override the WebChromeClient,
+ * it can derive from this class or call onProgressChanged
+ * directly.
+ */
+ public static class WaitForProgressClient extends WebChromeClient {
+ private WebViewOnUiThread mOnUiThread;
+
+ public WaitForProgressClient(WebViewOnUiThread onUiThread) {
+ mOnUiThread = onUiThread;
+ }
+
+ @Override
+ public void onProgressChanged(WebView view, int newProgress) {
+ super.onProgressChanged(view, newProgress);
+ mOnUiThread.onProgressChanged(newProgress);
+ }
+ }
+
+ /**
+ * A WebViewClient that captures the onPageFinished for use in
+ * waitFor functions. Using initializeWebView sets the WaitForLoadedClient
+ * into the WebView. If a test needs to set a specific WebViewClient and
+ * needs the waitForCompletion capability then it should derive from
+ * WaitForLoadedClient or call WebViewOnUiThread.onPageFinished.
+ */
+ public static class WaitForLoadedClient extends WebViewClient {
+ private WebViewOnUiThread mOnUiThread;
+
+ public WaitForLoadedClient(WebViewOnUiThread onUiThread) {
+ mOnUiThread = onUiThread;
+ }
+
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ super.onPageFinished(view, url);
+ mOnUiThread.onPageFinished();
+ }
+
+ @Override
+ public void onPageStarted(WebView view, String url, Bitmap favicon) {
+ super.onPageStarted(view, url, favicon);
+ mOnUiThread.onPageStarted();
+ }
+ }
+
+ /**
+ * A PictureListener that captures the onNewPicture for use in
+ * waitForLoadCompletion. Using initializeWebView sets the PictureListener
+ * into the WebView. If a test needs to set a specific PictureListener and
+ * needs the waitForCompletion capability then it should call
+ * WebViewOnUiThread.onNewPicture.
+ */
+ private class WaitForNewPicture implements PictureListener {
+ @Override
+ public void onNewPicture(WebView view, Picture picture) {
+ WebViewOnUiThread.this.onNewPicture();
+ }
+ }
+}
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebViewSslTest.java b/tests/tests/webkit/src/android/webkit/cts/WebViewSslTest.java
index 6798f89..8aa0145 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebViewSslTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewSslTest.java
@@ -46,7 +46,7 @@
import javax.net.ssl.X509TrustManager;
-public class WebViewSslTest extends ActivityInstrumentationTestCase2<WebViewStubActivity> {
+public class WebViewSslTest extends ActivityInstrumentationTestCase2<WebViewCtsActivity> {
private static final String LOGTAG = "WebViewSslTest";
/**
@@ -428,13 +428,13 @@
private WebViewOnUiThread mOnUiThread;
public WebViewSslTest() {
- super("com.android.cts.stub", WebViewStubActivity.class);
+ super("com.android.cts.webkit", WebViewCtsActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
- final WebViewStubActivity activity = getActivity();
+ final WebViewCtsActivity activity = getActivity();
mWebView = activity.getWebView();
if (mWebView != null) {
new PollingCheck() {
diff --git a/tests/src/android/webkit/cts/WebViewStartupStubActivity.java b/tests/tests/webkit/src/android/webkit/cts/WebViewStartupCtsActivity.java
similarity index 95%
rename from tests/src/android/webkit/cts/WebViewStartupStubActivity.java
rename to tests/tests/webkit/src/android/webkit/cts/WebViewStartupCtsActivity.java
index f902a48..933d0ed 100644
--- a/tests/src/android/webkit/cts/WebViewStartupStubActivity.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewStartupCtsActivity.java
@@ -21,7 +21,7 @@
import android.view.ViewGroup;
import android.webkit.WebView;
-public class WebViewStartupStubActivity extends Activity {
+public class WebViewStartupCtsActivity extends Activity {
private WebView mWebView;
@Override
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebViewStartupTest.java b/tests/tests/webkit/src/android/webkit/cts/WebViewStartupTest.java
index 56f8f61..8f4dcc2 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebViewStartupTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewStartupTest.java
@@ -30,15 +30,15 @@
import java.util.regex.Pattern;
public class WebViewStartupTest
- extends ActivityInstrumentationTestCase2<WebViewStartupStubActivity> {
+ extends ActivityInstrumentationTestCase2<WebViewStartupCtsActivity> {
private static final int TEST_TIMEOUT = 5000;
private static final String TAG = "WebViewStartupTest";
- private WebViewStartupStubActivity mActivity;
+ private WebViewStartupCtsActivity mActivity;
public WebViewStartupTest() {
- super("com.android.cts.stub", WebViewStartupStubActivity.class);
+ super("com.android.cts.webkit", WebViewStartupCtsActivity.class);
}
@Override
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java b/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
index 9216cc7..1d8a02a 100755
--- a/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
@@ -75,8 +75,12 @@
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
import java.util.Collections;
import java.util.Date;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -84,6 +88,7 @@
import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.FutureTask;
+import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import java.util.HashMap;
import java.util.Map;
@@ -95,7 +100,7 @@
import org.apache.http.util.EncodingUtils;
import org.apache.http.util.EntityUtils;
-public class WebViewTest extends ActivityInstrumentationTestCase2<WebViewStubActivity> {
+public class WebViewTest extends ActivityInstrumentationTestCase2<WebViewCtsActivity> {
public static final long TEST_TIMEOUT = 20000L;
private static final int INITIAL_PROGRESS = 100;
private static final String X_REQUESTED_WITH = "X-Requested-With";
@@ -122,13 +127,13 @@
private WebIconDatabase mIconDb;
public WebViewTest() {
- super("com.android.cts.stub", WebViewStubActivity.class);
+ super("com.android.cts.webkit", WebViewCtsActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
- final WebViewStubActivity activity = getActivity();
+ final WebViewCtsActivity activity = getActivity();
mWebView = activity.getWebView();
if (mWebView != null) {
new PollingCheck() {
@@ -1290,6 +1295,94 @@
assertEquals("about:blank", mOnUiThread.getUrl());
}
+ private void deleteIfExists(File file) throws IOException {
+ if (file.exists()) {
+ file.delete();
+ }
+ }
+
+ private String readTextFile(File file, Charset encoding)
+ throws FileNotFoundException, IOException {
+ FileInputStream stream = new FileInputStream(file);
+ byte[] bytes = new byte[(int)file.length()];
+ stream.read(bytes);
+ stream.close();
+ return new String(bytes, encoding);
+ }
+
+ private void doSaveWebArchive(String baseName, boolean autoName, final String expectName)
+ throws Throwable {
+ final Semaphore saving = new Semaphore(0);
+ ValueCallback<String> callback = new ValueCallback<String>() {
+ @Override
+ public void onReceiveValue(String savedName) {
+ assertEquals(expectName, savedName);
+ saving.release();
+ }
+ };
+
+ mOnUiThread.saveWebArchive(baseName, autoName, callback);
+ assertTrue(saving.tryAcquire(TEST_TIMEOUT, TimeUnit.MILLISECONDS));
+ }
+
+ public void testSaveWebArchive() throws Throwable {
+ if (!NullWebViewUtils.isWebViewAvailable()) {
+ return;
+ }
+
+ final String testPage = "testSaveWebArchive test page";
+
+ File dir = getActivity().getFilesDir();
+ String dirStr = dir.toString();
+
+ File test = new File(dir, "test.mht");
+ deleteIfExists(test);
+ String testStr = test.getAbsolutePath();
+
+ File index = new File(dir, "index.mht");
+ deleteIfExists(index);
+ String indexStr = index.getAbsolutePath();
+
+ File index1 = new File(dir, "index-1.mht");
+ deleteIfExists(index1);
+ String index1Str = index1.getAbsolutePath();
+
+ mOnUiThread.loadDataAndWaitForCompletion(testPage, "text/html", "UTF-8");
+
+ try {
+ // Save test.mht
+ doSaveWebArchive(testStr, false, testStr);
+
+ // Check the contents of test.mht
+ String testMhtml = readTextFile(test, StandardCharsets.UTF_8);
+ assertTrue(testMhtml.contains(testPage));
+
+ // Save index.mht
+ doSaveWebArchive(dirStr + "/", true, indexStr);
+
+ // Check the contents of index.mht
+ String indexMhtml = readTextFile(index, StandardCharsets.UTF_8);
+ assertTrue(indexMhtml.contains(testPage));
+
+ // Save index-1.mht since index.mht already exists
+ doSaveWebArchive(dirStr + "/", true, index1Str);
+
+ // Check the contents of index-1.mht
+ String index1Mhtml = readTextFile(index1, StandardCharsets.UTF_8);
+ assertTrue(index1Mhtml.contains(testPage));
+
+ // Try a file in a bogus directory
+ doSaveWebArchive("/bogus/path/test.mht", false, null);
+
+ // Try a bogus directory
+ doSaveWebArchive("/bogus/path/", true, null);
+ } finally {
+ deleteIfExists(test);
+ deleteIfExists(index);
+ deleteIfExists(index1);
+ }
+ }
+
private static class WaitForFindResultsListener extends FutureTask<Integer>
implements WebView.FindListener {
public WaitForFindResultsListener() {
@@ -2275,7 +2368,7 @@
.setResolution(new PrintAttributes.Resolution("foo", "bar", 300, 300))
.setMinMargins(PrintAttributes.Margins.NO_MARGINS)
.build();
- final WebViewStubActivity activity = getActivity();
+ final WebViewCtsActivity activity = getActivity();
final File file = activity.getFileStreamPath(PRINTER_TEST_FILE);
final ParcelFileDescriptor descriptor = ParcelFileDescriptor.open(file,
ParcelFileDescriptor.parseMode("w"));
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebView_WebViewTransportTest.java b/tests/tests/webkit/src/android/webkit/cts/WebView_WebViewTransportTest.java
index cb72ef0..0c04706 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebView_WebViewTransportTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebView_WebViewTransportTest.java
@@ -23,10 +23,10 @@
public class WebView_WebViewTransportTest
- extends ActivityInstrumentationTestCase2<WebViewStubActivity> {
+ extends ActivityInstrumentationTestCase2<WebViewCtsActivity> {
public WebView_WebViewTransportTest() {
- super("com.android.cts.stub", WebViewStubActivity.class);
+ super("com.android.cts.webkit", WebViewCtsActivity.class);
}
@UiThreadTest
diff --git a/tests/tests/widget/Android.mk b/tests/tests/widget/Android.mk
index f6be07d..505f82c 100644
--- a/tests/tests/widget/Android.mk
+++ b/tests/tests/widget/Android.mk
@@ -21,7 +21,7 @@
# and when built explicitly put it in the data partition
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-LOCAL_STATIC_JAVA_LIBRARIES += android-common ctstestrunner
+LOCAL_STATIC_JAVA_LIBRARIES += android-common ctsdeviceutil ctstestrunner
LOCAL_JAVA_LIBRARIES := android.test.runner
@@ -29,6 +29,4 @@
LOCAL_PACKAGE_NAME := CtsWidgetTestCases
-LOCAL_INSTRUMENTATION_FOR := CtsTestStubs
-
include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/widget/AndroidManifest.xml b/tests/tests/widget/AndroidManifest.xml
index 3c7fe5f..4b88c01 100644
--- a/tests/tests/widget/AndroidManifest.xml
+++ b/tests/tests/widget/AndroidManifest.xml
@@ -19,12 +19,335 @@
package="com.android.cts.widget">
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
- <application>
+ <application android:label="Android TestCase"
+ android:icon="@drawable/size_48x48"
+ android:maxRecents="1"
+ android:multiArch="true"
+ android:name="android.widget.cts.MockApplication"
+ android:supportsRtl="true">
+
<uses-library android:name="android.test.runner" />
+
+ <activity android:name="android.widget.cts.TwoLineListItemCtsActivity"
+ android:label="TwoLineListItemCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.ViewFlipperCtsActivity"
+ android:label="ViewFlipperCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.HorizontalScrollViewCtsActivity"
+ android:label="HorizontalScrollViewCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.SlidingDrawerCtsActivity"
+ android:label="SlidingDrawerCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.DigitalClockCtsActivity"
+ android:label="DigitalClockCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.ImageViewCtsActivity"
+ android:label="ImageViewCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.SeekBarCtsActivity"
+ android:label="SeekBarCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.ScrollViewCtsActivity"
+ android:label="ScrollViewCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.FrameLayoutCtsActivity"
+ android:label="FrameLayoutCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.LinearLayoutCtsActivity"
+ android:label="LinearLayoutCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.GridLayoutCtsActivity"
+ android:label="GridLayoutCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.LayoutDirectionCtsActivity"
+ android:label="LayoutDirectionCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.ProgressBarCtsActivity"
+ android:label="ProgressBarCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.ChronometerCtsActivity"
+ android:label="ChronometerCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.MediaControllerCtsActivity"
+ android:label="MediaControllerCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.RatingBarCtsActivity"
+ android:label="RatingBarCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.RemoteViewsCtsActivity"
+ android:label="RemoteViewsCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.ExpandableListSimple"
+ android:label="ExpandableListSimple">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.CtsActivity"
+ android:label="CtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.ExpandableListWithHeaders"
+ android:label="ExpandableListWithHeaders">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.GalleryCtsActivity"
+ android:label="GalleryCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.MockPopupWindowCtsActivity"
+ android:label="MockPopupWindowCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.ListViewCtsActivity"
+ android:label="ListViewCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.TextViewCtsActivity"
+ android:label="TextViewCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.DialerFilterCtsActivity"
+ android:label="DialerFilterCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.MultiAutoCompleteTextViewCtsActivity"
+ android:label="MultiAutoCompleteTextView Test Activity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.ViewGroupCtsActivity"
+ android:label="WidgetViewGroupCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.VideoViewCtsActivity"
+ android:configChanges="keyboardHidden|orientation|screenSize">
+ android:label="VideoViewCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.AutoCompleteCtsActivity"
+ android:label="AutoCompleteCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.ViewAnimatorCtsActivity" android:label="ViewAnimatorCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.GridViewCtsActivity"
+ android:label="GridViewCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.RelativeLayoutCtsActivity"
+ android:label="RelativeLayoutCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.FrameLayoutCtsActivity"
+ android:label="FrameLayoutCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.AdapterViewCtsActivity"
+ android:label="AdapterViewCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.CheckedTextViewCtsActivity"
+ android:label="CheckedTextViewCtsActivity"/>
+
+ <activity android:name="android.widget.cts.TableCtsActivity"
+ android:label="TableCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.TabHostCtsActivity"
+ android:label="TabHostCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.widget.cts.ZoomButtonCtsActivity"
+ android:label="ZoomButtonCtsActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="android.app.ActivityGroup"
+ android:label="ActivityGroup" />
+
+ <activity android:name="android.widget.cts.MockURLSpanTestActivity"
+ android:label="MockURLSpanTestActivity"
+ android:launchMode="singleTask"
+ android:alwaysRetainTaskState="true"
+ android:configChanges="orientation|keyboardHidden">
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+ <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+ <data android:scheme="ctstest" />
+ </intent-filter>
+ </activity>
+
</application>
<instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.cts.stub"
+ android:targetPackage="com.android.cts.widget"
android:label="CTS tests of android.widget">
<meta-data android:name="listener"
android:value="com.android.cts.runner.CtsTestRunListener" />
diff --git a/tests/src/android/widget/cts/StubActivity.java b/tests/tests/widget/res/anim/anim_alpha.xml
similarity index 62%
copy from tests/src/android/widget/cts/StubActivity.java
copy to tests/tests/widget/res/anim/anim_alpha.xml
index fe4002c..b5794c3 100644
--- a/tests/src/android/widget/cts/StubActivity.java
+++ b/tests/tests/widget/res/anim/anim_alpha.xml
@@ -1,5 +1,6 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
+<?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.
@@ -12,15 +13,11 @@
* 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 android.widget.cts;
+<alpha xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@android:anim/accelerate_interpolator"
+ android:fromAlpha="0.0"
+ android:toAlpha="1.0"
+ android:duration="500" />
-import android.app.Activity;
-
-/**
- * Stub activity for helping test. It's an empty activity.
- */
-public class StubActivity extends Activity {
-
-}
diff --git a/tests/tests/widget/res/drawable/animated.gif b/tests/tests/widget/res/drawable/animated.gif
new file mode 100644
index 0000000..51baf15
--- /dev/null
+++ b/tests/tests/widget/res/drawable/animated.gif
Binary files differ
diff --git a/tests/tests/widget/res/drawable/faces.jpg b/tests/tests/widget/res/drawable/faces.jpg
new file mode 100644
index 0000000..0672022
--- /dev/null
+++ b/tests/tests/widget/res/drawable/faces.jpg
Binary files differ
diff --git a/tests/tests/widget/res/drawable/failed.jpg b/tests/tests/widget/res/drawable/failed.jpg
new file mode 100644
index 0000000..1bb9b52
--- /dev/null
+++ b/tests/tests/widget/res/drawable/failed.jpg
Binary files differ
diff --git a/tests/tests/widget/res/drawable/icon_black.jpg b/tests/tests/widget/res/drawable/icon_black.jpg
new file mode 100644
index 0000000..4c9062a
--- /dev/null
+++ b/tests/tests/widget/res/drawable/icon_black.jpg
Binary files differ
diff --git a/tests/tests/widget/res/drawable/icon_blue.jpg b/tests/tests/widget/res/drawable/icon_blue.jpg
new file mode 100644
index 0000000..9e6c1c8
--- /dev/null
+++ b/tests/tests/widget/res/drawable/icon_blue.jpg
Binary files differ
diff --git a/tests/tests/widget/res/drawable/icon_green.jpg b/tests/tests/widget/res/drawable/icon_green.jpg
new file mode 100644
index 0000000..55a78f2
--- /dev/null
+++ b/tests/tests/widget/res/drawable/icon_green.jpg
Binary files differ
diff --git a/tests/tests/widget/res/drawable/icon_red.jpg b/tests/tests/widget/res/drawable/icon_red.jpg
new file mode 100644
index 0000000..6bc9e1f
--- /dev/null
+++ b/tests/tests/widget/res/drawable/icon_red.jpg
Binary files differ
diff --git a/tests/tests/widget/res/drawable/icon_yellow.jpg b/tests/tests/widget/res/drawable/icon_yellow.jpg
new file mode 100644
index 0000000..e748059
--- /dev/null
+++ b/tests/tests/widget/res/drawable/icon_yellow.jpg
Binary files differ
diff --git a/tests/tests/widget/res/drawable/ninepatch_0.9.png b/tests/tests/widget/res/drawable/ninepatch_0.9.png
new file mode 100644
index 0000000..24019d8
--- /dev/null
+++ b/tests/tests/widget/res/drawable/ninepatch_0.9.png
Binary files differ
diff --git a/tests/tests/widget/res/drawable/ninepatch_1.9.png b/tests/tests/widget/res/drawable/ninepatch_1.9.png
new file mode 100644
index 0000000..c56b1db
--- /dev/null
+++ b/tests/tests/widget/res/drawable/ninepatch_1.9.png
Binary files differ
diff --git a/tests/tests/widget/res/drawable/pass.jpg b/tests/tests/widget/res/drawable/pass.jpg
new file mode 100644
index 0000000..2f4b083
--- /dev/null
+++ b/tests/tests/widget/res/drawable/pass.jpg
Binary files differ
diff --git a/tests/tests/widget/res/drawable/scenery.jpg b/tests/tests/widget/res/drawable/scenery.jpg
new file mode 100644
index 0000000..7a6145b
--- /dev/null
+++ b/tests/tests/widget/res/drawable/scenery.jpg
Binary files differ
diff --git a/tests/tests/widget/res/drawable/size_48x48.jpg b/tests/tests/widget/res/drawable/size_48x48.jpg
new file mode 100644
index 0000000..5c2291e
--- /dev/null
+++ b/tests/tests/widget/res/drawable/size_48x48.jpg
Binary files differ
diff --git a/tests/tests/widget/res/drawable/start.jpg b/tests/tests/widget/res/drawable/start.jpg
new file mode 100644
index 0000000..54e05e0
--- /dev/null
+++ b/tests/tests/widget/res/drawable/start.jpg
Binary files differ
diff --git a/tests/tests/widget/res/drawable/testimage.jpg b/tests/tests/widget/res/drawable/testimage.jpg
new file mode 100644
index 0000000..754df0c
--- /dev/null
+++ b/tests/tests/widget/res/drawable/testimage.jpg
Binary files differ
diff --git a/tests/tests/widget/res/layout/abslistview_layout.xml b/tests/tests/widget/res/layout/abslistview_layout.xml
new file mode 100644
index 0000000..a090ce3
--- /dev/null
+++ b/tests/tests/widget/res/layout/abslistview_layout.xml
@@ -0,0 +1,38 @@
+<?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.
+-->
+
+<ViewGroup_Layout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/abslistview_root"
+ android:layout_width="25px"
+ android:layout_height="25px" >
+
+ <GridView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+ <ListView>
+ <TextView
+ android:text="@string/table_layout_first"
+ android:padding="3dip" />
+ <TextView
+ android:text="@string/table_layout_second"
+ android:padding="3dip" />
+ <TextView
+ android:text="@string/table_layout_third"
+ android:padding="3dip" />
+ </ListView>
+</ViewGroup_Layout>
+
diff --git a/tests/tests/widget/res/layout/absolute_layout.xml b/tests/tests/widget/res/layout/absolute_layout.xml
new file mode 100644
index 0000000..6cec61b
--- /dev/null
+++ b/tests/tests/widget/res/layout/absolute_layout.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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="match_parent"
+ android:layout_height="match_parent">
+
+ <AbsoluteLayout
+ android:id="@+id/absolute_view"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_x="1dip"
+ android:layout_y="2dip">
+
+ <TextView
+ android:id="@+id/absolute_textview"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_x="10dip"
+ android:layout_y="20dip"
+ android:background="@drawable/red"
+ android:text="@string/hello_world"/>
+
+ </AbsoluteLayout>
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/adapterview_layout.xml b/tests/tests/widget/res/layout/adapterview_layout.xml
new file mode 100644
index 0000000..e118500
--- /dev/null
+++ b/tests/tests/widget/res/layout/adapterview_layout.xml
@@ -0,0 +1,21 @@
+<?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.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/adapterview_tv"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
diff --git a/tests/tests/widget/res/layout/analogclock.xml b/tests/tests/widget/res/layout/analogclock.xml
new file mode 100644
index 0000000..7d862c3
--- /dev/null
+++ b/tests/tests/widget/res/layout/analogclock.xml
@@ -0,0 +1,21 @@
+<?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.
+-->
+
+<AnalogClock android:id="@+id/clock"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="96dip"
+ android:layout_gravity="center_horizontal"
+ android:layout_height="wrap_content"/>
diff --git a/tests/tests/widget/res/layout/autocompletetextview_layout.xml b/tests/tests/widget/res/layout/autocompletetextview_layout.xml
new file mode 100644
index 0000000..7fd183c
--- /dev/null
+++ b/tests/tests/widget/res/layout/autocompletetextview_layout.xml
@@ -0,0 +1,32 @@
+<?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:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView android:id="@+id/autocompletetv_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/notify" />
+
+ <AutoCompleteTextView android:id="@+id/autocompletetv_edit"
+ android:completionThreshold="1"
+ android:completionHint="@string/tabs_1"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/checkbox_layout.xml b/tests/tests/widget/res/layout/checkbox_layout.xml
new file mode 100644
index 0000000..a1f1718
--- /dev/null
+++ b/tests/tests/widget/res/layout/checkbox_layout.xml
@@ -0,0 +1,27 @@
+<?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="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <CheckBox android:id="@+id/check_box"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/hello_world" />
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/checkedtextview_layout.xml b/tests/tests/widget/res/layout/checkedtextview_layout.xml
new file mode 100644
index 0000000..d5b9c1f
--- /dev/null
+++ b/tests/tests/widget/res/layout/checkedtextview_layout.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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="match_parent"
+ android:layout_height="match_parent">
+
+ <ListView android:id="@+id/checkedtextview_listview"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ </ListView>
+
+ <CheckedTextView android:id="@+id/checkedtextview_test"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ </CheckedTextView>
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/chronometer_stub_layout.xml b/tests/tests/widget/res/layout/chronometer_stub_layout.xml
new file mode 100644
index 0000000..487f2f8
--- /dev/null
+++ b/tests/tests/widget/res/layout/chronometer_stub_layout.xml
@@ -0,0 +1,33 @@
+<?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.
+ -->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/screen"
+ android:layout_width="match_parent" android:layout_height="match_parent"
+ android:orientation="vertical">
+ <LinearLayout
+ android:id="@+id/chronometer_view_group"
+ android:layout_width="match_parent" android:layout_height="match_parent"
+ android:orientation="vertical">
+ <Chronometer
+ android:id="@+id/test_chronometer"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/chronometer_text"
+ />
+ </LinearLayout>
+</ScrollView>
+
diff --git a/tests/tests/widget/res/layout/cursoradapter_group0.xml b/tests/tests/widget/res/layout/cursoradapter_group0.xml
new file mode 100644
index 0000000..f640686
--- /dev/null
+++ b/tests/tests/widget/res/layout/cursoradapter_group0.xml
@@ -0,0 +1,21 @@
+<?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.
+-->
+
+<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/cursorAdapter_group0">
+</ImageView>
diff --git a/tests/tests/widget/res/layout/cursoradapter_group1.xml b/tests/tests/widget/res/layout/cursoradapter_group1.xml
new file mode 100644
index 0000000..d1dfa3c
--- /dev/null
+++ b/tests/tests/widget/res/layout/cursoradapter_group1.xml
@@ -0,0 +1,21 @@
+<?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.
+-->
+
+<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/cursorAdapter_group1">
+</ImageView>
diff --git a/tests/tests/widget/res/layout/cursoradapter_host.xml b/tests/tests/widget/res/layout/cursoradapter_host.xml
new file mode 100644
index 0000000..82ac72b
--- /dev/null
+++ b/tests/tests/widget/res/layout/cursoradapter_host.xml
@@ -0,0 +1,22 @@
+<?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:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/cursorAdapter_host">
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/cursoradapter_item0.xml b/tests/tests/widget/res/layout/cursoradapter_item0.xml
new file mode 100644
index 0000000..5ecd496
--- /dev/null
+++ b/tests/tests/widget/res/layout/cursoradapter_item0.xml
@@ -0,0 +1,21 @@
+<?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.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/cursorAdapter_item0">
+</TextView>
diff --git a/tests/tests/widget/res/layout/cursoradapter_item1.xml b/tests/tests/widget/res/layout/cursoradapter_item1.xml
new file mode 100644
index 0000000..44037b0
--- /dev/null
+++ b/tests/tests/widget/res/layout/cursoradapter_item1.xml
@@ -0,0 +1,21 @@
+<?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.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/cursorAdapter_item1">
+</TextView>
diff --git a/tests/tests/widget/res/layout/datepicker_layout.xml b/tests/tests/widget/res/layout/datepicker_layout.xml
new file mode 100644
index 0000000..925674c
--- /dev/null
+++ b/tests/tests/widget/res/layout/datepicker_layout.xml
@@ -0,0 +1,27 @@
+<?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.
+-->
+
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <DatePicker
+ android:id="@+id/datePicker_dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true" />
+
+</RelativeLayout>
diff --git a/tests/tests/widget/res/layout/dialerfilter_layout.xml b/tests/tests/widget/res/layout/dialerfilter_layout.xml
new file mode 100644
index 0000000..46edbd7
--- /dev/null
+++ b/tests/tests/widget/res/layout/dialerfilter_layout.xml
@@ -0,0 +1,32 @@
+<?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.
+-->
+
+<DialerFilter android:id="@+id/dialer_filter"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <EditText android:id="@android:id/hint"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@android:drawable/editbox_background"/>
+
+ <EditText android:id="@android:id/primary"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@android:id/hint"/>
+
+</DialerFilter>
diff --git a/tests/tests/widget/res/layout/digitalclock_layout.xml b/tests/tests/widget/res/layout/digitalclock_layout.xml
new file mode 100644
index 0000000..d405af2
--- /dev/null
+++ b/tests/tests/widget/res/layout/digitalclock_layout.xml
@@ -0,0 +1,48 @@
+<?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.
+-->
+
+<com.android.cts.widget.alarmclock.DigitalClock android:id="@+id/digitalClock"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="208dip"
+ android:gravity="center">
+ <!-- Includes vertical padding so animated background doesn't
+ stretch much -->
+ <TextView android:id="@+id/timeDisplay"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textSize="64sp"
+ android:paddingRight="4dip"
+ android:paddingTop="48dip"
+ android:paddingBottom="48dip"/>
+ <LinearLayout android:id="@+id/am_pm"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+ <TextView android:id="@+id/am"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="-7dp"
+ android:text="@string/am"
+ android:textSize="28sp"/>
+ <TextView android:id="@+id/pm"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="-4dp"
+ android:text="@string/pm"
+ android:textSize="28sp"/>
+ </LinearLayout>
+</com.android.cts.widget.alarmclock.DigitalClock>
diff --git a/tests/tests/widget/res/layout/digitalclock_simplelayout.xml b/tests/tests/widget/res/layout/digitalclock_simplelayout.xml
new file mode 100644
index 0000000..16f7b45
--- /dev/null
+++ b/tests/tests/widget/res/layout/digitalclock_simplelayout.xml
@@ -0,0 +1,22 @@
+<?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:id="@+id/digitalclock_root"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/edittext_layout.xml b/tests/tests/widget/res/layout/edittext_layout.xml
new file mode 100644
index 0000000..398d3be
--- /dev/null
+++ b/tests/tests/widget/res/layout/edittext_layout.xml
@@ -0,0 +1,39 @@
+<?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.
+-->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+
+ <LinearLayout android:id="@+id/edit_text"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <EditText android:id="@+id/edittext1"
+ style="@android:style/Widget.EditText"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginTop="10dip"
+ android:scrollHorizontally="true"
+ android:capitalize="sentences"
+ android:autoText="false"
+ android:maxLines="3"
+ android:textColor="#FF0000"
+ android:text="@string/edit_text"
+ />
+ </LinearLayout>
+</ScrollView>
diff --git a/tests/src/android/widget/cts/StubActivity.java b/tests/tests/widget/res/layout/expandablelistview_layout.xml
similarity index 60%
copy from tests/src/android/widget/cts/StubActivity.java
copy to tests/tests/widget/res/layout/expandablelistview_layout.xml
index fe4002c..3a3ebb7 100644
--- a/tests/src/android/widget/cts/StubActivity.java
+++ b/tests/tests/widget/res/layout/expandablelistview_layout.xml
@@ -1,5 +1,6 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
+<?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.
@@ -12,15 +13,10 @@
* 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.
- */
+ -->
+<ExpandableListView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/expandablelistview_test"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:drawSelectorOnTop="false" />
-package android.widget.cts;
-
-import android.app.Activity;
-
-/**
- * Stub activity for helping test. It's an empty activity.
- */
-public class StubActivity extends Activity {
-
-}
diff --git a/tests/tests/widget/res/layout/framelayout_layout.xml b/tests/tests/widget/res/layout/framelayout_layout.xml
new file mode 100644
index 0000000..78b7b47
--- /dev/null
+++ b/tests/tests/widget/res/layout/framelayout_layout.xml
@@ -0,0 +1,58 @@
+<?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:id="@+id/framelayout_container"
+ android:background="@drawable/red"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_gravity="bottom"
+ android:orientation="vertical">
+
+ <FrameLayout
+ android:layout_width="100dip"
+ android:layout_height="100dip"
+ android:background="@drawable/yellow"
+ android:id="@+id/framelayout">
+ </FrameLayout>
+
+ <FrameLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="@drawable/yellow"
+ android:id="@+id/framelayout_measureall">
+
+ <TextView android:id="@+id/framelayout_textview"
+ android:background="@drawable/blue"
+ android:layout_width="60dip"
+ android:layout_height="30dip"
+ android:text="@string/hello_world"/>
+
+ <Button android:id="@+id/framelayout_button"
+ android:layout_width="50dip"
+ android:layout_height="15dip"
+ android:text="@string/go"/>
+
+ </FrameLayout>
+
+ <FrameLayout
+ android:id="@+id/foreground_tint"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:foregroundTint="@android:color/white"
+ android:foregroundTintMode="src_over" />
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/gallery_test.xml b/tests/tests/widget/res/layout/gallery_test.xml
new file mode 100644
index 0000000..03f0e60
--- /dev/null
+++ b/tests/tests/widget/res/layout/gallery_test.xml
@@ -0,0 +1,28 @@
+<?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:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <android.widget.cts.MyGallery xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/gallery_test"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ </android.widget.cts.MyGallery>
+
+</LinearLayout>
diff --git a/tests/src/android/widget/cts/StubActivity.java b/tests/tests/widget/res/layout/gridlayout_layout.xml
similarity index 63%
copy from tests/src/android/widget/cts/StubActivity.java
copy to tests/tests/widget/res/layout/gridlayout_layout.xml
index fe4002c..54b3b2c 100644
--- a/tests/src/android/widget/cts/StubActivity.java
+++ b/tests/tests/widget/res/layout/gridlayout_layout.xml
@@ -1,5 +1,6 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2012 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.
@@ -12,15 +13,11 @@
* 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 android.widget.cts;
-
-import android.app.Activity;
-
-/**
- * Stub activity for helping test. It's an empty activity.
- */
-public class StubActivity extends Activity {
-
-}
+ -->
+<GridLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ >
+</GridLayout>
diff --git a/tests/tests/widget/res/layout/gridview_layout.xml b/tests/tests/widget/res/layout/gridview_layout.xml
new file mode 100644
index 0000000..c7774a3
--- /dev/null
+++ b/tests/tests/widget/res/layout/gridview_layout.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+
+<GridView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/gridview"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+/>
+
diff --git a/tests/tests/widget/res/layout/horizontal_scrollview.xml b/tests/tests/widget/res/layout/horizontal_scrollview.xml
new file mode 100644
index 0000000..0f88ab3
--- /dev/null
+++ b/tests/tests/widget/res/layout/horizontal_scrollview.xml
@@ -0,0 +1,105 @@
+<?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.
+-->
+
+<android.widget.cts.MyHorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/horizontal_scroll_view"
+ android:layout_width="100px"
+ android:layout_height="100px">
+
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="250px"
+ android:layout_height="wrap_content">
+
+ <Button
+ android:id="@+id/first_horizontal_child"
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_1"/>
+
+ <Button
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_2"/>
+
+ <Button
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_3"/>
+
+ <Button
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_1"/>
+
+ <Button
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_2"/>
+
+ <Button
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_3"/>
+
+ <Button
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_1"/>
+
+ <Button
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_2"/>
+
+ <Button
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_3"/>
+
+ <Button
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_1"/>
+
+ <Button
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_2"/>
+
+ <Button
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_3"/>
+
+ <Button
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_1"/>
+
+ <Button
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_2"/>
+
+ <Button
+ android:id="@+id/last_horizontal_child"
+ android:layout_width="250px"
+ android:layout_height="100px"
+ android:text="@string/vertical_text_3"/>
+ </LinearLayout>
+
+</android.widget.cts.MyHorizontalScrollView>
diff --git a/tests/src/android/widget/cts/StubActivity.java b/tests/tests/widget/res/layout/imagebutton_test.xml
similarity index 63%
copy from tests/src/android/widget/cts/StubActivity.java
copy to tests/tests/widget/res/layout/imagebutton_test.xml
index fe4002c..7d4b691 100644
--- a/tests/src/android/widget/cts/StubActivity.java
+++ b/tests/tests/widget/res/layout/imagebutton_test.xml
@@ -1,5 +1,6 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
+<?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.
@@ -12,15 +13,11 @@
* 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.
- */
+ -->
+<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/imagebutton"
+ android:layout_width="96px"
+ android:layout_height="76px"
+ android:soundEffectsEnabled="false"
+/>
-package android.widget.cts;
-
-import android.app.Activity;
-
-/**
- * Stub activity for helping test. It's an empty activity.
- */
-public class StubActivity extends Activity {
-
-}
diff --git a/tests/tests/widget/res/layout/imageswitcher_test.xml b/tests/tests/widget/res/layout/imageswitcher_test.xml
new file mode 100644
index 0000000..496b2ba
--- /dev/null
+++ b/tests/tests/widget/res/layout/imageswitcher_test.xml
@@ -0,0 +1,29 @@
+<?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.
+ -->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <ImageSwitcher android:id="@+id/switcher"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_alignParentTop="true"
+ android:layout_alignParentLeft="true"
+ />
+</RelativeLayout>
+
diff --git a/tests/tests/widget/res/layout/imageview_layout.xml b/tests/tests/widget/res/layout/imageview_layout.xml
new file mode 100644
index 0000000..e56a9c9
--- /dev/null
+++ b/tests/tests/widget/res/layout/imageview_layout.xml
@@ -0,0 +1,38 @@
+<?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:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <ImageView
+ android:id="@+id/imageview"
+ android:layout_width="320px"
+ android:layout_height="240px"/>
+
+ <ImageView
+ android:id="@+id/image_tint"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:tint="@android:color/white"
+ android:tintMode="src_over" />
+
+</LinearLayout>
+
diff --git a/tests/tests/widget/res/layout/layoutdirection_layout.xml b/tests/tests/widget/res/layout/layoutdirection_layout.xml
new file mode 100644
index 0000000..e506dc1
--- /dev/null
+++ b/tests/tests/widget/res/layout/layoutdirection_layout.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2012 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="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <LinearLayout android:id="@+id/layout_linearlayout_ltr"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="ltr">
+
+ <LinearLayout android:id="@+id/layout_linearlayout_ltr_child_1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="ltr" />
+
+ <LinearLayout android:id="@+id/layout_linearlayout_ltr_child_2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="rtl" />
+
+ <LinearLayout android:id="@+id/layout_linearlayout_ltr_child_3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="inherit" />
+
+ <LinearLayout android:id="@+id/layout_linearlayout_ltr_child_4"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="locale" />
+
+ </LinearLayout>
+
+ <LinearLayout android:id="@+id/layout_linearlayout_rtl"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="rtl">
+
+ <LinearLayout android:id="@+id/layout_linearlayout_rtl_child_1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="ltr" />
+
+ <LinearLayout android:id="@+id/layout_linearlayout_rtl_child_2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="rtl" />
+
+ <LinearLayout android:id="@+id/layout_linearlayout_rtl_child_3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="inherit" />
+
+ <LinearLayout android:id="@+id/layout_linearlayout_rtl_child_4"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="locale" />
+
+ </LinearLayout>
+
+ <LinearLayout android:id="@+id/layout_linearlayout_locale"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="locale">
+
+ <LinearLayout android:id="@+id/layout_linearlayout_locale_child_1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="ltr" />
+
+ <LinearLayout android:id="@+id/layout_linearlayout_locale_child_2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="rtl" />
+
+ <LinearLayout android:id="@+id/layout_linearlayout_locale_child_3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="inherit" />
+
+ <LinearLayout android:id="@+id/layout_linearlayout_locale_child_4"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="locale" />
+
+ </LinearLayout>
+
+ <LinearLayout android:id="@+id/layout_linearlayout_inherit"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="inherit">
+
+ <LinearLayout android:id="@+id/layout_linearlayout_inherit_child_1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="ltr" />
+
+ <LinearLayout android:id="@+id/layout_linearlayout_inherit_child_2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="rtl" />
+
+ <LinearLayout android:id="@+id/layout_linearlayout_inherit_child_3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="inherit" />
+
+ <LinearLayout android:id="@+id/layout_linearlayout_inherit_child_4"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layoutDirection="locale" />
+
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/linearlayout_layout.xml b/tests/tests/widget/res/layout/linearlayout_layout.xml
new file mode 100644
index 0000000..c70937d
--- /dev/null
+++ b/tests/tests/widget/res/layout/linearlayout_layout.xml
@@ -0,0 +1,137 @@
+<?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="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <LinearLayout android:id="@+id/horizontal"
+ android:orientation="horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="100dip"
+ android:background="#FF909090">
+
+ <TextView android:id="@+id/gravity_top"
+ android:background="#FF00FF00"
+ android:layout_width="wrap_content"
+ android:layout_height="50dip"
+ android:layout_gravity="top"
+ android:text="@string/horizontal_text_1"/>
+
+ <TextView android:id="@+id/gravity_center_vertical"
+ android:background="#FF00FF00"
+ android:layout_width="wrap_content"
+ android:layout_height="50dip"
+ android:layout_gravity="center_vertical"
+ android:text="@string/horizontal_text_2"/>
+
+ <TextView android:id="@+id/gravity_bottom"
+ android:background="#FF00FF00"
+ android:layout_width="wrap_content"
+ android:layout_height="50dip"
+ android:layout_gravity="bottom"
+ android:text="@string/horizontal_text_3"/>
+ </LinearLayout>
+
+ <LinearLayout android:id="@+id/vertical"
+ android:orientation="vertical"
+ android:layout_width="100dip"
+ android:layout_height="wrap_content"
+ android:background="#FFFF0909">
+
+ <TextView android:id="@+id/gravity_left"
+ android:background="#FF00FF00"
+ android:layout_width="wrap_content"
+ android:layout_height="20dip"
+ android:layout_gravity="left"
+ android:text="@string/vertical_text_1"/>
+
+ <TextView android:id="@+id/gravity_center_horizontal"
+ android:background="#FF0000FF"
+ android:layout_width="wrap_content"
+ android:layout_height="20dip"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/vertical_text_2"/>
+
+ <TextView android:id="@+id/gravity_right"
+ android:background="#FF00FF00"
+ android:layout_width="wrap_content"
+ android:layout_height="20dip"
+ android:layout_gravity="right"
+ android:text="@string/vertical_text_3"/>
+ </LinearLayout>
+
+ <LinearLayout android:id="@+id/weightsum"
+ android:orientation="horizontal"
+ android:weightSum="1.0"
+ android:baselineAligned="false"
+ android:layout_width="100dip"
+ android:layout_height="100dip"
+ android:background="#FF909090">
+
+ <TextView android:id="@+id/weight_0_2"
+ android:background="#FF0000FF"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.2"
+ android:text="@string/horizontal_text_1"/>
+
+ <TextView android:id="@+id/weight_0_5"
+ android:background="#FFF00F0F"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.5"
+ android:text="@string/horizontal_text_2"/>
+
+ <TextView android:id="@+id/weight_0_3"
+ android:background="#FF0000FF"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.3"
+ android:text="@string/horizontal_text_3"/>
+ </LinearLayout>
+
+ <LinearLayout android:id="@+id/baseline_aligned_child_index"
+ android:orientation="vertical"
+ android:baselineAlignedChildIndex="1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="#FFFF0909">
+
+ <TextView android:id="@+id/textview1"
+ android:background="#FF00FF00"
+ android:layout_width="wrap_content"
+ android:layout_height="20dip"
+ android:layout_gravity="left"
+ android:text="@string/vertical_text_1"/>
+
+ <TextView android:id="@+id/textview2"
+ android:background="#FF0000FF"
+ android:layout_width="wrap_content"
+ android:layout_height="20dip"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/vertical_text_2"/>
+
+ <TextView android:id="@+id/textview3"
+ android:background="#FF00FF00"
+ android:layout_width="wrap_content"
+ android:layout_height="20dip"
+ android:layout_gravity="right"
+ android:text="@string/vertical_text_3"/>
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/listview_layout.xml b/tests/tests/widget/res/layout/listview_layout.xml
new file mode 100644
index 0000000..ee8b6de
--- /dev/null
+++ b/tests/tests/widget/res/layout/listview_layout.xml
@@ -0,0 +1,46 @@
+<?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:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView android:id="@+id/headerview1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/header_view" />
+
+ <TextView android:id="@+id/headerview2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/header_view" />
+
+ <ListView android:id="@+id/listview_default"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+ <TextView android:id="@+id/footerview1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/footer_view" />
+
+ <TextView android:id="@+id/footerview2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/footer_view" />
+</LinearLayout>
+
diff --git a/tests/src/android/widget/cts/ProgressBarStubActivity.java b/tests/tests/widget/res/layout/mediacontroller_layout.xml
similarity index 60%
copy from tests/src/android/widget/cts/ProgressBarStubActivity.java
copy to tests/tests/widget/res/layout/mediacontroller_layout.xml
index 57cfa1a..871adf4 100644
--- a/tests/src/android/widget/cts/ProgressBarStubActivity.java
+++ b/tests/tests/widget/res/layout/mediacontroller_layout.xml
@@ -1,4 +1,5 @@
-/*
+<?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");
@@ -12,23 +13,16 @@
* 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:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
-package android.widget.cts;
+ <VideoView
+ android:id="@+id/mediacontroller_videoview"
+ android:layout_width="320px"
+ android:layout_height="240px"/>
-import android.app.Activity;
-import android.os.Bundle;
+</LinearLayout>
-/**
- * An application for ProgressBar test
- *
- */
-public class ProgressBarStubActivity extends Activity {
- /**
- * Called with the activity is first created.
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
-}
diff --git a/tests/tests/widget/res/layout/multi_auto_complete_text_view_layout.xml b/tests/tests/widget/res/layout/multi_auto_complete_text_view_layout.xml
new file mode 100644
index 0000000..50109c8
--- /dev/null
+++ b/tests/tests/widget/res/layout/multi_auto_complete_text_view_layout.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/text_country" />
+
+ <MultiAutoCompleteTextView android:id="@+id/country_edit"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/text_name" />
+
+ <MultiAutoCompleteTextView android:id="@+id/name_edit"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+</LinearLayout>
+
diff --git a/tests/tests/widget/res/layout/popupwindow.xml b/tests/tests/widget/res/layout/popupwindow.xml
new file mode 100644
index 0000000..e6b0aed
--- /dev/null
+++ b/tests/tests/widget/res/layout/popupwindow.xml
@@ -0,0 +1,52 @@
+<?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="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView android:id="@+id/anchor_upper"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/text_view_hint"
+ android:layout_weight="1"/>
+
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1">
+
+ <TextView android:id="@+id/anchor_middle_left"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="@string/text_view_hint"
+ android:layout_weight="1"/>
+
+ <TextView android:id="@+id/anchor_middle_right"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="@string/text_view_hint"
+ android:layout_weight="1"/>
+
+ </LinearLayout>
+
+ <TextView android:id="@+id/anchor_lower"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/text_view_hint"
+ android:layout_weight="1"/>
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/progressbar_layout.xml b/tests/tests/widget/res/layout/progressbar_layout.xml
new file mode 100644
index 0000000..a1786b8
--- /dev/null
+++ b/tests/tests/widget/res/layout/progressbar_layout.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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="match_parent"
+ android:layout_height="match_parent">
+
+ <ProgressBar
+ android:id="@+id/progress_tint"
+ android:progressTint="@android:color/white"
+ android:progressTintMode="src_over"
+ android:progressBackgroundTint="@android:color/white"
+ android:progressBackgroundTintMode="src_over"
+ android:secondaryProgressTint="@android:color/white"
+ android:secondaryProgressTintMode="src_over"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@android:style/Widget.ProgressBar.Horizontal" />
+
+ <ProgressBar
+ android:id="@+id/indeterminate_tint"
+ android:indeterminateTint="@android:color/white"
+ android:indeterminateTintMode="src_over"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@android:style/Widget.ProgressBar.Large" />
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/radiogroup_1.xml b/tests/tests/widget/res/layout/radiogroup_1.xml
new file mode 100644
index 0000000..1e9db83
--- /dev/null
+++ b/tests/tests/widget/res/layout/radiogroup_1.xml
@@ -0,0 +1,25 @@
+<?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.
+-->
+
+<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:layout_weight="0.5"
+ android:layout_gravity="bottom"
+ android:layout_margin="5px">
+</RadioGroup>
+
diff --git a/tests/tests/widget/res/layout/ratingbar_layout.xml b/tests/tests/widget/res/layout/ratingbar_layout.xml
new file mode 100644
index 0000000..acc7fa8
--- /dev/null
+++ b/tests/tests/widget/res/layout/ratingbar_layout.xml
@@ -0,0 +1,31 @@
+<?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="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <RatingBar android:id="@+id/ratingbar_constructor"
+ android:isIndicator="false"
+ android:numStars="50"
+ android:rating="1.2"
+ android:stepSize="0.2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"/>
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/relative_layout.xml b/tests/tests/widget/res/layout/relative_layout.xml
new file mode 100644
index 0000000..db4b2e8
--- /dev/null
+++ b/tests/tests/widget/res/layout/relative_layout.xml
@@ -0,0 +1,258 @@
+<?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.
+-->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <RelativeLayout
+ android:id="@+id/relative_sublayout_attrs"
+ android:background="@drawable/blue"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <!-- view1, centered within its parent. -->
+ <TextView
+ android:id="@+id/relative_view1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true"
+ android:text="@string/relative_view1"/>
+
+ <!-- view2, below view1 and has same left position with view1. -->
+ <TextView
+ android:id="@+id/relative_view2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/relative_view1"
+ android:layout_alignLeft="@id/relative_view1"
+ android:text="@string/relative_view2"/>
+
+ <!-- view3, has same top position with view1 and same bottom position with view2,
+ and on the right of view1. -->
+ <TextView
+ android:id="@+id/relative_view3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignTop="@id/relative_view1"
+ android:layout_alignBottom="@id/relative_view2"
+ android:layout_toRightOf="@id/relative_view1"
+ android:text="@string/relative_view3"/>
+
+ <!-- view4, has same right position with view3 and above view3. -->
+ <TextView
+ android:id="@+id/relative_view4"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignRight="@id/relative_view3"
+ android:layout_above="@id/relative_view3"
+ android:text="@string/relative_view4"/>
+
+ <!-- view5 goes on the left-bottom -->
+ <TextView
+ android:id="@+id/relative_view5"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentLeft="true"
+ android:text="@string/relative_view5"/>
+
+ <!-- view6 goes on the top-right -->
+ <TextView
+ android:id="@+id/relative_view6"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentTop="true"
+ android:layout_alignParentRight="true"
+ android:text="@string/relative_view6"/>
+
+ <!-- view7, has same baseline with view6 and centered horizontally within its parent. -->
+ <TextView
+ android:id="@+id/relative_view7"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignBaseline="@id/relative_view6"
+ android:layout_centerHorizontal="true"
+ android:text="@string/relative_view7"/>
+
+ <!-- view8, centered vertically within its parent and on the left of view1. -->
+ <TextView
+ android:id="@+id/relative_view8"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toLeftOf="@id/relative_view1"
+ android:layout_centerVertical="true"
+ android:text="@string/relative_view8"/>
+
+ <!-- view9, has same top and bottom position with view3 and same left position
+ with its parent. -->
+ <TextView
+ android:id="@+id/relative_view9"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignLeft="@id/gravity_bottom"
+ android:layout_alignTop="@id/relative_view3"
+ android:layout_alignBottom="@id/relative_view3"
+ android:layout_alignWithParentIfMissing="true"
+ android:text="@string/relative_view9"/>
+
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:id="@+id/relative_sublayout_gravity"
+ android:background="@drawable/yellow"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <!-- view10 -->
+ <TextView
+ android:id="@+id/relative_view10"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/relative_view10"/>
+
+ <!-- view11 -->
+ <TextView
+ android:id="@+id/relative_view11"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/relative_view10"
+ android:text="@string/relative_view11"/>
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:id="@+id/relative_sublayout_ignore_gravity"
+ android:background="@drawable/red"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:ignoreGravity="@+id/relative_view12"
+ android:gravity="right">
+
+ <!-- view12 -->
+ <TextView
+ android:id="@id/relative_view12"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/relative_view12"/>
+
+ <!-- view13 -->
+ <TextView
+ android:id="@+id/relative_view13"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/relative_view13"/>
+ </RelativeLayout>
+
+ <Spinner
+ android:id="@+id/spinner1"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:prompt="@string/text_view_hello"/>
+
+ <RelativeLayout
+ android:id="@+id/relative_sublayout_attrs_2"
+ android:background="@drawable/blue"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <!-- view21, centered within its parent. -->
+ <TextView
+ android:id="@+id/relative_view21"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true"
+ android:text="@string/relative_view1"/>
+
+ <!-- view22, below view1 and has same start position with view21. -->
+ <TextView
+ android:id="@+id/relative_view22"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/relative_view21"
+ android:layout_alignStart="@id/relative_view21"
+ android:text="@string/relative_view2"/>
+
+ <!-- view23, has same top position with view21 and same bottom position with view22,
+ and on the end of view1. -->
+ <TextView
+ android:id="@+id/relative_view23"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignTop="@id/relative_view21"
+ android:layout_alignBottom="@id/relative_view22"
+ android:layout_toEndOf="@id/relative_view21"
+ android:text="@string/relative_view3"/>
+
+ <!-- view24, has same end position with view23 and above view23. -->
+ <TextView
+ android:id="@+id/relative_view24"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignEnd="@id/relative_view23"
+ android:layout_above="@id/relative_view23"
+ android:text="@string/relative_view4"/>
+
+ <!-- view25 goes on the start-bottom -->
+ <TextView
+ android:id="@+id/relative_view25"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentStart="true"
+ android:text="@string/relative_view5"/>
+
+ <!-- view26 goes on the top-end -->
+ <TextView
+ android:id="@+id/relative_view26"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentTop="true"
+ android:layout_alignParentEnd="true"
+ android:text="@string/relative_view6"/>
+
+ <!-- view27, has same baseline with view26 and centered horizontally within its parent. -->
+ <TextView
+ android:id="@+id/relative_view27"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignBaseline="@id/relative_view26"
+ android:layout_centerHorizontal="true"
+ android:text="@string/relative_view7"/>
+
+ <!-- view28, centered vertically within its parent and on the start of view21. -->
+ <TextView
+ android:id="@+id/relative_view28"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toStartOf="@id/relative_view21"
+ android:layout_centerVertical="true"
+ android:text="@string/relative_view8"/>
+
+ <!-- view29, has same top and bottom position with view23 and same start position
+ with its parent. -->
+ <TextView
+ android:id="@+id/relative_view29"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignStart="@id/gravity_bottom"
+ android:layout_alignTop="@id/relative_view23"
+ android:layout_alignBottom="@id/relative_view23"
+ android:layout_alignWithParentIfMissing="true"
+ android:text="@string/relative_view9"/>
+
+ </RelativeLayout>
+
+</RelativeLayout>
diff --git a/tests/tests/widget/res/layout/remote_view_test_bad_1.xml b/tests/tests/widget/res/layout/remote_view_test_bad_1.xml
new file mode 100644
index 0000000..a65a5ec
--- /dev/null
+++ b/tests/tests/widget/res/layout/remote_view_test_bad_1.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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:id="@+id/linear"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <EditText android:id="@+id/edit"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/remote_view_test_bad_2.xml b/tests/tests/widget/res/layout/remote_view_test_bad_2.xml
new file mode 100644
index 0000000..92623d8
--- /dev/null
+++ b/tests/tests/widget/res/layout/remote_view_test_bad_2.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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:id="@+id/linear"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <WebView android:id="@+id/web"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/remote_view_test_good.xml b/tests/tests/widget/res/layout/remote_view_test_good.xml
new file mode 100644
index 0000000..3df9d62
--- /dev/null
+++ b/tests/tests/widget/res/layout/remote_view_test_good.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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:id="@+id/linear"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <TextView android:id="@+id/text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <ImageView android:id="@+id/image"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <FrameLayout android:id="@+id/frame"
+ android:layout_width="10dip"
+ android:layout_height="10dip" />
+
+ <RelativeLayout android:id="@+id/relative"
+ android:layout_width="10dip"
+ android:layout_height="10dip" />
+
+ <AbsoluteLayout android:id="@+id/absolute"
+ android:layout_width="10dip"
+ android:layout_height="10dip" />
+
+ <ProgressBar android:id="@+id/progress"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <ImageButton android:id="@+id/image_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <Button android:id="@+id/button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/remoteviews_good.xml b/tests/tests/widget/res/layout/remoteviews_good.xml
new file mode 100644
index 0000000..8fdbc64
--- /dev/null
+++ b/tests/tests/widget/res/layout/remoteviews_good.xml
@@ -0,0 +1,56 @@
+<?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:id="@+id/remoteViews_good"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <LinearLayout android:id="@+id/remoteView_linear"
+ android:layout_width="10dip"
+ android:layout_height="10dip" />
+
+ <TextView android:id="@+id/remoteView_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <ImageView android:id="@+id/remoteView_image"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <FrameLayout android:id="@+id/remoteView_frame"
+ android:layout_width="10dip"
+ android:layout_height="10dip" />
+
+ <RelativeLayout android:id="@+id/remoteView_relative"
+ android:layout_width="10dip"
+ android:layout_height="10dip" />
+
+ <AbsoluteLayout android:id="@+id/remoteView_absolute"
+ android:layout_width="10dip"
+ android:layout_height="10dip" />
+
+ <ProgressBar android:id="@+id/remoteView_progress"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="?android:attr/progressBarStyleHorizontal" />
+
+ <Chronometer android:id="@+id/remoteView_chronometer"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/remoteviews_host.xml b/tests/tests/widget/res/layout/remoteviews_host.xml
new file mode 100644
index 0000000..ace5903
--- /dev/null
+++ b/tests/tests/widget/res/layout/remoteviews_host.xml
@@ -0,0 +1,22 @@
+<?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:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/remoteView_host">
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/scrollview_layout.xml b/tests/tests/widget/res/layout/scrollview_layout.xml
new file mode 100644
index 0000000..3c9a474
--- /dev/null
+++ b/tests/tests/widget/res/layout/scrollview_layout.xml
@@ -0,0 +1,105 @@
+<?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.
+-->
+
+<android.widget.cts.MyScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/scroll_view"
+ android:layout_width="100dip"
+ android:layout_height="100dip">
+
+ <LinearLayout
+ android:orientation="vertical"
+ android:layout_width="250dip"
+ android:layout_height="wrap_content">
+
+ <Button
+ android:id="@+id/first_child"
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_1"/>
+
+ <Button
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_2"/>
+
+ <Button
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_3"/>
+
+ <Button
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_1"/>
+
+ <Button
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_2"/>
+
+ <Button
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_3"/>
+
+ <Button
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_1"/>
+
+ <Button
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_2"/>
+
+ <Button
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_3"/>
+
+ <Button
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_1"/>
+
+ <Button
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_2"/>
+
+ <Button
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_3"/>
+
+ <Button
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_1"/>
+
+ <Button
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_2"/>
+
+ <Button
+ android:id="@+id/last_child"
+ android:layout_width="250dip"
+ android:layout_height="100dip"
+ android:text="@string/vertical_text_3"/>
+ </LinearLayout>
+
+</android.widget.cts.MyScrollView>
diff --git a/tests/tests/widget/res/layout/seekbar_layout.xml b/tests/tests/widget/res/layout/seekbar_layout.xml
new file mode 100644
index 0000000..5c311fd
--- /dev/null
+++ b/tests/tests/widget/res/layout/seekbar_layout.xml
@@ -0,0 +1,35 @@
+<?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="match_parent"
+ android:layout_height="match_parent">
+
+ <SeekBar android:id="@+id/seekBar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:max="100"
+ android:progress="50"
+ android:secondaryProgress="75" />
+
+ <SeekBar
+ android:id="@+id/thumb_tint"
+ android:thumbTint="@android:color/white"
+ android:thumbTintMode="src_over"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/simple_dropdown_item_1line.xml b/tests/tests/widget/res/layout/simple_dropdown_item_1line.xml
new file mode 100644
index 0000000..9a044b1
--- /dev/null
+++ b/tests/tests/widget/res/layout/simple_dropdown_item_1line.xml
@@ -0,0 +1,23 @@
+<?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.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/text1"
+ style="?android:attr/dropDownItemStyle"
+ android:textAppearance="?android:attr/textAppearanceLargeInverse"
+ android:singleLine="true"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/listPreferredItemHeight" />
diff --git a/tests/tests/widget/res/layout/simple_spinner_item.xml b/tests/tests/widget/res/layout/simple_spinner_item.xml
new file mode 100644
index 0000000..d52922a
--- /dev/null
+++ b/tests/tests/widget/res/layout/simple_spinner_item.xml
@@ -0,0 +1,21 @@
+<?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.
+-->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/text1"
+ style="?android:attr/spinnerItemStyle"
+ android:singleLine="true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
diff --git a/tests/tests/widget/res/layout/sliding_drawer_layout.xml b/tests/tests/widget/res/layout/sliding_drawer_layout.xml
new file mode 100644
index 0000000..3f84d46
--- /dev/null
+++ b/tests/tests/widget/res/layout/sliding_drawer_layout.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <SlidingDrawer
+ android:id="@+id/drawer"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:animateOnClick="false"
+
+ android:handle="@+id/handle"
+ android:content="@+id/content">
+
+ <ImageView
+ android:id="@id/handle"
+ android:background="#FF00FF00"
+ android:layout_width="88dip"
+ android:layout_height="44dip" />
+
+ <TextView
+ android:id="@id/content"
+ android:background="#FF0000FF"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:text="@string/hello_world" />
+
+ </SlidingDrawer>
+
+</RelativeLayout>
diff --git a/tests/tests/widget/res/layout/tabhost_layout.xml b/tests/tests/widget/res/layout/tabhost_layout.xml
new file mode 100644
index 0000000..1bae57a
--- /dev/null
+++ b/tests/tests/widget/res/layout/tabhost_layout.xml
@@ -0,0 +1,45 @@
+<?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.
+-->
+
+<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/tabhost"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+
+ <TabWidget android:id="@android:id/tabs"
+ android:layout_width="match_parent"
+ android:layout_height="68dip"
+ android:paddingLeft="1dip"
+ android:paddingRight="1dip"
+ android:paddingTop="4dip"
+ />
+
+ <FrameLayout android:id="@android:id/tabcontent"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1">
+
+ <TextView android:id="@+id/tabhost_textview"
+ android:password="true"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/hello_world"/>
+
+ <ListView android:id="@+id/tabhost_listview"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+ </FrameLayout>
+</TabHost>
diff --git a/tests/tests/widget/res/layout/table_layout_1.xml b/tests/tests/widget/res/layout/table_layout_1.xml
new file mode 100644
index 0000000..0896cd2
--- /dev/null
+++ b/tests/tests/widget/res/layout/table_layout_1.xml
@@ -0,0 +1,36 @@
+<?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.
+-->
+
+<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/table1"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:collapseColumns="0"
+ android:stretchColumns="2">
+
+ <TableRow>
+ <TextView
+ android:text="@string/table_layout_first"
+ android:padding="3dip" />
+ <TextView
+ android:text="@string/table_layout_second"
+ android:padding="3dip" />
+ <TextView
+ android:text="@string/table_layout_third"
+ android:padding="3dip" />
+ </TableRow>
+</TableLayout>
+
diff --git a/tests/tests/widget/res/layout/table_layout_2.xml b/tests/tests/widget/res/layout/table_layout_2.xml
new file mode 100644
index 0000000..84750fc
--- /dev/null
+++ b/tests/tests/widget/res/layout/table_layout_2.xml
@@ -0,0 +1,37 @@
+<?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.
+-->
+
+<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/table2"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:shrinkColumns="1">
+
+ <TableRow>
+ <TextView
+ android:layout_column="1"
+ android:text="@string/table_layout_long"
+ android:padding="3dip" />
+ <TextView
+ android:layout_span="2"
+ android:text="@string/table_layout_second"
+ android:padding="3dip" />
+ <TextView
+ android:text="@string/table_layout_third"
+ android:padding="3dip" />
+ </TableRow>
+</TableLayout>
+
diff --git a/tests/tests/widget/res/layout/textview_autolink.xml b/tests/tests/widget/res/layout/textview_autolink.xml
new file mode 100644
index 0000000..53d89f3
--- /dev/null
+++ b/tests/tests/widget/res/layout/textview_autolink.xml
@@ -0,0 +1,65 @@
+<?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.
+-->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView android:id="@+id/autolink_default"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+ <TextView android:id="@+id/autolink_web"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:autoLink="web"/>
+
+ <TextView android:id="@+id/autolink_email"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:autoLink="email"/>
+
+ <TextView android:id="@+id/autolink_phone"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:autoLink="phone"/>
+
+ <TextView android:id="@+id/autolink_all"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:autoLink="all"/>
+
+ <TextView android:id="@+id/autolink_compound1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:autoLink="web|email"/>
+
+ <TextView android:id="@+id/autolink_compound2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:autoLink="web|phone"/>
+
+ <TextView android:id="@+id/autolink_compound3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:autoLink="email|phone"/>
+
+ <TextView android:id="@+id/autolink_compound4"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:autoLink="phone|all"/>
+
+</FrameLayout>
diff --git a/tests/tests/widget/res/layout/textview_ellipsize.xml b/tests/tests/widget/res/layout/textview_ellipsize.xml
new file mode 100644
index 0000000..0fc5779
--- /dev/null
+++ b/tests/tests/widget/res/layout/textview_ellipsize.xml
@@ -0,0 +1,45 @@
+<?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="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView android:id="@+id/ellipsize_default"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+ <TextView android:id="@+id/ellipsize_none"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:ellipsize="none"/>
+
+ <TextView android:id="@+id/ellipsize_start"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:ellipsize="start"/>
+
+ <TextView android:id="@+id/ellipsize_middle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:ellipsize="middle"/>
+
+ <TextView android:id="@+id/ellipsize_end"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:ellipsize="end"/>
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/textview_gravity.xml b/tests/tests/widget/res/layout/textview_gravity.xml
new file mode 100644
index 0000000..a4a7592
--- /dev/null
+++ b/tests/tests/widget/res/layout/textview_gravity.xml
@@ -0,0 +1,50 @@
+<?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="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView android:id="@+id/gravity_default"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+ <TextView android:id="@+id/gravity_bottom"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="bottom"/>
+
+ <TextView android:id="@+id/gravity_right"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="right"/>
+
+ <TextView android:id="@+id/gravity_fill"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="fill"/>
+
+ <TextView android:id="@+id/gravity_center"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"/>
+
+ <TextView android:id="@+id/gravity_center_vertical_right"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_vertical|right"/>
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/textview_hint_linksclickable_freezestext.xml b/tests/tests/widget/res/layout/textview_hint_linksclickable_freezestext.xml
new file mode 100644
index 0000000..a22e429
--- /dev/null
+++ b/tests/tests/widget/res/layout/textview_hint_linksclickable_freezestext.xml
@@ -0,0 +1,60 @@
+<?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="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView android:id="@+id/hint_linksClickable_freezesText_default"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+ <TextView android:id="@+id/hint_blank"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint=""/>
+
+ <TextView android:id="@+id/hint_string"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/text_view_simple_hint"/>
+
+ <TextView android:id="@+id/hint_resid"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/text_view_hint"/>
+
+ <TextView android:id="@+id/linksClickable_true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:linksClickable="true"/>
+
+ <TextView android:id="@+id/linksClickable_false"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:linksClickable="false"/>
+
+ <TextView android:id="@+id/freezesText_true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:freezesText="true"/>
+
+ <TextView android:id="@+id/freezesText_false"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:freezesText="false"/>
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/textview_layout.xml b/tests/tests/widget/res/layout/textview_layout.xml
new file mode 100644
index 0000000..c2cd159
--- /dev/null
+++ b/tests/tests/widget/res/layout/textview_layout.xml
@@ -0,0 +1,219 @@
+<?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="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/layout_textviewtest">
+
+ <ScrollView android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <LinearLayout android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <TextView android:id="@+id/textview_textAttr"
+ android:text="@string/text_view_hello"
+ android:textColor="@drawable/black"
+ android:textColorHighlight="@drawable/yellow"
+ android:textColorHint="@drawable/red"
+ android:textColorLink="@drawable/blue"
+ android:textScaleX="1.2"
+ android:typeface="normal"
+ android:textSize="20px"
+ android:textStyle="normal"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+ <TextView android:id="@+id/textview_password"
+ android:password="true"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+ <TextView android:id="@+id/textview_singleLine"
+ android:singleLine="true"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+ <TextView android:id="@+id/textview_text"
+ android:text="@string/text_view_hello"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+ <TextView android:id="@+id/textview_text_two_lines"
+ android:text="@string/text_view_hello_two_lines"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+ <android.widget.cts.MockTextView
+ android:id="@+id/mock_textview_left"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:requiresFadingEdge="horizontal"
+ android:singleLine="true"
+ android:text="@string/long_text"
+ android:gravity="left"
+ />
+
+ <android.widget.cts.MockTextView
+ android:id="@+id/mock_textview_right"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:requiresFadingEdge="horizontal"
+ android:singleLine="true"
+ android:text="@string/long_text"
+ android:gravity="right"
+ />
+
+ <android.widget.cts.MockTextView
+ android:id="@+id/mock_textview_center"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:requiresFadingEdge="horizontal"
+ android:singleLine="true"
+ android:text="@string/long_text"
+ android:gravity="center"
+ />
+ </LinearLayout>
+
+ </ScrollView>
+
+ <TextView android:id="@+id/textview_ltr"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"/>
+
+ <TextView android:id="@+id/textview_rtl"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"/>
+
+ <TextView android:id="@+id/textview_drawable_1_1"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:drawableLeft="@drawable/icon_blue"
+ android:drawableRight="@drawable/icon_red"
+ android:drawableTop="@drawable/icon_green"
+ android:drawableBottom="@drawable/icon_yellow"
+ />
+
+ <TextView android:id="@+id/textview_drawable_1_2"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:drawableLeft="@drawable/icon_blue"
+ android:drawableRight="@drawable/icon_red"
+ android:drawableTop="@drawable/icon_green"
+ android:drawableBottom="@drawable/icon_yellow"
+ android:layoutDirection="rtl"
+ />
+
+ <TextView android:id="@+id/textview_drawable_2_1"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:drawableStart="@drawable/icon_blue"
+ android:drawableEnd="@drawable/icon_red"
+ android:drawableTop="@drawable/icon_green"
+ android:drawableBottom="@drawable/icon_yellow"
+ />
+
+ <TextView android:id="@+id/textview_drawable_2_2"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:drawableStart="@drawable/icon_blue"
+ android:drawableEnd="@drawable/icon_red"
+ android:drawableTop="@drawable/icon_green"
+ android:drawableBottom="@drawable/icon_yellow"
+ android:layoutDirection="rtl"
+ />
+
+ <TextView android:id="@+id/textview_drawable_3_1"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:drawableLeft="@drawable/icon_black"
+ android:drawableRight="@drawable/icon_black"
+ android:drawableStart="@drawable/icon_blue"
+ android:drawableEnd="@drawable/icon_red"
+ android:drawableTop="@drawable/icon_green"
+ android:drawableBottom="@drawable/icon_yellow"
+ />
+
+ <TextView android:id="@+id/textview_drawable_3_2"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:drawableLeft="@drawable/icon_black"
+ android:drawableRight="@drawable/icon_black"
+ android:drawableStart="@drawable/icon_blue"
+ android:drawableEnd="@drawable/icon_red"
+ android:drawableTop="@drawable/icon_green"
+ android:drawableBottom="@drawable/icon_yellow"
+ android:layoutDirection="rtl"
+ />
+
+
+ <LinearLayout android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layoutDirection="ltr">
+
+ <TextView android:id="@+id/textview_drawable_4_1"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:drawableStart="@drawable/icon_blue"
+ android:drawableEnd="@drawable/icon_red"
+ android:drawableTop="@drawable/icon_green"
+ android:drawableBottom="@drawable/icon_yellow"
+ />
+
+ <TextView android:id="@+id/textview_drawable_5_1"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:drawableLeft="@drawable/icon_black"
+ android:drawableRight="@drawable/icon_black"
+ android:drawableStart="@drawable/icon_blue"
+ android:drawableEnd="@drawable/icon_red"
+ android:drawableTop="@drawable/icon_green"
+ android:drawableBottom="@drawable/icon_yellow"
+ />
+
+ </LinearLayout>
+
+ <LinearLayout android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layoutDirection="rtl">
+
+ <TextView android:id="@+id/textview_drawable_4_2"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:drawableStart="@drawable/icon_blue"
+ android:drawableEnd="@drawable/icon_red"
+ android:drawableTop="@drawable/icon_green"
+ android:drawableBottom="@drawable/icon_yellow"
+ />
+
+ <TextView android:id="@+id/textview_drawable_5_2"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:drawableLeft="@drawable/icon_black"
+ android:drawableRight="@drawable/icon_black"
+ android:drawableStart="@drawable/icon_blue"
+ android:drawableEnd="@drawable/icon_red"
+ android:drawableTop="@drawable/icon_green"
+ android:drawableBottom="@drawable/icon_yellow"
+ />
+
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/textview_selectallonfocus.xml b/tests/tests/widget/res/layout/textview_selectallonfocus.xml
new file mode 100644
index 0000000..b1c3682
--- /dev/null
+++ b/tests/tests/widget/res/layout/textview_selectallonfocus.xml
@@ -0,0 +1,43 @@
+<?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="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView android:id="@+id/selectAllOnFocus_default"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:focusable="true"/>
+
+ <TextView android:id="@+id/selectAllOnFocus_true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:selectAllOnFocus="true"
+ android:focusable="true"/>
+
+ <TextView android:id="@+id/selectAllOnFocus_false"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:selectAllOnFocus="false"
+ android:focusable="true"/>
+
+ <TextView android:id="@+id/selectAllOnFocus_dummy"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:focusable="true"/>
+
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/timepicker.xml b/tests/tests/widget/res/layout/timepicker.xml
new file mode 100644
index 0000000..352f69b
--- /dev/null
+++ b/tests/tests/widget/res/layout/timepicker.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+
+<TimePicker xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
diff --git a/tests/tests/widget/res/layout/togglebutton_layout.xml b/tests/tests/widget/res/layout/togglebutton_layout.xml
new file mode 100644
index 0000000..a6c08e1
--- /dev/null
+++ b/tests/tests/widget/res/layout/togglebutton_layout.xml
@@ -0,0 +1,44 @@
+<?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.
+ -->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <LinearLayout
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <ToggleButton android:id="@+id/toggle1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <ToggleButton android:id="@+id/toggle2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <ToggleButton android:id="@+id/button_tint"
+ android:buttonTint="@android:color/white"
+ android:buttonTintMode="src_over"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ </LinearLayout>
+
+</ScrollView>
diff --git a/tests/tests/widget/res/layout/twolinelistitem.xml b/tests/tests/widget/res/layout/twolinelistitem.xml
new file mode 100644
index 0000000..ec256c1
--- /dev/null
+++ b/tests/tests/widget/res/layout/twolinelistitem.xml
@@ -0,0 +1,32 @@
+<?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.
+-->
+
+<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/twoLineListItem">
+
+ <TextView android:id="@android:id/text1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/twolinelistitem_test_text1"/>
+
+ <TextView android:id="@android:id/text2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/twolinelistitem_test_text2"/>
+
+</TwoLineListItem>
diff --git a/tests/tests/widget/res/layout/urlspan_layout.xml b/tests/tests/widget/res/layout/urlspan_layout.xml
new file mode 100644
index 0000000..2ca95ac
--- /dev/null
+++ b/tests/tests/widget/res/layout/urlspan_layout.xml
@@ -0,0 +1,30 @@
+<?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="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView android:id="@+id/url"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingLeft="4dip"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:text="@string/text_view_hello"/>
+
+</LinearLayout>
diff --git a/tests/src/android/widget/cts/ListViewStubActivity.java b/tests/tests/widget/res/layout/videoview_layout.xml
similarity index 61%
copy from tests/src/android/widget/cts/ListViewStubActivity.java
copy to tests/tests/widget/res/layout/videoview_layout.xml
index 77c3e5e..9b042cb 100644
--- a/tests/src/android/widget/cts/ListViewStubActivity.java
+++ b/tests/tests/widget/res/layout/videoview_layout.xml
@@ -1,4 +1,5 @@
-/*
+<?xml version="1.0" encoding="utf-8"?>
+<!--
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -12,19 +13,14 @@
* 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:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
-package android.widget.cts;
-
-import com.android.cts.stub.R;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-public class ListViewStubActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.listview_layout);
- }
-}
+ <VideoView
+ android:id="@+id/videoview"
+ android:layout_width="160px"
+ android:layout_height="120px"/>
+</LinearLayout>
diff --git a/tests/tests/widget/res/layout/viewanimator_layout.xml b/tests/tests/widget/res/layout/viewanimator_layout.xml
new file mode 100644
index 0000000..96b2483
--- /dev/null
+++ b/tests/tests/widget/res/layout/viewanimator_layout.xml
@@ -0,0 +1,54 @@
+<?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.
+ -->
+
+<!-- Demonstrates using a relative layout to create a form -->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:focusable="true"
+ android:background="@drawable/blue">
+
+ <TextView android:id="@+id/label"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentTop="true"
+ android:layout_alignParentLeft="true"
+ android:text="@string/viewanimator_test"/>
+
+ <EditText android:id="@+id/entry"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@android:drawable/editbox_background"
+ android:layout_below="@id/label"/>
+
+ <Button android:id="@+id/cancel"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/entry"
+ android:layout_alignParentRight="true"
+ android:layout_marginLeft="10px"
+ android:text="@string/id_cancel" />
+
+ <Button android:id="@+id/ok"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toLeftOf="@id/cancel"
+ android:layout_alignTop="@id/cancel"
+ android:text="@string/id_ok" />
+
+</RelativeLayout>
+
diff --git a/tests/tests/widget/res/layout/viewflipper_layout.xml b/tests/tests/widget/res/layout/viewflipper_layout.xml
new file mode 100644
index 0000000..6480379
--- /dev/null
+++ b/tests/tests/widget/res/layout/viewflipper_layout.xml
@@ -0,0 +1,44 @@
+<?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:orientation="vertical"
+ android:padding="10dip"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <ViewFlipper android:id="@+id/viewflipper_test"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:flipInterval="1000"
+ android:layout_marginBottom="20dip" >
+ <TextView android:id="@+id/viewflipper_textview1"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal"
+ android:textSize="26sp"
+ android:visibility="gone"
+ android:text="@string/hello_world"/>
+ <TextView android:id="@+id/viewflipper_textview2"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal"
+ android:textSize="26sp"
+ android:visibility="gone"
+ android:text="@string/hello_android"/>
+ </ViewFlipper>
+</LinearLayout>
+
diff --git a/tests/tests/widget/res/layout/viewgrouptest_stub.xml b/tests/tests/widget/res/layout/viewgrouptest_stub.xml
new file mode 100644
index 0000000..ee59126
--- /dev/null
+++ b/tests/tests/widget/res/layout/viewgrouptest_stub.xml
@@ -0,0 +1,33 @@
+<?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.
+ -->
+
+<android.widget.cts.MockLinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/mocklinearlayout">
+
+ <!-- view1 goes on top -->
+ <TextView
+ android:id="@+id/viewgrouptest_stub"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ />
+
+</android.widget.cts.MockLinearLayout>
+
diff --git a/tests/tests/widget/res/layout/viewswitcher_layout.xml b/tests/tests/widget/res/layout/viewswitcher_layout.xml
new file mode 100644
index 0000000..933dc32
--- /dev/null
+++ b/tests/tests/widget/res/layout/viewswitcher_layout.xml
@@ -0,0 +1,26 @@
+<?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:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <ViewSwitcher android:id="@+id/viewswitcher_test"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+</LinearLayout>
+
diff --git a/tests/src/android/widget/cts/StubActivity.java b/tests/tests/widget/res/layout/zoombutton_layout.xml
similarity index 64%
copy from tests/src/android/widget/cts/StubActivity.java
copy to tests/tests/widget/res/layout/zoombutton_layout.xml
index fe4002c..1b1e0b2 100644
--- a/tests/src/android/widget/cts/StubActivity.java
+++ b/tests/tests/widget/res/layout/zoombutton_layout.xml
@@ -1,5 +1,6 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
+<?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.
@@ -12,15 +13,10 @@
* 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.
- */
+ -->
+<ZoomButton xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/zoombutton_test"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+/>
-package android.widget.cts;
-
-import android.app.Activity;
-
-/**
- * Stub activity for helping test. It's an empty activity.
- */
-public class StubActivity extends Activity {
-
-}
diff --git a/tests/tests/widget/res/raw/scenery.jpg b/tests/tests/widget/res/raw/scenery.jpg
new file mode 100644
index 0000000..7d1f5e1
--- /dev/null
+++ b/tests/tests/widget/res/raw/scenery.jpg
Binary files differ
diff --git a/tests/tests/widget/res/raw/testimage.jpg b/tests/tests/widget/res/raw/testimage.jpg
new file mode 100644
index 0000000..d3dae03
--- /dev/null
+++ b/tests/tests/widget/res/raw/testimage.jpg
Binary files differ
diff --git a/tests/tests/widget/res/raw/testvideo.3gp b/tests/tests/widget/res/raw/testvideo.3gp
new file mode 100644
index 0000000..1503272
--- /dev/null
+++ b/tests/tests/widget/res/raw/testvideo.3gp
Binary files differ
diff --git a/tests/tests/widget/res/values/arrays.xml b/tests/tests/widget/res/values/arrays.xml
new file mode 100644
index 0000000..71e0133
--- /dev/null
+++ b/tests/tests/widget/res/values/arrays.xml
@@ -0,0 +1,57 @@
+<?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.
+ -->
+
+<resources>
+ <item type="integer" name="reference" format="integer">101</item>
+
+ <string-array name="strings">
+ <item>zero</item>
+ <item>1</item>
+ <item>@string/reference</item>
+ </string-array>
+
+ <integer-array name="integers">
+ <item>0</item>
+ <item>1</item>
+ <item>@integer/reference</item>
+ </integer-array>
+
+ <array name="difficultyLevel">
+ <item>Easy</item>
+ <item>Medium</item>
+ <item>Hard</item>
+ </array>
+
+ <string-array name="string">
+ <item>Test String 1</item>
+ <item>Test String 2</item>
+ <item>Test String 3</item>
+ </string-array>
+
+ <integer-array name="table_row_layout">
+ <item>1</item>
+ <item>2</item>
+ <item>3</item>
+ <item>4</item>
+ <item>5</item>
+ <item>6</item>
+ <item>7</item>
+ <item>8</item>
+ <item>9</item>
+ <item>10</item>
+ </integer-array>
+</resources>
diff --git a/tests/tests/widget/res/values/attrs.xml b/tests/tests/widget/res/values/attrs.xml
new file mode 100644
index 0000000..4c3d9db
--- /dev/null
+++ b/tests/tests/widget/res/values/attrs.xml
@@ -0,0 +1,145 @@
+<?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.
+ -->
+
+<resources>
+ <declare-styleable name="Style1">
+ <attr name="Type1" format="integer">
+ <enum name="type" value="28" />
+ <enum name="data" value="0xff00ff00" />
+ <enum name="asset_cookie" value="0" />
+ <enum name="resource_id" value="0" />
+ <enum name="changing_config" value="0" />
+ </attr>
+ <attr name="Type2" format="integer">
+ <enum name="type" value="28" />
+ <enum name="data" value="0xff0000ff" />
+ <enum name="asset_cookie" value="0" />
+ <enum name="resource_id" value="0" />
+ <enum name="changing_config" value="0" />
+ </attr>
+ </declare-styleable>
+ <attr name="type1" format="boolean"/>
+ <attr name="type2" format="boolean"/>
+ <attr name="type3" format="color"/>
+ <attr name="type4" format="reference|color"/>
+ <attr name="type5" format="dimension"/>
+ <attr name="type6" format="dimension"/>
+ <attr name="type7" format="dimension"/>
+ <attr name="type8" format="reference"/>
+ <attr name="type9" format="float"/>
+ <attr name="type10" format="fraction"/>
+ <attr name="type11" format="integer"/>
+ <attr name="type12" format="integer"/>
+ <attr name="type13" format="reference|string"/>
+ <attr name="type14" format="string"/>
+ <attr name="type15" format="reference"/>
+ <attr name="type16" format="string"/>
+ <declare-styleable name="style1">
+ <attr name="type1"/>
+ <attr name="type2"/>
+ <attr name="type3"/>
+ <attr name="type4"/>
+ <attr name="type5"/>
+ <attr name="type6"/>
+ <attr name="type7"/>
+ <attr name="type8"/>
+ <attr name="type9"/>
+ <attr name="type10"/>
+ <attr name="type11"/>
+ <attr name="type12"/>
+ <attr name="type13"/>
+ <attr name="type14"/>
+ <attr name="type15"/>
+ <attr name="type16"/>
+ </declare-styleable>
+ <attr name="testEnum">
+ <enum name="val1" value="1" />
+ <enum name="val2" value="2" />
+ <enum name="val10" value="10" />
+ </attr>
+ <attr name="testFlags">
+ <flag name="bit1" value="0x1" />
+ <flag name="bit2" value="0x2" />
+ <flag name="bit31" value="0x40000000" />
+ </attr>
+ <attr name="testString" format="string" />
+ <declare-styleable name="EnumStyle">
+ <attr name="testEnum" />
+ </declare-styleable>
+ <declare-styleable name="FlagStyle">
+ <attr name="testFlags" />
+ </declare-styleable>
+ <declare-styleable name="TestConfig">
+ <attr name="testString" />
+ </declare-styleable>
+ <!-- Size of text. Recommended dimension type for text is "sp" for scaled-pixels (example: 15sp).
+ Supported values include the following:<p/>
+ <ul>
+ <li><b>px</b> Pixels</li>
+ <li><b>sp</b> Scaled pixels (scaled to relative pixel size on screen). See {@link android.util.DisplayMetrics} for more information.</li>
+ <li><b>pt</b> Points</li>
+ <li><b>dip</b> Device independent pixels. See {@link android.util.DisplayMetrics} for more information.</li>
+ </ul>
+ -->
+ <attr name="textSize" format="dimension" />
+ <attr name="typeface">
+ <enum name="normal" value="0" />
+ <enum name="sans" value="1" />
+ <enum name="serif" value="2" />
+ <enum name="monospace" value="3" />
+ </attr>
+ <!-- Default text typeface style. -->
+ <attr name="textStyle">
+ <flag name="normal" value="0" />
+ <flag name="bold" value="1" />
+ <flag name="italic" value="2" />
+ </attr>
+ <!-- Color of text (usually same as colorForeground). -->
+ <attr name="textColor" format="reference|color" />
+ <!-- Color of highlighted text. -->
+ <attr name="textColorHighlight" format="reference|color" />
+ <!-- Color of hint text (displayed when the field is empty). -->
+ <attr name="textColorHint" format="reference|color" />
+ <!-- Color of link text (URLs). -->
+ <attr name="textColorLink" format="reference|color" />
+ <declare-styleable name="TextAppearance">
+ <attr name="textColor"/>
+ <attr name="textSize"/>
+ <attr name="textStyle"/>
+ <attr name="typeface"/>
+ <attr name="textColorHighlight"/>
+ <attr name="textColorHint"/>
+ <attr name="textColorLink"/>
+ </declare-styleable>
+ <!-- Integer used to uniquely identify theme overrides. -->
+ <attr name="themeType" format="integer"/>
+ <!-- Theme reference used to override parent theme. -->
+ <attr name="themeOverrideAttr" format="reference"/>
+
+ <!-- Drawable theming attributes -->
+ <attr name="themeBoolean" />
+ <attr name="themeColor" />
+ <attr name="themeFloat" />
+ <attr name="themeInteger" />
+ <attr name="themeDimension" />
+ <attr name="themeDrawable" />
+ <attr name="themeBitmap" />
+ <attr name="themeNinePatch" />
+ <attr name="themeGravity" />
+ <attr name="themeTileMode" />
+ <attr name="themeAngle" />
+</resources>
diff --git a/tests/src/android/widget/cts/ProgressBarStubActivity.java b/tests/tests/widget/res/values/colors.xml
similarity index 60%
copy from tests/src/android/widget/cts/ProgressBarStubActivity.java
copy to tests/tests/widget/res/values/colors.xml
index 57cfa1a..f3cc325 100644
--- a/tests/src/android/widget/cts/ProgressBarStubActivity.java
+++ b/tests/tests/widget/res/values/colors.xml
@@ -1,4 +1,5 @@
-/*
+<?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");
@@ -12,23 +13,14 @@
* 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 android.widget.cts;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-/**
- * An application for ProgressBar test
- *
- */
-public class ProgressBarStubActivity extends Activity {
- /**
- * Called with the activity is first created.
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
-}
+<resources>
+ <drawable name="red">#7f00</drawable>
+ <drawable name="blue">#770000ff</drawable>
+ <drawable name="black">#77ffffff</drawable>
+ <drawable name="yellow">#77ffff00</drawable>
+ <color name="testcolor1">#ff00ff00</color>
+ <color name="testcolor2">#ffff0000</color>
+ <color name="failColor">#ff0000ff</color>
+</resources>
diff --git a/tests/tests/widget/res/values/strings.xml b/tests/tests/widget/res/values/strings.xml
new file mode 100644
index 0000000..c167278
--- /dev/null
+++ b/tests/tests/widget/res/values/strings.xml
@@ -0,0 +1,179 @@
+<?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.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="permlab_testGranted">Test Granted</string>
+ <string name="permdesc_testGranted">Used for running CTS tests, for testing operations
+ where we have the permission.</string>
+ <string name="permlab_testDynamic">Test Dynamic</string>
+ <string name="permdesc_testDynamic">Used for running CTS tests, for testing adding
+ dynamic permissions.</string>
+ <string name="permlab_testDenied">Test Denied</string>
+ <string name="permdesc_testDenied">Used for running CTS tests, for testing operations
+ where we do not have the permission.</string>
+ <string name="explain">1. click start. \n2. if above image shaked, then press pass button,
+ else press failed button.</string>
+ <string name="text_view_hello">Hello! Text view!</string>
+ <string name="text_view_hello_two_lines">Hello! \nText view!</string>
+ <string name="text_view_simple_hint">This is a hint.</string>
+ <string name="text_view_hint">This is a string for testing hint of textview.</string>
+ <string name="activity_forwarding">App/Forwarding</string>
+ <string name="forwarding">$$$</string>
+ <string name="go">Go</string>
+ <string name="back">Back</string>
+ <string name="forward_target">
+ Press back button and notice we don\'t see the previous activity.
+ </string>
+ <string name="edit_text">testing</string>
+ <string name="text">DialogTest</string>
+ <string name="text_country">Country</string>
+ <string name="text_name">Name</string>
+ <string name="hello_world">Hello, World!</string>
+ <string name="hello_android">Hello, Android!</string>
+ <string name="alert_dialog_username">Name:</string>
+ <string name="alert_dialog_password">Password:</string>
+ <string name="alert_dialog_positive">Positive</string>
+ <string name="alert_dialog_negative">Negative</string>
+ <string name="alert_dialog_neutral">Neutral</string>
+ <string name="notify">Notify </string>
+ <string name="tabs_1">testing</string>
+ <string name="table_layout_first">first</string>
+ <string name="table_layout_second">second</string>
+ <string name="table_layout_third">third</string>
+ <string name="table_layout_long">Very long to make the string out of the screen</string>
+ <string name="chronometer_text">Test Chronometer</string>
+ <string name="am">AM</string>
+ <string name="pm">PM</string>
+ <string name="viewgroup_test">ViewGroup test</string>
+ <string name="viewanimator_test">ViewAnimator test</string>
+ <string name="id_ok">OK</string>
+ <string name="id_cancel">Cancel</string>
+ <string name="context_test_string1">This is %s string.</string>
+ <string name="context_test_string2">This is test string.</string>
+ <string name="animationutils_test_instructions">Choose different animations</string>
+ <string name="animationutils_test_alpha">Alpha animation</string>
+ <string name="animationutils_test_scale">Scale animation</string>
+ <string name="animationutils_test_rotate">Rotate animation</string>
+ <string name="animationutils_test_translate">Translate animation</string>
+ <string name="animationutils_test_set">Animation set</string>
+ <string name="animationutils_test_layout">Layout animation</string>
+ <string name="animationutils_test_gridlayout">Grid layout animation</string>
+ <string name="twolinelistitem_test_text1">text1</string>
+ <string name="twolinelistitem_test_text2">text2</string>
+ <string name="metadata_text">metadata text</string>
+ <string name="horizontal_text_1">horizontal 1</string>
+ <string name="horizontal_text_2">horizontal 2</string>
+ <string name="horizontal_text_3">horizontal 3</string>
+ <string name="vertical_text_1">vertical 1</string>
+ <string name="vertical_text_2">vertical 2</string>
+ <string name="vertical_text_3">vertical 3</string>
+ <string name="reference">here</string>
+ <string name="coerceIntegerToString">100</string>
+ <string name="coerceBooleanToString">true</string>
+ <string name="coerceColorToString">#fff</string>
+ <string name="coerceFloatToString">100.0</string>
+ <string name="coerceDimensionToString">100px</string>
+ <string name="coerceFractionToString">100<xliff:g id="percent">%</xliff:g></string>
+ <string name="formattedStringNone">Format[]</string>
+ <string name="formattedStringOne">Format[<xliff:g id="format">%d</xliff:g>]</string>
+ <string name="formattedStringTwo">Format[<xliff:g id="format">%3$d,%2$s</xliff:g>]</string>
+ <string name="checkboxpref_key">checkboxpref_key</string>
+ <string name="checkboxpref_title">title of preference</string>
+ <string name="checkboxpref_summary">summary of preference</string>
+ <string name="checkboxpref_summary_on">summary on of preference</string>
+ <string name="checkboxpref_summary_off">summary off of preference</string>
+ <string name="checkboxpref_depend">checkboxpref_depend</string>
+ <string name="checkboxpref_depend_title"> depend title of preference</string>
+ <string name="checkboxpref_depend_summary"> depend summary of preference</string>
+ <string name="edittextpref_key">edittextpref_key</string>
+ <string name="edittextpref_default_value">default value of preference</string>
+ <string name="edittextpref_title">title of edit text preference</string>
+ <string name="edittextpref_summary">summary of edit text preference</string>
+ <string name="edittextpref_dialog_title">dialog title of edit text preference</string>
+ <string name="edittextpref_text">text of edit text preference</string>
+ <string name="listpref_key">listpref_key</string>
+ <string name="listpref_title">title of list preference</string>
+ <string name="listpref_summary">summary of list preference</string>
+ <string name="listpref_dialogtitle">dialog title of list preference</string>
+ <string name="easy">Easy</string>
+ <string name="medium">Medium</string>
+ <string name="hard">Hard</string>
+ <string name="footer_view">Footer view</string>
+ <string name="header_view">Header view</string>
+ <string name="dialogpref_title">title of dialog preference </string>
+ <string name="dialogpref_dialog_title">dialog title of dialog preference </string>
+ <string name="dialogpref_key">dialogpref_key</string>
+ <string name="dialogpref_default_value">default value of dialog preference</string>
+ <string name="dialogpref_summary">summary of dialog preference</string>
+ <string name="dialogpref_message">message of dialog preference</string>
+ <string name="dialogpref_sure">Sure</string>
+ <string name="dialogpref_cancel">Cancel</string>
+ <string name="pref_key">pref_key</string>
+ <string name="pref_title">title of preference</string>
+ <string name="pref_summary">summary of preference</string>
+ <string name="pref_depend_key">pref_depend_key</string>
+ <string name="pref_depend_title"> depend title of preference</string>
+ <string name="pref_depend_summary"> depend summary of preference</string>
+ <string name="android_intent_action_preference">android.intent.action.PREFERENCE</string>
+ <string name="def_pref_key">def_pref_key</string>
+ <string name="def_pref_title">default preference</string>
+ <string name="def_pref_summary">This is default preference of cts</string>
+ <string name="relative_view1">view 1</string>
+ <string name="relative_view2">view 2</string>
+ <string name="relative_view3">view 3</string>
+ <string name="relative_view4">view 4</string>
+ <string name="relative_view5">view 5</string>
+ <string name="relative_view6">view 6</string>
+ <string name="relative_view7">view 7</string>
+ <string name="relative_view8">view 8</string>
+ <string name="relative_view9">view 9</string>
+ <string name="relative_view10">view 10</string>
+ <string name="relative_view11">view 11</string>
+ <string name="relative_view12">view 12</string>
+ <string name="relative_view13">view 13</string>
+ <string name="country">Country:</string>
+ <string name="symbol">Symbol:</string>
+ <string name="country_warning">No such country registered</string>
+ <string name="version_cur">base</string>
+ <string name="version_old">base</string>
+ <string name="version_v3">base</string>
+ <string name="authenticator_label">Android CTS</string>
+ <string name="search_label">Android CTS</string>
+ <string name="tag1">tag 1</string>
+ <string name="tag2">tag 2</string>
+
+ <string name="button">Button</string>
+ <string name="holo_test">Holo Test</string>
+ <string name="holo_generator">Holo Generator</string>
+ <string name="holo_light_test">Holo Light Test</string>
+ <string name="holo_light_generator">Holo Light Generator</string>
+ <string name="reference_image">Reference Image: </string>
+ <string name="generated_image">Generated Image: </string>
+ <string name="themes_prompt">Select a Theme:</string>
+ <string name="sample_text">Sample text goes here. I wanted something creative and whimsical
+but then I just got bored...</string>
+ <string name="long_text">This is a really long string which exceeds the width of the view.
+New devices have a much larger screen which actually enables long strings to be displayed
+with no fading. I have made this string longer to fix this case. If you are correcting this
+text, I would love to see the kind of devices you guys now use! Guys, maybe some devices need longer string!
+I think so, so how about double this string, like copy and paste!
+This is a really long string which exceeds the width of the view.
+New devices have a much larger screen which actually enables long strings to be displayed
+with no fading. I have made this string longer to fix this case. If you are correcting this
+text, I would love to see the kind of devices you guys now use! Guys, maybe some devices need longer string!
+I think so, so how about double this string, like copy and paste! </string>
+ <string name="rectangle200">"M 0,0 l 200,0 l 0, 200 l -200, 0 z"</string>
+</resources>
diff --git a/tests/tests/widget/res/values/styles.xml b/tests/tests/widget/res/values/styles.xml
new file mode 100644
index 0000000..81925cc
--- /dev/null
+++ b/tests/tests/widget/res/values/styles.xml
@@ -0,0 +1,172 @@
+<?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.
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <style name="Whatever">
+ <item name="type1">true</item>
+ <item name="type2">false</item>
+ <item name="type3">#ff0000ff</item>
+ <item name="type4">#ff00ff00</item>
+ <item name="type5">0.75px</item>
+ <item name="type6">10px</item>
+ <item name="type7">18px</item>
+ <item name="type8">@drawable/pass</item>
+ <item name="type9">3.14</item>
+ <item name="type10">100%</item>
+ <item name="type11">365</item>
+ <item name="type12">86400</item>
+ <item name="type13">@string/hello_android</item>
+ <item name="type14">TypedArray Test!</item>
+ <item name="type15">@array/difficultyLevel</item>
+ <item name="type16">Typed Value!</item>
+ </style>
+
+ <style name="TextViewWithoutColorAndAppearance">
+ <item name="android:textSize">18sp</item>
+ </style>
+
+ <style name="TextViewWithColorButWithOutAppearance">
+ <item name="android:textColor">#ff0000ff</item>
+ </style>
+
+ <style name="TextViewWithColorAndAppearance">
+ <item name="android:textColor">#ff0000ff</item>
+ <item name="android:textAppearance">@style/TextAppearance.WithColor</item>
+ </style>
+
+ <style name="TextViewWithoutColorButWithAppearance">
+ <item name="android:textAppearance">@style/TextAppearance.WithColor</item>
+ </style>
+
+ <style name="TextAppearance" parent="android:TextAppearance">
+ </style>
+
+ <style name="TextAppearance.WithColor">
+ <item name="android:textColor">#ffff0000</item>
+ </style>
+
+ <style name="TextAppearance.All">
+ <item name="android:textColor">@drawable/black</item>
+ <item name="android:textSize">20px</item>
+ <item name="android:textStyle">bold</item>
+ <item name="android:textColorHint">@drawable/red</item>
+ <item name="android:textColorLink">@drawable/blue</item>
+ <item name="android:textColorHighlight">@drawable/yellow</item>
+ </style>
+
+ <style name="TextAppearance.Colors">
+ <item name="android:textColor">@drawable/black</item>
+ <item name="android:textColorHint">@drawable/blue</item>
+ <item name="android:textColorLink">@drawable/yellow</item>
+ <item name="android:textColorHighlight">@drawable/red</item>
+ </style>
+
+ <style name="TextAppearance.NotColors">
+ <item name="android:textSize">17px</item>
+ <item name="android:typeface">sans</item>
+ <item name="android:textStyle">normal</item>
+ </style>
+
+ <style name="TextAppearance.Style">
+ <item name="android:textStyle">normal</item>
+ </style>
+
+ <style name="TestEnum1">
+ <item name="testEnum">val1</item>
+ </style>
+
+ <style name="TestEnum2">
+ <item name="testEnum">val2</item>
+ </style>
+
+ <style name="TestEnum10">
+ <item name="testEnum">val10</item>
+ </style>
+
+ <style name="TestFlag1">
+ <item name="testFlags">bit1</item>
+ </style>
+
+ <style name="TestFlag2">
+ <item name="testFlags">bit2</item>
+ </style>
+
+ <style name="TestFlag31">
+ <item name="testFlags">bit31</item>
+ </style>
+
+ <style name="TestFlag1And2">
+ <item name="testFlags">bit1|bit2</item>
+ </style>
+
+ <style name="TestFlag1And2And31">
+ <item name="testFlags">bit1|bit2|bit31</item>
+ </style>
+
+ <style name="TestEnum1.EmptyInherit" />
+
+ <style name="Theme_AlertDialog">
+ <item name="android:textSize">18sp</item>
+ </style>
+
+ <style name="TestProgressBar">
+ <item name="android:indeterminateOnly">false</item>
+ <item name="android:progressDrawable">?android:drawable/progress_horizontal</item>
+ <item name="android:indeterminateDrawable">?android:drawable/progress_horizontal</item>
+ <item name="android:minHeight">20dip</item>
+ <item name="android:maxHeight">20dip</item>
+ <item name="android:focusable">true</item>
+ </style>
+
+ <style name="Test_Theme">
+ <item name="android:windowNoTitle">true</item>
+ <item name="android:panelColorForeground">#ff000000</item>
+ <item name="android:panelColorBackground">#ffffffff</item>
+ </style>
+
+ <style name="Theme_OverrideOuter">
+ <item name="themeType">1</item>
+ </style>
+
+ <style name="Theme_OverrideInner">
+ <item name="themeType">2</item>
+ <item name="themeOverrideAttr">@style/Theme_OverrideAttr</item>
+ </style>
+
+ <style name="Theme_OverrideAttr">
+ <item name="themeType">3</item>
+ </style>
+
+ <style name="Theme_ThemedDrawableTest">
+ <item name="themeBoolean">true</item>
+ <item name="themeColor">@android:color/black</item>
+ <item name="themeFloat">1.0</item>
+ <item name="themeAngle">45.0</item>
+ <item name="themeInteger">1</item>
+ <item name="themeDimension">1px</item>
+ <item name="themeDrawable">@drawable/icon_black</item>
+ <item name="themeBitmap">@drawable/icon_black</item>
+ <item name="themeNinePatch">@drawable/ninepatch_0</item>
+ <item name="themeGravity">48</item>
+ <item name="themeTileMode">2</item>
+ </style>
+
+ <style name="Theme_NoSwipeDismiss">
+ <item name="android:windowSwipeToDismiss">false</item>
+ </style>
+
+</resources>
diff --git a/tests/tests/widget/res/xml/base_attributes.xml b/tests/tests/widget/res/xml/base_attributes.xml
new file mode 100644
index 0000000..adb44de
--- /dev/null
+++ b/tests/tests/widget/res/xml/base_attributes.xml
@@ -0,0 +1,32 @@
+<?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.
+ -->
+<alias xmlns:android="http://schemas.android.com/apk/res/android">
+ <base_attr_pixel>
+ <Attributes xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="400px"
+ android:layout_height="600px"/>
+ </base_attr_pixel>
+ <base_attr_fillwrap>
+ <Attributes xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+ </base_attr_fillwrap>
+ <base_attr_noheight>
+ <Attributes xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="600px"/>
+ </base_attr_noheight>
+</alias>
diff --git a/tests/src/android/widget/cts/StubActivity.java b/tests/tests/widget/res/xml/input_extras.xml
similarity index 64%
copy from tests/src/android/widget/cts/StubActivity.java
copy to tests/tests/widget/res/xml/input_extras.xml
index fe4002c..ce5eb5e 100644
--- a/tests/src/android/widget/cts/StubActivity.java
+++ b/tests/tests/widget/res/xml/input_extras.xml
@@ -1,5 +1,6 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
+<?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.
@@ -12,15 +13,9 @@
* 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.
- */
+-->
+<input-extras xmlns:android="http://schemas.android.com/apk/res/android">
+ <extra android:name="google" android:value="android"/>
+ <extra android:name="test" android:value="cts"/>
+</input-extras>
-package android.widget.cts;
-
-import android.app.Activity;
-
-/**
- * Stub activity for helping test. It's an empty activity.
- */
-public class StubActivity extends Activity {
-
-}
diff --git a/tests/tests/widget/src/android/widget/cts/AbsListViewTest.java b/tests/tests/widget/src/android/widget/cts/AbsListViewTest.java
index 7dcae28..b6a96fb 100644
--- a/tests/tests/widget/src/android/widget/cts/AbsListViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/AbsListViewTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -52,7 +52,7 @@
import java.util.ArrayList;
import java.util.List;
-public class AbsListViewTest extends ActivityInstrumentationTestCase2<ListViewStubActivity> {
+public class AbsListViewTest extends ActivityInstrumentationTestCase2<ListViewCtsActivity> {
private final String[] mShortList = new String[] {
"This", "is", "short", "!",
};
@@ -72,7 +72,7 @@
private static final float DELTA = 0.001f;
public AbsListViewTest() {
- super("com.android.cts.stub", ListViewStubActivity.class);
+ super("com.android.cts.widget", ListViewCtsActivity.class);
}
diff --git a/tests/tests/widget/src/android/widget/cts/AbsListView_LayoutParamsTest.java b/tests/tests/widget/src/android/widget/cts/AbsListView_LayoutParamsTest.java
index 655b5ee..413bc2a 100644
--- a/tests/tests/widget/src/android/widget/cts/AbsListView_LayoutParamsTest.java
+++ b/tests/tests/widget/src/android/widget/cts/AbsListView_LayoutParamsTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
diff --git a/tests/tests/widget/src/android/widget/cts/AbsSeekBarTest.java b/tests/tests/widget/src/android/widget/cts/AbsSeekBarTest.java
index 58230e5..419a1c8 100644
--- a/tests/tests/widget/src/android/widget/cts/AbsSeekBarTest.java
+++ b/tests/tests/widget/src/android/widget/cts/AbsSeekBarTest.java
@@ -21,7 +21,7 @@
import android.graphics.PorterDuff;
import android.test.UiThreadTest;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
@@ -40,9 +40,9 @@
/**
* Test {@link AbsSeekBar}.
*/
-public class AbsSeekBarTest extends ActivityInstrumentationTestCase2<ProgressBarStubActivity> {
+public class AbsSeekBarTest extends ActivityInstrumentationTestCase2<ProgressBarCtsActivity> {
public AbsSeekBarTest() {
- super("com.android.cts.stub", ProgressBarStubActivity.class);
+ super("com.android.cts.widget", ProgressBarCtsActivity.class);
}
private Activity mActivity;
diff --git a/tests/tests/widget/src/android/widget/cts/AbsSpinnerTest.java b/tests/tests/widget/src/android/widget/cts/AbsSpinnerTest.java
index fc37a64..70b37e6 100644
--- a/tests/tests/widget/src/android/widget/cts/AbsSpinnerTest.java
+++ b/tests/tests/widget/src/android/widget/cts/AbsSpinnerTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
@@ -39,11 +39,11 @@
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
-public class AbsSpinnerTest extends ActivityInstrumentationTestCase2<RelativeLayoutStubActivity> {
+public class AbsSpinnerTest extends ActivityInstrumentationTestCase2<RelativeLayoutCtsActivity> {
private Context mContext;
public AbsSpinnerTest() {
- super("com.android.cts.stub", RelativeLayoutStubActivity.class);
+ super("com.android.cts.widget", RelativeLayoutCtsActivity.class);
}
@Override
@@ -78,7 +78,7 @@
public void testSetSelectionIntBoolean() {
AbsSpinner absSpinner = (AbsSpinner) getActivity().findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(mContext,
- com.android.cts.stub.R.array.string, android.R.layout.simple_spinner_item);
+ com.android.cts.widget.R.array.string, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
absSpinner.setAdapter(adapter);
assertEquals(0, absSpinner.getSelectedItemPosition());
@@ -101,7 +101,7 @@
public void testSetSelectionInt() {
AbsSpinner absSpinner = (AbsSpinner) getActivity().findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(mContext,
- com.android.cts.stub.R.array.string, android.R.layout.simple_spinner_item);
+ com.android.cts.widget.R.array.string, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
absSpinner.setAdapter(adapter);
assertEquals(0, absSpinner.getSelectedItemPosition());
@@ -123,7 +123,7 @@
public void testAccessAdapter() {
AbsSpinner absSpinner = (AbsSpinner) getActivity().findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(mContext,
- com.android.cts.stub.R.array.string, android.R.layout.simple_spinner_item);
+ com.android.cts.widget.R.array.string, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
absSpinner.setAdapter(adapter);
@@ -158,7 +158,7 @@
AbsSpinner absSpinner = (AbsSpinner) getActivity().findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(mContext,
- com.android.cts.stub.R.array.string, android.R.layout.simple_spinner_item);
+ com.android.cts.widget.R.array.string, android.R.layout.simple_spinner_item);
absSpinner.setAdapter(adapter1);
assertEquals(adapter1.getCount(), absSpinner.getCount());
@@ -233,7 +233,7 @@
public void testOnSaveAndRestoreInstanceState() {
AbsSpinner absSpinner = (AbsSpinner) getActivity().findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(mContext,
- com.android.cts.stub.R.array.string, android.R.layout.simple_spinner_item);
+ com.android.cts.widget.R.array.string, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
absSpinner.setAdapter(adapter);
assertEquals(0, absSpinner.getSelectedItemPosition());
diff --git a/tests/tests/widget/src/android/widget/cts/AbsoluteLayoutTest.java b/tests/tests/widget/src/android/widget/cts/AbsoluteLayoutTest.java
index 8d2b6cd..053f42b 100644
--- a/tests/tests/widget/src/android/widget/cts/AbsoluteLayoutTest.java
+++ b/tests/tests/widget/src/android/widget/cts/AbsoluteLayoutTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
@@ -34,7 +34,7 @@
import java.io.IOException;
@SuppressWarnings("deprecation")
-public class AbsoluteLayoutTest extends ActivityInstrumentationTestCase2<StubActivity> {
+public class AbsoluteLayoutTest extends ActivityInstrumentationTestCase2<CtsActivity> {
private static final int DEFAULT_X = 5;
private static final int DEFAULT_Y = 10;
private static final int DEFAULT_WIDTH = 20;
@@ -45,7 +45,7 @@
private LayoutParams mAbsoluteLayoutParams;
public AbsoluteLayoutTest() {
- super("com.android.cts.stub", StubActivity.class);
+ super("com.android.cts.widget", CtsActivity.class);
}
@Override
diff --git a/tests/tests/widget/src/android/widget/cts/AbsoluteLayout_LayoutParamsTest.java b/tests/tests/widget/src/android/widget/cts/AbsoluteLayout_LayoutParamsTest.java
index 63be7d4..685f2d3 100644
--- a/tests/tests/widget/src/android/widget/cts/AbsoluteLayout_LayoutParamsTest.java
+++ b/tests/tests/widget/src/android/widget/cts/AbsoluteLayout_LayoutParamsTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
diff --git a/tests/src/android/widget/cts/AdapterViewStubActivity.java b/tests/tests/widget/src/android/widget/cts/AdapterViewCtsActivity.java
similarity index 94%
rename from tests/src/android/widget/cts/AdapterViewStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/AdapterViewCtsActivity.java
index edcf13d..956ff9a 100644
--- a/tests/src/android/widget/cts/AdapterViewStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/AdapterViewCtsActivity.java
@@ -25,12 +25,12 @@
import android.widget.ArrayAdapter;
import android.widget.ListView;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
* A minimal application for AdapterView test.
*/
-public class AdapterViewStubActivity extends Activity {
+public class AdapterViewCtsActivity extends Activity {
private ListView mView;
/**
diff --git a/tests/tests/widget/src/android/widget/cts/AdapterViewTest.java b/tests/tests/widget/src/android/widget/cts/AdapterViewTest.java
index b91ca73..81a1a4b 100644
--- a/tests/tests/widget/src/android/widget/cts/AdapterViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/AdapterViewTest.java
@@ -38,10 +38,10 @@
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
-public class AdapterViewTest extends ActivityInstrumentationTestCase2<AdapterViewStubActivity> {
+public class AdapterViewTest extends ActivityInstrumentationTestCase2<AdapterViewCtsActivity> {
private final static int INVALID_ID = -1;
@@ -54,7 +54,7 @@
private AdapterView<ListAdapter> mAdapterView;
public AdapterViewTest() {
- super("com.android.cts.stub", AdapterViewStubActivity.class);
+ super("com.android.cts.widget", AdapterViewCtsActivity.class);
}
@Override
diff --git a/tests/tests/widget/src/android/widget/cts/AnalogClockTest.java b/tests/tests/widget/src/android/widget/cts/AnalogClockTest.java
index f3b02b0..b360fd1 100644
--- a/tests/tests/widget/src/android/widget/cts/AnalogClockTest.java
+++ b/tests/tests/widget/src/android/widget/cts/AnalogClockTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
@@ -27,12 +27,12 @@
import android.util.Xml;
import android.widget.AnalogClock;
-public class AnalogClockTest extends ActivityInstrumentationTestCase2<FrameLayoutStubActivity> {
+public class AnalogClockTest extends ActivityInstrumentationTestCase2<FrameLayoutCtsActivity> {
private AttributeSet mAttrSet;
private Activity mActivity;
public AnalogClockTest() {
- super("com.android.cts.stub", FrameLayoutStubActivity.class);
+ super("com.android.cts.widget", FrameLayoutCtsActivity.class);
}
@Override
diff --git a/tests/tests/widget/src/android/widget/cts/ArrayAdapterTest.java b/tests/tests/widget/src/android/widget/cts/ArrayAdapterTest.java
index 101b271..3b00754 100644
--- a/tests/tests/widget/src/android/widget/cts/ArrayAdapterTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ArrayAdapterTest.java
@@ -26,7 +26,7 @@
import android.widget.Filter;
import android.widget.TextView;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
public class ArrayAdapterTest extends AndroidTestCase {
diff --git a/tests/src/android/widget/cts/AutoCompleteStubActivity.java b/tests/tests/widget/src/android/widget/cts/AutoCompleteCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/AutoCompleteStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/AutoCompleteCtsActivity.java
index a23b6eb..3d68f3e 100644
--- a/tests/src/android/widget/cts/AutoCompleteStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/AutoCompleteCtsActivity.java
@@ -19,12 +19,12 @@
import android.app.Activity;
import android.os.Bundle;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
* A minimal application for AutoCompleteTextView test.
*/
-public class AutoCompleteStubActivity extends Activity {
+public class AutoCompleteCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/AutoCompleteTextViewTest.java b/tests/tests/widget/src/android/widget/cts/AutoCompleteTextViewTest.java
index 373c03b..f3a58bc 100644
--- a/tests/tests/widget/src/android/widget/cts/AutoCompleteTextViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/AutoCompleteTextViewTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
@@ -45,13 +45,13 @@
import java.io.IOException;
public class AutoCompleteTextViewTest extends
- ActivityInstrumentationTestCase2<AutoCompleteStubActivity> {
+ ActivityInstrumentationTestCase2<AutoCompleteCtsActivity> {
/**
* Instantiates a new text view test.
*/
public AutoCompleteTextViewTest() {
- super("com.android.cts.stub", AutoCompleteStubActivity.class);
+ super("com.android.cts.widget", AutoCompleteCtsActivity.class);
}
/** The m activity. */
diff --git a/tests/tests/widget/src/android/widget/cts/ButtonTest.java b/tests/tests/widget/src/android/widget/cts/ButtonTest.java
index 98b3318..47d7108 100644
--- a/tests/tests/widget/src/android/widget/cts/ButtonTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ButtonTest.java
@@ -24,7 +24,7 @@
import android.util.Xml;
import android.widget.Button;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
public class ButtonTest extends AndroidTestCase {
diff --git a/tests/tests/widget/src/android/widget/cts/CheckBoxTest.java b/tests/tests/widget/src/android/widget/cts/CheckBoxTest.java
index 55960f9..21e463f 100644
--- a/tests/tests/widget/src/android/widget/cts/CheckBoxTest.java
+++ b/tests/tests/widget/src/android/widget/cts/CheckBoxTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
diff --git a/tests/src/android/widget/cts/CheckedTextViewStubActivity.java b/tests/tests/widget/src/android/widget/cts/CheckedTextViewCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/CheckedTextViewStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/CheckedTextViewCtsActivity.java
index 1c8d63e..a0ed498 100644
--- a/tests/src/android/widget/cts/CheckedTextViewStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/CheckedTextViewCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
@@ -24,7 +24,7 @@
/**
* A minimal application for CheckedTextView test.
*/
-public class CheckedTextViewStubActivity extends Activity {
+public class CheckedTextViewCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/CheckedTextViewTest.java b/tests/tests/widget/src/android/widget/cts/CheckedTextViewTest.java
index 6aa44c1..c5d3bd1 100644
--- a/tests/tests/widget/src/android/widget/cts/CheckedTextViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/CheckedTextViewTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
@@ -38,13 +38,13 @@
import java.util.Arrays;
public class CheckedTextViewTest extends
- ActivityInstrumentationTestCase2<CheckedTextViewStubActivity> {
+ ActivityInstrumentationTestCase2<CheckedTextViewCtsActivity> {
private Resources mResources;
private Activity mActivity;
private Instrumentation mInstrumentation;
public CheckedTextViewTest() {
- super("com.android.cts.stub", CheckedTextViewStubActivity.class);
+ super("com.android.cts.widget", CheckedTextViewCtsActivity.class);
}
@Override
diff --git a/tests/src/android/widget/cts/ChronometerStubActivity.java b/tests/tests/widget/src/android/widget/cts/ChronometerCtsActivity.java
similarity index 92%
rename from tests/src/android/widget/cts/ChronometerStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/ChronometerCtsActivity.java
index f72a427..3a7833d 100644
--- a/tests/src/android/widget/cts/ChronometerStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/ChronometerCtsActivity.java
@@ -16,13 +16,13 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.Chronometer;
-public class ChronometerStubActivity extends Activity {
+public class ChronometerCtsActivity extends Activity {
private Chronometer chronometer;
diff --git a/tests/tests/widget/src/android/widget/cts/ChronometerTest.java b/tests/tests/widget/src/android/widget/cts/ChronometerTest.java
index 7fbb58a..992577c 100644
--- a/tests/tests/widget/src/android/widget/cts/ChronometerTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ChronometerTest.java
@@ -25,10 +25,10 @@
/**
* Test {@link Chronometer}.
*/
-public class ChronometerTest extends ActivityInstrumentationTestCase2<ChronometerStubActivity> {
- private ChronometerStubActivity mActivity;
+public class ChronometerTest extends ActivityInstrumentationTestCase2<ChronometerCtsActivity> {
+ private ChronometerCtsActivity mActivity;
public ChronometerTest() {
- super("com.android.cts.stub", ChronometerStubActivity.class);
+ super("com.android.cts.widget", ChronometerCtsActivity.class);
}
@Override
diff --git a/tests/tests/widget/src/android/widget/cts/CompoundButtonTest.java b/tests/tests/widget/src/android/widget/cts/CompoundButtonTest.java
index 6674ef6..bf5382a 100644
--- a/tests/tests/widget/src/android/widget/cts/CompoundButtonTest.java
+++ b/tests/tests/widget/src/android/widget/cts/CompoundButtonTest.java
@@ -22,7 +22,7 @@
import android.graphics.PorterDuff;
import android.view.LayoutInflater;
import android.widget.ToggleButton;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
diff --git a/tests/src/android/widget/cts/StubActivity.java b/tests/tests/widget/src/android/widget/cts/CtsActivity.java
similarity index 93%
rename from tests/src/android/widget/cts/StubActivity.java
rename to tests/tests/widget/src/android/widget/cts/CtsActivity.java
index fe4002c..e099694 100644
--- a/tests/src/android/widget/cts/StubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/CtsActivity.java
@@ -21,6 +21,6 @@
/**
* Stub activity for helping test. It's an empty activity.
*/
-public class StubActivity extends Activity {
+public class CtsActivity extends Activity {
}
diff --git a/tests/tests/widget/src/android/widget/cts/CursorAdapterTest.java b/tests/tests/widget/src/android/widget/cts/CursorAdapterTest.java
index 963c392..6ff22b0 100644
--- a/tests/tests/widget/src/android/widget/cts/CursorAdapterTest.java
+++ b/tests/tests/widget/src/android/widget/cts/CursorAdapterTest.java
@@ -25,7 +25,6 @@
import android.database.DataSetObserver;
import android.database.sqlite.SQLiteDatabase;
import android.os.Looper;
-import android.os.cts.TestThread;
import android.test.AndroidTestCase;
import android.view.LayoutInflater;
import android.view.View;
@@ -35,7 +34,7 @@
import android.widget.FilterQueryProvider;
import android.widget.TextView;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
diff --git a/tests/tests/widget/src/android/widget/cts/CursorTreeAdapterTest.java b/tests/tests/widget/src/android/widget/cts/CursorTreeAdapterTest.java
index 1d26777..011a031 100644
--- a/tests/tests/widget/src/android/widget/cts/CursorTreeAdapterTest.java
+++ b/tests/tests/widget/src/android/widget/cts/CursorTreeAdapterTest.java
@@ -31,7 +31,7 @@
import android.widget.FilterQueryProvider;
import android.widget.TextView;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
diff --git a/tests/tests/widget/src/android/widget/cts/DatePickerTest.java b/tests/tests/widget/src/android/widget/cts/DatePickerTest.java
index ad9da7c..aa727b7 100644
--- a/tests/tests/widget/src/android/widget/cts/DatePickerTest.java
+++ b/tests/tests/widget/src/android/widget/cts/DatePickerTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import com.android.internal.util.XmlUtils;
diff --git a/tests/src/android/widget/cts/DialerFilterStubActivity.java b/tests/tests/widget/src/android/widget/cts/DialerFilterCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/DialerFilterStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/DialerFilterCtsActivity.java
index b67803a..572d3fb 100644
--- a/tests/src/android/widget/cts/DialerFilterStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/DialerFilterCtsActivity.java
@@ -18,12 +18,12 @@
import android.app.Activity;
import android.os.Bundle;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
* A minimal application for DialerFilter test.
*/
-public class DialerFilterStubActivity extends Activity {
+public class DialerFilterCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/DialerFilterTest.java b/tests/tests/widget/src/android/widget/cts/DialerFilterTest.java
index 1c5c7ff..9b7fb56 100644
--- a/tests/tests/widget/src/android/widget/cts/DialerFilterTest.java
+++ b/tests/tests/widget/src/android/widget/cts/DialerFilterTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
@@ -39,13 +39,13 @@
import android.widget.EditText;
import android.widget.RelativeLayout;
-public class DialerFilterTest extends ActivityInstrumentationTestCase2<DialerFilterStubActivity> {
+public class DialerFilterTest extends ActivityInstrumentationTestCase2<DialerFilterCtsActivity> {
private Activity mActivity;
private Instrumentation mInstrumentation;
private DialerFilter mDialerFilter;
public DialerFilterTest() {
- super("com.android.cts.stub", DialerFilterStubActivity.class);
+ super("com.android.cts.widget", DialerFilterCtsActivity.class);
}
@Override
diff --git a/tests/src/android/widget/cts/DigitalClockStubActivity.java b/tests/tests/widget/src/android/widget/cts/DigitalClockCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/DigitalClockStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/DigitalClockCtsActivity.java
index 2351bc2..68cb3f0 100644
--- a/tests/src/android/widget/cts/DigitalClockStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/DigitalClockCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
@@ -24,7 +24,7 @@
/**
* A minimal application for TextView test.
*/
-public class DigitalClockStubActivity extends Activity {
+public class DigitalClockCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/DigitalClockTest.java b/tests/tests/widget/src/android/widget/cts/DigitalClockTest.java
index 4184cdd..26caef0 100644
--- a/tests/tests/widget/src/android/widget/cts/DigitalClockTest.java
+++ b/tests/tests/widget/src/android/widget/cts/DigitalClockTest.java
@@ -30,19 +30,19 @@
import android.widget.DigitalClock;
import android.widget.LinearLayout;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import com.android.internal.util.XmlUtils;
/**
* Test {@link DigitalClock}.
*/
-public class DigitalClockTest extends ActivityInstrumentationTestCase<DigitalClockStubActivity> {
+public class DigitalClockTest extends ActivityInstrumentationTestCase<DigitalClockCtsActivity> {
private Activity mActivity;
private Context mContext;
public DigitalClockTest() {
- super("com.android.cts.stub", DigitalClockStubActivity.class);
+ super("com.android.cts.widget", DigitalClockCtsActivity.class);
}
@Override
@@ -113,7 +113,7 @@
private AttributeSet getAttributeSet(int resourceId) {
XmlResourceParser parser = mActivity.getResources().getXml(resourceId);
try {
- XmlUtils.beginDocument(parser, "com.android.cts.stub.alarmclock.DigitalClock");
+ XmlUtils.beginDocument(parser, "com.android.cts.widget.alarmclock.DigitalClock");
} catch (XmlPullParserException e) {
fail("unexpected XmlPullParserException.");
} catch (IOException e) {
diff --git a/tests/tests/widget/src/android/widget/cts/EditTextTest.java b/tests/tests/widget/src/android/widget/cts/EditTextTest.java
index ee10900..7a71a58 100644
--- a/tests/tests/widget/src/android/widget/cts/EditTextTest.java
+++ b/tests/tests/widget/src/android/widget/cts/EditTextTest.java
@@ -28,7 +28,7 @@
import android.widget.EditText;
import android.widget.TextView.BufferType;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
public class EditTextTest extends AndroidTestCase {
diff --git a/tests/src/android/widget/cts/ExpandableListSimple.java b/tests/tests/widget/src/android/widget/cts/ExpandableListSimple.java
similarity index 100%
rename from tests/src/android/widget/cts/ExpandableListSimple.java
rename to tests/tests/widget/src/android/widget/cts/ExpandableListSimple.java
diff --git a/tests/tests/widget/src/android/widget/cts/ExpandableListViewTest.java b/tests/tests/widget/src/android/widget/cts/ExpandableListViewTest.java
index 67dcb30..ac48ed8 100644
--- a/tests/tests/widget/src/android/widget/cts/ExpandableListViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ExpandableListViewTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
diff --git a/tests/src/android/widget/cts/ExpandableListWithHeaders.java b/tests/tests/widget/src/android/widget/cts/ExpandableListWithHeaders.java
similarity index 100%
rename from tests/src/android/widget/cts/ExpandableListWithHeaders.java
rename to tests/tests/widget/src/android/widget/cts/ExpandableListWithHeaders.java
diff --git a/tests/tests/widget/src/android/widget/cts/FilterTest.java b/tests/tests/widget/src/android/widget/cts/FilterTest.java
index 394f861..3441431 100644
--- a/tests/tests/widget/src/android/widget/cts/FilterTest.java
+++ b/tests/tests/widget/src/android/widget/cts/FilterTest.java
@@ -22,13 +22,13 @@
import android.widget.Filter;
import android.widget.Filter.FilterListener;
-public class FilterTest extends ActivityInstrumentationTestCase2<StubActivity> {
+public class FilterTest extends ActivityInstrumentationTestCase2<CtsActivity> {
private static final long TIME_OUT = 10000;
private static final String TEST_CONSTRAINT = "filter test";
private MockFilter mMockFilter;
public FilterTest() {
- super("com.android.cts.stub", StubActivity.class);
+ super("com.android.cts.widget", CtsActivity.class);
}
public void testConstructor() {
diff --git a/tests/src/android/widget/cts/FrameLayoutStubActivity.java b/tests/tests/widget/src/android/widget/cts/FrameLayoutCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/FrameLayoutStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/FrameLayoutCtsActivity.java
index 76482da..c638313 100644
--- a/tests/src/android/widget/cts/FrameLayoutStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/FrameLayoutCtsActivity.java
@@ -18,12 +18,12 @@
import android.app.Activity;
import android.os.Bundle;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
* A minimal application for frame layout test.
*/
-public class FrameLayoutStubActivity extends Activity {
+public class FrameLayoutCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/FrameLayoutTest.java b/tests/tests/widget/src/android/widget/cts/FrameLayoutTest.java
index b1a0d44..dcab088 100644
--- a/tests/tests/widget/src/android/widget/cts/FrameLayoutTest.java
+++ b/tests/tests/widget/src/android/widget/cts/FrameLayoutTest.java
@@ -22,7 +22,7 @@
import android.graphics.ColorFilter;
import android.graphics.PorterDuff;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -49,13 +49,13 @@
import java.io.IOException;
-public class FrameLayoutTest extends ActivityInstrumentationTestCase2<FrameLayoutStubActivity> {
+public class FrameLayoutTest extends ActivityInstrumentationTestCase2<FrameLayoutCtsActivity> {
private Activity mActivity;
private Instrumentation mInstrumentation;
private FrameLayout mFrameLayout;
public FrameLayoutTest() {
- super("com.android.cts.stub", FrameLayoutStubActivity.class);
+ super("com.android.cts.widget", FrameLayoutCtsActivity.class);
}
@Override
diff --git a/tests/tests/widget/src/android/widget/cts/FrameLayout_LayoutParamsTest.java b/tests/tests/widget/src/android/widget/cts/FrameLayout_LayoutParamsTest.java
index 89529a2..d8f1296 100644
--- a/tests/tests/widget/src/android/widget/cts/FrameLayout_LayoutParamsTest.java
+++ b/tests/tests/widget/src/android/widget/cts/FrameLayout_LayoutParamsTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
diff --git a/tests/src/android/widget/cts/GalleryStubActivity.java b/tests/tests/widget/src/android/widget/cts/GalleryCtsActivity.java
similarity index 96%
rename from tests/src/android/widget/cts/GalleryStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/GalleryCtsActivity.java
index 8e0dd93..8d32717 100644
--- a/tests/src/android/widget/cts/GalleryStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/GalleryCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.content.Context;
@@ -30,7 +30,7 @@
/**
* A minimal application for {@link Gallery} test.
*/
-public class GalleryStubActivity extends Activity {
+public class GalleryCtsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/tests/tests/widget/src/android/widget/cts/GalleryTest.java b/tests/tests/widget/src/android/widget/cts/GalleryTest.java
index 0aacda4..d42c375 100644
--- a/tests/tests/widget/src/android/widget/cts/GalleryTest.java
+++ b/tests/tests/widget/src/android/widget/cts/GalleryTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import com.android.internal.view.menu.ContextMenuBuilder;
@@ -53,7 +53,7 @@
/**
* Test {@link Gallery}.
*/
-public class GalleryTest extends ActivityInstrumentationTestCase2<GalleryStubActivity> {
+public class GalleryTest extends ActivityInstrumentationTestCase2<GalleryCtsActivity> {
private Gallery mGallery;
private Activity mActivity;
private Instrumentation mInstrumentation;
@@ -61,7 +61,7 @@
private final static float DELTA = 0.01f;
public GalleryTest() {
- super("com.android.cts.stub", GalleryStubActivity.class);
+ super("com.android.cts.widget", GalleryCtsActivity.class);
}
@Override
diff --git a/tests/tests/widget/src/android/widget/cts/Gallery_LayoutParamsTest.java b/tests/tests/widget/src/android/widget/cts/Gallery_LayoutParamsTest.java
index af031e4..de90ed3 100644
--- a/tests/tests/widget/src/android/widget/cts/Gallery_LayoutParamsTest.java
+++ b/tests/tests/widget/src/android/widget/cts/Gallery_LayoutParamsTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParserException;
diff --git a/tests/src/android/widget/cts/GridLayoutStubActivity.java b/tests/tests/widget/src/android/widget/cts/GridLayoutCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/GridLayoutStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/GridLayoutCtsActivity.java
index 3fa0f28..3277ee8 100644
--- a/tests/src/android/widget/cts/GridLayoutStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/GridLayoutCtsActivity.java
@@ -18,12 +18,12 @@
import android.app.Activity;
import android.os.Bundle;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
* A minimal application for {@link android.widget.GridLayout} test.
*/
-public class GridLayoutStubActivity extends Activity {
+public class GridLayoutCtsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/tests/tests/widget/src/android/widget/cts/GridLayoutTest.java b/tests/tests/widget/src/android/widget/cts/GridLayoutTest.java
index 638fe96..d701623 100644
--- a/tests/tests/widget/src/android/widget/cts/GridLayoutTest.java
+++ b/tests/tests/widget/src/android/widget/cts/GridLayoutTest.java
@@ -27,7 +27,7 @@
import android.widget.Button;
import android.widget.GridLayout;
import android.widget.TextView;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
import static android.view.ViewGroup.LAYOUT_MODE_OPTICAL_BOUNDS;
@@ -36,7 +36,7 @@
/**
* Test {@link android.widget.GridLayout}.
*/
-public class GridLayoutTest extends ActivityInstrumentationTestCase<GridLayoutStubActivity> {
+public class GridLayoutTest extends ActivityInstrumentationTestCase<GridLayoutCtsActivity> {
// The size of the off-screen test container in which we we will testing layout.
public static final int MAX_X = 2000;
@@ -117,7 +117,7 @@
private Context mContext;
public GridLayoutTest() {
- super("com.android.cts.stub", GridLayoutStubActivity.class);
+ super("com.android.cts.widget", GridLayoutCtsActivity.class);
}
@Override
diff --git a/tests/src/android/widget/cts/GridViewStubActivity.java b/tests/tests/widget/src/android/widget/cts/GridViewCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/GridViewStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/GridViewCtsActivity.java
index f58b7df..7a1182d 100644
--- a/tests/src/android/widget/cts/GridViewStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/GridViewCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
@@ -24,7 +24,7 @@
/**
* A minimal application for {@link GridView} test.
*/
-public class GridViewStubActivity extends Activity {
+public class GridViewCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/GridViewTest.java b/tests/tests/widget/src/android/widget/cts/GridViewTest.java
index bd42e35..042986c 100644
--- a/tests/tests/widget/src/android/widget/cts/GridViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/GridViewTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
@@ -51,13 +51,13 @@
/**
* Test {@link GridView}.
*/
-public class GridViewTest extends ActivityInstrumentationTestCase<GridViewStubActivity> {
+public class GridViewTest extends ActivityInstrumentationTestCase<GridViewCtsActivity> {
private GridView mGridView;
private Activity mActivity;
private Instrumentation mInstrumentation;
public GridViewTest() {
- super("com.android.cts.stub", GridViewStubActivity.class);
+ super("com.android.cts.widget", GridViewCtsActivity.class);
}
private GridView findGridViewById(int id) {
diff --git a/tests/src/android/widget/cts/HorizontalScrollViewStubActivity.java b/tests/tests/widget/src/android/widget/cts/HorizontalScrollViewCtsActivity.java
similarity index 89%
rename from tests/src/android/widget/cts/HorizontalScrollViewStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/HorizontalScrollViewCtsActivity.java
index 8dd6911..312111a 100644
--- a/tests/src/android/widget/cts/HorizontalScrollViewStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/HorizontalScrollViewCtsActivity.java
@@ -16,12 +16,12 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
-public class HorizontalScrollViewStubActivity extends Activity {
+public class HorizontalScrollViewCtsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/tests/tests/widget/src/android/widget/cts/HorizontalScrollViewTest.java b/tests/tests/widget/src/android/widget/cts/HorizontalScrollViewTest.java
index 5d75006..2862865 100644
--- a/tests/tests/widget/src/android/widget/cts/HorizontalScrollViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/HorizontalScrollViewTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
@@ -42,7 +42,7 @@
* Test {@link HorizontalScrollView}.
*/
public class HorizontalScrollViewTest
- extends ActivityInstrumentationTestCase2<HorizontalScrollViewStubActivity> {
+ extends ActivityInstrumentationTestCase2<HorizontalScrollViewCtsActivity> {
private static final int ITEM_WIDTH = 250;
private static final int ITEM_HEIGHT = 100;
private static final int ITEM_COUNT = 15;
@@ -53,7 +53,7 @@
private Activity mActivity;
public HorizontalScrollViewTest() {
- super("com.android.cts.stub", HorizontalScrollViewStubActivity.class);
+ super("com.android.cts.widget", HorizontalScrollViewCtsActivity.class);
}
@Override
diff --git a/tests/tests/widget/src/android/widget/cts/ImageButtonTest.java b/tests/tests/widget/src/android/widget/cts/ImageButtonTest.java
index a71ec9d..374c9c2 100644
--- a/tests/tests/widget/src/android/widget/cts/ImageButtonTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ImageButtonTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
diff --git a/tests/tests/widget/src/android/widget/cts/ImageSwitcherTest.java b/tests/tests/widget/src/android/widget/cts/ImageSwitcherTest.java
index 49bf3c6..c0e606c 100644
--- a/tests/tests/widget/src/android/widget/cts/ImageSwitcherTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ImageSwitcherTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
diff --git a/tests/src/android/widget/cts/ImageViewStubActivity.java b/tests/tests/widget/src/android/widget/cts/ImageViewCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/ImageViewStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/ImageViewCtsActivity.java
index 7b93168..295f3da 100644
--- a/tests/src/android/widget/cts/ImageViewStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/ImageViewCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
@@ -24,7 +24,7 @@
/**
* A minimal application for {@link ImageView} test.
*/
-public class ImageViewStubActivity extends Activity {
+public class ImageViewCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/ImageViewTest.java b/tests/tests/widget/src/android/widget/cts/ImageViewTest.java
index 84276f9..7b0b65a 100644
--- a/tests/tests/widget/src/android/widget/cts/ImageViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ImageViewTest.java
@@ -47,18 +47,18 @@
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
* Test {@link ImageView}.
*/
-public class ImageViewTest extends ActivityInstrumentationTestCase<ImageViewStubActivity> {
+public class ImageViewTest extends ActivityInstrumentationTestCase<ImageViewCtsActivity> {
private ImageView mImageView;
private Activity mActivity;
public ImageViewTest() {
- super("com.android.cts.stub", ImageViewStubActivity.class);
+ super("com.android.cts.widget", ImageViewCtsActivity.class);
}
/**
diff --git a/tests/src/android/widget/cts/LayoutDirectionStubActivity.java b/tests/tests/widget/src/android/widget/cts/LayoutDirectionCtsActivity.java
similarity index 90%
rename from tests/src/android/widget/cts/LayoutDirectionStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/LayoutDirectionCtsActivity.java
index 66f24f7..093f554 100644
--- a/tests/src/android/widget/cts/LayoutDirectionStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/LayoutDirectionCtsActivity.java
@@ -18,12 +18,12 @@
import android.app.Activity;
import android.os.Bundle;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
* A minimal application for layout direction test.
*/
-public class LayoutDirectionStubActivity extends Activity {
+public class LayoutDirectionCtsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/tests/tests/widget/src/android/widget/cts/LayoutDirectionTest.java b/tests/tests/widget/src/android/widget/cts/LayoutDirectionTest.java
index 5c8be24..c393e95 100644
--- a/tests/tests/widget/src/android/widget/cts/LayoutDirectionTest.java
+++ b/tests/tests/widget/src/android/widget/cts/LayoutDirectionTest.java
@@ -20,17 +20,17 @@
import android.test.UiThreadTest;
import android.view.ViewGroup;
import android.widget.*;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import static android.view.View.LAYOUT_DIRECTION_LTR;
import static android.view.View.LAYOUT_DIRECTION_RTL;
import static android.view.View.LAYOUT_DIRECTION_INHERIT;
import static android.view.View.LAYOUT_DIRECTION_LOCALE;
-public class LayoutDirectionTest extends ActivityInstrumentationTestCase2<LayoutDirectionStubActivity> {
+public class LayoutDirectionTest extends ActivityInstrumentationTestCase2<LayoutDirectionCtsActivity> {
public LayoutDirectionTest() {
- super(LayoutDirectionStubActivity.class);
+ super(LayoutDirectionCtsActivity.class);
}
private void checkDefaultDirectionForOneLayoutWithCode(ViewGroup vg) {
diff --git a/tests/src/android/widget/cts/LinearLayoutStubActivity.java b/tests/tests/widget/src/android/widget/cts/LinearLayoutCtsActivity.java
similarity index 90%
rename from tests/src/android/widget/cts/LinearLayoutStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/LinearLayoutCtsActivity.java
index 8f4c5da..0cb5bc0 100644
--- a/tests/src/android/widget/cts/LinearLayoutStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/LinearLayoutCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
@@ -24,7 +24,7 @@
/**
* A minimal application for {@link LinearLayout} test.
*/
-public class LinearLayoutStubActivity extends Activity {
+public class LinearLayoutCtsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/tests/tests/widget/src/android/widget/cts/LinearLayoutTest.java b/tests/tests/widget/src/android/widget/cts/LinearLayoutTest.java
index 4465533..5815f9a 100644
--- a/tests/tests/widget/src/android/widget/cts/LinearLayoutTest.java
+++ b/tests/tests/widget/src/android/widget/cts/LinearLayoutTest.java
@@ -31,17 +31,17 @@
import android.widget.ListView;
import android.widget.TextView;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
* Test {@link LinearLayout}.
*/
-public class LinearLayoutTest extends ActivityInstrumentationTestCase<LinearLayoutStubActivity> {
+public class LinearLayoutTest extends ActivityInstrumentationTestCase<LinearLayoutCtsActivity> {
private Context mContext;
private Activity mActivity;
public LinearLayoutTest() {
- super("com.android.cts.stub", LinearLayoutStubActivity.class);
+ super("com.android.cts.widget", LinearLayoutCtsActivity.class);
}
@Override
diff --git a/tests/tests/widget/src/android/widget/cts/LinearLayout_LayoutParamsTest.java b/tests/tests/widget/src/android/widget/cts/LinearLayout_LayoutParamsTest.java
index 72f3ff6..8ecca6f 100644
--- a/tests/tests/widget/src/android/widget/cts/LinearLayout_LayoutParamsTest.java
+++ b/tests/tests/widget/src/android/widget/cts/LinearLayout_LayoutParamsTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import com.android.internal.util.XmlUtils;
diff --git a/tests/src/android/widget/cts/ListViewStubActivity.java b/tests/tests/widget/src/android/widget/cts/ListViewCtsActivity.java
similarity index 90%
rename from tests/src/android/widget/cts/ListViewStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/ListViewCtsActivity.java
index 77c3e5e..186e47b 100644
--- a/tests/src/android/widget/cts/ListViewStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/ListViewCtsActivity.java
@@ -16,12 +16,12 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
-public class ListViewStubActivity extends Activity {
+public class ListViewCtsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/tests/tests/widget/src/android/widget/cts/ListViewTest.java b/tests/tests/widget/src/android/widget/cts/ListViewTest.java
index 7af8c2e..5f0967a 100644
--- a/tests/tests/widget/src/android/widget/cts/ListViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ListViewTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import com.google.android.collect.Lists;
import org.xmlpull.v1.XmlPullParser;
@@ -51,7 +51,7 @@
import junit.framework.Assert;
-public class ListViewTest extends ActivityInstrumentationTestCase2<ListViewStubActivity> {
+public class ListViewTest extends ActivityInstrumentationTestCase2<ListViewCtsActivity> {
private final String[] mCountryList = new String[] {
"Argentina", "Australia", "China", "France", "Germany", "Italy", "Japan", "United States"
};
@@ -69,7 +69,7 @@
private ArrayAdapter<String> mAdapter_empty;
public ListViewTest() {
- super("com.android.cts.stub", ListViewStubActivity.class);
+ super("com.android.cts.widget", ListViewCtsActivity.class);
}
protected void setUp() throws Exception {
diff --git a/tests/src/android/widget/cts/MediaControllerStubActivity.java b/tests/tests/widget/src/android/widget/cts/MediaControllerCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/MediaControllerStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/MediaControllerCtsActivity.java
index 0e353be..5dfcc59 100644
--- a/tests/src/android/widget/cts/MediaControllerStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/MediaControllerCtsActivity.java
@@ -20,12 +20,12 @@
import android.os.Bundle;
import android.widget.MediaController;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
* A minimal application for {@link MediaController} test.
*/
-public class MediaControllerStubActivity extends Activity {
+public class MediaControllerCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/MediaControllerTest.java b/tests/tests/widget/src/android/widget/cts/MediaControllerTest.java
index 5ae692b..a12dba6 100644
--- a/tests/tests/widget/src/android/widget/cts/MediaControllerTest.java
+++ b/tests/tests/widget/src/android/widget/cts/MediaControllerTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
@@ -43,14 +43,14 @@
* Test {@link MediaController}.
*/
public class MediaControllerTest extends
- ActivityInstrumentationTestCase2<MediaControllerStubActivity> {
+ ActivityInstrumentationTestCase2<MediaControllerCtsActivity> {
private MediaController mMediaController;
private Activity mActivity;
private Instrumentation mInstrumentation;
private static final long DEFAULT_TIMEOUT = 3000;
public MediaControllerTest() {
- super("com.android.cts.stub", MediaControllerStubActivity.class);
+ super("com.android.cts.widget", MediaControllerCtsActivity.class);
}
@Override
diff --git a/tests/tests/widget/src/android/widget/cts/MockApplication.java b/tests/tests/widget/src/android/widget/cts/MockApplication.java
new file mode 100644
index 0000000..827599d
--- /dev/null
+++ b/tests/tests/widget/src/android/widget/cts/MockApplication.java
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ */
+
+package android.widget.cts;
+
+import android.app.Application;
+import android.content.res.Configuration;
+
+
+public class MockApplication extends Application {
+
+ public boolean isOnCreateCalled;
+ public boolean isConstructorCalled;
+ public boolean isOnConfigurationChangedCalled;
+ public boolean isOnLowMemoryCalled;
+
+ public MockApplication() {
+ super();
+ isConstructorCalled = true;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ isOnCreateCalled = true;
+ }
+
+ @Override
+ public void onTerminate() {
+ super.onTerminate();
+ // The documentation states that one cannot rely on this method being called. No need to
+ // test it here.
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ isOnConfigurationChangedCalled = true;
+ }
+
+ @Override
+ public void onLowMemory() {
+ super.onLowMemory();
+ isOnLowMemoryCalled = true;
+ }
+}
diff --git a/tests/src/android/widget/cts/MockLinearLayout.java b/tests/tests/widget/src/android/widget/cts/MockLinearLayout.java
similarity index 100%
rename from tests/src/android/widget/cts/MockLinearLayout.java
rename to tests/tests/widget/src/android/widget/cts/MockLinearLayout.java
diff --git a/tests/src/android/widget/cts/MockPopupWindowStubActivity.java b/tests/tests/widget/src/android/widget/cts/MockPopupWindowCtsActivity.java
similarity index 90%
rename from tests/src/android/widget/cts/MockPopupWindowStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/MockPopupWindowCtsActivity.java
index 2ca81de..a68286a 100644
--- a/tests/src/android/widget/cts/MockPopupWindowStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/MockPopupWindowCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
@@ -25,7 +25,7 @@
/**
* Stub activity for testing {@link PopupWindow}
*/
-public class MockPopupWindowStubActivity extends Activity {
+public class MockPopupWindowCtsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/tests/src/android/widget/cts/MockTextView.java b/tests/tests/widget/src/android/widget/cts/MockTextView.java
similarity index 100%
rename from tests/src/android/widget/cts/MockTextView.java
rename to tests/tests/widget/src/android/widget/cts/MockTextView.java
diff --git a/tests/src/android/widget/cts/ListViewStubActivity.java b/tests/tests/widget/src/android/widget/cts/MockURLSpanTestActivity.java
similarity index 80%
copy from tests/src/android/widget/cts/ListViewStubActivity.java
copy to tests/tests/widget/src/android/widget/cts/MockURLSpanTestActivity.java
index 77c3e5e..ab4940c 100644
--- a/tests/src/android/widget/cts/ListViewStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/MockURLSpanTestActivity.java
@@ -16,15 +16,18 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
-public class ListViewStubActivity extends Activity {
+/**
+ * A Mock application for {@link URLSpan} test.
+ */
+public class MockURLSpanTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.listview_layout);
+ setContentView(R.layout.urlspan_layout);
}
}
diff --git a/tests/src/android/widget/cts/MultiAutoCompleteTextViewStubActivity.java b/tests/tests/widget/src/android/widget/cts/MultiAutoCompleteTextViewCtsActivity.java
similarity index 89%
rename from tests/src/android/widget/cts/MultiAutoCompleteTextViewStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/MultiAutoCompleteTextViewCtsActivity.java
index fa973a6..1379150 100644
--- a/tests/src/android/widget/cts/MultiAutoCompleteTextViewStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/MultiAutoCompleteTextViewCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
@@ -24,7 +24,7 @@
/**
* A minimal application for MultiAutoCompleteTextView test.
*/
-public class MultiAutoCompleteTextViewStubActivity extends Activity {
+public class MultiAutoCompleteTextViewCtsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/tests/tests/widget/src/android/widget/cts/MultiAutoCompleteTextViewTest.java b/tests/tests/widget/src/android/widget/cts/MultiAutoCompleteTextViewTest.java
index b37b4ef..75f9242 100644
--- a/tests/tests/widget/src/android/widget/cts/MultiAutoCompleteTextViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/MultiAutoCompleteTextViewTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
@@ -38,13 +38,13 @@
import android.widget.MultiAutoCompleteTextView.Tokenizer;
public class MultiAutoCompleteTextViewTest extends ActivityInstrumentationTestCase2
- <MultiAutoCompleteTextViewStubActivity> {
+ <MultiAutoCompleteTextViewCtsActivity> {
private MultiAutoCompleteTextView mMultiAutoCompleteTextView_country;
private MultiAutoCompleteTextView mMultiAutoCompleteTextView_name;
private Activity mActivity;
public MultiAutoCompleteTextViewTest() {
- super("com.android.cts.stub", MultiAutoCompleteTextViewStubActivity.class);
+ super("com.android.cts.widget", MultiAutoCompleteTextViewCtsActivity.class);
}
@Override
diff --git a/tests/src/android/widget/cts/MyGallery.java b/tests/tests/widget/src/android/widget/cts/MyGallery.java
similarity index 100%
rename from tests/src/android/widget/cts/MyGallery.java
rename to tests/tests/widget/src/android/widget/cts/MyGallery.java
diff --git a/tests/src/android/widget/cts/MyHorizontalScrollView.java b/tests/tests/widget/src/android/widget/cts/MyHorizontalScrollView.java
similarity index 100%
rename from tests/src/android/widget/cts/MyHorizontalScrollView.java
rename to tests/tests/widget/src/android/widget/cts/MyHorizontalScrollView.java
diff --git a/tests/src/android/widget/cts/MyScrollView.java b/tests/tests/widget/src/android/widget/cts/MyScrollView.java
similarity index 100%
rename from tests/src/android/widget/cts/MyScrollView.java
rename to tests/tests/widget/src/android/widget/cts/MyScrollView.java
diff --git a/tests/tests/widget/src/android/widget/cts/NullWebViewUtils.java b/tests/tests/widget/src/android/widget/cts/NullWebViewUtils.java
new file mode 100644
index 0000000..d7a73fa
--- /dev/null
+++ b/tests/tests/widget/src/android/widget/cts/NullWebViewUtils.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2010 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 android.widget.cts;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+
+/**
+ * Utilities to enable the android.webkit.* CTS tests (and others that rely on a functioning
+ * android.webkit.WebView implementation) to determine whether a functioning WebView is present
+ * on the device or not.
+ *
+ * Test cases that require android.webkit.* classes should wrap their first usage of WebView in a
+ * try catch block, and pass any exception that is thrown to
+ * NullWebViewUtils.determineIfWebViewAvailable. The return value of
+ * NullWebViewUtils.isWebViewAvailable will then determine if the test should expect to be able to
+ * use a WebView.
+ */
+public class NullWebViewUtils {
+
+ private static boolean sWebViewUnavailable;
+
+ /**
+ * @param context Current Activity context, used to query the PackageManager.
+ * @param t An exception thrown by trying to invoke android.webkit.* APIs.
+ */
+ public static void determineIfWebViewAvailable(Context context, Throwable t) {
+ sWebViewUnavailable = !hasWebViewFeature(context) && checkCauseWasUnsupportedOperation(t);
+ }
+
+ /**
+ * After calling determineIfWebViewAvailable, this returns whether a WebView is available on the
+ * device and wheter the test can rely on it.
+ * @return True iff. PackageManager determined that there is no WebView on the device and the
+ * exception thrown from android.webkit.* was UnsupportedOperationException.
+ */
+ public static boolean isWebViewAvailable() {
+ return !sWebViewUnavailable;
+ }
+
+ private static boolean hasWebViewFeature(Context context) {
+ // Query the system property that determins if there is a functional WebView on the device.
+ PackageManager pm = context.getPackageManager();
+ return pm.hasSystemFeature(PackageManager.FEATURE_WEBVIEW);
+ }
+
+ private static boolean checkCauseWasUnsupportedOperation(Throwable t) {
+ if (t == null) return false;
+ while (t.getCause() != null) {
+ t = t.getCause();
+ }
+ return t instanceof UnsupportedOperationException;
+ }
+
+ /**
+ * Some CTS tests (by design) first use android.webkit.* from a background thread. This helper
+ * allows the test to catch the UnsupportedOperationException from that background thread, and
+ * then query the result from the test main thread.
+ */
+ public static class NullWebViewFromThreadExceptionHandler
+ implements Thread.UncaughtExceptionHandler {
+ private Throwable mPendingException;
+
+ @Override
+ public void uncaughtException(Thread t, Throwable e) {
+ mPendingException = e;
+ }
+
+ public boolean isWebViewAvailable(Context context) {
+ return hasWebViewFeature(context) ||
+ !checkCauseWasUnsupportedOperation(mPendingException);
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/tests/widget/src/android/widget/cts/PopupWindowTest.java b/tests/tests/widget/src/android/widget/cts/PopupWindowTest.java
index 997c2e9..9c4c3a3 100644
--- a/tests/tests/widget/src/android/widget/cts/PopupWindowTest.java
+++ b/tests/tests/widget/src/android/widget/cts/PopupWindowTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
@@ -41,7 +41,7 @@
import android.widget.PopupWindow.OnDismissListener;
public class PopupWindowTest extends
- ActivityInstrumentationTestCase2<MockPopupWindowStubActivity> {
+ ActivityInstrumentationTestCase2<MockPopupWindowCtsActivity> {
private Instrumentation mInstrumentation;
private Activity mActivity;
/** The popup window. */
@@ -51,7 +51,7 @@
* Instantiates a new popup window test.
*/
public PopupWindowTest() {
- super("com.android.cts.stub", MockPopupWindowStubActivity.class);
+ super("com.android.cts.widget", MockPopupWindowCtsActivity.class);
}
/*
diff --git a/tests/src/android/widget/cts/ProgressBarStubActivity.java b/tests/tests/widget/src/android/widget/cts/ProgressBarCtsActivity.java
similarity index 93%
rename from tests/src/android/widget/cts/ProgressBarStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/ProgressBarCtsActivity.java
index 57cfa1a..8298d5f 100644
--- a/tests/src/android/widget/cts/ProgressBarStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/ProgressBarCtsActivity.java
@@ -23,7 +23,7 @@
* An application for ProgressBar test
*
*/
-public class ProgressBarStubActivity extends Activity {
+public class ProgressBarCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/ProgressBarTest.java b/tests/tests/widget/src/android/widget/cts/ProgressBarTest.java
index 80681d0..e57d298 100644
--- a/tests/tests/widget/src/android/widget/cts/ProgressBarTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ProgressBarTest.java
@@ -21,7 +21,7 @@
import android.graphics.PorterDuff;
import android.view.LayoutInflater;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.content.Context;
diff --git a/tests/tests/widget/src/android/widget/cts/RadioButtonTest.java b/tests/tests/widget/src/android/widget/cts/RadioButtonTest.java
index 79a51c8..c6ee1b7 100644
--- a/tests/tests/widget/src/android/widget/cts/RadioButtonTest.java
+++ b/tests/tests/widget/src/android/widget/cts/RadioButtonTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.content.Context;
diff --git a/tests/tests/widget/src/android/widget/cts/RadioGroupTest.java b/tests/tests/widget/src/android/widget/cts/RadioGroupTest.java
index f7baab7..ee912fc 100644
--- a/tests/tests/widget/src/android/widget/cts/RadioGroupTest.java
+++ b/tests/tests/widget/src/android/widget/cts/RadioGroupTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
diff --git a/tests/tests/widget/src/android/widget/cts/RadioGroup_LayoutParamsTest.java b/tests/tests/widget/src/android/widget/cts/RadioGroup_LayoutParamsTest.java
index 23155c7..4b1aa5b 100644
--- a/tests/tests/widget/src/android/widget/cts/RadioGroup_LayoutParamsTest.java
+++ b/tests/tests/widget/src/android/widget/cts/RadioGroup_LayoutParamsTest.java
@@ -113,8 +113,8 @@
} catch (NullPointerException e) {
}
- mLayoutParams = new LayoutParams(getContext(),
- getAttributeSet(com.android.cts.stub.R.layout.radiogroup_1));
+ mLayoutParams = new LayoutParams(getContext(),
+ getAttributeSet(com.android.cts.widget.R.layout.radiogroup_1));
assertNotNull(mLayoutParams);
assertEquals(0.5, mLayoutParams.weight, 0);
assertEquals(Gravity.BOTTOM, mLayoutParams.gravity);
@@ -130,8 +130,8 @@
assertEquals(RadioGroup.LayoutParams.WRAP_CONTENT, mLayoutParams.height);
try {
- new RadioGroup.LayoutParams(null,
- getAttributeSet(com.android.cts.stub.R.layout.radiogroup_1));
+ new RadioGroup.LayoutParams(null,
+ getAttributeSet(com.android.cts.widget.R.layout.radiogroup_1));
fail("The constructor should throw NullPointerException when param Context is null.");
} catch (NullPointerException e) {
}
@@ -143,7 +143,7 @@
assertEquals(LayoutParams.WRAP_CONTENT, layoutParams.width);
assertEquals(LayoutParams.WRAP_CONTENT, layoutParams.height);
- AttributeSet attrs = getAttributeSet(com.android.cts.stub.R.layout.radiogroup_1);
+ AttributeSet attrs = getAttributeSet(com.android.cts.widget.R.layout.radiogroup_1);
TypedArray a = mContext.obtainStyledAttributes(attrs, R.styleable.ViewGroup_MarginLayout);
layoutParams.setBaseAttributes(a,
R.styleable.ViewGroup_MarginLayout_layout_width,
diff --git a/tests/src/android/widget/cts/RatingBarStubActivity.java b/tests/tests/widget/src/android/widget/cts/RatingBarCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/RatingBarStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/RatingBarCtsActivity.java
index 9635252..7d4e232 100644
--- a/tests/src/android/widget/cts/RatingBarStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/RatingBarCtsActivity.java
@@ -19,13 +19,13 @@
import android.app.Activity;
import android.os.Bundle;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
* An application for ProgressBar test
*
*/
-public class RatingBarStubActivity extends Activity {
+public class RatingBarCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/RatingBarTest.java b/tests/tests/widget/src/android/widget/cts/RatingBarTest.java
index fe0e647..1bb42e8 100644
--- a/tests/tests/widget/src/android/widget/cts/RatingBarTest.java
+++ b/tests/tests/widget/src/android/widget/cts/RatingBarTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.content.Context;
@@ -28,12 +28,12 @@
/**
* Test {@link RatingBar}.
*/
-public class RatingBarTest extends ActivityInstrumentationTestCase2<RatingBarStubActivity> {
+public class RatingBarTest extends ActivityInstrumentationTestCase2<RatingBarCtsActivity> {
private Context mContext;
- private RatingBarStubActivity mActivity;
+ private RatingBarCtsActivity mActivity;
public RatingBarTest() {
- super("com.android.cts.stub", RatingBarStubActivity.class);
+ super("com.android.cts.widget", RatingBarCtsActivity.class);
}
@Override
diff --git a/tests/src/android/widget/cts/RelativeLayoutStubActivity.java b/tests/tests/widget/src/android/widget/cts/RelativeLayoutCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/RelativeLayoutStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/RelativeLayoutCtsActivity.java
index d4bd474..df83f54 100644
--- a/tests/src/android/widget/cts/RelativeLayoutStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/RelativeLayoutCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
@@ -24,7 +24,7 @@
/**
* A minimal application for RelativeLayout test.
*/
-public class RelativeLayoutStubActivity extends Activity {
+public class RelativeLayoutCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/RelativeLayoutTest.java b/tests/tests/widget/src/android/widget/cts/RelativeLayoutTest.java
index 9d15160..b5ce5c9 100644
--- a/tests/tests/widget/src/android/widget/cts/RelativeLayoutTest.java
+++ b/tests/tests/widget/src/android/widget/cts/RelativeLayoutTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import com.android.internal.util.XmlUtils;
@@ -43,11 +43,11 @@
* Test {@link RelativeLayout}.
*/
public class RelativeLayoutTest extends
- ActivityInstrumentationTestCase2<RelativeLayoutStubActivity> {
+ ActivityInstrumentationTestCase2<RelativeLayoutCtsActivity> {
private Activity mActivity;
public RelativeLayoutTest() {
- super("com.android.cts.stub", RelativeLayoutStubActivity.class);
+ super("com.android.cts.widget", RelativeLayoutCtsActivity.class);
}
@Override
diff --git a/tests/tests/widget/src/android/widget/cts/RelativeLayout_LayoutParamsTest.java b/tests/tests/widget/src/android/widget/cts/RelativeLayout_LayoutParamsTest.java
index 04682cb..a3bd95c 100644
--- a/tests/tests/widget/src/android/widget/cts/RelativeLayout_LayoutParamsTest.java
+++ b/tests/tests/widget/src/android/widget/cts/RelativeLayout_LayoutParamsTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.test.ActivityInstrumentationTestCase2;
@@ -29,10 +29,10 @@
* Test {@link RelativeLayout.LayoutParams}.
*/
public class RelativeLayout_LayoutParamsTest extends
- ActivityInstrumentationTestCase2<RelativeLayoutStubActivity> {
+ ActivityInstrumentationTestCase2<RelativeLayoutCtsActivity> {
public RelativeLayout_LayoutParamsTest() {
- super("com.android.cts.stub", RelativeLayoutStubActivity.class);
+ super("com.android.cts.widget", RelativeLayoutCtsActivity.class);
}
public void testConstructor() {
@@ -53,7 +53,7 @@
// Test RelativeLayout.Params which generated from the xml file.
int rules[];
- RelativeLayoutStubActivity activity = getActivity();
+ RelativeLayoutCtsActivity activity = getActivity();
// test attributes used in RelativeLayout.
RelativeLayout relativeLayout = (RelativeLayout) activity.findViewById(
@@ -160,7 +160,7 @@
// Test RelativeLayout.Params which generated from the xml file.
int rules[];
- RelativeLayoutStubActivity activity = getActivity();
+ RelativeLayoutCtsActivity activity = getActivity();
// test attributes used in RelativeLayout.
RelativeLayout relativeLayout = (RelativeLayout) activity.findViewById(
diff --git a/tests/tests/widget/src/android/widget/cts/RemoteViewsActivityTest.java b/tests/tests/widget/src/android/widget/cts/RemoteViewsActivityTest.java
index b3c0915..a03edce 100644
--- a/tests/tests/widget/src/android/widget/cts/RemoteViewsActivityTest.java
+++ b/tests/tests/widget/src/android/widget/cts/RemoteViewsActivityTest.java
@@ -23,18 +23,17 @@
import android.view.InflateException;
import android.view.View;
import android.view.ViewGroup;
-import android.webkit.cts.NullWebViewUtils;
import android.widget.RemoteViews;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
public class RemoteViewsActivityTest
- extends ActivityInstrumentationTestCase2<RemoteViewsStubActivity> {
- private static final String PACKAGE_NAME = "com.android.cts.stub";
+ extends ActivityInstrumentationTestCase2<RemoteViewsCtsActivity> {
+ private static final String PACKAGE_NAME = "com.android.cts.widget";
private Activity mActivity;
public RemoteViewsActivityTest() {
- super(PACKAGE_NAME, RemoteViewsStubActivity.class);
+ super(PACKAGE_NAME, RemoteViewsCtsActivity.class);
}
@Override
diff --git a/tests/src/android/widget/cts/RemoteViewsStubActivity.java b/tests/tests/widget/src/android/widget/cts/RemoteViewsCtsActivity.java
similarity index 88%
rename from tests/src/android/widget/cts/RemoteViewsStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/RemoteViewsCtsActivity.java
index f16ae13..6826eb3 100644
--- a/tests/src/android/widget/cts/RemoteViewsStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/RemoteViewsCtsActivity.java
@@ -16,17 +16,16 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
-import android.webkit.cts.NullWebViewUtils;
import android.widget.RemoteViews;
/**
* Stub activity for testing {@link RemoteViews}
*/
-public class RemoteViewsStubActivity extends Activity {
+public class RemoteViewsCtsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
try {
diff --git a/tests/tests/widget/src/android/widget/cts/RemoteViewsTest.java b/tests/tests/widget/src/android/widget/cts/RemoteViewsTest.java
index 891bdf7..c958d8c 100644
--- a/tests/tests/widget/src/android/widget/cts/RemoteViewsTest.java
+++ b/tests/tests/widget/src/android/widget/cts/RemoteViewsTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
@@ -31,7 +31,6 @@
import android.net.Uri;
import android.os.Parcel;
import android.test.ActivityInstrumentationTestCase2;
-import android.text.style.cts.MockURLSpanTestActivity;
import android.view.View;
import android.widget.AbsoluteLayout;
import android.widget.Chronometer;
@@ -56,8 +55,8 @@
/**
* Test {@link RemoteViews}.
*/
-public class RemoteViewsTest extends ActivityInstrumentationTestCase2<RemoteViewsStubActivity> {
- private static final String PACKAGE_NAME = "com.android.cts.stub";
+public class RemoteViewsTest extends ActivityInstrumentationTestCase2<RemoteViewsCtsActivity> {
+ private static final String PACKAGE_NAME = "com.android.cts.widget";
private static final int INVALD_ID = -1;
@@ -70,7 +69,7 @@
private Activity mActivity;
public RemoteViewsTest() {
- super(PACKAGE_NAME, RemoteViewsStubActivity.class);
+ super(PACKAGE_NAME, RemoteViewsCtsActivity.class);
}
@Override
diff --git a/tests/tests/widget/src/android/widget/cts/ResourceCursorAdapterTest.java b/tests/tests/widget/src/android/widget/cts/ResourceCursorAdapterTest.java
index d91094c..ed9d09c 100644
--- a/tests/tests/widget/src/android/widget/cts/ResourceCursorAdapterTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ResourceCursorAdapterTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.content.Context;
diff --git a/tests/tests/widget/src/android/widget/cts/ResourceCursorTreeAdapterTest.java b/tests/tests/widget/src/android/widget/cts/ResourceCursorTreeAdapterTest.java
index 4a5a9c9..4f137a0 100644
--- a/tests/tests/widget/src/android/widget/cts/ResourceCursorTreeAdapterTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ResourceCursorTreeAdapterTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.content.Context;
diff --git a/tests/src/android/widget/cts/ScrollViewStubActivity.java b/tests/tests/widget/src/android/widget/cts/ScrollViewCtsActivity.java
similarity index 90%
rename from tests/src/android/widget/cts/ScrollViewStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/ScrollViewCtsActivity.java
index 4daeb9f..8965610 100644
--- a/tests/src/android/widget/cts/ScrollViewStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/ScrollViewCtsActivity.java
@@ -16,12 +16,12 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
-public class ScrollViewStubActivity extends Activity {
+public class ScrollViewCtsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/tests/tests/widget/src/android/widget/cts/ScrollViewTest.java b/tests/tests/widget/src/android/widget/cts/ScrollViewTest.java
index e297744..a8fb224 100644
--- a/tests/tests/widget/src/android/widget/cts/ScrollViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ScrollViewTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
@@ -41,7 +41,7 @@
/**
* Test {@link ScrollView}.
*/
-public class ScrollViewTest extends ActivityInstrumentationTestCase2<ScrollViewStubActivity> {
+public class ScrollViewTest extends ActivityInstrumentationTestCase2<ScrollViewCtsActivity> {
// view dpi constants. Must match those defined in scroll_view layout
private static final int ITEM_WIDTH_DPI = 250;
private static final int ITEM_HEIGHT_DPI = 100;
@@ -61,7 +61,7 @@
private Activity mActivity;
public ScrollViewTest() {
- super("com.android.cts.stub", ScrollViewStubActivity.class);
+ super("com.android.cts.widget", ScrollViewCtsActivity.class);
}
@Override
diff --git a/tests/src/android/widget/cts/SeekBarStubActivity.java b/tests/tests/widget/src/android/widget/cts/SeekBarCtsActivity.java
similarity index 93%
rename from tests/src/android/widget/cts/SeekBarStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/SeekBarCtsActivity.java
index 81d3d41..e7842c2 100644
--- a/tests/src/android/widget/cts/SeekBarStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/SeekBarCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
@@ -26,7 +26,7 @@
/**
* Stub activity for testing {@link SeekBar}
*/
-public class SeekBarStubActivity extends Activity {
+public class SeekBarCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/SeekBarTest.java b/tests/tests/widget/src/android/widget/cts/SeekBarTest.java
index 266583f..54bbedf 100644
--- a/tests/tests/widget/src/android/widget/cts/SeekBarTest.java
+++ b/tests/tests/widget/src/android/widget/cts/SeekBarTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
@@ -30,7 +30,7 @@
/**
* Test {@link SeekBar}.
*/
-public class SeekBarTest extends ActivityInstrumentationTestCase2<SeekBarStubActivity> {
+public class SeekBarTest extends ActivityInstrumentationTestCase2<SeekBarCtsActivity> {
private SeekBar mSeekBar;
private Activity mActivity;
@@ -38,7 +38,7 @@
private Instrumentation mInstrumentation;
public SeekBarTest() {
- super("com.android.cts.stub", SeekBarStubActivity.class);
+ super("com.android.cts.widget", SeekBarCtsActivity.class);
}
@Override
diff --git a/tests/tests/widget/src/android/widget/cts/SimpleAdapterTest.java b/tests/tests/widget/src/android/widget/cts/SimpleAdapterTest.java
index 8b35a2f..86a4bca 100644
--- a/tests/tests/widget/src/android/widget/cts/SimpleAdapterTest.java
+++ b/tests/tests/widget/src/android/widget/cts/SimpleAdapterTest.java
@@ -89,7 +89,7 @@
mContext = getInstrumentation().getTargetContext();
mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mAdapterHost = (LinearLayout) mInflater.inflate(
- com.android.cts.stub.R.layout.cursoradapter_host, null);
+ com.android.cts.widget.R.layout.cursoradapter_host, null);
// new the SimpleAdapter instance
mSimpleAdapter = new SimpleAdapter(mContext,
@@ -280,9 +280,9 @@
// String represents resId
ImageView view = new ImageView(mContext);
assertNull(view.getDrawable());
- mSimpleAdapter.setViewImage(view, String.valueOf(com.android.cts.stub.R.drawable.scenery));
+ mSimpleAdapter.setViewImage(view, String.valueOf(com.android.cts.widget.R.drawable.scenery));
BitmapDrawable d = (BitmapDrawable) mContext.getResources().getDrawable(
- com.android.cts.stub.R.drawable.scenery);
+ com.android.cts.widget.R.drawable.scenery);
WidgetTestUtils.assertEquals(d.getBitmap(),
((BitmapDrawable) view.getDrawable()).getBitmap());
@@ -305,9 +305,9 @@
// resId
view = new ImageView(mContext);
assertNull(view.getDrawable());
- mSimpleAdapter.setViewImage(view, com.android.cts.stub.R.drawable.scenery);
+ mSimpleAdapter.setViewImage(view, com.android.cts.widget.R.drawable.scenery);
d = (BitmapDrawable) mContext.getResources()
- .getDrawable(com.android.cts.stub.R.drawable.scenery);
+ .getDrawable(com.android.cts.widget.R.drawable.scenery);
WidgetTestUtils.assertEquals(d.getBitmap(),
((BitmapDrawable) view.getDrawable()).getBitmap());
@@ -322,11 +322,11 @@
assertNull(view.getDrawable());
try {
mSimpleAdapter.setViewImage(view, SimpleCursorAdapterTest.createTestImage(mContext,
- "testimage", com.android.cts.stub.R.raw.testimage));
+ "testimage", com.android.cts.widget.R.raw.testimage));
assertNotNull(view.getDrawable());
Bitmap actualBitmap = ((BitmapDrawable) view.getDrawable()).getBitmap();
Bitmap testBitmap = WidgetTestUtils.getUnscaledAndDitheredBitmap(mContext.getResources(),
- com.android.cts.stub.R.raw.testimage, actualBitmap.getConfig());
+ com.android.cts.widget.R.raw.testimage, actualBitmap.getConfig());
WidgetTestUtils.assertEquals(testBitmap, actualBitmap);
} finally {
SimpleCursorAdapterTest.destroyTestImage(mContext,"testimage");
diff --git a/tests/tests/widget/src/android/widget/cts/SimpleCursorAdapterTest.java b/tests/tests/widget/src/android/widget/cts/SimpleCursorAdapterTest.java
index 59660e0..2d73a03 100644
--- a/tests/tests/widget/src/android/widget/cts/SimpleCursorAdapterTest.java
+++ b/tests/tests/widget/src/android/widget/cts/SimpleCursorAdapterTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.content.Context;
@@ -175,7 +175,7 @@
public void testSetViewImage() {
// resId
- int sceneryImgResId = com.android.cts.stub.R.drawable.scenery;
+ int sceneryImgResId = com.android.cts.widget.R.drawable.scenery;
ImageView view = new ImageView(mContext);
assertNull(view.getDrawable());
mSimpleCursorAdapter.setViewImage(view, String.valueOf(sceneryImgResId));
@@ -206,7 +206,7 @@
view = new ImageView(mContext);
assertNull(view.getDrawable());
try {
- int testimgRawId = com.android.cts.stub.R.raw.testimage;
+ int testimgRawId = com.android.cts.widget.R.raw.testimage;
mSimpleCursorAdapter.setViewImage(view,
createTestImage(mContext, SAMPLE_IMAGE_NAME, testimgRawId));
assertNotNull(view.getDrawable());
@@ -307,7 +307,7 @@
LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
ViewGroup viewGroup = (ViewGroup) layoutInflater.inflate(
- com.android.cts.stub.R.layout.cursoradapter_host, null);
+ com.android.cts.widget.R.layout.cursoradapter_host, null);
View result = mSimpleCursorAdapter.newView(mContext, null, viewGroup);
assertNotNull(result);
assertEquals(R.id.cursorAdapter_item0, result.getId());
@@ -321,7 +321,7 @@
LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
ViewGroup viewGroup = (ViewGroup) layoutInflater.inflate(
- com.android.cts.stub.R.layout.cursoradapter_host, null);
+ com.android.cts.widget.R.layout.cursoradapter_host, null);
View result = mSimpleCursorAdapter.newDropDownView(null, null, viewGroup);
assertNotNull(result);
assertEquals(R.id.cursorAdapter_item0, result.getId());
diff --git a/tests/tests/widget/src/android/widget/cts/SimpleCursorTreeAdapterTest.java b/tests/tests/widget/src/android/widget/cts/SimpleCursorTreeAdapterTest.java
index bf9e358..9085b55 100644
--- a/tests/tests/widget/src/android/widget/cts/SimpleCursorTreeAdapterTest.java
+++ b/tests/tests/widget/src/android/widget/cts/SimpleCursorTreeAdapterTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.content.Context;
@@ -130,9 +130,9 @@
ImageView view = new ImageView(mContext);
assertNull(view.getDrawable());
mSimpleCursorTreeAdapter.setViewImage(view,
- String.valueOf(com.android.cts.stub.R.drawable.scenery));
+ String.valueOf(com.android.cts.widget.R.drawable.scenery));
BitmapDrawable d = (BitmapDrawable) mContext.getResources().getDrawable(
- com.android.cts.stub.R.drawable.scenery);
+ com.android.cts.widget.R.drawable.scenery);
WidgetTestUtils.assertEquals(d.getBitmap(),
((BitmapDrawable) view.getDrawable()).getBitmap());
@@ -158,10 +158,10 @@
try {
mSimpleCursorTreeAdapter.setViewImage(view,
SimpleCursorAdapterTest.createTestImage(mContext, SAMPLE_IMAGE_NAME,
- com.android.cts.stub.R.raw.testimage));
+ com.android.cts.widget.R.raw.testimage));
Bitmap actualBitmap = ((BitmapDrawable) view.getDrawable()).getBitmap();
Bitmap test = WidgetTestUtils.getUnscaledAndDitheredBitmap(mContext.getResources(),
- com.android.cts.stub.R.raw.testimage, actualBitmap.getConfig());
+ com.android.cts.widget.R.raw.testimage, actualBitmap.getConfig());
WidgetTestUtils.assertEquals(test, actualBitmap);
} finally {
SimpleCursorAdapterTest.destroyTestImage(mContext, SAMPLE_IMAGE_NAME);
diff --git a/tests/tests/widget/src/android/widget/cts/SimpleExpandableListAdapterTest.java b/tests/tests/widget/src/android/widget/cts/SimpleExpandableListAdapterTest.java
index 7c4fe23..a7bfc31 100644
--- a/tests/tests/widget/src/android/widget/cts/SimpleExpandableListAdapterTest.java
+++ b/tests/tests/widget/src/android/widget/cts/SimpleExpandableListAdapterTest.java
@@ -98,7 +98,7 @@
mAdapterHost = (LinearLayout) ((LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
- com.android.cts.stub.R.layout.cursoradapter_host, null);
+ com.android.cts.widget.R.layout.cursoradapter_host, null);
}
public void testConstructor() {
diff --git a/tests/src/android/widget/cts/SlidingDrawerStubActivity.java b/tests/tests/widget/src/android/widget/cts/SlidingDrawerCtsActivity.java
similarity index 90%
rename from tests/src/android/widget/cts/SlidingDrawerStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/SlidingDrawerCtsActivity.java
index d19b9b1..8b55e63 100644
--- a/tests/src/android/widget/cts/SlidingDrawerStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/SlidingDrawerCtsActivity.java
@@ -16,12 +16,12 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
-public class SlidingDrawerStubActivity extends Activity {
+public class SlidingDrawerCtsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/tests/tests/widget/src/android/widget/cts/SlidingDrawerTest.java b/tests/tests/widget/src/android/widget/cts/SlidingDrawerTest.java
index 60666ae..c4aaca1 100644
--- a/tests/tests/widget/src/android/widget/cts/SlidingDrawerTest.java
+++ b/tests/tests/widget/src/android/widget/cts/SlidingDrawerTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
@@ -44,14 +44,14 @@
* Test {@link SlidingDrawer}.
*/
public class SlidingDrawerTest
- extends ActivityInstrumentationTestCase2<SlidingDrawerStubActivity> {
+ extends ActivityInstrumentationTestCase2<SlidingDrawerCtsActivity> {
private static final long TEST_TIMEOUT = 5000L;
private Activity mActivity;
private Object mLock;
public SlidingDrawerTest() {
- super("com.android.cts.stub", SlidingDrawerStubActivity.class);
+ super("com.android.cts.widget", SlidingDrawerCtsActivity.class);
}
@Override
diff --git a/tests/tests/widget/src/android/widget/cts/SpinnerTest.java b/tests/tests/widget/src/android/widget/cts/SpinnerTest.java
index 8ffd90b..7a2de0c 100644
--- a/tests/tests/widget/src/android/widget/cts/SpinnerTest.java
+++ b/tests/tests/widget/src/android/widget/cts/SpinnerTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.AlertDialog;
@@ -31,11 +31,11 @@
/**
* Test {@link Spinner}.
*/
-public class SpinnerTest extends ActivityInstrumentationTestCase2<RelativeLayoutStubActivity> {
+public class SpinnerTest extends ActivityInstrumentationTestCase2<RelativeLayoutCtsActivity> {
private Context mTargetContext;
public SpinnerTest() {
- super("com.android.cts.stub", RelativeLayoutStubActivity.class);
+ super("com.android.cts.widget", RelativeLayoutCtsActivity.class);
}
@Override
@@ -63,7 +63,7 @@
spinner = (Spinner) getActivity().findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(mTargetContext,
- com.android.cts.stub.R.array.string, android.R.layout.simple_spinner_item);
+ com.android.cts.widget.R.array.string, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
assertTrue(spinner.getBaseline() > 0);
diff --git a/tests/src/android/widget/cts/TabHostStubActivity.java b/tests/tests/widget/src/android/widget/cts/TabHostCtsActivity.java
similarity index 94%
rename from tests/src/android/widget/cts/TabHostStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/TabHostCtsActivity.java
index 78e0894..9703dd7 100644
--- a/tests/src/android/widget/cts/TabHostStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/TabHostCtsActivity.java
@@ -22,13 +22,13 @@
import android.widget.TabHost;
import android.widget.TextView;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
* A minimal application for TabHost test.
* It contains an initial tab whose tag is INITIAL_TAB_TAG and label is INITIAL_TAB_LABEL.
*/
-public class TabHostStubActivity extends TabActivity {
+public class TabHostCtsActivity extends TabActivity {
public static final String INITIAL_TAB_TAG = "initial tag";
public static final String INITIAL_TAB_LABEL = "initial label";
public static final String INITIAL_VIEW_TEXT = "initial view text";
diff --git a/tests/tests/widget/src/android/widget/cts/TabHostTest.java b/tests/tests/widget/src/android/widget/cts/TabHostTest.java
index 07334ad..3af8d9c 100644
--- a/tests/tests/widget/src/android/widget/cts/TabHostTest.java
+++ b/tests/tests/widget/src/android/widget/cts/TabHostTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
@@ -34,15 +34,15 @@
/**
* Test {@link TabHost}.
*/
-public class TabHostTest extends ActivityInstrumentationTestCase2<TabHostStubActivity> {
+public class TabHostTest extends ActivityInstrumentationTestCase2<TabHostCtsActivity> {
private static final String TAG_TAB1 = "tab 1";
private static final String TAG_TAB2 = "tab 2";
private static final int TAB_HOST_ID = android.R.id.tabhost;
- private TabHostStubActivity mActivity;
+ private TabHostCtsActivity mActivity;
public TabHostTest() {
- super("com.android.cts.stub", TabHostStubActivity.class);
+ super("com.android.cts.widget", TabHostCtsActivity.class);
}
@Override
@@ -71,7 +71,7 @@
* 2. no exception occurs when doing normal operation after setup().
*/
public void testSetup1() throws Throwable {
- final Activity activity = launchActivity("com.android.cts.stub", StubActivity.class, null);
+ final Activity activity = launchActivity("com.android.cts.widget", CtsActivity.class, null);
runTestOnUiThread(new Runnable() {
public void run() {
@@ -102,7 +102,7 @@
* 2. no exception occurs when uses TabSpec.setContent(android.content.Intent) after setup().
*/
public void testSetup2() throws Throwable {
- final ActivityGroup activity = launchActivity("com.android.cts.stub",
+ final ActivityGroup activity = launchActivity("com.android.cts.widget",
ActivityGroup.class, null);
@@ -120,7 +120,7 @@
TabSpec tabSpec = tabHost.newTabSpec(TAG_TAB1);
tabSpec.setIndicator(TAG_TAB1);
Intent intent = new Intent(Intent.ACTION_VIEW, null,
- mActivity, StubActivity.class);
+ mActivity, CtsActivity.class);
tabSpec.setContent(intent);
tabHost.addTab(tabSpec);
tabHost.setCurrentTab(0);
@@ -249,7 +249,7 @@
public void testGetCurrentView() {
TabHost tabHost = mActivity.getTabHost();
TextView textView = (TextView) tabHost.getCurrentView();
- assertEquals(TabHostStubActivity.INITIAL_VIEW_TEXT, textView.getText().toString());
+ assertEquals(TabHostCtsActivity.INITIAL_VIEW_TEXT, textView.getText().toString());
TabSpec tabSpec = tabHost.newTabSpec(TAG_TAB2);
tabSpec.setIndicator(TAG_TAB2);
@@ -272,7 +272,7 @@
tabHost.setCurrentTabByTag(TAG_TAB2);
assertEquals(1, tabHost.getCurrentTab());
- tabHost.setCurrentTabByTag(TabHostStubActivity.INITIAL_TAB_TAG);
+ tabHost.setCurrentTabByTag(TabHostCtsActivity.INITIAL_TAB_TAG);
assertEquals(0, tabHost.getCurrentTab());
// exceptional value
@@ -294,7 +294,7 @@
assertTrue(tabHost.getTabContentView().getChildAt(1) instanceof ListView);
TextView child2 = (TextView) tabHost.getTabContentView().getChildAt(2);
tabHost.setCurrentTab(0);
- assertEquals(TabHostStubActivity.INITIAL_VIEW_TEXT, child2.getText().toString());
+ assertEquals(TabHostCtsActivity.INITIAL_VIEW_TEXT, child2.getText().toString());
TabSpec tabSpec = tabHost.newTabSpec(TAG_TAB2);
tabSpec.setIndicator(TAG_TAB2);
@@ -310,7 +310,7 @@
assertTrue(tabHost.getTabContentView().getChildAt(1) instanceof ListView);
child2 = (TextView) tabHost.getTabContentView().getChildAt(2);
tabHost.setCurrentTab(0);
- assertEquals(TabHostStubActivity.INITIAL_VIEW_TEXT, child2.getText().toString());
+ assertEquals(TabHostCtsActivity.INITIAL_VIEW_TEXT, child2.getText().toString());
}
@UiThreadTest
@@ -357,7 +357,7 @@
@UiThreadTest
public void testGetCurrentTabTag() {
TabHost tabHost = mActivity.getTabHost();
- assertEquals(TabHostStubActivity.INITIAL_TAB_TAG, tabHost.getCurrentTabTag());
+ assertEquals(TabHostCtsActivity.INITIAL_TAB_TAG, tabHost.getCurrentTabTag());
TabSpec tabSpec = tabHost.newTabSpec(TAG_TAB2);
tabSpec.setIndicator(TAG_TAB2);
diff --git a/tests/tests/widget/src/android/widget/cts/TabHost_TabSpecTest.java b/tests/tests/widget/src/android/widget/cts/TabHost_TabSpecTest.java
index 470a666..1363491 100644
--- a/tests/tests/widget/src/android/widget/cts/TabHost_TabSpecTest.java
+++ b/tests/tests/widget/src/android/widget/cts/TabHost_TabSpecTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
@@ -29,7 +29,6 @@
import android.net.Uri;
import android.test.ActivityInstrumentationTestCase2;
import android.test.UiThreadTest;
-import android.text.style.cts.MockURLSpanTestActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
@@ -40,14 +39,14 @@
/**
* Test {@link TabSpec}.
*/
-public class TabHost_TabSpecTest extends ActivityInstrumentationTestCase2<TabHostStubActivity> {
+public class TabHost_TabSpecTest extends ActivityInstrumentationTestCase2<TabHostCtsActivity> {
private static final String TAG_TAB2 = "tab 2";
private TabHost mTabHost;
- private TabHostStubActivity mActivity;
+ private TabHostCtsActivity mActivity;
public TabHost_TabSpecTest() {
- super("com.android.cts.stub", TabHostStubActivity.class);
+ super("com.android.cts.widget", TabHostCtsActivity.class);
}
@Override
@@ -138,7 +137,7 @@
TabSpec tabSpec2 = mTabHost.newTabSpec("tab spec 2");
tabSpec2.setIndicator("tab 2");
// TabContentFactory to create a TextView as the content of the tab.
- tabSpec2.setContent(com.android.cts.stub.R.id.tabhost_textview);
+ tabSpec2.setContent(com.android.cts.widget.R.id.tabhost_textview);
mTabHost.addTab(tabSpec2);
mTabHost.setCurrentTab(1);
TextView currentView = (TextView) mTabHost.getCurrentView();
@@ -148,7 +147,7 @@
TabSpec tabSpec3 = mTabHost.newTabSpec("tab spec 3");
tabSpec3.setIndicator("tab 3");
// TabContentFactory to create a ListView as the content of the tab.
- tabSpec3.setContent(com.android.cts.stub.R.id.tabhost_listview);
+ tabSpec3.setContent(com.android.cts.widget.R.id.tabhost_listview);
mTabHost.addTab(tabSpec3);
mTabHost.setCurrentTab(2);
assertTrue(mTabHost.getCurrentView() instanceof ListView);
diff --git a/tests/tests/widget/src/android/widget/cts/TabWidgetTest.java b/tests/tests/widget/src/android/widget/cts/TabWidgetTest.java
index b5c46c5..1f2e66c 100644
--- a/tests/tests/widget/src/android/widget/cts/TabWidgetTest.java
+++ b/tests/tests/widget/src/android/widget/cts/TabWidgetTest.java
@@ -32,11 +32,11 @@
/**
* Test {@link TabWidget}.
*/
-public class TabWidgetTest extends ActivityInstrumentationTestCase2<TabHostStubActivity> {
+public class TabWidgetTest extends ActivityInstrumentationTestCase2<TabHostCtsActivity> {
private Activity mActivity;
public TabWidgetTest() {
- super("com.android.cts.stub", TabHostStubActivity.class);
+ super("com.android.cts.widget", TabHostCtsActivity.class);
}
@Override
@@ -79,7 +79,7 @@
@UiThreadTest
public void testSetCurrentTab() {
- TabHostStubActivity activity = getActivity();
+ TabHostCtsActivity activity = getActivity();
TabWidget tabWidget = activity.getTabWidget();
tabWidget.addView(new TextView(mActivity));
@@ -97,7 +97,7 @@
@UiThreadTest
public void testFocusCurrentTab() {
- TabHostStubActivity activity = getActivity();
+ TabHostCtsActivity activity = getActivity();
TabWidget tabWidget = activity.getTabWidget();
tabWidget.addView(new TextView(mActivity));
diff --git a/tests/src/android/widget/cts/TableStubActivity.java b/tests/tests/widget/src/android/widget/cts/TableCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/TableStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/TableCtsActivity.java
index 0edc513..f76caed 100644
--- a/tests/src/android/widget/cts/TableStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/TableCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
@@ -24,7 +24,7 @@
/**
* A minimal application for TableLayout test.
*/
-public class TableStubActivity extends Activity {
+public class TableCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/TableLayoutTest.java b/tests/tests/widget/src/android/widget/cts/TableLayoutTest.java
index ea84071..c8211f6 100644
--- a/tests/tests/widget/src/android/widget/cts/TableLayoutTest.java
+++ b/tests/tests/widget/src/android/widget/cts/TableLayoutTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.content.Context;
@@ -39,11 +39,11 @@
/**
* Test {@link TableLayout}.
*/
-public class TableLayoutTest extends ActivityInstrumentationTestCase2<TableStubActivity> {
+public class TableLayoutTest extends ActivityInstrumentationTestCase2<TableCtsActivity> {
private Context mContext;
public TableLayoutTest() {
- super("com.android.cts.stub", TableStubActivity.class);
+ super("com.android.cts.widget", TableCtsActivity.class);
}
@Override
@@ -58,15 +58,15 @@
new TableLayout(mContext, null);
- TableStubActivity activity = getActivity();
- activity.setContentView(com.android.cts.stub.R.layout.table_layout_1);
+ TableCtsActivity activity = getActivity();
+ activity.setContentView(com.android.cts.widget.R.layout.table_layout_1);
TableLayout tableLayout = (TableLayout) activity
- .findViewById(com.android.cts.stub.R.id.table1);
+ .findViewById(com.android.cts.widget.R.id.table1);
assertTrue(tableLayout.isColumnCollapsed(0));
assertTrue(tableLayout.isColumnStretchable(2));
- activity.setContentView(com.android.cts.stub.R.layout.table_layout_2);
- tableLayout = (TableLayout) activity.findViewById(com.android.cts.stub.R.id.table2);
+ activity.setContentView(com.android.cts.widget.R.layout.table_layout_2);
+ tableLayout = (TableLayout) activity.findViewById(com.android.cts.widget.R.id.table2);
assertTrue(tableLayout.isColumnShrinkable(1));
}
@@ -203,15 +203,15 @@
}
public void testColumnStretchableEffect() {
- final TableStubActivity activity = getActivity();
+ final TableCtsActivity activity = getActivity();
getInstrumentation().runOnMainSync(new Runnable() {
public void run() {
- activity.setContentView(com.android.cts.stub.R.layout.table_layout_1);
+ activity.setContentView(com.android.cts.widget.R.layout.table_layout_1);
}
});
getInstrumentation().waitForIdleSync();
final TableLayout tableLayout =
- (TableLayout) activity.findViewById(com.android.cts.stub.R.id.table1);
+ (TableLayout) activity.findViewById(com.android.cts.widget.R.id.table1);
// Preparation: remove Collapsed mark for column 0.
getInstrumentation().runOnMainSync(new Runnable() {
@@ -554,7 +554,7 @@
public void testGenerateLayoutParams1() {
TableLayout tableLayout = new TableLayout(mContext);
- TableStubActivity activity = getActivity();
+ TableCtsActivity activity = getActivity();
XmlResourceParser parser = activity.getResources().getLayout(R.layout.table_layout_1);
AttributeSet attr = Xml.asAttributeSet(parser);
diff --git a/tests/tests/widget/src/android/widget/cts/TableLayout_LayoutParamsTest.java b/tests/tests/widget/src/android/widget/cts/TableLayout_LayoutParamsTest.java
index d63979a..20a9937 100644
--- a/tests/tests/widget/src/android/widget/cts/TableLayout_LayoutParamsTest.java
+++ b/tests/tests/widget/src/android/widget/cts/TableLayout_LayoutParamsTest.java
@@ -139,7 +139,7 @@
AttributeSet attrs = null;
try {
parser = mTargetContext.getResources()
- .getXml(com.android.cts.stub.R.xml.base_attributes);
+ .getXml(com.android.cts.widget.R.xml.base_attributes);
int type;
while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
diff --git a/tests/tests/widget/src/android/widget/cts/TableRowTest.java b/tests/tests/widget/src/android/widget/cts/TableRowTest.java
index 9ab4d13..6012f59 100644
--- a/tests/tests/widget/src/android/widget/cts/TableRowTest.java
+++ b/tests/tests/widget/src/android/widget/cts/TableRowTest.java
@@ -33,18 +33,18 @@
import android.widget.TableRow;
import android.widget.TextView;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
* Test {@link TableRow}.
*/
-public class TableRowTest extends ActivityInstrumentationTestCase2<TableStubActivity> {
+public class TableRowTest extends ActivityInstrumentationTestCase2<TableCtsActivity> {
Context mContext;
Context mTargetContext;
public TableRowTest() {
- super("com.android.cts.stub", TableStubActivity.class);
+ super("com.android.cts.widget", TableCtsActivity.class);
}
@Override
@@ -82,10 +82,10 @@
@UiThreadTest
public void testGetVirtualChildAt() {
- TableStubActivity activity = getActivity();
- activity.setContentView(com.android.cts.stub.R.layout.table_layout_1);
+ TableCtsActivity activity = getActivity();
+ activity.setContentView(com.android.cts.widget.R.layout.table_layout_1);
TableLayout tableLayout = (TableLayout) activity
- .findViewById(com.android.cts.stub.R.id.table1);
+ .findViewById(com.android.cts.widget.R.id.table1);
TableRow tableRow = (TableRow) tableLayout.getChildAt(0);
Resources resources = activity.getResources();
@@ -96,8 +96,8 @@
assertEquals(resources.getString(R.string.table_layout_third),
((TextView) tableRow.getVirtualChildAt(2)).getText().toString());
- activity.setContentView(com.android.cts.stub.R.layout.table_layout_2);
- tableLayout = (TableLayout) activity.findViewById(com.android.cts.stub.R.id.table2);
+ activity.setContentView(com.android.cts.widget.R.layout.table_layout_2);
+ tableLayout = (TableLayout) activity.findViewById(com.android.cts.widget.R.id.table2);
tableRow = (TableRow) tableLayout.getChildAt(0);
assertNull(tableRow.getVirtualChildAt(0));
@@ -113,16 +113,16 @@
@UiThreadTest
public void testGetVirtualChildCount() {
- TableStubActivity activity = getActivity();
- activity.setContentView(com.android.cts.stub.R.layout.table_layout_1);
+ TableCtsActivity activity = getActivity();
+ activity.setContentView(com.android.cts.widget.R.layout.table_layout_1);
TableLayout tableLayout = (TableLayout) activity
- .findViewById(com.android.cts.stub.R.id.table1);
+ .findViewById(com.android.cts.widget.R.id.table1);
TableRow tableRow = (TableRow) tableLayout.getChildAt(0);
assertEquals(3, tableRow.getVirtualChildCount());
- activity.setContentView(com.android.cts.stub.R.layout.table_layout_2);
- tableLayout = (TableLayout) activity.findViewById(com.android.cts.stub.R.id.table2);
+ activity.setContentView(com.android.cts.widget.R.layout.table_layout_2);
+ tableLayout = (TableLayout) activity.findViewById(com.android.cts.widget.R.id.table2);
tableRow = (TableRow) tableLayout.getChildAt(0);
assertEquals(5, tableRow.getVirtualChildCount());
diff --git a/tests/tests/widget/src/android/widget/cts/TableRow_LayoutParamsTest.java b/tests/tests/widget/src/android/widget/cts/TableRow_LayoutParamsTest.java
index 1d6793f..cf2603f 100644
--- a/tests/tests/widget/src/android/widget/cts/TableRow_LayoutParamsTest.java
+++ b/tests/tests/widget/src/android/widget/cts/TableRow_LayoutParamsTest.java
@@ -39,11 +39,11 @@
* Test {@link TableRow.LayoutParams}.
*/
public class TableRow_LayoutParamsTest
- extends ActivityInstrumentationTestCase2<TableStubActivity> {
+ extends ActivityInstrumentationTestCase2<TableCtsActivity> {
Context mTargetContext;
public TableRow_LayoutParamsTest() {
- super("com.android.cts.stub", TableStubActivity.class);
+ super("com.android.cts.widget", TableCtsActivity.class);
}
@Override
@@ -91,9 +91,9 @@
assertEquals(0, layoutParams.column);
assertEquals(0, layoutParams.span);
- TableStubActivity activity = getActivity();
- activity.setContentView(com.android.cts.stub.R.layout.table_layout_2);
- int idTable = com.android.cts.stub.R.id.table2;
+ TableCtsActivity activity = getActivity();
+ activity.setContentView(com.android.cts.widget.R.layout.table_layout_2);
+ int idTable = com.android.cts.widget.R.id.table2;
TableLayout tableLayout = (TableLayout) activity.findViewById(idTable);
View vVitural1 = ((TableRow) tableLayout.getChildAt(0)).getVirtualChildAt(1);
layoutParams = (TableRow.LayoutParams) vVitural1.getLayoutParams();
@@ -186,7 +186,7 @@
AttributeSet attrs = null;
try {
parser = mTargetContext.getResources()
- .getXml(com.android.cts.stub.R.xml.base_attributes);
+ .getXml(com.android.cts.widget.R.xml.base_attributes);
int type;
while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
diff --git a/tests/tests/widget/src/android/widget/cts/TestThread.java b/tests/tests/widget/src/android/widget/cts/TestThread.java
new file mode 100644
index 0000000..78295b9
--- /dev/null
+++ b/tests/tests/widget/src/android/widget/cts/TestThread.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2009 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 android.widget.cts;
+
+/**
+ * Thread class for executing a Runnable containing assertions in a separate thread.
+ * Uncaught exceptions in the Runnable are rethrown in the context of the the thread
+ * calling the <code>runTest()</code> method.
+ */
+public final class TestThread extends Thread {
+ private Throwable mThrowable;
+ private Runnable mTarget;
+
+ public TestThread(Runnable target) {
+ mTarget = target;
+ }
+
+ @Override
+ public final void run() {
+ try {
+ mTarget.run();
+ } catch (Throwable t) {
+ mThrowable = t;
+ }
+ }
+
+ /**
+ * Run the target Runnable object and wait until the test finish or throw
+ * out Exception if test fail.
+ *
+ * @param runTime
+ * @throws Throwable
+ */
+ public void runTest(long runTime) throws Throwable {
+ start();
+ joinAndCheck(runTime);
+ }
+
+ /**
+ * Get the Throwable object which is thrown when test running
+ * @return The Throwable object
+ */
+ public Throwable getThrowable() {
+ return mThrowable;
+ }
+
+ /**
+ * Set the Throwable object which is thrown when test running
+ * @param t The Throwable object
+ */
+ public void setThrowable(Throwable t) {
+ mThrowable = t;
+ }
+
+ /**
+ * Wait for the test thread to complete and throw the stored exception if there is one.
+ *
+ * @param runTime The time to wait for the test thread to complete.
+ * @throws Throwable
+ */
+ public void joinAndCheck(long runTime) throws Throwable {
+ this.join(runTime);
+ if (this.isAlive()) {
+ this.interrupt();
+ this.join(runTime);
+ throw new Exception("Thread did not finish within allotted time.");
+ }
+ checkException();
+ }
+
+ /**
+ * Check whether there is an exception when running Runnable object.
+ * @throws Throwable
+ */
+ public void checkException() throws Throwable {
+ if (mThrowable != null) {
+ throw mThrowable;
+ }
+ }
+}
diff --git a/tests/src/android/widget/cts/TextViewStubActivity.java b/tests/tests/widget/src/android/widget/cts/TextViewCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/TextViewStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/TextViewCtsActivity.java
index 956e264..888f215 100644
--- a/tests/src/android/widget/cts/TextViewStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/TextViewCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
@@ -24,7 +24,7 @@
/**
* A minimal application for TextView test.
*/
-public class TextViewStubActivity extends Activity {
+public class TextViewCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/TextViewTest.java b/tests/tests/widget/src/android/widget/cts/TextViewTest.java
index c66184f..c5d9985 100644
--- a/tests/tests/widget/src/android/widget/cts/TextViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/TextViewTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import com.android.internal.util.FastMath;
import org.xmlpull.v1.XmlPullParserException;
@@ -69,7 +69,6 @@
import android.text.method.TimeKeyListener;
import android.text.method.TransformationMethod;
import android.text.style.URLSpan;
-import android.text.style.cts.MockURLSpanTestActivity;
import android.text.util.Linkify;
import android.util.DisplayMetrics;
import android.util.TypedValue;
@@ -98,7 +97,7 @@
/**
* Test {@link TextView}.
*/
-public class TextViewTest extends ActivityInstrumentationTestCase2<TextViewStubActivity> {
+public class TextViewTest extends ActivityInstrumentationTestCase2<TextViewCtsActivity> {
private TextView mTextView;
private Activity mActivity;
@@ -112,7 +111,7 @@
private CharSequence mTransformedText;
public TextViewTest() {
- super("com.android.cts.stub", TextViewStubActivity.class);
+ super("com.android.cts.widget", TextViewCtsActivity.class);
}
@Override
@@ -1810,7 +1809,8 @@
// getTypeface
// getTypeface will be null if android:typeface is set to normal,
- // and android:style is not set or is set to normal
+ // and android:style is not set or is set to normal, and
+ // android:fontFamily is not set
assertNull(mTextView.getTypeface());
mTextView.setTypeface(Typeface.DEFAULT);
@@ -3293,7 +3293,7 @@
@UiThreadTest
public void testResetTextAlignment() {
- TextViewStubActivity activity = getActivity();
+ TextViewCtsActivity activity = getActivity();
LinearLayout ll = (LinearLayout) activity.findViewById(R.id.layout_textviewtest);
TextView tv = (TextView) activity.findViewById(R.id.textview_rtl);
@@ -3319,7 +3319,7 @@
final int RIGHT = 2;
final int BOTTOM = 3;
- TextViewStubActivity activity = getActivity();
+ TextViewCtsActivity activity = getActivity();
// Case 1.1: left / right drawable defined in default LTR mode
TextView tv = (TextView) activity.findViewById(R.id.textview_drawable_1_1);
@@ -3463,7 +3463,7 @@
final int RIGHT = 2;
final int BOTTOM = 3;
- TextViewStubActivity activity = getActivity();
+ TextViewCtsActivity activity = getActivity();
// Case 1.1: left / right drawable defined in default LTR mode
TextView tv = (TextView) activity.findViewById(R.id.textview_drawable_1_1);
diff --git a/tests/tests/widget/src/android/widget/cts/TimePickerTest.java b/tests/tests/widget/src/android/widget/cts/TimePickerTest.java
index 2ab01a3..fcf787a 100644
--- a/tests/tests/widget/src/android/widget/cts/TimePickerTest.java
+++ b/tests/tests/widget/src/android/widget/cts/TimePickerTest.java
@@ -29,7 +29,7 @@
/**
* Test {@link TimePicker}.
*/
-public class TimePickerTest extends ActivityInstrumentationTestCase2<StubActivity> {
+public class TimePickerTest extends ActivityInstrumentationTestCase2<CtsActivity> {
private TimePicker mTimePicker;
private Activity mActivity;
@@ -39,7 +39,7 @@
private Instrumentation mInstrumentation;
public TimePickerTest() {
- super("com.android.cts.stub", StubActivity.class);
+ super("com.android.cts.widget", CtsActivity.class);
}
@Override
@@ -52,7 +52,7 @@
public void testConstructors() {
AttributeSet attrs =
- mContext.getResources().getLayout(com.android.cts.stub.R.layout.timepicker);
+ mContext.getResources().getLayout(com.android.cts.widget.R.layout.timepicker);
assertNotNull(attrs);
new TimePicker(mContext);
diff --git a/tests/tests/widget/src/android/widget/cts/ToastTest.java b/tests/tests/widget/src/android/widget/cts/ToastTest.java
index 9c7846b..055b874 100644
--- a/tests/tests/widget/src/android/widget/cts/ToastTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ToastTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
@@ -33,7 +33,7 @@
import android.widget.ImageView;
import android.widget.Toast;
-public class ToastTest extends ActivityInstrumentationTestCase2<StubActivity> {
+public class ToastTest extends ActivityInstrumentationTestCase2<CtsActivity> {
private static final String TEST_TOAST_TEXT = "test toast";
private static final long TIME_FOR_UI_OPERATION = 1000L;
private static final long TIME_OUT = 5000L;
@@ -44,7 +44,7 @@
private ViewTreeObserver.OnGlobalLayoutListener mLayoutListener;
public ToastTest() {
- super("com.android.cts.stub", StubActivity.class);
+ super("com.android.cts.widget", CtsActivity.class);
}
@Override
diff --git a/tests/tests/widget/src/android/widget/cts/ToggleButtonTest.java b/tests/tests/widget/src/android/widget/cts/ToggleButtonTest.java
index ca1c94f..d5b74c3 100644
--- a/tests/tests/widget/src/android/widget/cts/ToggleButtonTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ToggleButtonTest.java
@@ -26,7 +26,7 @@
import android.util.Xml;
import android.widget.ToggleButton;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
diff --git a/tests/src/android/widget/cts/TwoLineListItemStubActivity.java b/tests/tests/widget/src/android/widget/cts/TwoLineListItemCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/TwoLineListItemStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/TwoLineListItemCtsActivity.java
index 380cefb..bd2c36d 100644
--- a/tests/src/android/widget/cts/TwoLineListItemStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/TwoLineListItemCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
@@ -25,7 +25,7 @@
/**
* Stub activity for testing {@link TwoLineListItem}
*/
-public class TwoLineListItemStubActivity extends Activity {
+public class TwoLineListItemCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/TwoLineListItemTest.java b/tests/tests/widget/src/android/widget/cts/TwoLineListItemTest.java
index 5ef5961..0d5807f 100644
--- a/tests/tests/widget/src/android/widget/cts/TwoLineListItemTest.java
+++ b/tests/tests/widget/src/android/widget/cts/TwoLineListItemTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
@@ -32,11 +32,11 @@
* Test {@link TwoLineListItem}.
*/
public class TwoLineListItemTest extends
- ActivityInstrumentationTestCase<TwoLineListItemStubActivity> {
+ ActivityInstrumentationTestCase<TwoLineListItemCtsActivity> {
private Activity mActivity;
public TwoLineListItemTest() {
- super("com.android.cts.stub", TwoLineListItemStubActivity.class);
+ super("com.android.cts.widget", TwoLineListItemCtsActivity.class);
}
@Override
diff --git a/tests/src/android/widget/cts/VideoViewStubActivity.java b/tests/tests/widget/src/android/widget/cts/VideoViewCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/VideoViewStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/VideoViewCtsActivity.java
index 73c7756..ad0d6eb 100644
--- a/tests/src/android/widget/cts/VideoViewStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/VideoViewCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
@@ -25,7 +25,7 @@
/**
* A minimal application for {@link VideoView} test.
*/
-public class VideoViewStubActivity extends Activity {
+public class VideoViewCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/VideoViewTest.java b/tests/tests/widget/src/android/widget/cts/VideoViewTest.java
index c8d9fc7..79b10df 100644
--- a/tests/tests/widget/src/android/widget/cts/VideoViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/VideoViewTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.app.Instrumentation;
@@ -41,7 +41,7 @@
/**
* Test {@link VideoView}.
*/
-public class VideoViewTest extends ActivityInstrumentationTestCase2<VideoViewStubActivity> {
+public class VideoViewTest extends ActivityInstrumentationTestCase2<VideoViewCtsActivity> {
/** Debug TAG. **/
private static final String TAG = "VideoViewTest";
/** The maximum time to wait for an operation. */
@@ -127,7 +127,7 @@
* Instantiates a new video view test.
*/
public VideoViewTest() {
- super("com.android.cts.stub", VideoViewStubActivity.class);
+ super("com.android.cts.widget", VideoViewCtsActivity.class);
}
/**
diff --git a/tests/src/android/widget/cts/ViewAnimatorStubActivity.java b/tests/tests/widget/src/android/widget/cts/ViewAnimatorCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/ViewAnimatorStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/ViewAnimatorCtsActivity.java
index 634f531..21deef7 100644
--- a/tests/src/android/widget/cts/ViewAnimatorStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/ViewAnimatorCtsActivity.java
@@ -18,12 +18,12 @@
import android.app.Activity;
import android.os.Bundle;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
* A minimal application for ViewAnimator test.
*/
-public class ViewAnimatorStubActivity extends Activity {
+public class ViewAnimatorCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/ViewAnimatorTest.java b/tests/tests/widget/src/android/widget/cts/ViewAnimatorTest.java
index 72f5559..024e3ee 100644
--- a/tests/tests/widget/src/android/widget/cts/ViewAnimatorTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ViewAnimatorTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
@@ -36,14 +36,14 @@
import android.widget.ViewAnimator;
public class ViewAnimatorTest extends
- ActivityInstrumentationTestCase2<ViewAnimatorStubActivity> {
+ ActivityInstrumentationTestCase2<ViewAnimatorCtsActivity> {
private ViewAnimator mViewAnimator;
private Activity mActivity;
private Instrumentation mInstrumentation;
private AttributeSet mAttributeSet;
public ViewAnimatorTest() {
- super("com.android.cts.stub", ViewAnimatorStubActivity.class);
+ super("com.android.cts.widget", ViewAnimatorCtsActivity.class);
}
@Override
diff --git a/tests/src/android/widget/cts/ViewFlipperStubActivity.java b/tests/tests/widget/src/android/widget/cts/ViewFlipperCtsActivity.java
similarity index 90%
rename from tests/src/android/widget/cts/ViewFlipperStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/ViewFlipperCtsActivity.java
index 2ac331e..7f13f6c 100644
--- a/tests/src/android/widget/cts/ViewFlipperStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/ViewFlipperCtsActivity.java
@@ -16,12 +16,12 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
-public class ViewFlipperStubActivity extends Activity {
+public class ViewFlipperCtsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/tests/tests/widget/src/android/widget/cts/ViewFlipperTest.java b/tests/tests/widget/src/android/widget/cts/ViewFlipperTest.java
index f223466..ac06def 100644
--- a/tests/tests/widget/src/android/widget/cts/ViewFlipperTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ViewFlipperTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
@@ -32,11 +32,11 @@
/**
* Test {@link ViewFlipper}.
*/
-public class ViewFlipperTest extends ActivityInstrumentationTestCase<ViewFlipperStubActivity> {
+public class ViewFlipperTest extends ActivityInstrumentationTestCase<ViewFlipperCtsActivity> {
private Activity mActivity;
public ViewFlipperTest() {
- super("com.android.cts.stub", ViewFlipperStubActivity.class);
+ super("com.android.cts.widget", ViewFlipperCtsActivity.class);
}
protected void setUp() throws Exception {
diff --git a/tests/src/android/widget/cts/ViewGroupStubActivity.java b/tests/tests/widget/src/android/widget/cts/ViewGroupCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/ViewGroupStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/ViewGroupCtsActivity.java
index 346c067..378395e 100644
--- a/tests/src/android/widget/cts/ViewGroupStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/ViewGroupCtsActivity.java
@@ -22,7 +22,7 @@
import android.os.Handler;
import android.widget.TextView;
-public class ViewGroupStubActivity extends Activity {
+public class ViewGroupCtsActivity extends Activity {
public static final String ACTION_INVALIDATE_CHILD = "invalidateChild";
@@ -35,8 +35,8 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(com.android.cts.stub.R.layout.viewgrouptest_stub);
- TextView textView = (TextView)findViewById(com.android.cts.stub.R.id.viewgrouptest_stub);
+ setContentView(com.android.cts.widget.R.layout.viewgrouptest_stub);
+ TextView textView = (TextView)findViewById(com.android.cts.widget.R.id.viewgrouptest_stub);
textView.setText("test");
}
@@ -49,7 +49,7 @@
mHandler.postDelayed(new Runnable() {
public void run() {
MockLinearLayout mll =
- (MockLinearLayout) findViewById(com.android.cts.stub.R.id.
+ (MockLinearLayout) findViewById(com.android.cts.widget.R.id.
mocklinearlayout);
if (!mll.mIsInvalidateChildInParentCalled) {
fail();
diff --git a/tests/tests/widget/src/android/widget/cts/ViewSwitcherTest.java b/tests/tests/widget/src/android/widget/cts/ViewSwitcherTest.java
index b7bac6c..ce18267 100644
--- a/tests/tests/widget/src/android/widget/cts/ViewSwitcherTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ViewSwitcherTest.java
@@ -28,7 +28,7 @@
import android.widget.ViewSwitcher;
import android.widget.ViewSwitcher.ViewFactory;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
/**
diff --git a/tests/src/android/widget/cts/WidgetTestUtils.java b/tests/tests/widget/src/android/widget/cts/WidgetTestUtils.java
similarity index 100%
rename from tests/src/android/widget/cts/WidgetTestUtils.java
rename to tests/tests/widget/src/android/widget/cts/WidgetTestUtils.java
diff --git a/tests/src/android/widget/cts/ZoomButtonStubActivity.java b/tests/tests/widget/src/android/widget/cts/ZoomButtonCtsActivity.java
similarity index 91%
rename from tests/src/android/widget/cts/ZoomButtonStubActivity.java
rename to tests/tests/widget/src/android/widget/cts/ZoomButtonCtsActivity.java
index a49df7a..e371b3f 100644
--- a/tests/src/android/widget/cts/ZoomButtonStubActivity.java
+++ b/tests/tests/widget/src/android/widget/cts/ZoomButtonCtsActivity.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import android.app.Activity;
import android.os.Bundle;
@@ -24,7 +24,7 @@
/**
* A minimal application for {@link ZoomButton} test.
*/
-public class ZoomButtonStubActivity extends Activity {
+public class ZoomButtonCtsActivity extends Activity {
/**
* Called with the activity is first created.
*/
diff --git a/tests/tests/widget/src/android/widget/cts/ZoomButtonTest.java b/tests/tests/widget/src/android/widget/cts/ZoomButtonTest.java
index 94c2669..47bcfed 100644
--- a/tests/tests/widget/src/android/widget/cts/ZoomButtonTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ZoomButtonTest.java
@@ -16,7 +16,7 @@
package android.widget.cts;
-import com.android.cts.stub.R;
+import com.android.cts.widget.R;
import org.xmlpull.v1.XmlPullParser;
@@ -32,12 +32,12 @@
import android.widget.ListView;
import android.widget.ZoomButton;
-public class ZoomButtonTest extends ActivityInstrumentationTestCase2<ZoomButtonStubActivity> {
+public class ZoomButtonTest extends ActivityInstrumentationTestCase2<ZoomButtonCtsActivity> {
private ZoomButton mZoomButton;
private Activity mActivity;
public ZoomButtonTest() {
- super("com.android.cts.stub", ZoomButtonStubActivity.class);
+ super("com.android.cts.widget", ZoomButtonCtsActivity.class);
}
@Override
diff --git a/tests/src/android/widget/cts/util/ExpandableListScenario.java b/tests/tests/widget/src/android/widget/cts/util/ExpandableListScenario.java
similarity index 100%
rename from tests/src/android/widget/cts/util/ExpandableListScenario.java
rename to tests/tests/widget/src/android/widget/cts/util/ExpandableListScenario.java
diff --git a/tests/src/android/widget/cts/util/ListItemFactory.java b/tests/tests/widget/src/android/widget/cts/util/ListItemFactory.java
similarity index 100%
rename from tests/src/android/widget/cts/util/ListItemFactory.java
rename to tests/tests/widget/src/android/widget/cts/util/ListItemFactory.java
diff --git a/tests/src/android/widget/cts/util/ListScenario.java b/tests/tests/widget/src/android/widget/cts/util/ListScenario.java
similarity index 100%
rename from tests/src/android/widget/cts/util/ListScenario.java
rename to tests/tests/widget/src/android/widget/cts/util/ListScenario.java
diff --git a/tests/src/android/widget/cts/util/ListUtil.java b/tests/tests/widget/src/android/widget/cts/util/ListUtil.java
similarity index 100%
rename from tests/src/android/widget/cts/util/ListUtil.java
rename to tests/tests/widget/src/android/widget/cts/util/ListUtil.java
diff --git a/tests/webgl/AndroidManifest.xml b/tests/webgl/AndroidManifest.xml
index e30fc86..d648032 100755
--- a/tests/webgl/AndroidManifest.xml
+++ b/tests/webgl/AndroidManifest.xml
@@ -21,7 +21,7 @@
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.INTERNET" />
- <application>
+ <application android:maxRecents="1">
<uses-library android:name="android.test.runner" />
<activity android:name="android.webgl.WebGLActivity" >
<intent-filter>
diff --git a/tests/webgl/src/android/webgl/WebGLActivity.java b/tests/webgl/src/android/webgl/WebGLActivity.java
index 3d1a982..ebba905 100644
--- a/tests/webgl/src/android/webgl/WebGLActivity.java
+++ b/tests/webgl/src/android/webgl/WebGLActivity.java
@@ -37,6 +37,7 @@
public class WebGLActivity extends Activity {
Semaphore mFinished = new Semaphore(0, false);
+ Semaphore mDestroyed = new Semaphore(0, false);
String mWebGlHarnessUrl;
WebView mWebView;
@@ -108,6 +109,17 @@
synchronized(WebGLActivity.this) {
message = mMessage.toString();
}
+
+ // Destroy the webview and wait for it.
+ runOnUiThread(new Runnable() {
+ public void run() {
+ mWebView.destroy();
+ finish();
+ mDestroyed.release();
+ }
+ });
+ mDestroyed.acquire();
+
if (!finished)
throw new Exception("\n" + url + "\n Test timed-out after 60 seconds: " + message);
if(!mPassed)
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/DeqpTest.java b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/DeqpTest.java
index ddb24c2..5149695 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/DeqpTest.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/DeqpTest.java
@@ -9,6 +9,7 @@
import com.android.tradefed.config.Option;
import com.android.tradefed.device.DeviceNotAvailableException;
import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.log.LogUtil.CLog;
import com.android.tradefed.result.ByteArrayInputStreamSource;
import com.android.tradefed.result.ITestInvocationListener;
import com.android.tradefed.result.LogDataType;
@@ -42,6 +43,7 @@
private ITestDevice mDevice;
private final String mUri;
+ private final String mName;
private Collection<TestIdentifier> mTests;
private TestIdentifier mCurrentTestId;
@@ -50,8 +52,9 @@
private ITestInvocationListener mListener;
- public DeqpTest(String uri, Collection<TestIdentifier> tests) {
+ public DeqpTest(String uri, String name, Collection<TestIdentifier> tests) {
mUri = uri;
+ mName = name;
mTests = tests;
mLogData = false;
}
@@ -398,39 +401,73 @@
}
/**
+ * Check if device supports OpenGL ES version.
+ */
+ static boolean isSupportedGles(ITestDevice device, int requiredMajorVersion, int requiredMinorVersion) throws DeviceNotAvailableException {
+ String roOpenglesVersion = device.getProperty("ro.opengles.version");
+
+ if (roOpenglesVersion == null)
+ return false;
+
+ int intValue = Integer.parseInt(roOpenglesVersion);
+
+ int majorVersion = ((intValue & 0xffff0000) >> 16);
+ int minorVersion = (intValue & 0xffff);
+
+ return (majorVersion > requiredMajorVersion)
+ || (majorVersion == requiredMajorVersion && minorVersion >= requiredMinorVersion);
+ }
+
+ /**
* {@inheritDoc}
*/
@Override
public void run(ITestInvocationListener listener) throws DeviceNotAvailableException {
mListener = listener;
- while (!mTests.isEmpty()) {
- executeTests(listener);
+ if ((mName.equals( "dEQP-GLES3") && isSupportedGles(mDevice, 3, 0))
+ || (mName.equals("dEQP-GLES31") && isSupportedGles(mDevice, 3, 1))) {
- // Set test to failed if it didn't receive test result
- if (mCurrentTestId != null) {
- Map <String, String> emptyMap = Collections.emptyMap();
+ while (!mTests.isEmpty()) {
+ executeTests(listener);
- if (mLogData && mCurrentTestLog != null && mCurrentTestLog.length() > 0) {
- ByteArrayInputStreamSource source
- = new ByteArrayInputStreamSource(mCurrentTestLog.getBytes());
+ // Set test to failed if it didn't receive test result
+ if (mCurrentTestId != null) {
+ Map <String, String> emptyMap = Collections.emptyMap();
- mListener.testLog(mCurrentTestId.getClassName() + "."
- + mCurrentTestId.getTestName(), LogDataType.XML, source);
+ if (mLogData && mCurrentTestLog != null && mCurrentTestLog.length() > 0) {
+ ByteArrayInputStreamSource source
+ = new ByteArrayInputStreamSource(mCurrentTestLog.getBytes());
- source.cancel();
+ mListener.testLog(mCurrentTestId.getClassName() + "."
+ + mCurrentTestId.getTestName(), LogDataType.XML, source);
+
+ source.cancel();
+ }
+
+
+ if (!mGotTestResult) {
+ mListener.testFailed(ITestRunListener.TestFailure.ERROR, mCurrentTestId,
+ "Log doesn't contain test result");
+ }
+
+ mListener.testEnded(mCurrentTestId, emptyMap);
+ mCurrentTestId = null;
+ mListener.testRunEnded(0, emptyMap);
}
-
-
- if (!mGotTestResult) {
- mListener.testFailed(ITestRunListener.TestFailure.ERROR, mCurrentTestId,
- "Log doesn't contain test result");
- }
-
- mListener.testEnded(mCurrentTestId, emptyMap);
- mCurrentTestId = null;
- mListener.testRunEnded(0, emptyMap);
}
+ } else {
+ /* Pass all tests if OpenGL ES version is not supported */
+ Map <String, String> emptyMap = Collections.emptyMap();
+ mListener.testRunStarted(mUri, mTests.size());
+
+ for (TestIdentifier test : mTests) {
+ CLog.d("Skipping test '%s', Opengl ES version not supported", test.toString());
+ mListener.testStarted(test);
+ mListener.testEnded(test, emptyMap);
+ }
+
+ mListener.testRunEnded(0, emptyMap);
}
}
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageDef.java b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageDef.java
index 4fa3b2b..7a9756c 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageDef.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/TestPackageDef.java
@@ -235,7 +235,7 @@
mDigest = generateDigest(testCaseDir, mJarPath);
return vmHostTest;
} else if (DEQP_TEST.equals(mTestType)) {
- return new DeqpTest(mUri, mTests);
+ return new DeqpTest(mUri, mName, mTests);
} else if (NATIVE_TEST.equals(mTestType)) {
return new GeeTest(mUri, mName);
} else if (WRAPPED_NATIVE_TEST.equals(mTestType)) {
diff --git a/tools/tradefed-host/tests/src/com/android/cts/tradefed/testtype/DeqpTestTest.java b/tools/tradefed-host/tests/src/com/android/cts/tradefed/testtype/DeqpTestTest.java
index 0be2b80..0e7c26e 100644
--- a/tools/tradefed-host/tests/src/com/android/cts/tradefed/testtype/DeqpTestTest.java
+++ b/tools/tradefed-host/tests/src/com/android/cts/tradefed/testtype/DeqpTestTest.java
@@ -39,7 +39,7 @@
private static final String CASE_LIST_FILE_NAME = "/sdcard/dEQP-TestCaseList.txt";
private static final String LOG_FILE_NAME = "/sdcard/TestLog.qpa";
private static final String INSTRUMENTATION_NAME =
- "com.drawelements.deqp/com.drawelements.deqp.testercore.DeqpInstrumentation";
+ "com.drawelements.deqp/com.drawelements.deqp.testercore.DeqpInstrumentation";
/**
* {@inheritDoc}
@@ -50,6 +50,124 @@
}
/**
+ * Test version of OpenGL ES.
+ */
+ private void testGlesVersion(int requiredMajorVersion, int requiredMinorVersion, int majorVersion, int minorVersion) throws Exception {
+ final TestIdentifier testId = new TestIdentifier("dEQP-GLES"
+ + Integer.toString(requiredMajorVersion) + Integer.toString(requiredMinorVersion)
+ + ".info", "version");
+
+ final String testPath = "dEQP-GLES"
+ + Integer.toString(requiredMajorVersion) + Integer.toString(requiredMinorVersion)
+ +".info.version";
+
+ final String testTrie = "{dEQP-GLES"
+ + Integer.toString(requiredMajorVersion) + Integer.toString(requiredMinorVersion)
+ + "{info{version}}}";
+
+ final String resultCode = "Pass";
+
+ /* MultiLineReceiver expects "\r\n" line ending. */
+ final String output = "INSTRUMENTATION_STATUS: dEQP-SessionInfo-Name=releaseName\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-EventType=SessionInfo\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-SessionInfo-Value=2014.x\r\n"
+ + "INSTRUMENTATION_STATUS_CODE: 0\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-SessionInfo-Name=releaseId\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-EventType=SessionInfo\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-SessionInfo-Value=0xcafebabe\r\n"
+ + "INSTRUMENTATION_STATUS_CODE: 0\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-SessionInfo-Name=targetName\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-EventType=SessionInfo\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-SessionInfo-Value=android\r\n"
+ + "INSTRUMENTATION_STATUS_CODE: 0\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-EventType=BeginSession\r\n"
+ + "INSTRUMENTATION_STATUS_CODE: 0\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-EventType=BeginTestCase\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-BeginTestCase-TestCasePath=" + testPath + "\r\n"
+ + "INSTRUMENTATION_STATUS_CODE: 0\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-TestCaseResult-Code=" + resultCode + "\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-TestCaseResult-Details=Detail" + resultCode + "\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-EventType=TestCaseResult\r\n"
+ + "INSTRUMENTATION_STATUS_CODE: 0\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-EventType=EndTestCase\r\n"
+ + "INSTRUMENTATION_STATUS_CODE: 0\r\n"
+ + "INSTRUMENTATION_STATUS: dEQP-EventType=EndSession\r\n"
+ + "INSTRUMENTATION_STATUS_CODE: 0\r\n"
+ + "INSTRUMENTATION_CODE: 0\r\n";
+
+ ITestDevice mockDevice = EasyMock.createMock(ITestDevice.class);
+ ITestInvocationListener mockListener
+ = EasyMock.createStrictMock(ITestInvocationListener.class);
+ Collection<TestIdentifier> tests = new ArrayList<TestIdentifier>();
+
+ tests.add(testId);
+
+ DeqpTest deqpTest = new DeqpTest(URI,
+ "dEQP-GLES" + Integer.toString(requiredMajorVersion)
+ + (requiredMinorVersion > 0 ? Integer.toString(requiredMinorVersion) : ""),
+ tests);
+
+ int version = (majorVersion << 16) | minorVersion;
+ EasyMock.expect(mockDevice.getProperty("ro.opengles.version"))
+ .andReturn(Integer.toString(version)).atLeastOnce();
+
+ if (majorVersion > requiredMajorVersion
+ || (majorVersion == requiredMajorVersion && minorVersion >= requiredMinorVersion)) {
+
+ EasyMock.expect(mockDevice.executeShellCommand(
+ EasyMock.eq("rm " + CASE_LIST_FILE_NAME))).andReturn("").once();
+
+ EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("rm " + LOG_FILE_NAME)))
+ .andReturn("").once();
+
+ EasyMock.expect(mockDevice.pushString(testTrie + "\n", CASE_LIST_FILE_NAME))
+ .andReturn(true).once();
+
+ String command = "am instrument -w -e deqpLogFileName \"" + LOG_FILE_NAME
+ + "\" -e deqpCmdLine \"--deqp-caselist-file=" + CASE_LIST_FILE_NAME + " "
+ + "--deqp-gl-config-name=rgba8888d24s8\" "
+ + INSTRUMENTATION_NAME;
+
+ mockDevice.executeShellCommand(EasyMock.eq(command),
+ EasyMock.<IShellOutputReceiver>notNull());
+
+ EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+ @Override
+ public Object answer() {
+ IShellOutputReceiver receiver
+ = (IShellOutputReceiver)EasyMock.getCurrentArguments()[1];
+
+ receiver.addOutput(output.getBytes(), 0, output.length());
+ receiver.flush();
+
+ return null;
+ }
+ });
+ }
+
+ mockListener.testRunStarted(URI, 1);
+ EasyMock.expectLastCall().once();
+
+ mockListener.testStarted(EasyMock.eq(testId));
+ EasyMock.expectLastCall().once();
+
+ mockListener.testEnded(EasyMock.eq(testId), EasyMock.<Map<String, String>>notNull());
+ EasyMock.expectLastCall().once();
+
+ mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<Map<String, String>>notNull());
+ EasyMock.expectLastCall().once();
+
+ EasyMock.replay(mockDevice);
+ EasyMock.replay(mockListener);
+
+ deqpTest.setDevice(mockDevice);
+ deqpTest.run(mockListener);
+
+ EasyMock.verify(mockListener);
+ EasyMock.verify(mockDevice);
+ }
+
+ /**
* Test that result code produces correctly pass or fail.
*/
private void testResultCode(final String resultCode, boolean pass) throws Exception {
@@ -92,7 +210,11 @@
tests.add(testId);
- DeqpTest deqpTest = new DeqpTest(URI, tests);
+ DeqpTest deqpTest = new DeqpTest(URI, "dEQP-GLES3", tests);
+
+ int version = 3 << 16;
+ EasyMock.expect(mockDevice.getProperty("ro.opengles.version"))
+ .andReturn(Integer.toString(version)).atLeastOnce();
EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("rm " + CASE_LIST_FILE_NAME)))
.andReturn("").once();
@@ -252,14 +374,19 @@
= "{dEQP-GLES3{info{vendor,renderer,version,shading_language_version,extensions,render_target}}}";
ITestDevice mockDevice = EasyMock.createMock(ITestDevice.class);
- ITestInvocationListener mockListener = EasyMock.createStrictMock(ITestInvocationListener.class);
+ ITestInvocationListener mockListener
+ = EasyMock.createStrictMock(ITestInvocationListener.class);
Collection<TestIdentifier> tests = new ArrayList<TestIdentifier>();
for (TestIdentifier id : testIds) {
tests.add(id);
}
- DeqpTest deqpTest = new DeqpTest(URI, tests);
+ DeqpTest deqpTest = new DeqpTest(URI, "dEQP-GLES3", tests);
+
+ int version = 3 << 16;
+ EasyMock.expect(mockDevice.getProperty("ro.opengles.version"))
+ .andReturn(Integer.toString(version)).atLeastOnce();
EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("rm " + CASE_LIST_FILE_NAME)))
.andReturn("").once();
@@ -275,7 +402,6 @@
+ "--deqp-gl-config-name=rgba8888d24s8\" "
+ INSTRUMENTATION_NAME;
-
mockDevice.executeShellCommand(EasyMock.eq(command),
EasyMock.<IShellOutputReceiver>notNull());
@@ -319,6 +445,48 @@
}
/**
+ * Test OpeGL ES3 tests on device with OpenGL ES2.
+ */
+ public void testRun_require30DeviceVersion20() throws Exception {
+ testGlesVersion(3, 0, 2, 0);
+ }
+
+ /**
+ * Test OpeGL ES3.1 tests on device with OpenGL ES2.
+ */
+ public void testRun_require31DeviceVersion20() throws Exception {
+ testGlesVersion(3, 1, 2, 0);
+ }
+
+ /**
+ * Test OpeGL ES3 tests on device with OpenGL ES3.
+ */
+ public void testRun_require30DeviceVersion30() throws Exception {
+ testGlesVersion(3, 0, 3, 0);
+ }
+
+ /**
+ * Test OpeGL ES3.1 tests on device with OpenGL ES3.
+ */
+ public void testRun_require31DeviceVersion30() throws Exception {
+ testGlesVersion(3, 1, 3, 0);
+ }
+
+ /**
+ * Test OpeGL ES3 tests on device with OpenGL ES3.1.
+ */
+ public void testRun_require30DeviceVersion31() throws Exception {
+ testGlesVersion(3, 0, 3, 1);
+ }
+
+ /**
+ * Test OpeGL ES3.1 tests on device with OpenGL ES3.1.
+ */
+ public void testRun_require31DeviceVersion31() throws Exception {
+ testGlesVersion(3, 1, 3, 1);
+ }
+
+ /**
* Test dEQP Pass result code.
*/
public void testRun_resultPass() throws Exception {
diff --git a/tools/utils/buildCts.py b/tools/utils/buildCts.py
index aa5bbf1..f9228d7 100755
--- a/tools/utils/buildCts.py
+++ b/tools/utils/buildCts.py
@@ -169,15 +169,153 @@
plan.ExcludeTests(package, test_list)
self.__WritePlan(plan, 'CTS-stable')
- # CTS Flaky plan - inversion of CTS Stable
+ # CTS Flaky plan - list of tests known to be flaky in lab environment
plan = tools.TestPlan(packages)
plan.Exclude('.*')
plan.Include(r'com\.android\.cts\.browserbench')
for package, test_list in flaky_tests.iteritems():
- plan.Include(package)
+ plan.Include(package+'$')
plan.IncludeTests(package, test_list)
self.__WritePlan(plan, 'CTS-flaky')
+ small_tests = BuildAospSmallSizeTestList()
+ medium_tests = BuildAospMediumSizeTestList()
+
+ # CTS - sub plan for public, small size tests
+ plan = tools.TestPlan(packages)
+ plan.Exclude('.*')
+ for package, test_list in small_tests.iteritems():
+ plan.Include(package+'$')
+ for package, test_list in flaky_tests.iteritems():
+ plan.ExcludeTests(package, test_list)
+ self.__WritePlan(plan, 'CTS-kitkat-small')
+
+ # CTS - sub plan for public, medium size tests
+ plan = tools.TestPlan(packages)
+ plan.Exclude('.*')
+ for package, test_list in medium_tests.iteritems():
+ plan.Include(package+'$')
+ for package, test_list in flaky_tests.iteritems():
+ plan.ExcludeTests(package, test_list)
+ self.__WritePlan(plan, 'CTS-kitkat-medium')
+
+ # CTS - sub plan for hardware tests which is public, large
+ plan = tools.TestPlan(packages)
+ plan.Exclude('.*')
+ plan.Include(r'android\.hardware$')
+ for package, test_list in flaky_tests.iteritems():
+ plan.ExcludeTests(package, test_list)
+ self.__WritePlan(plan, 'CTS-hardware')
+
+ # CTS - sub plan for media tests which is public, large
+ plan = tools.TestPlan(packages)
+ plan.Exclude('.*')
+ plan.Include(r'android\.media$')
+ for package, test_list in flaky_tests.iteritems():
+ plan.ExcludeTests(package, test_list)
+ self.__WritePlan(plan, 'CTS-media')
+
+ # CTS - sub plan for mediastress tests which is public, large
+ plan = tools.TestPlan(packages)
+ plan.Exclude('.*')
+ plan.Include(r'android\.mediastress$')
+ for package, test_list in flaky_tests.iteritems():
+ plan.ExcludeTests(package, test_list)
+ self.__WritePlan(plan, 'CTS-mediastress')
+
+ #CTS - sub plan for new test packages added for staging
+ plan = tools.TestPlan(packages)
+ for package, test_list in small_tests.iteritems():
+ plan.Exclude(package+'$')
+ for package, test_list in medium_tests.iteritems():
+ plan.Exclude(package+'$')
+ plan.Exclude(r'android\.hardware$')
+ plan.Exclude(r'android\.media$')
+ plan.Exclude(r'android\.mediastress$')
+ for package, test_list in flaky_tests.iteritems():
+ plan.ExcludeTests(package, test_list)
+ self.__WritePlan(plan, 'CTS-staging')
+
+def BuildAospMediumSizeTestList():
+ """ Construct a defaultdic that lists package names of medium tests
+ already published to aosp. """
+ return {
+ 'android.app' : [],
+ 'android.core.tests.libcore.package.libcore' : [],
+ 'android.core.tests.libcore.package.org' : [],
+ 'android.core.vm-tests-tf' : [],
+ 'android.dpi' : [],
+ 'android.host.security' : [],
+ 'android.net' : [],
+ 'android.os' : [],
+ 'android.security' : [],
+ 'android.telephony' : [],
+ 'android.webkit' : [],
+ 'android.widget' : [],
+ 'com.android.cts.browserbench' : []}
+
+def BuildAospSmallSizeTestList():
+ """ Construct a defaultdict that lists packages names of small tests
+ already published to aosp. """
+ return {
+ 'android.aadb' : [],
+ 'android.acceleration' : [],
+ 'android.accessibility' : [],
+ 'android.accessibilityservice' : [],
+ 'android.accounts' : [],
+ 'android.admin' : [],
+ 'android.animation' : [],
+ 'android.bionic' : [],
+ 'android.bluetooth' : [],
+ 'android.calendarcommon' : [],
+ 'android.content' : [],
+ 'android.core.tests.libcore.package.com' : [],
+ 'android.core.tests.libcore.package.conscrypt' : [],
+ 'android.core.tests.libcore.package.dalvik' : [],
+ 'android.core.tests.libcore.package.sun' : [],
+ 'android.core.tests.libcore.package.tests' : [],
+ 'android.database' : [],
+ 'android.dreams' : [],
+ 'android.drm' : [],
+ 'android.effect' : [],
+ 'android.gesture' : [],
+ 'android.graphics' : [],
+ 'android.graphics2' : [],
+ 'android.jni' : [],
+ 'android.keystore' : [],
+ 'android.location' : [],
+ 'android.nativemedia.sl' : [],
+ 'android.nativemedia.xa' : [],
+ 'android.nativeopengl' : [],
+ 'android.ndef' : [],
+ 'android.opengl' : [],
+ 'android.openglperf' : [],
+ 'android.permission' : [],
+ 'android.permission2' : [],
+ 'android.preference' : [],
+ 'android.preference2' : [],
+ 'android.provider' : [],
+ 'android.renderscript' : [],
+ 'android.rscpp' : [],
+ 'android.rsg' : [],
+ 'android.sax' : [],
+ 'android.speech' : [],
+ 'android.tests.appsecurity' : [],
+ 'android.text' : [],
+ 'android.textureview' : [],
+ 'android.theme' : [],
+ 'android.usb' : [],
+ 'android.util' : [],
+ 'android.view' : [],
+ 'com.android.cts.dram' : [],
+ 'com.android.cts.filesystemperf' : [],
+ 'com.android.cts.jank' : [],
+ 'com.android.cts.opengl' : [],
+ 'com.android.cts.simplecpu' : [],
+ 'com.android.cts.ui' : [],
+ 'com.android.cts.uihost' : [],
+ 'com.android.cts.videoperf' : [],
+ 'zzz.android.monkey' : []}
def BuildCtsFlakyTestList():
""" Construct a defaultdict that maps package name to a list of tests