#filter substitution package @ANDROID_PACKAGE_NAME@.tests; import android.app.Activity; import android.view.View; import android.widget.ListView; import android.widget.ExpandableListView; import android.widget.LinearLayout; import android.widget.TabHost; import android.widget.TextView; import android.widget.ImageView; import android.widget.TabHost; import android.widget.TabWidget; import android.text.TextUtils; import android.content.ContentValues; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; import java.util.Arrays; import java.util.ArrayList; import java.io.File; import @ANDROID_PACKAGE_NAME@.*; /* Tests opening the all pages tab, that items look correct, clicking on an item and long tapping on an item */ public class testAllPagesTab extends BaseTest { private static final String ABOUT_HOME_URL = "about:home"; private static ListView listview = null; private String[] bookmarks = new String[] { "about:firefox", "about:home", "http://support.mozilla.org/en-US/mobile", "https://addons.mozilla.org/en-US/android/" }; @Override protected int getTestType() { return TEST_MOCHITEST; } public void testAllPagesTab() { blockForGeckoReady(); // load one page so there is something in our history String url = getAbsoluteUrl("/robocop/robocop_big_link.html"); loadUrl(url); testList(url); testClick(url); testContextMenu(url); } private void testList(String url) { final ListView list = getAllPagesList(url); mSolo.waitForText(bookmarks[0]); // some basic checks for the tab strip TabWidget tabwidget = (TabWidget)mSolo.getView(TabWidget.class, 0); mAsserter.is(tabwidget.getTabCount(), 3, "Three tabs shown"); mAsserter.is(tabwidget.isStripEnabled(), false, "Strip is hidden"); // check that the right tab is selected TabHost host = (TabHost)mSolo.getView(TabHost.class, 0); // This test fails, only when we're running tests // mAsserter.is(host.getCurrentTab(), 0, "All pages tab is selected in tab strip"); mAsserter.isnot(list, null, "checking that all pages list exists"); mAsserter.is(list.getChildCount(), 5, "all pages list has 5 children (the default bookmarks)"); final int count = list.getChildCount(); String loadUrl = ""; for (int i = count - 1; i >= 0; i--) { View child = list.getChildAt(i); ArrayList views = mSolo.getViews(child); ArrayList imageViews = new ArrayList(); int expectedImages = 1; for (int j = 0; j < views.size(); j++) { View v = views.get(j); if (v instanceof TextView) { TextView t = (TextView)v; String string = t.getText().toString(); mAsserter.ok(!TextUtils.isEmpty(string), "TextView is filled in", string); if (i == 1 || string.startsWith("http")) { loadUrl = string; } int index = Arrays.binarySearch(bookmarks, string); if (index > -1) { expectedImages = 2; } } else if (v instanceof ImageView) { imageViews.add((ImageView)v); } } int visible = 0; for (int j = 0; j < imageViews.size(); j++) { ImageView img = imageViews.get(j); visible += (img.getVisibility() == View.VISIBLE) ? 1 : 0; } mAsserter.is(visible, expectedImages, "Correct number of ImageViews visible"); } mActions.sendSpecialKey(Actions.SpecialKey.BACK); } private void testContextMenu(String url) { ListView list = getAllPagesList(url); mSolo.waitForText(bookmarks[0]); View child = list.getChildAt(0); mSolo.clickLongOnView(child); // TODO: Test clicking these does the right thing mAsserter.ok(mSolo.waitForText("Open in New Tab"), "Context menu has New Tab option", "Open in New Tab"); mAsserter.ok(mSolo.searchText("Share", true), "Context menu has Share option", "Share"); mAsserter.ok(mSolo.searchText("Remove", true), "Context menu has Remove option", "Remove"); mAsserter.ok(mSolo.searchText("Add to Home Screen", true), "Context menu has Add to Home Screen option", "Add to Home Screen"); mActions.sendSpecialKey(Actions.SpecialKey.BACK); mActions.sendSpecialKey(Actions.SpecialKey.BACK); } private void testClick(String url) { ListView list = getAllPagesList(url); mSolo.waitForText(bookmarks[0]); Actions.EventExpecter contentEventExpecter = mActions.expectGeckoEvent("DOMContentLoaded"); View child = list.getChildAt(0); mSolo.clickOnView(child); contentEventExpecter.blockForEvent(); verifyUrl(url); } private ListView getAllPagesList(String url) { Activity awesomeBarActivity = clickOnAwesomeBar(); mSolo.waitForText(bookmarks[0]); final ArrayList views = mSolo.getCurrentListViews(); listview = null; boolean success = waitForTest(new BooleanTest() { public boolean test() { for (ListView view : views) { if (view.getTag().equals("allPages")) { listview = view; return true; } } return false; } }, MAX_WAIT_MS); return listview; } public void tearDown() throws Exception { ContentResolver resolver = getActivity().getContentResolver(); Uri uri = Uri.parse("content://@ANDROID_PACKAGE_NAME@.db.browser/history"); uri = uri.buildUpon().appendQueryParameter("profile", "default") .appendQueryParameter("sync", "true").build(); resolver.delete(uri, "url = ?", new String[] { "http://mochi.test:8888/tests/robocop/robocop_big_link.html" }); super.tearDown(); } }