Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/GeolocationTest.java

Issue 1599113002: Fix org.chromium.chrome.browser.GeolocationTest (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/test/data/android/geolocation.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/javatests/src/org/chromium/chrome/browser/GeolocationTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/GeolocationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/GeolocationTest.java
index ea5182c6cbcfa9fdb97b09bb3b6537a7170b9d6a..9515b1a44394f77ba60e5c1468ee5d09a88c9488 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/GeolocationTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/GeolocationTest.java
@@ -4,22 +4,20 @@
package org.chromium.chrome.browser;
-import android.location.Location;
-import android.test.FlakyTest;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.Smoke;
-import org.chromium.base.ThreadUtils;
+import org.chromium.base.test.util.Feature;
import org.chromium.chrome.browser.infobar.InfoBarContainer;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
-import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.chrome.test.ChromeActivityTestCaseBase;
import org.chromium.chrome.test.util.InfoBarTestAnimationListener;
import org.chromium.chrome.test.util.InfoBarUtil;
import org.chromium.chrome.test.util.TestHttpServerClient;
-import org.chromium.content.browser.LocationProviderAdapter;
import org.chromium.content.browser.LocationProviderFactory;
-import org.chromium.content.browser.LocationProviderFactory.LocationProvider;
import org.chromium.content.browser.test.util.CallbackHelper;
+import org.chromium.content.browser.test.util.MockLocationProvider;
/**
* Test suite for Geo-Location functionality.
@@ -33,9 +31,35 @@ public class GeolocationTest extends ChromeActivityTestCaseBase<ChromeActivity>
private static final double LATITUDE = 51.01;
private static final double LONGITUDE = 0.23;
private static final float ACCURACY = 10;
+ private static final String TEST_FILE = "content/test/data/android/geolocation.html";
private InfoBarTestAnimationListener mListener;
+ /**
+ * Waits till the geolocation JavaScript callback is called the specified number of times.
+ */
+ private class GeolocationUpdateWaiter extends EmptyTabObserver {
+ private CallbackHelper mCallbackHelper;
+ private int mExpectedCount;
+
+ public GeolocationUpdateWaiter() {
+ mCallbackHelper = new CallbackHelper();
+ }
+
+ @Override
+ public void onTitleUpdated(Tab tab) {
+ String expectedTitle = "Count:" + mExpectedCount;
+ if (getActivity().getActivityTab().getTitle().equals(expectedTitle)) {
+ mCallbackHelper.notifyCalled();
+ }
+ }
+
+ public void waitForNumUpdates(int numUpdates) throws Exception {
+ mExpectedCount = numUpdates;
+ mCallbackHelper.waitForCallback(0);
+ }
+ }
+
public GeolocationTest() {
super(ChromeActivity.class);
}
@@ -49,143 +73,58 @@ public class GeolocationTest extends ChromeActivityTestCaseBase<ChromeActivity>
mListener = new InfoBarTestAnimationListener();
container.setAnimationListener(mListener);
- LocationProviderFactory.setLocationProviderImpl(new LocationProvider() {
- private boolean mIsRunning;
-
- @Override
- public boolean isRunning() {
- return mIsRunning;
- }
-
- @Override
- public void start(boolean gpsEnabled) {
- mIsRunning = true;
- }
-
- @Override
- public void stop() {
- mIsRunning = false;
- }
- });
+ LocationProviderFactory.setLocationProviderImpl(new MockLocationProvider());
}
/**
* Verify Geolocation creates an InfoBar and receives a mock location.
- *
- * Fails frequently.
- * Bug 141518
- * @Smoke
- * @MediumTest
- * @Feature({"Location", "Main"})
- *
* @throws Exception
*/
- @FlakyTest
+ @Smoke
+ @MediumTest
+ @Feature({"Location", "Main"})
public void testGeolocationPlumbing() throws Exception {
final String url = TestHttpServerClient.getUrl(
- "chrome/test/data/geolocation/geolocation_on_load.html");
+ "content/test/data/android/geolocation.html");
Tab tab = getActivity().getActivityTab();
- final CallbackHelper loadCallback = new CallbackHelper();
- TabObserver observer = new EmptyTabObserver() {
- @Override
- public void onLoadStopped(Tab tab, boolean toDifferentDocument) {
- // If the device has a cached non-mock location, we won't get back our
- // lat/long, so checking that it has "#pass" is sufficient.
- if (tab.getUrl().startsWith(url + "#pass|")) {
- loadCallback.notifyCalled();
- }
- }
- };
- tab.addObserver(observer);
+ GeolocationUpdateWaiter updateWaiter = new GeolocationUpdateWaiter();
+ tab.addObserver(updateWaiter);
+
loadUrl(url);
+ runJavaScriptCodeInCurrentTab("initiate_getCurrentPosition()");
assertTrue("InfoBar not added.", mListener.addInfoBarAnimationFinished());
assertTrue("OK button wasn't found", InfoBarUtil.clickPrimaryButton(getInfoBars().get(0)));
+ updateWaiter.waitForNumUpdates(1);
- sendLocation(createMockLocation(LATITUDE, LONGITUDE, ACCURACY));
- loadCallback.waitForCallback(0);
- tab.removeObserver(observer);
+ tab.removeObserver(updateWaiter);
}
/**
* Verify Geolocation creates an InfoBar and receives multiple locations.
- *
- * Bug 141518
- * @MediumTest
- * @Feature({"Location"})
- *
* @throws Exception
*/
- @FlakyTest
+ @MediumTest
+ @Feature({"Location"})
public void testGeolocationWatch() throws Exception {
final String url = TestHttpServerClient.getUrl(
- "chrome/test/data/geolocation/geolocation_on_load.html");
+ "content/test/data/android/geolocation.html");
Tab tab = getActivity().getActivityTab();
- final CallbackHelper loadCallback0 = new CallbackHelper();
- TabObserver observer = new EmptyTabObserver() {
- @Override
- public void onLoadStopped(Tab tab, boolean toDifferentDocument) {
- // If the device has a cached non-mock location, we won't get back our
- // lat/long, so checking that it has "#pass" is sufficient.
- if (tab.getUrl().startsWith(url + "#pass|0|")) {
- loadCallback0.notifyCalled();
- }
- }
- };
- tab.addObserver(observer);
+ GeolocationUpdateWaiter updateWaiter = new GeolocationUpdateWaiter();
+ tab.addObserver(updateWaiter);
+
loadUrl(url);
+ runJavaScriptCodeInCurrentTab("initiate_watchPosition()");
assertTrue("InfoBar not added.", mListener.addInfoBarAnimationFinished());
-
assertTrue("OK button wasn't found", InfoBarUtil.clickPrimaryButton(getInfoBars().get(0)));
- sendLocation(createMockLocation(LATITUDE, LONGITUDE, ACCURACY));
- loadCallback0.waitForCallback(0);
- tab.removeObserver(observer);
-
- // Send another location: it'll update the URL again, so increase the count.
- final CallbackHelper loadCallback1 = new CallbackHelper();
- observer = new EmptyTabObserver() {
- @Override
- public void onLoadStopped(Tab tab, boolean toDifferentDocument) {
- // If the device has a cached non-mock location, we won't get back our
- // lat/long, so checking that it has "#pass" is sufficient.
- if (tab.getUrl().startsWith(url + "#pass|1|")) {
- loadCallback1.notifyCalled();
- }
- }
- };
- tab.addObserver(observer);
- sendLocation(createMockLocation(LATITUDE + 1, LONGITUDE - 1, ACCURACY - 1));
- loadCallback1.waitForCallback(0);
- tab.removeObserver(observer);
+ updateWaiter.waitForNumUpdates(2);
+
+ tab.removeObserver(updateWaiter);
}
@Override
public void startMainActivity() throws InterruptedException {
startMainActivityOnBlankPage();
}
-
- private Location createMockLocation(double latitude, double longitude, float accuracy) {
- Location mockLocation = new Location(LOCATION_PROVIDER_MOCK);
- mockLocation.setLatitude(latitude);
- mockLocation.setLongitude(longitude);
- mockLocation.setAccuracy(accuracy);
- mockLocation.setTime(System.currentTimeMillis());
- return mockLocation;
- }
-
- private void sendLocation(final Location location) {
- ThreadUtils.runOnUiThreadBlocking(new Runnable() {
- @Override
- public void run() {
- LocationProviderAdapter.newLocationAvailable(
- location.getLatitude(), location.getLongitude(),
- location.getTime() / 1000.0,
- location.hasAltitude(), location.getAltitude(),
- location.hasAccuracy(), location.getAccuracy(),
- location.hasBearing(), location.getBearing(),
- location.hasSpeed(), location.getSpeed());
- }
- });
- }
}
« no previous file with comments | « no previous file | content/test/data/android/geolocation.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698