From 21e47d8ce061acd75d48acc7035a9450733c78ef Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Mon, 10 Oct 2011 16:47:59 -0700 Subject: [PATCH] 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. --- .../android/apps/mytracks/MapOverlay.java | 19 +++++------ .../maps/SingleColorTrackPathPainter.java | 7 +++- .../android/apps/mytracks/MapOverlayTest.java | 34 ++++++++++++++----- .../apps/mytracks/MockMyTracksOverlay.java | 8 +---- .../TrackPathDescriptorDynamicSpeedTest.java | 6 +++- .../TrackPathDescriptorFixedSpeedTest.java | 6 +++- .../maps/TrackPathPainterFactoryTest.java | 2 ++ .../maps/TrackPathPainterSingleColorTest.java | 3 ++ 8 files changed, 57 insertions(+), 28 deletions(-) diff --git a/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java b/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java index b26d4a0b0..a5e29a805 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java @@ -35,7 +35,6 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Paint; -import android.graphics.Path; import android.graphics.Point; import android.graphics.Rect; import android.graphics.drawable.Drawable; @@ -305,17 +304,17 @@ public class MapOverlay extends Overlay implements OnSharedPreferenceChangeListe int cy = mapView.getMapCenter().getLatitudeE6(); return new Rect(cx - w / 2, cy - h / 2, cx + w / 2, cy + h / 2); } - - // Visible for testing. - Path newPath() { - return new Path(); - } - - // Visible for testing. - public Path getLastPath() { - return trackPathPainter.getLastPath(); + + // Visible for testing + public TrackPathPainter getTrackPathPainter() { + return trackPathPainter; } + // Visible for testing + public void setTrackPathPainter(TrackPathPainter trackPathPainter) { + this.trackPathPainter = trackPathPainter; + } + private void drawWaypoints(Canvas canvas, Projection projection) { synchronized (waypoints) {; for (Waypoint wpt : waypoints) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/maps/SingleColorTrackPathPainter.java b/MyTracks/src/com/google/android/apps/mytracks/maps/SingleColorTrackPathPainter.java index b12ae2370..c73927cd6 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/maps/SingleColorTrackPathPainter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/maps/SingleColorTrackPathPainter.java @@ -57,7 +57,7 @@ public class SingleColorTrackPathPainter implements TrackPathPainter { final Point pt = new Point(); // Loop over track points. int numPoints = points.size(); - path = new Path(); + path = newPath(); path.incReserve(numPoints); for (int i = startLocationIdx; i < numPoints ; ++i) { @@ -104,4 +104,9 @@ public class SingleColorTrackPathPainter implements TrackPathPainter { public Path getLastPath() { return path; } + + // Visible for testing + public Path newPath() { + return new Path(); + } } \ No newline at end of file diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/MapOverlayTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/MapOverlayTest.java index 72b1b9d42..9bb02ff35 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/MapOverlayTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/MapOverlayTest.java @@ -16,9 +16,11 @@ package com.google.android.apps.mytracks; import com.google.android.apps.mytracks.content.Waypoint; +import com.google.android.apps.mytracks.maps.SingleColorTrackPathPainter; import com.google.android.maps.MapView; import android.graphics.Canvas; +import android.graphics.Path; import android.location.Location; import android.test.AndroidTestCase; @@ -38,12 +40,22 @@ public class MapOverlayTest extends AndroidTestCase { super.setUp(); canvas = new Canvas(); myTracksOverlay = new MockMyTracksOverlay(getContext()); + // Enable drawing. myTracksOverlay.setTrackDrawingEnabled(true); + + // Set a TrackPathPainter with a MockPath. + myTracksOverlay.setTrackPathPainter(new SingleColorTrackPathPainter(getContext()) { + @Override + public Path newPath() { + return new MockPath(); + } + }); + mockView = null; } - public void testAddLocation() throws Exception { + public void testAddLocation() throws Exception { Location location = new Location("gps"); location.setLatitude(10); location.setLongitude(20); @@ -56,18 +68,21 @@ public class MapOverlayTest extends AndroidTestCase { myTracksOverlay.addLocation(location); assertEquals(2, myTracksOverlay.getNumLocations()); assertEquals(0, myTracksOverlay.getNumWaypoints()); - assertNull(myTracksOverlay.getLastPath()); + assertNull(myTracksOverlay.getTrackPathPainter().getLastPath()); // Draw and make sure that we don't lose any point. myTracksOverlay.draw(canvas, mockView, false); assertEquals(2, myTracksOverlay.getNumLocations()); 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); assertEquals(2, myTracksOverlay.getNumLocations()); assertEquals(0, myTracksOverlay.getNumWaypoints()); - assertNotNull(myTracksOverlay.getLastPath()); + assertNotNull(myTracksOverlay.getTrackPathPainter().getLastPath()); } public void testClearPoints() throws Exception { @@ -100,7 +115,7 @@ public class MapOverlayTest extends AndroidTestCase { myTracksOverlay.addWaypoint(waypoint); assertEquals(1, myTracksOverlay.getNumWaypoints()); assertEquals(0, myTracksOverlay.getNumLocations()); - assertNull(myTracksOverlay.getLastPath()); + assertNull(myTracksOverlay.getTrackPathPainter().getLastPath()); final int waypoints = 10; for (int i = 0; i < waypoints; ++i) { @@ -110,7 +125,7 @@ public class MapOverlayTest extends AndroidTestCase { } assertEquals(1 + waypoints, myTracksOverlay.getNumWaypoints()); assertEquals(0, myTracksOverlay.getNumLocations()); - assertNull(myTracksOverlay.getLastPath()); + assertNull(myTracksOverlay.getTrackPathPainter().getLastPath()); } public void testClearWaypoints() throws Exception { @@ -144,15 +159,18 @@ public class MapOverlayTest extends AndroidTestCase { // Shadow. myTracksOverlay.draw(canvas, mockView, true); // We don't expect to do anything if - assertNull(myTracksOverlay.getLastPath()); + assertNull(myTracksOverlay.getTrackPathPainter().getLastPath()); assertEquals(40, myTracksOverlay.getNumWaypoints()); assertEquals(100, myTracksOverlay.getNumLocations()); // No shadow. 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(100, myTracksOverlay.getNumLocations()); + assertEquals(100, path.totalPoints); // TODO: Check the points from the path (and the segments). } } diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/MockMyTracksOverlay.java b/MyTracksTest/src/com/google/android/apps/mytracks/MockMyTracksOverlay.java index 9c2355758..74daea1de 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/MockMyTracksOverlay.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/MockMyTracksOverlay.java @@ -19,7 +19,6 @@ import com.google.android.maps.MapView; import com.google.android.maps.Projection; import android.content.Context; -import android.graphics.Path; import android.graphics.Rect; /** @@ -32,7 +31,7 @@ import android.graphics.Rect; * {@class MapView}. */ public class MockMyTracksOverlay extends MapOverlay { - + private Projection mockProjection; public MockMyTracksOverlay(Context context) { @@ -49,9 +48,4 @@ public class MockMyTracksOverlay extends MapOverlay { public Rect getMapViewRect(MapView mapView) { return new Rect(0, 0, 100, 100); } - - @Override - public Path newPath() { - return new MockPath(); - } } \ No newline at end of file diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathDescriptorDynamicSpeedTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathDescriptorDynamicSpeedTest.java index 40d894aaa..53c42dd21 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathDescriptorDynamicSpeedTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathDescriptorDynamicSpeedTest.java @@ -35,7 +35,10 @@ public class TrackPathDescriptorDynamicSpeedTest extends TrackPathPainterTestCas 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; Boolean alwaysVisible = true; @@ -43,6 +46,7 @@ public class TrackPathDescriptorDynamicSpeedTest extends TrackPathPainterTestCas painter.updatePath(myTracksOverlay.getMapProjection(mockView), myTracksOverlay.getMapViewRect(mockView), startLocationIdx, alwaysVisible, myTracksOverlay.getPoints()); + assertNotNull(myTracksOverlay.getTrackPathPainter().getLastPath()); painter.drawTrack(canvas); } } diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathDescriptorFixedSpeedTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathDescriptorFixedSpeedTest.java index b71037045..48c0d8686 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathDescriptorFixedSpeedTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathDescriptorFixedSpeedTest.java @@ -35,7 +35,10 @@ public class TrackPathDescriptorFixedSpeedTest extends TrackPathPainterTestCase 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; Boolean alwaysVisible = true; @@ -43,6 +46,7 @@ public class TrackPathDescriptorFixedSpeedTest extends TrackPathPainterTestCase painter.updatePath(myTracksOverlay.getMapProjection(mockView), myTracksOverlay.getMapViewRect(mockView), startLocationIdx, alwaysVisible, myTracksOverlay.getPoints()); + assertNotNull(myTracksOverlay.getTrackPathPainter().getLastPath()); painter.drawTrack(canvas); } } diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathPainterFactoryTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathPainterFactoryTest.java index ea57ef7b6..d3705a45e 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathPainterFactoryTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathPainterFactoryTest.java @@ -63,6 +63,7 @@ public class TrackPathPainterFactoryTest extends TrackPathPainterTestCase { Boolean alwaysVisible = true; TrackPathPainter painter = TrackPathPainterFactory.getTrackPathPainter(context); + myTracksOverlay.setTrackPathPainter(painter); assertNotNull(painter); assertTrue(c.isInstance(painter)); @@ -70,6 +71,7 @@ public class TrackPathPainterFactoryTest extends TrackPathPainterTestCase { painter.updatePath(myTracksOverlay.getMapProjection(mockView), myTracksOverlay.getMapViewRect(mockView), startLocationIdx, alwaysVisible, myTracksOverlay.getPoints()); + assertNotNull(myTracksOverlay.getTrackPathPainter().getLastPath()); painter.drawTrack(canvas); } } diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathPainterSingleColorTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathPainterSingleColorTest.java index f1c63cd64..ffd50c0bb 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathPainterSingleColorTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/maps/TrackPathPainterSingleColorTest.java @@ -36,6 +36,8 @@ public class TrackPathPainterSingleColorTest extends TrackPathPainterTestCase { } TrackPathPainter painter = new SingleColorTrackPathPainter(getContext()); + myTracksOverlay.setTrackPathPainter(painter); + int startLocationIdx = 0; Boolean alwaysVisible = true; @@ -43,6 +45,7 @@ public class TrackPathPainterSingleColorTest extends TrackPathPainterTestCase { painter.updatePath(myTracksOverlay.getMapProjection(mockView), myTracksOverlay.getMapViewRect(mockView), startLocationIdx, alwaysVisible, myTracksOverlay.getPoints()); + assertNotNull(myTracksOverlay.getTrackPathPainter().getLastPath()); painter.drawTrack(canvas); } }