gecko/mobile/android/base/tests/testBookmarkFolders.java

179 lines
7.2 KiB
Java

package org.mozilla.gecko.tests;
import org.mozilla.gecko.*;
import org.mozilla.gecko.sync.Utils;
import com.jayway.android.robotium.solo.Condition;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.ContentUris;
import android.database.Cursor;
import android.net.Uri;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Arrays;
public class testBookmarkFolders extends AboutHomeTest {
private static String DESKTOP_BOOKMARK_URL;
@Override
protected int getTestType() {
return TEST_MOCHITEST;
}
public void testBookmarkFolders() {
DESKTOP_BOOKMARK_URL = getAbsoluteUrl(StringHelper.ROBOCOP_BLANK_PAGE_02_URL);
setUpDesktopBookmarks();
checkBookmarkList();
}
private void checkBookmarkList() {
openAboutHomeTab(AboutHomeTabs.BOOKMARKS);
waitForText(StringHelper.DESKTOP_FOLDER_LABEL);
clickOnBookmarkFolder(StringHelper.DESKTOP_FOLDER_LABEL);
waitForText(StringHelper.TOOLBAR_FOLDER_LABEL);
// Verify the number of folders displayed in the Desktop Bookmarks folder is correct
ListView desktopFolderContent = findListViewWithTag("bookmarks");
ListAdapter adapter = desktopFolderContent.getAdapter();
if (mDevice.type.equals("tablet")) { // On tablets it's 4 folders and 1 view for top padding
mAsserter.is(adapter.getCount(), 5, "Checking that the correct number of folders is displayed in the Desktop Bookmarks folder");
} else { // On phones it's just the 4 folders
mAsserter.is(adapter.getCount(), 4, "Checking that the correct number of folders is displayed in the Desktop Bookmarks folder");
}
clickOnBookmarkFolder(StringHelper.TOOLBAR_FOLDER_LABEL);
// Go up in the bookmark folder hierarchy
clickOnBookmarkFolder(StringHelper.TOOLBAR_FOLDER_LABEL);
mAsserter.ok(waitForText(StringHelper.BOOKMARKS_MENU_FOLDER_LABEL), "Going up in the folder hierarchy", "We are back in the Desktop Bookmarks folder");
clickOnBookmarkFolder(StringHelper.DESKTOP_FOLDER_LABEL);
mAsserter.ok(waitForText(StringHelper.DESKTOP_FOLDER_LABEL), "Going up in the folder hierarchy", "We are back in the main Bookmarks List View");
clickOnBookmarkFolder(StringHelper.DESKTOP_FOLDER_LABEL);
clickOnBookmarkFolder(StringHelper.TOOLBAR_FOLDER_LABEL);
isBookmarkDisplayed(DESKTOP_BOOKMARK_URL);
// Open the bookmark from a bookmark folder hierarchy
loadBookmark(DESKTOP_BOOKMARK_URL);
waitForText(StringHelper.ROBOCOP_BLANK_PAGE_02_TITLE);
verifyPageTitle(StringHelper.ROBOCOP_BLANK_PAGE_02_TITLE);
openAboutHomeTab(AboutHomeTabs.BOOKMARKS);
// Check that folders don't have a context menu
boolean success = waitForCondition(new Condition() {
@Override
public boolean isSatisfied() {
View desktopFolder = getBookmarkFolderView(StringHelper.DESKTOP_FOLDER_LABEL);
if (desktopFolder == null) {
return false;
}
mSolo.clickLongOnView(desktopFolder);
return true; }
}, MAX_WAIT_MS);
mAsserter.ok(success, "Trying to long click on the Desktop Bookmarks","Desktop Bookmarks folder could not be long clicked");
final String contextMenuString = StringHelper.BOOKMARK_CONTEXT_MENU_ITEMS[0];
mAsserter.ok(!waitForText(contextMenuString), "Folders do not have context menus", "The context menu was not opened");
// Even if no context menu is opened long clicking a folder still opens it. We need to close it.
clickOnBookmarkFolder(StringHelper.DESKTOP_FOLDER_LABEL);
}
private void clickOnBookmarkFolder(final String folderName) {
boolean success = waitForCondition(new Condition() {
@Override
public boolean isSatisfied() {
View bookmarksFolder = getBookmarkFolderView(folderName);
if (bookmarksFolder == null) {
return false;
}
mSolo.waitForView(bookmarksFolder);
mSolo.clickOnView(bookmarksFolder);
return true;
}
}, MAX_WAIT_MS);
mAsserter.ok(success, "Trying to click on the " + folderName + " folder","The " + folderName + " folder was clicked");
}
private View getBookmarkFolderView(String folderName) {
openAboutHomeTab(AboutHomeTabs.BOOKMARKS);
mSolo.hideSoftKeyboard();
getInstrumentation().waitForIdleSync();
ListView bookmarksTabList = findListViewWithTag("bookmarks");
if (!waitForNonEmptyListToLoad(bookmarksTabList)) {
return null;
}
ListAdapter adapter = bookmarksTabList.getAdapter();
if (adapter == null) {
return null;
}
for (int i = 0; i < adapter.getCount(); i++ ) {
View bookmarkView = bookmarksTabList.getChildAt(i);
if (bookmarkView instanceof TextView) {
TextView folderTextView = (TextView) bookmarkView;
if (folderTextView.getText().equals(folderName)) {
return bookmarkView;
}
}
}
return null;
}
// Add a bookmark in the Desktop folder so we can check the folder navigation in the bookmarks page
private void setUpDesktopBookmarks() {
blockForGeckoReady();
// Get the folder id of the StringHelper.DESKTOP_FOLDER_LABEL folder
Long desktopFolderId = mDatabaseHelper.getFolderIdFromGuid("toolbar");
// Generate a Guid for the bookmark
final String generatedGuid = Utils.generateGuid();
mAsserter.ok((generatedGuid != null), "Generating a random Guid for the bookmark", "We could not generate a Guid for the bookmark");
// Insert the bookmark
ContentResolver resolver = getActivity().getContentResolver();
Uri bookmarksUri = mDatabaseHelper.buildUri(DatabaseHelper.BrowserDataType.BOOKMARKS);
long now = System.currentTimeMillis();
ContentValues values = new ContentValues();
values.put("title", StringHelper.ROBOCOP_BLANK_PAGE_02_TITLE);
values.put("url", DESKTOP_BOOKMARK_URL);
values.put("parent", desktopFolderId);
values.put("modified", now);
values.put("type", 1);
values.put("guid", generatedGuid);
values.put("position", 10);
values.put("created", now);
int updated = resolver.update(bookmarksUri,
values,
"url = ?",
new String[] { DESKTOP_BOOKMARK_URL });
if (updated == 0) {
Uri uri = resolver.insert(bookmarksUri, values);
mAsserter.ok(true, "Inserted at: ", uri.toString());
} else {
mAsserter.ok(false, "Failed to insert the Desktop bookmark", "Something went wrong");
}
}
@Override
public void tearDown() throws Exception {
mDatabaseHelper.deleteBookmark(DESKTOP_BOOKMARK_URL);
super.tearDown();
}
}