mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
b7b1568a70
--HG-- rename : build/mobile/robocop/Actions.java.in => build/mobile/robocop/Actions.java rename : build/mobile/robocop/Assert.java.in => build/mobile/robocop/Assert.java rename : build/mobile/robocop/Driver.java.in => build/mobile/robocop/Driver.java rename : build/mobile/robocop/Element.java.in => build/mobile/robocop/Element.java rename : build/mobile/robocop/FennecInstrumentationTestRunner.java.in => build/mobile/robocop/FennecInstrumentationTestRunner.java rename : build/mobile/robocop/FennecMochitestAssert.java.in => build/mobile/robocop/FennecMochitestAssert.java rename : build/mobile/robocop/FennecNativeActions.java.in => build/mobile/robocop/FennecNativeActions.java rename : build/mobile/robocop/FennecNativeDriver.java.in => build/mobile/robocop/FennecNativeDriver.java rename : build/mobile/robocop/FennecNativeElement.java.in => build/mobile/robocop/FennecNativeElement.java rename : build/mobile/robocop/FennecTalosAssert.java.in => build/mobile/robocop/FennecTalosAssert.java rename : build/mobile/robocop/PaintedSurface.java.in => build/mobile/robocop/PaintedSurface.java rename : build/mobile/robocop/RoboCopException.java.in => build/mobile/robocop/RoboCopException.java rename : build/mobile/robocop/RobocopUtils.java.in => build/mobile/robocop/RobocopUtils.java rename : mobile/android/base/tests/AboutHomeTest.java.in => mobile/android/base/tests/AboutHomeTest.java rename : mobile/android/base/tests/BaseTest.java.in => mobile/android/base/tests/BaseTest.java rename : mobile/android/base/tests/ContentContextMenuTest.java.in => mobile/android/base/tests/ContentContextMenuTest.java rename : mobile/android/base/tests/ContentProviderTest.java.in => mobile/android/base/tests/ContentProviderTest.java rename : mobile/android/base/tests/DatabaseHelper.java.in => mobile/android/base/tests/DatabaseHelper.java rename : mobile/android/base/tests/JavascriptTest.java.in => mobile/android/base/tests/JavascriptTest.java rename : mobile/android/base/tests/MotionEventHelper.java.in => mobile/android/base/tests/MotionEventHelper.java rename : mobile/android/base/tests/MotionEventReplayer.java.in => mobile/android/base/tests/MotionEventReplayer.java rename : mobile/android/base/tests/PixelTest.java.in => mobile/android/base/tests/PixelTest.java rename : mobile/android/base/tests/StringHelper.java.in => mobile/android/base/tests/StringHelper.java rename : mobile/android/base/tests/testAboutPage.java.in => mobile/android/base/tests/testAboutPage.java rename : mobile/android/base/tests/testAddSearchEngine.java.in => mobile/android/base/tests/testAddSearchEngine.java rename : mobile/android/base/tests/testAddonManager.java.in => mobile/android/base/tests/testAddonManager.java rename : mobile/android/base/tests/testAwesomebar.java.in => mobile/android/base/tests/testAwesomebar.java rename : mobile/android/base/tests/testAwesomebarSwipes.java.in => mobile/android/base/tests/testAwesomebarSwipes.java rename : mobile/android/base/tests/testAxisLocking.java.in => mobile/android/base/tests/testAxisLocking.java rename : mobile/android/base/tests/testBookmark.java.in => mobile/android/base/tests/testBookmark.java rename : mobile/android/base/tests/testBookmarkFolders.java.in => mobile/android/base/tests/testBookmarkFolders.java rename : mobile/android/base/tests/testBookmarkKeyword.java.in => mobile/android/base/tests/testBookmarkKeyword.java rename : mobile/android/base/tests/testBookmarklets.java.in => mobile/android/base/tests/testBookmarklets.java rename : mobile/android/base/tests/testBookmarksPage.java.in => mobile/android/base/tests/testBookmarksPage.java rename : mobile/android/base/tests/testBrowserProvider.java.in => mobile/android/base/tests/testBrowserProvider.java rename : mobile/android/base/tests/testBrowserProviderPerf.java.in => mobile/android/base/tests/testBrowserProviderPerf.java rename : mobile/android/base/tests/testBrowserSearchVisibility.java.in => mobile/android/base/tests/testBrowserSearchVisibility.java rename : mobile/android/base/tests/testCheck.java.in => mobile/android/base/tests/testCheck.java rename : mobile/android/base/tests/testCheck2.java.in => mobile/android/base/tests/testCheck2.java rename : mobile/android/base/tests/testClearPrivateData.java.in => mobile/android/base/tests/testClearPrivateData.java rename : mobile/android/base/tests/testDeviceSearchEngine.java.in => mobile/android/base/tests/testDeviceSearchEngine.java rename : mobile/android/base/tests/testDistribution.java.in => mobile/android/base/tests/testDistribution.java rename : mobile/android/base/tests/testDoorHanger.java.in => mobile/android/base/tests/testDoorHanger.java rename : mobile/android/base/tests/testFindInPage.java.in => mobile/android/base/tests/testFindInPage.java rename : mobile/android/base/tests/testFlingCorrectness.java.in => mobile/android/base/tests/testFlingCorrectness.java rename : mobile/android/base/tests/testFormHistory.java.in => mobile/android/base/tests/testFormHistory.java rename : mobile/android/base/tests/testGetUserMedia.java.in => mobile/android/base/tests/testGetUserMedia.java rename : mobile/android/base/tests/testHistory.java.in => mobile/android/base/tests/testHistory.java rename : mobile/android/base/tests/testHomeBanner.java.in => mobile/android/base/tests/testHomeBanner.java rename : mobile/android/base/tests/testImportFromAndroid.java.in => mobile/android/base/tests/testImportFromAndroid.java rename : mobile/android/base/tests/testInputUrlBar.java.in => mobile/android/base/tests/testInputUrlBar.java rename : mobile/android/base/tests/testJNI.java.in => mobile/android/base/tests/testJNI.java rename : mobile/android/base/tests/testJarReader.java.in => mobile/android/base/tests/testJarReader.java rename : mobile/android/base/tests/testLinkContextMenu.java.in => mobile/android/base/tests/testLinkContextMenu.java rename : mobile/android/base/tests/testLoad.java.in => mobile/android/base/tests/testLoad.java rename : mobile/android/base/tests/testMailToContextMenu.java.in => mobile/android/base/tests/testMailToContextMenu.java rename : mobile/android/base/tests/testMasterPassword.java.in => mobile/android/base/tests/testMasterPassword.java rename : mobile/android/base/tests/testNewTab.java.in => mobile/android/base/tests/testNewTab.java rename : mobile/android/base/tests/testOrderedBroadcast.java.in => mobile/android/base/tests/testOrderedBroadcast.java rename : mobile/android/base/tests/testOverscroll.java.in => mobile/android/base/tests/testOverscroll.java rename : mobile/android/base/tests/testPan.java.in => mobile/android/base/tests/testPan.java rename : mobile/android/base/tests/testPanCorrectness.java.in => mobile/android/base/tests/testPanCorrectness.java rename : mobile/android/base/tests/testPasswordEncrypt.java.in => mobile/android/base/tests/testPasswordEncrypt.java rename : mobile/android/base/tests/testPasswordProvider.java.in => mobile/android/base/tests/testPasswordProvider.java rename : mobile/android/base/tests/testPermissions.java.in => mobile/android/base/tests/testPermissions.java rename : mobile/android/base/tests/testPictureLinkContextMenu.java.in => mobile/android/base/tests/testPictureLinkContextMenu.java rename : mobile/android/base/tests/testPrefsObserver.java.in => mobile/android/base/tests/testPrefsObserver.java rename : mobile/android/base/tests/testPrivateBrowsing.java.in => mobile/android/base/tests/testPrivateBrowsing.java rename : mobile/android/base/tests/testPromptGridInput.java.in => mobile/android/base/tests/testPromptGridInput.java rename : mobile/android/base/tests/testReaderMode.java.in => mobile/android/base/tests/testReaderMode.java rename : mobile/android/base/tests/testSearchSuggestions.java.in => mobile/android/base/tests/testSearchSuggestions.java rename : mobile/android/base/tests/testSettingsMenuItems.java.in => mobile/android/base/tests/testSettingsMenuItems.java rename : mobile/android/base/tests/testShareLink.java.in => mobile/android/base/tests/testShareLink.java rename : mobile/android/base/tests/testSharedPreferences.java.in => mobile/android/base/tests/testSharedPreferences.java rename : mobile/android/base/tests/testSystemPages.java.in => mobile/android/base/tests/testSystemPages.java rename : mobile/android/base/tests/testTabHistory.java.in => mobile/android/base/tests/testTabHistory.java rename : mobile/android/base/tests/testThumbnails.java.in => mobile/android/base/tests/testThumbnails.java rename : mobile/android/base/tests/testVkbOverlap.java.in => mobile/android/base/tests/testVkbOverlap.java rename : mobile/android/base/tests/test_bug720538.java.in => mobile/android/base/tests/test_bug720538.java extra : rebase_source : c8d715aa110b07c6010054a674879e143a5f04e7 extra : amend_source : fb5714b78e055e336b5e0c6a0da8eb8c931ff09e extra : histedit_source : ec57d8ba94000092438a2ba0bf4fb66091e98513%2C114ade72bb9b72b96557da74f1179734fa347e5c
200 lines
9.8 KiB
Java
200 lines
9.8 KiB
Java
package org.mozilla.gecko.tests;
|
|
|
|
import org.mozilla.gecko.*;
|
|
import com.jayway.android.robotium.solo.Condition;
|
|
import com.jayway.android.robotium.solo.Solo;
|
|
import android.graphics.Rect;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.ListView;
|
|
import java.util.ArrayList;
|
|
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 {
|
|
static final int EVENT_CLEAR_DELAY_MS = 3000;
|
|
static final int READER_ICON_MAX_WAIT_MS = 15000;
|
|
|
|
@Override
|
|
protected int getTestType() {
|
|
return TEST_MOCHITEST;
|
|
}
|
|
public void testReaderMode() {
|
|
blockForGeckoReady();
|
|
|
|
Actions.EventExpecter contentEventExpecter;
|
|
Actions.EventExpecter contentReaderAddedExpecter;
|
|
Actions.EventExpecter faviconExpecter;
|
|
Actions.EventExpecter contentPageShowExpecter;
|
|
Actions.RepeatedEventExpecter paintExpecter;
|
|
ListView list;
|
|
View child;
|
|
View readerIcon;
|
|
String textUrl = getAbsoluteUrl(StringHelper.ROBOCOP_TEXT_PAGE_URL);
|
|
String devType = mDevice.type;
|
|
int childNo;
|
|
int height;
|
|
int width;
|
|
|
|
loadAndPaint(textUrl);
|
|
|
|
// Add the page to the Reading List using long click on the reader icon
|
|
readerIcon = getReaderIcon();
|
|
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 long click on the reader icon a second time
|
|
readerIcon = getReaderIcon();
|
|
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");
|
|
contentPageShowExpecter = mActions.expectGeckoEvent("Content:PageShow");
|
|
readerIcon = getReaderIcon();
|
|
paintExpecter = mActions.expectPaint();
|
|
mSolo.clickOnView(readerIcon);
|
|
|
|
// 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();
|
|
contentPageShowExpecter.blockForEvent();
|
|
contentPageShowExpecter.unregisterListener();
|
|
paintExpecter.blockUntilClear(EVENT_CLEAR_DELAY_MS);
|
|
paintExpecter.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);
|
|
final ViewGroup actionLayoutEntry = (ViewGroup)pageActionLayout;
|
|
View icon = actionLayoutEntry.getChildAt(1);
|
|
if (icon == null || icon.getVisibility() != View.VISIBLE) {
|
|
// wait for the view to be visible, otherwise it may not respond
|
|
// to clicks -- see bug 927578
|
|
mAsserter.dumpLog("reader icon not visible -- waiting for visibility");
|
|
Condition visibilityCondition = new Condition() {
|
|
@Override
|
|
public boolean isSatisfied() {
|
|
View conditionIcon = actionLayoutEntry.getChildAt(1);
|
|
if (conditionIcon == null ||
|
|
conditionIcon.getVisibility() != View.VISIBLE)
|
|
return false;
|
|
return true;
|
|
}
|
|
};
|
|
waitForCondition(visibilityCondition, READER_ICON_MAX_WAIT_MS);
|
|
icon = actionLayoutEntry.getChildAt(1);
|
|
mAsserter.ok(icon != null, "checking reader icon view", "reader icon view not null");
|
|
mAsserter.ok(icon.getVisibility() == View.VISIBLE, "checking reader icon visible", "reader icon visible");
|
|
}
|
|
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;
|
|
}
|
|
}
|