summaryrefslogtreecommitdiffstats
path: root/tests/CoreTests/android/test/TestBrowserActivityTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/CoreTests/android/test/TestBrowserActivityTest.java')
-rw-r--r--tests/CoreTests/android/test/TestBrowserActivityTest.java270
1 files changed, 270 insertions, 0 deletions
diff --git a/tests/CoreTests/android/test/TestBrowserActivityTest.java b/tests/CoreTests/android/test/TestBrowserActivityTest.java
new file mode 100644
index 0000000..6afbe37
--- /dev/null
+++ b/tests/CoreTests/android/test/TestBrowserActivityTest.java
@@ -0,0 +1,270 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.test;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.view.IWindowManager;
+import android.widget.ListView;
+
+import com.google.android.collect.Lists;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.List;
+
+public class TestBrowserActivityTest extends InstrumentationTestCase {
+
+ private TestBrowserActivity mTestBrowserActivity;
+ private StubTestBrowserController mTestBrowserController;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ StubTestBrowserActivity.setTopTestSuite(null);
+ mTestBrowserController = new StubTestBrowserController();
+ ServiceLocator.setTestBrowserController(mTestBrowserController);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ if (mTestBrowserActivity != null) {
+ mTestBrowserActivity.finish();
+ }
+ mTestBrowserActivity = null;
+ super.tearDown();
+ }
+
+ public void testEmptyListContent() throws Exception {
+ StubTestBrowserActivity.setTopTestSuite(new TestSuite());
+
+ mTestBrowserActivity = createActivity();
+
+ ListView listView = getListView();
+ // There is always an item on the list for running all tests.
+ assertEquals("Unexpected number of items on list view.", 1, listView.getCount());
+
+ assertEquals("Stubbed Test Browser", mTestBrowserActivity.getTitle().toString());
+ }
+
+ public void testOneListContent() throws Exception {
+ List<String> testCaseNames = Lists.newArrayList("AllTests");
+ StubTestBrowserActivity.setTopTestSuite(createTestSuite(testCaseNames));
+
+ mTestBrowserActivity = createActivity();
+
+ ListView listView = getListView();
+ assertListViewContents(testCaseNames, listView);
+ }
+
+ public void testListWithTestCases() throws Exception {
+ List<String> testCaseNames = Lists.newArrayList("AllTests", "Apples", "Bananas", "Oranges");
+ StubTestBrowserActivity.setTopTestSuite(createTestSuite(testCaseNames));
+
+ mTestBrowserActivity = createActivity();
+
+ ListView listView = getListView();
+ assertListViewContents(testCaseNames, listView);
+ }
+
+ public void testListWithTestSuite() throws Exception {
+ List<String> testCaseNames = Lists.newArrayList(OneTestTestCase.class.getSimpleName());
+ StubTestBrowserActivity.setTopTestSuite(new OneTestInTestSuite());
+
+ mTestBrowserActivity = createActivity();
+
+ ListView listView = getListView();
+ assertListViewContents(testCaseNames, listView);
+ }
+
+ public void testSelectATestCase() throws Exception {
+ List<String> testCaseNames = Lists.newArrayList("AllTests");
+ TestSuite testSuite = createTestSuite(testCaseNames);
+ StubTestBrowserActivity.setTopTestSuite(testSuite);
+
+ mTestBrowserController.setTestCase(OneTestTestCase.class);
+ mTestBrowserActivity = createActivity();
+
+ Instrumentation.ActivityMonitor activityMonitor = getInstrumentation().addMonitor(
+ TestBrowserControllerImpl.TEST_RUNNER_ACTIVITY_CLASS_NAME, null, false);
+ try {
+ assertEquals(0, activityMonitor.getHits());
+
+ ListView listView = getListView();
+ int invokedTestCaseIndex = 0;
+ listView.performItemClick(listView, invokedTestCaseIndex, 0);
+
+ Activity activity = activityMonitor.waitForActivityWithTimeout(2000);
+ assertNotNull(activity);
+ try {
+ assertEquals(1, activityMonitor.getHits());
+ assertEquals(invokedTestCaseIndex, mTestBrowserController.getLastPosition());
+ } finally {
+ activity.finish();
+ }
+ } finally {
+ getInstrumentation().removeMonitor(activityMonitor);
+ }
+ }
+
+ public void testCreateFromIntentWithOneTest() throws Exception {
+ List<String> testCaseNames = Lists.newArrayList("testOne");
+
+ mTestBrowserActivity = launchTestBrowserActivity(new TestSuite(OneTestTestCase.class));
+
+ ListView listView = getListView();
+ assertListViewContents(testCaseNames, listView);
+ }
+
+ public void testUpdateListOnStart() throws Exception {
+ StubTestBrowserActivity.setTopTestSuite(new TestSuite());
+
+ mTestBrowserActivity = createActivity();
+
+ ListView listView = getListView();
+ assertEquals("Unexpected number of items on list view.", 1, listView.getCount());
+
+ List<String> testCaseNames = Lists.newArrayList("AllTests");
+ StubTestBrowserActivity.setTopTestSuite(createTestSuite(testCaseNames));
+
+ getInstrumentation().runOnMainSync(new Runnable() {
+ public void run() {
+ ((StubTestBrowserActivity) mTestBrowserActivity).onStart();
+ }
+ });
+
+ listView = getListView();
+ assertListViewContents(testCaseNames, listView);
+ }
+
+ public void testTitleHasTestSuiteName() throws Exception {
+ final String testSuiteName = "com.android.TestSuite";
+ StubTestBrowserActivity.setTopTestSuite(new TestSuite(testSuiteName));
+
+ mTestBrowserActivity = createActivity();
+
+ assertEquals("TestSuite", mTestBrowserActivity.getTitle().toString());
+ }
+
+ private TestSuite createTestSuite(List<String> testCaseNames) {
+ return createTestSuite(testCaseNames.toArray(new String[testCaseNames.size()]));
+ }
+
+ private TestSuite createTestSuite(String... testCaseNames) {
+ TestSuite testSuite = new TestSuite();
+ for (String testCaseName : testCaseNames) {
+ testSuite.addTest(new FakeTestCase(testCaseName));
+ }
+
+ return testSuite;
+ }
+
+ public static class FakeTestCase extends TestCase {
+ public FakeTestCase(String name) {
+ super(name);
+ }
+ }
+
+ public static class OneTestTestCase extends TestCase {
+ public void testOne() throws Exception {
+ }
+ }
+
+ public static class OneTestInTestSuite extends TestSuite {
+ public static Test suite() {
+ TestSuite suite = new TestSuite(OneTestInTestSuite.class.getName());
+ suite.addTestSuite(OneTestTestCase.class);
+ return suite;
+ }
+ }
+
+ private void assertListViewContents(List<String> expectedTestCaseNames, ListView listView) {
+ assertEquals("Run All", listView.getItemAtPosition(0).toString());
+ assertEquals("Unexpected number of items on list view.",
+ expectedTestCaseNames.size() + 1, listView.getCount());
+ for (int i = 0; i < expectedTestCaseNames.size(); i++) {
+ String expectedTestCaseName = expectedTestCaseNames.get(i);
+ String actualTestCaseName = listView.getItemAtPosition(i + 1).toString();
+ assertEquals("Unexpected test case name. Index: " + i,
+ expectedTestCaseName, actualTestCaseName);
+ }
+ }
+
+ private ListView getListView() {
+ return mTestBrowserActivity.getListView();
+ }
+
+ private TestBrowserActivity createActivity() throws RemoteException {
+ return launchActivity("android.test", StubTestBrowserActivity.class, null);
+ }
+
+ private Intent createIntent(TestSuite testSuite) {
+ Intent intent = new Intent(Intent.ACTION_RUN);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ String className = StubTestBrowserActivity.class.getName();
+ String packageName = className.substring(0, className.lastIndexOf("."));
+ intent.setClassName(packageName, className);
+ intent.setData(Uri.parse(testSuite.getName()));
+ return intent;
+ }
+
+ private TestBrowserActivity launchTestBrowserActivity(TestSuite testSuite)
+ throws RemoteException {
+ getInstrumentation().setInTouchMode(false);
+
+ TestBrowserActivity activity =
+ (TestBrowserActivity) getInstrumentation().startActivitySync(
+ createIntent(testSuite));
+ getInstrumentation().waitForIdleSync();
+ return activity;
+ }
+
+ private static class StubTestBrowserController extends TestBrowserControllerImpl {
+ private int mPosition;
+ private Class<? extends TestCase> mTestCaseClass;
+
+ public Intent getIntentForTestAt(int position) {
+ mPosition = position;
+
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_RUN);
+
+ String className = TestBrowserControllerImpl.TEST_RUNNER_ACTIVITY_CLASS_NAME;
+ String testName = mTestCaseClass.getClass().getName();
+
+ String packageName = className.substring(0, className.lastIndexOf("."));
+ intent.setClassName(packageName, className);
+ intent.setData(Uri.parse(testName));
+
+ return intent;
+ }
+
+ public void setTestCase(Class<? extends TestCase> testCaseClass) {
+ mTestCaseClass = testCaseClass;
+ }
+
+ public int getLastPosition() {
+ return mPosition;
+ }
+ }
+}