Bug 926310 - Robocop: Add test for 'Reader Mode' feature. r=jmaher

This commit is contained in:
Paul Feher 2013-10-14 16:54:06 +03:00
parent 8cbaaeb6ab
commit 7a95083afe
3 changed files with 178 additions and 5 deletions

View File

@ -27,7 +27,7 @@ import java.util.ArrayList;
* 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 {
abstract class AboutHomeTest extends PixelTest {
protected enum AboutHomeTabs {HISTORY, MOST_RECENT, TABS_FROM_LAST_TIME, TOP_SITES, BOOKMARKS, READING_LIST};
private ArrayList<String> aboutHomeTabs = new ArrayList<String>() {{
add("TOP_SITES");
@ -280,12 +280,15 @@ abstract class AboutHomeTest extends BaseTest {
protected void openAboutHomeTab(AboutHomeTabs tab) {
focusUrlBar();
ViewPager pager = (ViewPager)mSolo.getView(ViewPager.class, 0);
final int currentTabIndex = pager.getCurrentItem();
int tabOffset;
// Handle tablets by just clicking the visible tab title.
if (mDevice.type.equals("tablet")) {
// Just click for tablets, since all the titles are visible.
if (AboutHomeTabs.MOST_RECENT == tab || AboutHomeTabs.TABS_FROM_LAST_TIME == tab) {
mSolo.clickOnText(AboutHomeTabs.HISTORY.toString());
tabOffset = aboutHomeTabs.indexOf(AboutHomeTabs.HISTORY.toString()) - currentTabIndex;
swipeAboutHome(tabOffset);
waitForAboutHomeTab(aboutHomeTabs.indexOf(StringHelper.HISTORY_LABEL));
TabWidget tabwidget = (TabWidget)mSolo.getView(TabWidget.class, 0);
switch (tab) {
@ -308,8 +311,7 @@ abstract class AboutHomeTest extends BaseTest {
}
// Handle phones (non-tablets).
final int currentTabIndex = pager.getCurrentItem();
int tabOffset = aboutHomeTabs.indexOf(tab.toString()) - currentTabIndex;
tabOffset = aboutHomeTabs.indexOf(tab.toString()) - currentTabIndex;
switch (tab) {
case TOP_SITES : {
swipeAboutHome(tabOffset);

View File

@ -45,6 +45,7 @@
[testMasterPassword]
[testDeviceSearchEngine]
[testPrivateBrowsing]
[testReaderMode]
# Used for Talos, please don't use in mochitest
#[testPan]

View File

@ -0,0 +1,170 @@
#filter substitution
package @ANDROID_PACKAGE_NAME@.tests;
import @ANDROID_PACKAGE_NAME@.*;
import com.jayway.android.robotium.solo.Solo;
import android.widget.ListView;
import android.view.View;
import java.util.ArrayList;
import android.view.ViewGroup;
import org.json.JSONException;
import org.json.JSONObject;
/**
* This patch tests the Reader Mode feature by adding and removing items in reading list
* checks the reader toolbar functionality(share, add/remove to reading list, go to reading list)
* accessing a page from reading list menu, checks that the reader icon is associated in History tab
* and that the reading list is properly populated after adding or removing reader items
*/
public class testReaderMode extends AboutHomeTest {
int height,width;
@Override
protected int getTestType() {
return TEST_MOCHITEST;
}
public void testReaderMode() {
blockForGeckoReady();
Actions.EventExpecter contentEventExpecter;
Actions.EventExpecter contentReaderAddedExpecter;
Actions.EventExpecter faviconExpecter;
ListView list;
View child;
String textUrl = getAbsoluteUrl(StringHelper.ROBOCOP_TEXT_PAGE_URL);
String devType = mDevice.type;
int childNo;
contentEventExpecter = mActions.expectGeckoEvent("DOMContentLoaded");
loadAndPaint(textUrl);
contentEventExpecter.blockForEvent();
contentEventExpecter.unregisterListener();
View readerIcon = getReaderIcon();
// Add the page to the Reading List using log click on the reader icon
contentReaderAddedExpecter = mActions.expectGeckoEvent("Reader:Added");
mSolo.clickLongOnView(readerIcon);
String eventData = contentReaderAddedExpecter.blockForEventData();
isAdded(eventData);
contentReaderAddedExpecter.unregisterListener();
// Try to add the page to the Reading List using log click on the reader icon a second time
contentReaderAddedExpecter = mActions.expectGeckoEvent("Reader:Added");
mSolo.clickLongOnView(readerIcon);
eventData = contentReaderAddedExpecter.blockForEventData();
isAdded(eventData);
contentReaderAddedExpecter.unregisterListener();
// Waiting for the favicon since is the last element loaded usually
faviconExpecter = mActions.expectGeckoEvent("Reader:FaviconRequest");
mSolo.clickOnView(getReaderIcon());
// Changing devices orientation to be sure that all devices are in portrait when will access the reader toolbar
mSolo.setActivityOrientation(Solo.PORTRAIT);
faviconExpecter.blockForEvent();
faviconExpecter.unregisterListener();
verifyPageTitle("Robocop Text Page");
// Open the share menu for the reader toolbar
height = mDriver.getGeckoTop() + mDriver.getGeckoHeight() - 10;
width = mDriver.getGeckoLeft() + mDriver.getGeckoWidth() - 10;
mAsserter.dumpLog("Long Clicking at width = " + String.valueOf(width) + " and height = " + String.valueOf(height));
mSolo.clickOnScreen(width,height);
mAsserter.ok(mSolo.waitForText("Share via"), "Waiting for the share menu", "The share menu is present");
mActions.sendSpecialKey(Actions.SpecialKey.BACK); // Close the share menu
// Remove page from the Reading List using reader toolbar
height = mDriver.getGeckoTop() + mDriver.getGeckoHeight() - 10;
width = mDriver.getGeckoLeft() + 50;
mAsserter.dumpLog("Long Clicking at width = " + String.valueOf(width) + " and height = " + String.valueOf(height));
mSolo.clickOnScreen(width,height);
mAsserter.ok(mSolo.waitForText("Page removed from your Reading List"), "Waiting for the page to removed from your Reading List", "The page is removed from your Reading List");
//Add page to the Reading List using reader toolbar
mSolo.clickOnScreen(width,height);
mAsserter.ok(mSolo.waitForText("Page added to your Reading List"), "Waiting for the page to be added to your Reading List", "The page was added to your Reading List");
// Open the Reading List menu for the toolbar
height = mDriver.getGeckoTop() + mDriver.getGeckoHeight() - 10;
width = mDriver.getGeckoLeft() + mDriver.getGeckoWidth()/2 - 10;
mAsserter.dumpLog("Long Clicking at width = " + String.valueOf(width) + " and height = " + String.valueOf(height));
contentEventExpecter = mActions.expectGeckoEvent("DOMContentLoaded");
mSolo.clickOnScreen(width,height);
contentEventExpecter.blockForEvent();
contentEventExpecter.unregisterListener();
// Check if the page is present in the Reading List
mAsserter.ok(mSolo.waitForText("Robocop Text Page"), "Verify if the page is added to your Reading List", "The page is present in your Reading List");
// Check if the page is added in History tab like a Reading List item
openAboutHomeTab(AboutHomeTabs.MOST_RECENT);
list = findListViewWithTag("most_recent");
child = list.getChildAt(1);
mAsserter.ok(child != null, "item can be retrieved", child != null ? child.toString() : "null!");
mSolo.clickLongOnView(child);
mAsserter.ok(mSolo.waitForText("Open in Reader"), "Verify if the page is present in history as a Reading List item", "The page is present in history as a Reading List item");
mActions.sendSpecialKey(Actions.SpecialKey.BACK); // Dismiss the context menu
mSolo.waitForText("Robocop Text Page");
// Verify separately the Reading List entries for tablets and phone because for tablets there is an extra child in UI design
if (devType.equals("phone")) {
childNo = 1;
}
else {
childNo = 2;
}
// Verify if the page is present to your Reading List
openAboutHomeTab(AboutHomeTabs.READING_LIST);
list = findListViewWithTag("reading_list");
child = list.getChildAt(childNo-1);
mAsserter.ok(child != null, "Verify if the page is present to your Reading List", "The page is present in your Reading List");
contentEventExpecter = mActions.expectGeckoEvent("DOMContentLoaded");
mSolo.clickOnView(child);
contentEventExpecter.blockForEvent();
contentEventExpecter.unregisterListener();
verifyPageTitle("Robocop Text Page");
// Verify that we are in reader mode and remove the page from Reading List
height = mDriver.getGeckoTop() + mDriver.getGeckoHeight() - 10;
width = mDriver.getGeckoLeft() + 50;
mAsserter.dumpLog("Long Clicking at width = " + String.valueOf(width) + " and height = " + String.valueOf(height));
mSolo.clickOnScreen(width,height);
mAsserter.ok(mSolo.waitForText("Page removed from your Reading List"), "Waiting for the page to removed from your Reading List", "The page is removed from your Reading List");
verifyPageTitle("Robocop Text Page");
//Check if the Reading List is empty
openAboutHomeTab(AboutHomeTabs.READING_LIST);
list = findListViewWithTag("reading_list");
child = list.getChildAt(childNo-1);
mAsserter.ok(child == null, "Verify if the Reading List is empty", "The Reading List is empty");
}
// Get the reader icon method
protected View getReaderIcon() {
View pageActionLayout = mSolo.getView(0x7f070025);
ArrayList<String> pageActionLayoutChilds = new ArrayList();
View actionLayoutItem = pageActionLayout;
ViewGroup actionLayoutEntry = (ViewGroup)actionLayoutItem;
View icon = actionLayoutEntry.getChildAt(1);
return icon;
}
// This method check to see if a reader item is added to the reader list
private boolean isAdded(String eventData) {
try {
JSONObject data = new JSONObject(eventData);
if (data.getInt("result") == 0) {
mAsserter.ok(true, "Waiting for the page to be added to your Reading List", "The page was added to your Reading List");
}
else {
if (data.getInt("result") == 2) {
mAsserter.ok(true, "Trying to add a second time the page in your Reading List", "The page is already in your Reading List");
}
}
} catch (JSONException e) {
mAsserter.ok(false, "Error parsing the event data", e.toString());
return false;
}
return true;
}
}