Update location tests for API updates.
o Supply accuracy & timestamp when calling setTestProviderLocation()
o Verify that GPS locations include a valid accuracy & timestamp
o Mock the fused location provider when testing proximity alerts
Change-Id: I82fc3153ab1e22edab67457903d72866ea94877e
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/location/LocationVerifier.java b/apps/CtsVerifier/src/com/android/cts/verifier/location/LocationVerifier.java
index fd226a6..e3f58c3 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/location/LocationVerifier.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/location/LocationVerifier.java
@@ -58,6 +58,14 @@
long delta = timestamp - mLastActiveTimestamp;
mLastActiveTimestamp = timestamp;
+ if (location.getAccuracy() <= 0.0) {
+ fail(mProvider + " location has invalid accuracy: " + location.getAccuracy());
+ }
+ if (location.getElapsedRealtimeNano() <= 0) {
+ fail(mProvider + " location has invalid elapsed realtime: " +
+ location.getElapsedRealtimeNano());
+ }
+
if (mNumActiveUpdates != 1 && delta < mMinActiveInterval) {
fail(mProvider + " location updated too fast: " + delta + "ms < " +
mMinActiveInterval + "ms");
@@ -100,6 +108,14 @@
long delta = timestamp - mLastPassiveTimestamp;
mLastPassiveTimestamp = timestamp;
+ if (location.getAccuracy() <= 0.0) {
+ fail(mProvider + " location has invalid accuracy: " + location.getAccuracy());
+ }
+ if (location.getElapsedRealtimeNano() <= 0) {
+ fail(mProvider + " location has invalid elapsed realtime: " +
+ location.getElapsedRealtimeNano());
+ }
+
if (mNumPassiveUpdates != 1 && delta < mMinPassiveInterval) {
fail("passive " + mProvider + " location updated too fast: " + delta + "ms < " +
mMinPassiveInterval + "ms");
diff --git a/tests/tests/location/src/android/location/cts/LocationManagerTest.java b/tests/tests/location/src/android/location/cts/LocationManagerTest.java
index 008960e..0fc9b4d 100755
--- a/tests/tests/location/src/android/location/cts/LocationManagerTest.java
+++ b/tests/tests/location/src/android/location/cts/LocationManagerTest.java
@@ -33,6 +33,7 @@
import android.os.Bundle;
import android.os.HandlerThread;
import android.os.Looper;
+import android.os.SystemClock;
import android.provider.Settings;
import android.test.InstrumentationTestCase;
@@ -53,6 +54,8 @@
private static final String UNKNOWN_PROVIDER_NAME = "unknown_provider";
+ private static final String FUSED_PROVIDER_NAME = "fused";
+
private LocationManager mManager;
private Context mContext;
@@ -453,7 +456,7 @@
i.setAction("android.location.cts.TEST_GET_GPS_STATUS_ACTION");
PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, i, PendingIntent.FLAG_ONE_SHOT);
- mManager.addProximityAlert(0, 0, 0, 5000, pi);
+ mManager.addProximityAlert(0, 0, 1.0f, 5000, pi);
mManager.removeProximityAlert(pi);
}
@@ -619,12 +622,17 @@
* @param expiration - expiration of proximity alert
*/
private void doTestEnterProximity(long expiration) throws Exception {
+ // need to mock the fused location provider for proximity tests
+ mockFusedLocation();
+
// update location to outside proximity range
- updateLocation(30, 30);
+ updateLocation(FUSED_PROVIDER_NAME, 30, 30);
registerProximityListener(0, 0, 1000, expiration);
- updateLocation(0, 0);
+ updateLocation(FUSED_PROVIDER_NAME, 0, 0);
waitForReceiveBroadcast();
assertProximityType(true);
+
+ unmockFusedLocation();
}
private void registerIntentReceiver() {
@@ -675,8 +683,9 @@
Location location = new Location(providerName);
location.setLatitude(latitude);
location.setLongitude(longitude);
-
+ location.setAccuracy(1.0f);
location.setTime(java.lang.System.currentTimeMillis());
+ location.setElapsedRealtimeNano(SystemClock.elapsedRealtimeNano());
mManager.setTestProviderLocation(providerName, location);
}
@@ -684,6 +693,14 @@
updateLocation(TEST_MOCK_PROVIDER_NAME, latitude, longitude);
}
+ private void mockFusedLocation() {
+ addTestProvider(FUSED_PROVIDER_NAME);
+ }
+
+ private void unmockFusedLocation() {
+ mManager.removeTestProvider(FUSED_PROVIDER_NAME);
+ }
+
/**
* Helper class that receives a proximity intent and notifies the main class
* when received