forked from upstream-mirrors/OpenTracks
Fix unit tests with TrackPathDescriptor.
In MapOverlay, for testing, expose a getter and a setter for TrackPathDescriptor instead of newPath and getLastPath. In SingleColorTrackPathPainter, refactor "new Path" to a newPath method so that tests can override the newPath method to provide a mockPath.
This commit is contained in:
@@ -35,7 +35,6 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
|||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
import android.graphics.Path;
|
|
||||||
import android.graphics.Point;
|
import android.graphics.Point;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
@@ -305,17 +304,17 @@ public class MapOverlay extends Overlay implements OnSharedPreferenceChangeListe
|
|||||||
int cy = mapView.getMapCenter().getLatitudeE6();
|
int cy = mapView.getMapCenter().getLatitudeE6();
|
||||||
return new Rect(cx - w / 2, cy - h / 2, cx + w / 2, cy + h / 2);
|
return new Rect(cx - w / 2, cy - h / 2, cx + w / 2, cy + h / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Visible for testing.
|
// Visible for testing
|
||||||
Path newPath() {
|
public TrackPathPainter getTrackPathPainter() {
|
||||||
return new Path();
|
return trackPathPainter;
|
||||||
}
|
|
||||||
|
|
||||||
// Visible for testing.
|
|
||||||
public Path getLastPath() {
|
|
||||||
return trackPathPainter.getLastPath();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Visible for testing
|
||||||
|
public void setTrackPathPainter(TrackPathPainter trackPathPainter) {
|
||||||
|
this.trackPathPainter = trackPathPainter;
|
||||||
|
}
|
||||||
|
|
||||||
private void drawWaypoints(Canvas canvas, Projection projection) {
|
private void drawWaypoints(Canvas canvas, Projection projection) {
|
||||||
synchronized (waypoints) {;
|
synchronized (waypoints) {;
|
||||||
for (Waypoint wpt : waypoints) {
|
for (Waypoint wpt : waypoints) {
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public class SingleColorTrackPathPainter implements TrackPathPainter {
|
|||||||
final Point pt = new Point();
|
final Point pt = new Point();
|
||||||
// Loop over track points.
|
// Loop over track points.
|
||||||
int numPoints = points.size();
|
int numPoints = points.size();
|
||||||
path = new Path();
|
path = newPath();
|
||||||
path.incReserve(numPoints);
|
path.incReserve(numPoints);
|
||||||
|
|
||||||
for (int i = startLocationIdx; i < numPoints ; ++i) {
|
for (int i = startLocationIdx; i < numPoints ; ++i) {
|
||||||
@@ -104,4 +104,9 @@ public class SingleColorTrackPathPainter implements TrackPathPainter {
|
|||||||
public Path getLastPath() {
|
public Path getLastPath() {
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Visible for testing
|
||||||
|
public Path newPath() {
|
||||||
|
return new Path();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -16,9 +16,11 @@
|
|||||||
package com.google.android.apps.mytracks;
|
package com.google.android.apps.mytracks;
|
||||||
|
|
||||||
import com.google.android.apps.mytracks.content.Waypoint;
|
import com.google.android.apps.mytracks.content.Waypoint;
|
||||||
|
import com.google.android.apps.mytracks.maps.SingleColorTrackPathPainter;
|
||||||
import com.google.android.maps.MapView;
|
import com.google.android.maps.MapView;
|
||||||
|
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.Path;
|
||||||
import android.location.Location;
|
import android.location.Location;
|
||||||
import android.test.AndroidTestCase;
|
import android.test.AndroidTestCase;
|
||||||
|
|
||||||
@@ -38,12 +40,22 @@ public class MapOverlayTest extends AndroidTestCase {
|
|||||||
super.setUp();
|
super.setUp();
|
||||||
canvas = new Canvas();
|
canvas = new Canvas();
|
||||||
myTracksOverlay = new MockMyTracksOverlay(getContext());
|
myTracksOverlay = new MockMyTracksOverlay(getContext());
|
||||||
|
|
||||||
// Enable drawing.
|
// Enable drawing.
|
||||||
myTracksOverlay.setTrackDrawingEnabled(true);
|
myTracksOverlay.setTrackDrawingEnabled(true);
|
||||||
|
|
||||||
|
// Set a TrackPathPainter with a MockPath.
|
||||||
|
myTracksOverlay.setTrackPathPainter(new SingleColorTrackPathPainter(getContext()) {
|
||||||
|
@Override
|
||||||
|
public Path newPath() {
|
||||||
|
return new MockPath();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
mockView = null;
|
mockView = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddLocation() throws Exception {
|
public void testAddLocation() throws Exception {
|
||||||
Location location = new Location("gps");
|
Location location = new Location("gps");
|
||||||
location.setLatitude(10);
|
location.setLatitude(10);
|
||||||
location.setLongitude(20);
|
location.setLongitude(20);
|
||||||
@@ -56,18 +68,21 @@ public class MapOverlayTest extends AndroidTestCase {
|
|||||||
myTracksOverlay.addLocation(location);
|
myTracksOverlay.addLocation(location);
|
||||||
assertEquals(2, myTracksOverlay.getNumLocations());
|
assertEquals(2, myTracksOverlay.getNumLocations());
|
||||||
assertEquals(0, myTracksOverlay.getNumWaypoints());
|
assertEquals(0, myTracksOverlay.getNumWaypoints());
|
||||||
assertNull(myTracksOverlay.getLastPath());
|
assertNull(myTracksOverlay.getTrackPathPainter().getLastPath());
|
||||||
|
|
||||||
// Draw and make sure that we don't lose any point.
|
// Draw and make sure that we don't lose any point.
|
||||||
myTracksOverlay.draw(canvas, mockView, false);
|
myTracksOverlay.draw(canvas, mockView, false);
|
||||||
assertEquals(2, myTracksOverlay.getNumLocations());
|
assertEquals(2, myTracksOverlay.getNumLocations());
|
||||||
assertEquals(0, myTracksOverlay.getNumWaypoints());
|
assertEquals(0, myTracksOverlay.getNumWaypoints());
|
||||||
assertNotNull(myTracksOverlay.getLastPath());
|
assertNotNull(myTracksOverlay.getTrackPathPainter().getLastPath());
|
||||||
|
assertTrue(myTracksOverlay.getTrackPathPainter().getLastPath() instanceof MockPath);
|
||||||
|
MockPath path = (MockPath) myTracksOverlay.getTrackPathPainter().getLastPath();
|
||||||
|
assertEquals(2, path.totalPoints);
|
||||||
|
|
||||||
myTracksOverlay.draw(canvas, mockView, true);
|
myTracksOverlay.draw(canvas, mockView, true);
|
||||||
assertEquals(2, myTracksOverlay.getNumLocations());
|
assertEquals(2, myTracksOverlay.getNumLocations());
|
||||||
assertEquals(0, myTracksOverlay.getNumWaypoints());
|
assertEquals(0, myTracksOverlay.getNumWaypoints());
|
||||||
assertNotNull(myTracksOverlay.getLastPath());
|
assertNotNull(myTracksOverlay.getTrackPathPainter().getLastPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testClearPoints() throws Exception {
|
public void testClearPoints() throws Exception {
|
||||||
@@ -100,7 +115,7 @@ public class MapOverlayTest extends AndroidTestCase {
|
|||||||
myTracksOverlay.addWaypoint(waypoint);
|
myTracksOverlay.addWaypoint(waypoint);
|
||||||
assertEquals(1, myTracksOverlay.getNumWaypoints());
|
assertEquals(1, myTracksOverlay.getNumWaypoints());
|
||||||
assertEquals(0, myTracksOverlay.getNumLocations());
|
assertEquals(0, myTracksOverlay.getNumLocations());
|
||||||
assertNull(myTracksOverlay.getLastPath());
|
assertNull(myTracksOverlay.getTrackPathPainter().getLastPath());
|
||||||
|
|
||||||
final int waypoints = 10;
|
final int waypoints = 10;
|
||||||
for (int i = 0; i < waypoints; ++i) {
|
for (int i = 0; i < waypoints; ++i) {
|
||||||
@@ -110,7 +125,7 @@ public class MapOverlayTest extends AndroidTestCase {
|
|||||||
}
|
}
|
||||||
assertEquals(1 + waypoints, myTracksOverlay.getNumWaypoints());
|
assertEquals(1 + waypoints, myTracksOverlay.getNumWaypoints());
|
||||||
assertEquals(0, myTracksOverlay.getNumLocations());
|
assertEquals(0, myTracksOverlay.getNumLocations());
|
||||||
assertNull(myTracksOverlay.getLastPath());
|
assertNull(myTracksOverlay.getTrackPathPainter().getLastPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testClearWaypoints() throws Exception {
|
public void testClearWaypoints() throws Exception {
|
||||||
@@ -144,15 +159,18 @@ public class MapOverlayTest extends AndroidTestCase {
|
|||||||
// Shadow.
|
// Shadow.
|
||||||
myTracksOverlay.draw(canvas, mockView, true);
|
myTracksOverlay.draw(canvas, mockView, true);
|
||||||
// We don't expect to do anything if
|
// We don't expect to do anything if
|
||||||
assertNull(myTracksOverlay.getLastPath());
|
assertNull(myTracksOverlay.getTrackPathPainter().getLastPath());
|
||||||
assertEquals(40, myTracksOverlay.getNumWaypoints());
|
assertEquals(40, myTracksOverlay.getNumWaypoints());
|
||||||
assertEquals(100, myTracksOverlay.getNumLocations());
|
assertEquals(100, myTracksOverlay.getNumLocations());
|
||||||
|
|
||||||
// No shadow.
|
// No shadow.
|
||||||
myTracksOverlay.draw(canvas, mockView, false);
|
myTracksOverlay.draw(canvas, mockView, false);
|
||||||
assertNotNull(myTracksOverlay.getLastPath());
|
assertNotNull(myTracksOverlay.getTrackPathPainter().getLastPath());
|
||||||
|
assertTrue(myTracksOverlay.getTrackPathPainter().getLastPath() instanceof MockPath);
|
||||||
|
MockPath path = (MockPath) myTracksOverlay.getTrackPathPainter().getLastPath();
|
||||||
assertEquals(40, myTracksOverlay.getNumWaypoints());
|
assertEquals(40, myTracksOverlay.getNumWaypoints());
|
||||||
assertEquals(100, myTracksOverlay.getNumLocations());
|
assertEquals(100, myTracksOverlay.getNumLocations());
|
||||||
|
assertEquals(100, path.totalPoints);
|
||||||
// TODO: Check the points from the path (and the segments).
|
// TODO: Check the points from the path (and the segments).
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ import com.google.android.maps.MapView;
|
|||||||
import com.google.android.maps.Projection;
|
import com.google.android.maps.Projection;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Path;
|
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,7 +31,7 @@ import android.graphics.Rect;
|
|||||||
* {@class MapView}.
|
* {@class MapView}.
|
||||||
*/
|
*/
|
||||||
public class MockMyTracksOverlay extends MapOverlay {
|
public class MockMyTracksOverlay extends MapOverlay {
|
||||||
|
|
||||||
private Projection mockProjection;
|
private Projection mockProjection;
|
||||||
|
|
||||||
public MockMyTracksOverlay(Context context) {
|
public MockMyTracksOverlay(Context context) {
|
||||||
@@ -49,9 +48,4 @@ public class MockMyTracksOverlay extends MapOverlay {
|
|||||||
public Rect getMapViewRect(MapView mapView) {
|
public Rect getMapViewRect(MapView mapView) {
|
||||||
return new Rect(0, 0, 100, 100);
|
return new Rect(0, 0, 100, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Path newPath() {
|
|
||||||
return new MockPath();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
+5
-1
@@ -35,7 +35,10 @@ public class TrackPathDescriptorDynamicSpeedTest extends TrackPathPainterTestCas
|
|||||||
myTracksOverlay.addLocation(location);
|
myTracksOverlay.addLocation(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackPathPainter painter = new DynamicSpeedTrackPathPainter(getContext(), new DynamicSpeedTrackPathDescriptor(getContext()));
|
TrackPathPainter painter = new DynamicSpeedTrackPathPainter(
|
||||||
|
getContext(), new DynamicSpeedTrackPathDescriptor(getContext()));
|
||||||
|
myTracksOverlay.setTrackPathPainter(painter);
|
||||||
|
|
||||||
int startLocationIdx = 0;
|
int startLocationIdx = 0;
|
||||||
Boolean alwaysVisible = true;
|
Boolean alwaysVisible = true;
|
||||||
|
|
||||||
@@ -43,6 +46,7 @@ public class TrackPathDescriptorDynamicSpeedTest extends TrackPathPainterTestCas
|
|||||||
painter.updatePath(myTracksOverlay.getMapProjection(mockView),
|
painter.updatePath(myTracksOverlay.getMapProjection(mockView),
|
||||||
myTracksOverlay.getMapViewRect(mockView), startLocationIdx, alwaysVisible,
|
myTracksOverlay.getMapViewRect(mockView), startLocationIdx, alwaysVisible,
|
||||||
myTracksOverlay.getPoints());
|
myTracksOverlay.getPoints());
|
||||||
|
assertNotNull(myTracksOverlay.getTrackPathPainter().getLastPath());
|
||||||
painter.drawTrack(canvas);
|
painter.drawTrack(canvas);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -35,7 +35,10 @@ public class TrackPathDescriptorFixedSpeedTest extends TrackPathPainterTestCase
|
|||||||
myTracksOverlay.addLocation(location);
|
myTracksOverlay.addLocation(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackPathPainter painter = new DynamicSpeedTrackPathPainter(getContext(), new FixedSpeedTrackPathDescriptor(getContext()));
|
TrackPathPainter painter = new DynamicSpeedTrackPathPainter(
|
||||||
|
getContext(), new FixedSpeedTrackPathDescriptor(getContext()));
|
||||||
|
myTracksOverlay.setTrackPathPainter(painter);
|
||||||
|
|
||||||
int startLocationIdx = 0;
|
int startLocationIdx = 0;
|
||||||
Boolean alwaysVisible = true;
|
Boolean alwaysVisible = true;
|
||||||
|
|
||||||
@@ -43,6 +46,7 @@ public class TrackPathDescriptorFixedSpeedTest extends TrackPathPainterTestCase
|
|||||||
painter.updatePath(myTracksOverlay.getMapProjection(mockView),
|
painter.updatePath(myTracksOverlay.getMapProjection(mockView),
|
||||||
myTracksOverlay.getMapViewRect(mockView), startLocationIdx, alwaysVisible,
|
myTracksOverlay.getMapViewRect(mockView), startLocationIdx, alwaysVisible,
|
||||||
myTracksOverlay.getPoints());
|
myTracksOverlay.getPoints());
|
||||||
|
assertNotNull(myTracksOverlay.getTrackPathPainter().getLastPath());
|
||||||
painter.drawTrack(canvas);
|
painter.drawTrack(canvas);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -63,6 +63,7 @@ public class TrackPathPainterFactoryTest extends TrackPathPainterTestCase {
|
|||||||
Boolean alwaysVisible = true;
|
Boolean alwaysVisible = true;
|
||||||
|
|
||||||
TrackPathPainter painter = TrackPathPainterFactory.getTrackPathPainter(context);
|
TrackPathPainter painter = TrackPathPainterFactory.getTrackPathPainter(context);
|
||||||
|
myTracksOverlay.setTrackPathPainter(painter);
|
||||||
|
|
||||||
assertNotNull(painter);
|
assertNotNull(painter);
|
||||||
assertTrue(c.isInstance(painter));
|
assertTrue(c.isInstance(painter));
|
||||||
@@ -70,6 +71,7 @@ public class TrackPathPainterFactoryTest extends TrackPathPainterTestCase {
|
|||||||
painter.updatePath(myTracksOverlay.getMapProjection(mockView),
|
painter.updatePath(myTracksOverlay.getMapProjection(mockView),
|
||||||
myTracksOverlay.getMapViewRect(mockView), startLocationIdx, alwaysVisible,
|
myTracksOverlay.getMapViewRect(mockView), startLocationIdx, alwaysVisible,
|
||||||
myTracksOverlay.getPoints());
|
myTracksOverlay.getPoints());
|
||||||
|
assertNotNull(myTracksOverlay.getTrackPathPainter().getLastPath());
|
||||||
painter.drawTrack(canvas);
|
painter.drawTrack(canvas);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
@@ -36,6 +36,8 @@ public class TrackPathPainterSingleColorTest extends TrackPathPainterTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TrackPathPainter painter = new SingleColorTrackPathPainter(getContext());
|
TrackPathPainter painter = new SingleColorTrackPathPainter(getContext());
|
||||||
|
myTracksOverlay.setTrackPathPainter(painter);
|
||||||
|
|
||||||
int startLocationIdx = 0;
|
int startLocationIdx = 0;
|
||||||
Boolean alwaysVisible = true;
|
Boolean alwaysVisible = true;
|
||||||
|
|
||||||
@@ -43,6 +45,7 @@ public class TrackPathPainterSingleColorTest extends TrackPathPainterTestCase {
|
|||||||
painter.updatePath(myTracksOverlay.getMapProjection(mockView),
|
painter.updatePath(myTracksOverlay.getMapProjection(mockView),
|
||||||
myTracksOverlay.getMapViewRect(mockView), startLocationIdx, alwaysVisible,
|
myTracksOverlay.getMapViewRect(mockView), startLocationIdx, alwaysVisible,
|
||||||
myTracksOverlay.getPoints());
|
myTracksOverlay.getPoints());
|
||||||
|
assertNotNull(myTracksOverlay.getTrackPathPainter().getLastPath());
|
||||||
painter.drawTrack(canvas);
|
painter.drawTrack(canvas);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user