mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-30 05:35:31 +00:00
Bug 926310 - Robocop: Add test for 'Reader Mode' feature. r=jmaher
This commit is contained in:
parent
8cbaaeb6ab
commit
7a95083afe
@ -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);
|
||||
|
@ -45,6 +45,7 @@
|
||||
[testMasterPassword]
|
||||
[testDeviceSearchEngine]
|
||||
[testPrivateBrowsing]
|
||||
[testReaderMode]
|
||||
|
||||
# Used for Talos, please don't use in mochitest
|
||||
#[testPan]
|
||||
|
170
mobile/android/base/tests/testReaderMode.java.in
Normal file
170
mobile/android/base/tests/testReaderMode.java.in
Normal 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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user