gecko/mobile/android/base/tests/AboutHomeTest.java.in

211 lines
8.5 KiB
Java

#filter substitution
package @ANDROID_PACKAGE_NAME@.tests;
import com.jayway.android.robotium.solo.Condition;
import @ANDROID_PACKAGE_NAME@.*;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.support.v4.view.ViewPager;
import android.text.TextUtils;
import android.view.View;
import android.widget.TabWidget;
import android.widget.ListAdapter;
import android.widget.ListView;
import java.lang.reflect.Method;
import java.util.ArrayList;
/**
* This class is an extension of BaseTest that helps with interaction with about:home
* This class contains methods that access the different tabs from about:home, methods that get information like history and bookmarks from the database, edit and remove bookmarks and history items
* The purpose of this class is to collect all the logically connected methods that deal with about:home
* To use any of these methods in your test make sure it extends AboutHomeTest instead of BaseTest
*/
abstract class AboutHomeTest extends BaseTest {
protected enum AboutHomeTabs {MOST_VISITED, MOST_RECENT, TABS_FROM_LAST_TIME, BOOKMARKS, READING_LIST};
protected ArrayList<String> aboutHomeTabs = new ArrayList<String>() {{
add("HISTORY");
add("BOOKMARKS");
add("READING_LIST");
}};
/**
* FIXME: Write new versions of these methods and update their consumers to use the new about:home pages.
*/
protected ListView getHistoryList(String waitText, int expectedChildCount) {
return null;
}
protected ListView getHistoryList(String waitText) {
return null;
}
/**
* Waits for the given ListView to have a non-empty adapter.
*
* This method will return false if the given ListView or its adapter are null.
*/
protected boolean waitForListToLoad(final ListView listView) {
Condition listWaitCondition = new Condition() {
@Override
public boolean isSatisfied() {
if (listView == null) {
return false;
}
final ListAdapter adapter = listView.getAdapter();
if (adapter == null) {
return false;
}
return (adapter.getCount() > 0);
}
};
return waitForCondition(listWaitCondition, MAX_WAIT_MS);
}
/**
* Get an active ListView with the specified tag .
*
* This method uses the predefined tags in HomePager.
*/
protected final ListView findListViewWithTag(String tag) {
for (ListView listView : mSolo.getCurrentViews(ListView.class)) {
final String listTag = (String) listView.getTag();
if (TextUtils.isEmpty(listTag)) {
continue;
}
if (TextUtils.equals(listTag, tag)) {
return listView;
}
}
return null;
}
/**
* FIXME: rewrite this to work with fig when rewriting the testBookmarksTab test
* This method will edit the bookmark with index = bookmarkIndex from the list of bookmarks
* For the field index:
* fieldIndex = 1 - the Bookmark name
* fieldIndex = 2 - the Bookmark url
* fieldIndex = 3 - the Bookmark keyword
*/
protected void editBookmark(int bookmarkIndex, int fieldIndex, String addedText, ListView list) {
// Open the Edit Bookmark context menu
View child;
mSolo.clickOnText("Bookmarks");
child = list.getChildAt(bookmarkIndex);
mAsserter.ok(child != null, "edit item can be retrieved", child != null ? child.toString() : "null!");
waitForText("Switch to tab");
mSolo.clickLongOnView(child);
waitForText("Share");
mSolo.clickOnText("Edit");
waitForText("Edit Bookmark");
// Clear the Field
mSolo.clearEditText(fieldIndex);
// Enter the new text
mSolo.clickOnEditText(fieldIndex);
mActions.sendKeys(addedText);
mSolo.clickOnText("OK");
waitForText("Bookmark updated");
}
// FIXME: rewrite this to work with fig when rewriting the testBookmarksTab test
protected boolean checkBookmarkEdit(int bookmarkIndex, String addedText, ListView list) {
// Open the Edit Bookmark context menu
View child;
mSolo.clickOnText("Bookmarks");
child = list.getChildAt(bookmarkIndex);
mAsserter.ok(child != null, "check item can be retrieved", child != null ? child.toString() : "null!");
waitForText("Switch to tab");
mSolo.clickLongOnView(child);
waitForText("Share");
mSolo.clickOnText("Edit");
waitForText("Edit Bookmark");
// Check if the new text was added
if (mSolo.searchText(addedText)) {
clickOnButton("Cancel");
waitForText("about:home");
return true;
} else {
clickOnButton("Cancel");
waitForText("about:home");
return false;
}
}
// A wait in order for the about:home tab to be rendered after drag/tab selection
private void waitForAboutHomeTab(final int tabIndex) {
boolean correctTab = waitForCondition(new Condition() {
@Override
public boolean isSatisfied() {
ViewPager pager = (ViewPager)mSolo.getView(ViewPager.class, 0);
return (pager.getCurrentItem() == tabIndex);
}
}, MAX_WAIT_MS);
mAsserter.ok(correctTab, "Checking that the correct tab is displayed", "The " + aboutHomeTabs.get(tabIndex) + " tab is displayed");
}
/**
* This method can be used to open the different tabs of about:home
* @param AboutHomeTabs enum item {MOST_VISITED, MOST_RECENT, TABS_FROM_LAST_TIME, BOOKMARKS, READING_LIST}
*/
protected void openAboutHomeTab(AboutHomeTabs tab) {
int halfWidth = mDriver.getGeckoWidth() / 2;
int halfHeight = mDriver.getGeckoHeight() / 2;
focusUrlBar();
ViewPager pager = (ViewPager)mSolo.getView(ViewPager.class, 0);
switch (tab) {
case BOOKMARKS : {
mSolo.clickOnText(StringHelper.BOOKMARKS_LABEL);
waitForAboutHomeTab(aboutHomeTabs.indexOf(tab.toString()));
break;
}
case MOST_RECENT: {
mSolo.clickOnText(StringHelper.BOOKMARKS_LABEL);
waitForAboutHomeTab(aboutHomeTabs.indexOf(StringHelper.BOOKMARKS_LABEL));
mActions.drag(0, halfWidth, halfHeight, halfHeight);
waitForAboutHomeTab(aboutHomeTabs.indexOf(StringHelper.HISTORY_LABEL));
TabWidget tabwidget = (TabWidget)mSolo.getView(TabWidget.class, 0);
mSolo.clickOnView(tabwidget.getChildAt(1));
mAsserter.ok(waitForText(StringHelper.MOST_RECENT_LABEL), "Checking that we are in the most recent tab of about:home", "We are in the most recent tab");
break;
}
case READING_LIST: {
mSolo.clickOnText(StringHelper.BOOKMARKS_LABEL);
waitForAboutHomeTab(aboutHomeTabs.indexOf(StringHelper.BOOKMARKS_LABEL));
mActions.drag(halfWidth, 0, halfHeight, halfHeight);
waitForAboutHomeTab(aboutHomeTabs.indexOf(tab.toString()));
break;
}
case MOST_VISITED: {
mSolo.clickOnText(StringHelper.BOOKMARKS_LABEL);
waitForAboutHomeTab(aboutHomeTabs.indexOf(StringHelper.BOOKMARKS_LABEL));
mActions.drag(0, halfWidth, halfHeight, halfHeight);
waitForAboutHomeTab(aboutHomeTabs.indexOf(StringHelper.HISTORY_LABEL));
TabWidget tabwidget = (TabWidget)mSolo.getView(TabWidget.class, 0);
mSolo.clickOnView(tabwidget.getChildAt(0));
break;
}
case TABS_FROM_LAST_TIME: {
mSolo.clickOnText(StringHelper.BOOKMARKS_LABEL);
waitForAboutHomeTab(aboutHomeTabs.indexOf(StringHelper.BOOKMARKS_LABEL));
mActions.drag(0, halfWidth, halfHeight, halfHeight);
waitForAboutHomeTab(aboutHomeTabs.indexOf(StringHelper.HISTORY_LABEL));
TabWidget tabwidget = (TabWidget)mSolo.getView(TabWidget.class, 0);
mSolo.clickOnView(tabwidget.getChildAt(2));
mAsserter.ok(waitForText(StringHelper.TABS_FROM_LAST_TIME_LABEL), "Checking that we are in the Tabs from last time tab of about:home", "We are in the Tabs from last time tab");
break;
}
}
}
}