diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/AbstractTestFileTrackImporter.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/AbstractTestFileTrackImporter.java index 11dbb2b7d..588571213 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/AbstractTestFileTrackImporter.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/AbstractTestFileTrackImporter.java @@ -17,36 +17,37 @@ package de.dennisguse.opentracks.io.file.importer; import android.content.ContentUris; +import android.content.Context; import android.location.Location; import android.location.LocationManager; import android.net.Uri; -import android.test.AndroidTestCase; -import de.dennisguse.opentracks.content.ContentProviderUtils; -import de.dennisguse.opentracks.content.ContentProviderUtils.Factory; -import de.dennisguse.opentracks.content.Track; -import de.dennisguse.opentracks.content.TracksColumns; -import de.dennisguse.opentracks.content.Waypoint; -import de.dennisguse.opentracks.content.WaypointsColumns; -import de.dennisguse.opentracks.testing.TestingProviderUtilsFactory; -import com.google.android.testing.mocking.AndroidMock; -import com.google.android.testing.mocking.UsesMocks; +import androidx.test.core.app.ApplicationProvider; -import org.easymock.Capture; +import org.junit.Assert; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; import java.text.SimpleDateFormat; import java.util.Locale; import java.util.SimpleTimeZone; -import static com.google.android.testing.mocking.AndroidMock.eq; -import static com.google.android.testing.mocking.AndroidMock.expect; +import de.dennisguse.opentracks.content.ContentProviderUtils; +import de.dennisguse.opentracks.content.Track; +import de.dennisguse.opentracks.content.TracksColumns; +import de.dennisguse.opentracks.content.Waypoint; +import de.dennisguse.opentracks.content.WaypointsColumns; + +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.when; /** * Abstract class for testing file track importers. * * @author Jimmy Shih. */ -public class AbstractTestFileTrackImporter extends AndroidTestCase { +public abstract class AbstractTestFileTrackImporter { protected static final String TRACK_NAME_0 = "blablub"; protected static final String TRACK_DESCRIPTION_0 = "s'Laebe isch koi Schlotzer"; @@ -63,22 +64,19 @@ public class AbstractTestFileTrackImporter extends AndroidTestCase { protected static final String TRACK_TIME_2 = "2010-04-22T18:23:00.123"; protected static final String TRACK_TIME_3 = "2010-04-22T18:24:50.123"; - protected static final SimpleDateFormat DATE_FORMAT_0 = new SimpleDateFormat( - "yyyy-MM-dd'T'hh:mm:ss'Z'", Locale.US); - protected static final SimpleDateFormat DATE_FORMAT_1 = new SimpleDateFormat( - "yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US); + protected static final SimpleDateFormat DATE_FORMAT_0 = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'", Locale.US); + protected static final SimpleDateFormat DATE_FORMAT_1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US); protected static final long TRACK_ID_0 = 1; protected static final long TRACK_ID_1 = 2; protected static final long TRACK_POINT_ID_0 = 1; protected static final long TRACK_POINT_ID_1 = 2; protected static final long TRACK_POINT_ID_3 = 4; protected static final long WAYPOINT_ID_0 = 1; - protected static final Uri TRACK_ID_0_URI = ContentUris.appendId( - TracksColumns.CONTENT_URI.buildUpon(), TRACK_ID_0).build(); - protected static final Uri TRACK_ID_1_URI = ContentUris.appendId( - TracksColumns.CONTENT_URI.buildUpon(), TRACK_ID_1).build(); - protected static final Uri WAYPOINT_ID_O_URI = ContentUris.appendId( - WaypointsColumns.CONTENT_URI.buildUpon(), WAYPOINT_ID_0).build(); + protected static final Uri TRACK_ID_0_URI = ContentUris.appendId(TracksColumns.CONTENT_URI.buildUpon(), TRACK_ID_0).build(); + protected static final Uri TRACK_ID_1_URI = ContentUris.appendId(TracksColumns.CONTENT_URI.buildUpon(), TRACK_ID_1).build(); + protected static final Uri WAYPOINT_ID_O_URI = ContentUris.appendId(WaypointsColumns.CONTENT_URI.buildUpon(), WAYPOINT_ID_0).build(); + + protected final Context context = ApplicationProvider.getApplicationContext(); static { /* @@ -90,24 +88,8 @@ public class AbstractTestFileTrackImporter extends AndroidTestCase { DATE_FORMAT_1.setTimeZone(utc); } - protected ContentProviderUtils contentProviderUtils; - - private Factory oldMyTracksProviderUtilsFactory; - - @UsesMocks(ContentProviderUtils.class) - @Override - protected void setUp() throws Exception { - super.setUp(); - contentProviderUtils = AndroidMock.createMock(ContentProviderUtils.class); - oldMyTracksProviderUtilsFactory = TestingProviderUtilsFactory.installWithInstance( - contentProviderUtils); - } - - @Override - protected void tearDown() throws Exception { - TestingProviderUtilsFactory.restoreOldFactory(oldMyTracksProviderUtilsFactory); - super.tearDown(); - } + @Mock + public ContentProviderUtils contentProviderUtils; protected Location createLocation(int index, long time) { Location location = new Location(LocationManager.GPS_PROVIDER); @@ -126,37 +108,35 @@ public class AbstractTestFileTrackImporter extends AndroidTestCase { * @param trackPointId the track point id */ protected void expectFirstTrackPoint(Location location, long trackId, long trackPointId) { - expect(contentProviderUtils.bulkInsertTrackPoint( - location != null ? LocationsMatcher.eqLoc(location) : (Location[]) AndroidMock.anyObject(), - eq(1), eq(trackId))).andReturn(1); - expect(contentProviderUtils.getFirstTrackPointId(trackId)).andReturn(trackPointId); - expect(contentProviderUtils.getLastTrackPointId(trackId)).andReturn(trackPointId); + when(contentProviderUtils.bulkInsertTrackPoint(location != null ? (Location[]) any() : (Location[]) any(), eq(1), eq(trackId))).thenReturn(1); + when(contentProviderUtils.getFirstTrackPointId(trackId)).thenReturn(trackPointId); + when(contentProviderUtils.getLastTrackPointId(trackId)).thenReturn(trackPointId); } /** * Expects the track to be updated. * - * @param track the track - * @param lastTrack true if it is the last track in the gpx - * @param trackId the track id + * @param trackCaptor the track + * @param lastTrack true if it is the last track in the gpx + * @param trackId the track id */ - protected void expectUpdateTrack(Capture track, boolean lastTrack, long trackId) { - contentProviderUtils.updateTrack(AndroidMock.capture(track)); - expect(contentProviderUtils.insertWaypoint((Waypoint) AndroidMock.anyObject())) - .andReturn(WAYPOINT_ID_O_URI); + protected void expectUpdateTrack(ArgumentCaptor trackCaptor, boolean lastTrack, long trackId) { + contentProviderUtils.updateTrack(trackCaptor.capture()); + + when(contentProviderUtils.insertWaypoint((Waypoint) any())).thenReturn(WAYPOINT_ID_O_URI); if (lastTrack) { // Return null to not add waypoints - expect(contentProviderUtils.getTrack(trackId)).andReturn(null); + when(contentProviderUtils.getTrack(trackId)).thenReturn(null); } } protected void verifyTrack(Track track, String name, String description, long time) { - assertEquals(name, track.getName()); - assertEquals(description, track.getDescription()); + Assert.assertEquals(name, track.getName()); + Assert.assertEquals(description, track.getDescription()); if (time != -1L) { - assertEquals(time, track.getTripStatistics().getStartTime()); + Assert.assertEquals(time, track.getTripStatistics().getStartTime()); } - assertNotSame(-1, track.getStartId()); - assertNotSame(-1, track.getStopId()); + Assert.assertNotSame(-1, track.getStartId()); + Assert.assertNotSame(-1, track.getStopId()); } } diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/GpxFileTrackImporterTest.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/GpxFileTrackImporterTest.java index e20131d75..f3c73e8b4 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/GpxFileTrackImporterTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/GpxFileTrackImporterTest.java @@ -18,24 +18,33 @@ package de.dennisguse.opentracks.io.file.importer; import android.location.Location; -import de.dennisguse.opentracks.content.Track; -import de.dennisguse.opentracks.util.PreferencesUtils; -import de.dennisguse.opentracks.R; -import com.google.android.testing.mocking.AndroidMock; - -import org.easymock.Capture; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.junit.MockitoJUnitRunner; import java.io.ByteArrayInputStream; import java.io.InputStream; -import static com.google.android.testing.mocking.AndroidMock.eq; -import static com.google.android.testing.mocking.AndroidMock.expect; +import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.content.Track; +import de.dennisguse.opentracks.util.PreferencesUtils; + +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyInt; +import static org.mockito.Mockito.anyLong; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + /** * Tests for {@link GpxFileTrackImporter}. * * @author Steffen Horlacher */ +@RunWith(MockitoJUnitRunner.class) public class GpxFileTrackImporterTest extends AbstractTestFileTrackImporter { private static final String VALID_ONE_TRACK_ONE_SEGMENT_GPX = "" @@ -49,18 +58,12 @@ public class GpxFileTrackImporterTest extends AbstractTestFileTrackImporter { + getNameAndDescription(TRACK_NAME_0, TRACK_DESCRIPTION_0) + "" + getTrackPoint(0, null) + getTrackPoint(1, null) + "" + getTrackPoint(2, null) + getTrackPoint(3, null) + ""; - private static final String INVALID_XML_GPX = VALID_ONE_TRACK_ONE_SEGMENT_GPX.substring( - 0, VALID_ONE_TRACK_ONE_SEGMENT_GPX.length() - 50); - private static final String INVALID_LOCATION_GPX = VALID_ONE_TRACK_ONE_SEGMENT_GPX.replaceAll( - Double.toString(TRACK_LATITUDE), "1000.0"); - private static final String INVALID_TIME_GPX = VALID_ONE_TRACK_ONE_SEGMENT_GPX.replaceAll( - TRACK_TIME_0, "invalid"); - private static final String INVALID_ALTITUDE_GPX = VALID_ONE_TRACK_ONE_SEGMENT_GPX.replaceAll( - Double.toString(TRACK_ELEVATION), "invalid"); - private static final String INVALID_LATITUDE_GPX = VALID_ONE_TRACK_ONE_SEGMENT_GPX.replaceAll( - Double.toString(TRACK_LATITUDE), "invalid"); - private static final String INVALID_LONGITUDE_GPX = VALID_ONE_TRACK_ONE_SEGMENT_GPX.replaceAll( - Double.toString(TRACK_LONGITUDE), "invalid"); + private static final String INVALID_XML_GPX = VALID_ONE_TRACK_ONE_SEGMENT_GPX.substring(0, VALID_ONE_TRACK_ONE_SEGMENT_GPX.length() - 50); + private static final String INVALID_LOCATION_GPX = VALID_ONE_TRACK_ONE_SEGMENT_GPX.replaceAll(Double.toString(TRACK_LATITUDE), "1000.0"); + private static final String INVALID_TIME_GPX = VALID_ONE_TRACK_ONE_SEGMENT_GPX.replaceAll(TRACK_TIME_0, "invalid"); + private static final String INVALID_ALTITUDE_GPX = VALID_ONE_TRACK_ONE_SEGMENT_GPX.replaceAll(Double.toString(TRACK_ELEVATION), "invalid"); + private static final String INVALID_LATITUDE_GPX = VALID_ONE_TRACK_ONE_SEGMENT_GPX.replaceAll(Double.toString(TRACK_LATITUDE), "invalid"); + private static final String INVALID_LONGITUDE_GPX = VALID_ONE_TRACK_ONE_SEGMENT_GPX.replaceAll(Double.toString(TRACK_LONGITUDE), "invalid"); private static String getNameAndDescription(String name, String description) { return "" + ""; @@ -70,9 +73,8 @@ public class GpxFileTrackImporterTest extends AbstractTestFileTrackImporter { String latitude = Double.toString(TRACK_LATITUDE + index); String longitude = Double.toString(TRACK_LONGITUDE + index); String elevation = Double.toString(TRACK_ELEVATION + index); - StringBuffer buffer = new StringBuffer(); - buffer.append( - "" + elevation + ""); + StringBuilder buffer = new StringBuilder(); + buffer.append("" + elevation + ""); if (time != null) { buffer.append(""); } @@ -83,174 +85,155 @@ public class GpxFileTrackImporterTest extends AbstractTestFileTrackImporter { /** * Tests one track with one segment. */ + @Test public void testOneTrackOneSegment() throws Exception { - Capture track = new Capture(); + ArgumentCaptor trackCaptor = ArgumentCaptor.forClass(Track.class); Location location0 = createLocation(0, DATE_FORMAT_0.parse(TRACK_TIME_0).getTime()); Location location1 = createLocation(1, DATE_FORMAT_1.parse(TRACK_TIME_1).getTime()); - expect(contentProviderUtils.insertTrack((Track) AndroidMock.anyObject())) - .andReturn(TRACK_ID_0_URI); + when(contentProviderUtils.insertTrack((Track) any())).thenReturn(TRACK_ID_0_URI); expectFirstTrackPoint(location0, TRACK_ID_0, TRACK_POINT_ID_0); // A flush happens at the end - expect(contentProviderUtils.bulkInsertTrackPoint( - LocationsMatcher.eqLoc(location1), eq(1), eq(TRACK_ID_0))).andReturn(1); - expect(contentProviderUtils.getLastTrackPointId(TRACK_ID_0)).andReturn(TRACK_POINT_ID_1); - expect( - contentProviderUtils.getTrack(PreferencesUtils.getLong(getContext(), - R.string.recording_track_id_key))).andStubReturn(null); - expectUpdateTrack(track, true, TRACK_ID_0); - AndroidMock.replay(contentProviderUtils); + when(contentProviderUtils.bulkInsertTrackPoint(new Location[]{location1}, eq(1), eq(TRACK_ID_0))).thenReturn(1); + when(contentProviderUtils.getLastTrackPointId(TRACK_ID_0)).thenReturn(TRACK_POINT_ID_1); + when(contentProviderUtils.getTrack(PreferencesUtils.getLong(context, R.string.recording_track_id_key))).thenReturn(null); + expectUpdateTrack(trackCaptor, true, TRACK_ID_0); InputStream inputStream = new ByteArrayInputStream(VALID_ONE_TRACK_ONE_SEGMENT_GPX.getBytes()); - GpxFileTrackImporter gpxFileTrackImporter = new GpxFileTrackImporter( - getContext(), contentProviderUtils); + GpxFileTrackImporter gpxFileTrackImporter = new GpxFileTrackImporter(context, contentProviderUtils); long trackId = gpxFileTrackImporter.importFile(inputStream); - assertEquals(TRACK_ID_0, trackId); + Assert.assertEquals(TRACK_ID_0, trackId); long time0 = DATE_FORMAT_0.parse(TRACK_TIME_0).getTime(); long time1 = DATE_FORMAT_1.parse(TRACK_TIME_1).getTime(); - assertEquals(time1 - time0, track.getValue().getTripStatistics().getTotalTime()); - AndroidMock.verify(contentProviderUtils); - verifyTrack(track.getValue(), TRACK_NAME_0, TRACK_DESCRIPTION_0, time0); + Assert.assertEquals(time1 - time0, trackCaptor.getValue().getTripStatistics().getTotalTime()); + verify(contentProviderUtils); + verifyTrack(trackCaptor.getValue(), TRACK_NAME_0, TRACK_DESCRIPTION_0, time0); } /** * Tests one track with two segments. */ + @Test public void testOneTrackTwoSegments() throws Exception { - Capture track = new Capture(); + ArgumentCaptor trackCaptor = ArgumentCaptor.forClass(Track.class); Location location0 = createLocation(0, DATE_FORMAT_0.parse(TRACK_TIME_0).getTime()); - expect(contentProviderUtils.insertTrack((Track) AndroidMock.anyObject())) - .andReturn(TRACK_ID_0_URI); + when(contentProviderUtils.insertTrack((Track) any())).thenReturn(TRACK_ID_0_URI); expectFirstTrackPoint(location0, TRACK_ID_0, TRACK_POINT_ID_0); // A flush happens at the end - expect(contentProviderUtils.bulkInsertTrackPoint( - (Location[]) AndroidMock.anyObject(), eq(5), eq(TRACK_ID_0))).andStubReturn(5); - expect(contentProviderUtils.getLastTrackPointId(TRACK_ID_0)).andReturn(TRACK_POINT_ID_3); - expect( - contentProviderUtils.getTrack(PreferencesUtils.getLong(getContext(), - R.string.recording_track_id_key))).andStubReturn(null); - expectUpdateTrack(track, true, TRACK_ID_0); - AndroidMock.replay(contentProviderUtils); + when(contentProviderUtils.bulkInsertTrackPoint((Location[]) any(), eq(5), eq(TRACK_ID_0))).thenReturn(5); + when(contentProviderUtils.getLastTrackPointId(TRACK_ID_0)).thenReturn(TRACK_POINT_ID_3); + when(contentProviderUtils.getTrack(PreferencesUtils.getLong(context, R.string.recording_track_id_key))).thenReturn(null); + expectUpdateTrack(trackCaptor, true, TRACK_ID_0); InputStream inputStream = new ByteArrayInputStream(VALID_ONE_TRACK_TWO_SEGMENTS_GPX.getBytes()); - GpxFileTrackImporter gpxFileTrackImporter = new GpxFileTrackImporter( - getContext(), contentProviderUtils); + GpxFileTrackImporter gpxFileTrackImporter = new GpxFileTrackImporter(context, contentProviderUtils); long trackId = gpxFileTrackImporter.importFile(inputStream); - assertEquals(TRACK_ID_0, trackId); + Assert.assertEquals(TRACK_ID_0, trackId); long time0 = DATE_FORMAT_0.parse(TRACK_TIME_0).getTime(); long time1 = DATE_FORMAT_1.parse(TRACK_TIME_1).getTime(); long time2 = DATE_FORMAT_1.parse(TRACK_TIME_2).getTime(); long time3 = DATE_FORMAT_1.parse(TRACK_TIME_3).getTime(); - assertEquals( - time1 - time0 + time3 - time2, track.getValue().getTripStatistics().getTotalTime()); + Assert.assertEquals(time1 - time0 + time3 - time2, trackCaptor.getValue().getTripStatistics().getTotalTime()); - AndroidMock.verify(contentProviderUtils); - verifyTrack(track.getValue(), TRACK_NAME_0, TRACK_DESCRIPTION_0, - DATE_FORMAT_0.parse(TRACK_TIME_0).getTime()); + verify(contentProviderUtils); + verifyTrack(trackCaptor.getValue(), TRACK_NAME_0, TRACK_DESCRIPTION_0, DATE_FORMAT_0.parse(TRACK_TIME_0).getTime()); } /** * Tests one track with two segments, but no time in the track points. */ - public void testOneTrackTwoSegmentsNoTime() throws Exception { - Capture track = new Capture(); + @Test + public void testOneTrackTwoSegmentsNoTime() { + ArgumentCaptor trackCaptor = ArgumentCaptor.forClass(Track.class); - expect(contentProviderUtils.insertTrack((Track) AndroidMock.anyObject())) - .andReturn(TRACK_ID_0_URI); + when(contentProviderUtils.insertTrack((Track) any())).thenReturn(TRACK_ID_0_URI); expectFirstTrackPoint(null, TRACK_ID_0, TRACK_POINT_ID_0); // A flush happens at the end - expect(contentProviderUtils.bulkInsertTrackPoint( - (Location[]) AndroidMock.anyObject(), eq(5), eq(TRACK_ID_0))).andStubReturn(5); - expect(contentProviderUtils.getLastTrackPointId(TRACK_ID_0)).andReturn(TRACK_POINT_ID_3); - expect( - contentProviderUtils.getTrack(PreferencesUtils.getLong(getContext(), - R.string.recording_track_id_key))).andStubReturn(null); - expectUpdateTrack(track, true, TRACK_ID_0); - AndroidMock.replay(contentProviderUtils); + when(contentProviderUtils.bulkInsertTrackPoint((Location[]) any(), eq(5), eq(TRACK_ID_0))).thenReturn(5); + when(contentProviderUtils.getLastTrackPointId(TRACK_ID_0)).thenReturn(TRACK_POINT_ID_3); + when(contentProviderUtils.getTrack(PreferencesUtils.getLong(context, R.string.recording_track_id_key))).thenReturn(null); + expectUpdateTrack(trackCaptor, true, TRACK_ID_0); - InputStream inputStream = new ByteArrayInputStream( - VALID_ONE_TRACK_TWO_SEGMENTS_NO_TIME_GPX.getBytes()); - GpxFileTrackImporter gpxFileTrackImporter = new GpxFileTrackImporter( - getContext(), contentProviderUtils); + InputStream inputStream = new ByteArrayInputStream(VALID_ONE_TRACK_TWO_SEGMENTS_NO_TIME_GPX.getBytes()); + GpxFileTrackImporter gpxFileTrackImporter = new GpxFileTrackImporter(context, contentProviderUtils); long trackId = gpxFileTrackImporter.importFile(inputStream); - assertEquals(TRACK_ID_0, trackId); - assertEquals(0, track.getValue().getTripStatistics().getTotalTime()); + Assert.assertEquals(TRACK_ID_0, trackId); + Assert.assertEquals(0, trackCaptor.getValue().getTripStatistics().getTotalTime()); - AndroidMock.verify(contentProviderUtils); - verifyTrack(track.getValue(), TRACK_NAME_0, TRACK_DESCRIPTION_0, -1L); + verify(contentProviderUtils); + verifyTrack(trackCaptor.getValue(), TRACK_NAME_0, TRACK_DESCRIPTION_0, -1L); } /** * Test an invalid xml input. */ - public void testInvalidXml() throws Exception { + @Test + public void testInvalidXml() { testInvalidGpx(INVALID_XML_GPX); } /** * Test an invalid location. */ - public void testInvalidLocation() throws Exception { + @Test + public void testInvalidLocation() { testInvalidGpx(INVALID_LOCATION_GPX); } /** * Test an invalid time. */ - public void testInvalidTime() throws Exception { + @Test + public void testInvalidTime() { testInvalidGpx(INVALID_TIME_GPX); } /** * Test an invalid altitude. */ - public void testInvalidAltitude() throws Exception { + @Test + public void testInvalidAltitude() { testInvalidGpx(INVALID_ALTITUDE_GPX); } /** * Test an invalid latitude. */ - public void testInvalidLatitude() throws Exception { + @Test + public void testInvalidLatitude() { testInvalidGpx(INVALID_LATITUDE_GPX); } /** * Test an invalid longitude. */ - public void testInvalidLongitude() throws Exception { + @Test + public void testInvalidLongitude() { testInvalidGpx(INVALID_LONGITUDE_GPX); } - private void testInvalidGpx(String xml) throws Exception { - expect(contentProviderUtils.insertTrack((Track) AndroidMock.anyObject())) - .andReturn(TRACK_ID_0_URI); + private void testInvalidGpx(String xml) { + when(contentProviderUtils.insertTrack((Track) any())).thenReturn(TRACK_ID_0_URI); // For the following, use StubReturn since we don't care whether they are // invoked or not. - expect(contentProviderUtils.bulkInsertTrackPoint( - (Location[]) AndroidMock.anyObject(), AndroidMock.anyInt(), AndroidMock.anyLong())) - .andStubReturn(1); - expect(contentProviderUtils.getFirstTrackPointId(TRACK_ID_0)).andStubReturn(TRACK_POINT_ID_0); - expect(contentProviderUtils.getLastTrackPointId(TRACK_ID_0)).andStubReturn(TRACK_POINT_ID_0); - expect( - contentProviderUtils.getTrack(PreferencesUtils.getLong(getContext(), - R.string.recording_track_id_key))).andStubReturn(null); - contentProviderUtils.deleteTrack(getContext(), TRACK_ID_0); - AndroidMock.replay(contentProviderUtils); + when(contentProviderUtils.bulkInsertTrackPoint((Location[]) any(), anyInt(), anyLong())).thenReturn(1); + when(contentProviderUtils.getFirstTrackPointId(TRACK_ID_0)).thenReturn(TRACK_POINT_ID_0); + when(contentProviderUtils.getLastTrackPointId(TRACK_ID_0)).thenReturn(TRACK_POINT_ID_0); + when(contentProviderUtils.getTrack(PreferencesUtils.getLong(context, R.string.recording_track_id_key))).thenReturn(null); + contentProviderUtils.deleteTrack(context, TRACK_ID_0); InputStream inputStream = new ByteArrayInputStream(xml.getBytes()); - GpxFileTrackImporter gpxFileTrackImporter = new GpxFileTrackImporter( - getContext(), contentProviderUtils); + GpxFileTrackImporter gpxFileTrackImporter = new GpxFileTrackImporter(context, contentProviderUtils); long trackId = gpxFileTrackImporter.importFile(inputStream); - assertEquals(-1L, trackId); - AndroidMock.verify(contentProviderUtils); + Assert.assertEquals(-1L, trackId); + verify(contentProviderUtils); } } diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/KmlFileTrackImporterTest.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/KmlFileTrackImporterTest.java index b637b07a2..95a3e9adc 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/KmlFileTrackImporterTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/KmlFileTrackImporterTest.java @@ -18,24 +18,31 @@ package de.dennisguse.opentracks.io.file.importer; import android.location.Location; -import de.dennisguse.opentracks.content.Track; -import de.dennisguse.opentracks.util.PreferencesUtils; -import de.dennisguse.opentracks.R; -import com.google.android.testing.mocking.AndroidMock; - -import org.easymock.Capture; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.junit.MockitoJUnitRunner; import java.io.ByteArrayInputStream; import java.io.InputStream; -import static com.google.android.testing.mocking.AndroidMock.eq; -import static com.google.android.testing.mocking.AndroidMock.expect; +import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.content.Track; +import de.dennisguse.opentracks.util.PreferencesUtils; + +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + /** * Tests for {@link KmlFileTrackImporter}. * * @author Jimmy Shih */ +@RunWith(MockitoJUnitRunner.class) public class KmlFileTrackImporterTest extends AbstractTestFileTrackImporter { private static final String VALID_ONE_TRACK_ONE_SEGMENT_GPX = @@ -59,83 +66,72 @@ public class KmlFileTrackImporterTest extends AbstractTestFileTrackImporter { String latitude = Double.toString(TRACK_LATITUDE + index); String longitude = Double.toString(TRACK_LONGITUDE + index); String altitude = Double.toString(TRACK_ELEVATION + index); - StringBuffer buffer = new StringBuffer(); - buffer.append("" + time + "" + "" + longitude + " " + latitude + " " - + altitude + ""); + StringBuilder buffer = new StringBuilder(); + buffer.append("" + time + "" + "" + longitude + " " + latitude + " " + altitude + ""); return buffer.toString(); } /** * Tests one track with one segment. */ + @Test public void testOneTrackOneSegment() throws Exception { - Capture track = new Capture(); + ArgumentCaptor trackCaptor = ArgumentCaptor.forClass(Track.class); Location location0 = createLocation(0, DATE_FORMAT_0.parse(TRACK_TIME_0).getTime()); Location location1 = createLocation(1, DATE_FORMAT_1.parse(TRACK_TIME_1).getTime()); - contentProviderUtils.clearTrack(getContext(), TRACK_ID_0); + contentProviderUtils.clearTrack(context, TRACK_ID_0); expectFirstTrackPoint(location0, TRACK_ID_0, TRACK_POINT_ID_0); // A flush happens at the end - expect(contentProviderUtils.bulkInsertTrackPoint( - LocationsMatcher.eqLoc(location1), eq(1), eq(TRACK_ID_0))).andReturn(1); - expect(contentProviderUtils.getLastTrackPointId(TRACK_ID_0)).andReturn(TRACK_POINT_ID_1); - expect( - contentProviderUtils.getTrack(PreferencesUtils.getLong(getContext(), - R.string.recording_track_id_key))).andStubReturn(null); - expectUpdateTrack(track, true, TRACK_ID_0); - AndroidMock.replay(contentProviderUtils); + when(contentProviderUtils.bulkInsertTrackPoint(new Location[]{location1}, eq(1), eq(TRACK_ID_0))).thenReturn(1); + when(contentProviderUtils.getLastTrackPointId(TRACK_ID_0)).thenReturn(TRACK_POINT_ID_1); + when(contentProviderUtils.getTrack(PreferencesUtils.getLong(context, R.string.recording_track_id_key))).thenReturn(null); + expectUpdateTrack(trackCaptor, true, TRACK_ID_0); InputStream inputStream = new ByteArrayInputStream(VALID_ONE_TRACK_ONE_SEGMENT_GPX.getBytes()); - KmlFileTrackImporter kmlFileTrackImporter = new KmlFileTrackImporter( - getContext(), TRACK_ID_0, contentProviderUtils); + KmlFileTrackImporter kmlFileTrackImporter = new KmlFileTrackImporter(context, TRACK_ID_0, contentProviderUtils); long trackId = kmlFileTrackImporter.importFile(inputStream); - assertEquals(TRACK_ID_0, trackId); + Assert.assertEquals(TRACK_ID_0, trackId); long time0 = DATE_FORMAT_0.parse(TRACK_TIME_0).getTime(); long time1 = DATE_FORMAT_1.parse(TRACK_TIME_1).getTime(); - assertEquals(time1 - time0, track.getValue().getTripStatistics().getTotalTime()); - AndroidMock.verify(contentProviderUtils); - verifyTrack(track.getValue(), TRACK_NAME_0, TRACK_DESCRIPTION_0, time0); + Assert.assertEquals(time1 - time0, trackCaptor.getValue().getTripStatistics().getTotalTime()); + verify(contentProviderUtils); + verifyTrack(trackCaptor.getValue(), TRACK_NAME_0, TRACK_DESCRIPTION_0, time0); } /** * Tests one track with two segments. */ + @Test public void testOneTrackTwoSegments() throws Exception { - Capture track = new Capture(); + ArgumentCaptor trackCaptor = ArgumentCaptor.forClass(Track.class); Location location0 = createLocation(0, DATE_FORMAT_0.parse(TRACK_TIME_0).getTime()); - contentProviderUtils.clearTrack(getContext(), TRACK_ID_0); + contentProviderUtils.clearTrack(context, TRACK_ID_0); expectFirstTrackPoint(location0, TRACK_ID_0, TRACK_POINT_ID_0); // A flush happens at the end - expect(contentProviderUtils.bulkInsertTrackPoint( - (Location[]) AndroidMock.anyObject(), eq(5), eq(TRACK_ID_0))).andStubReturn(5); - expect(contentProviderUtils.getLastTrackPointId(TRACK_ID_0)).andReturn(TRACK_POINT_ID_3); - expect( - contentProviderUtils.getTrack(PreferencesUtils.getLong(getContext(), - R.string.recording_track_id_key))).andStubReturn(null); - expectUpdateTrack(track, true, TRACK_ID_0); - AndroidMock.replay(contentProviderUtils); + when(contentProviderUtils.bulkInsertTrackPoint((Location[]) any(), eq(5), eq(TRACK_ID_0))).thenReturn(5); + when(contentProviderUtils.getLastTrackPointId(TRACK_ID_0)).thenReturn(TRACK_POINT_ID_3); + when(contentProviderUtils.getTrack(PreferencesUtils.getLong(context, R.string.recording_track_id_key))).thenReturn(null); + expectUpdateTrack(trackCaptor, true, TRACK_ID_0); InputStream inputStream = new ByteArrayInputStream(VALID_ONE_TRACK_TWO_SEGMENTS_GPX.getBytes()); - KmlFileTrackImporter kmlFileTrackImporter = new KmlFileTrackImporter( - getContext(), TRACK_ID_0, contentProviderUtils); + KmlFileTrackImporter kmlFileTrackImporter = new KmlFileTrackImporter(context, TRACK_ID_0, contentProviderUtils); long trackId = kmlFileTrackImporter.importFile(inputStream); - assertEquals(TRACK_ID_0, trackId); + Assert.assertEquals(TRACK_ID_0, trackId); long time0 = DATE_FORMAT_0.parse(TRACK_TIME_0).getTime(); long time1 = DATE_FORMAT_1.parse(TRACK_TIME_1).getTime(); long time2 = DATE_FORMAT_1.parse(TRACK_TIME_2).getTime(); long time3 = DATE_FORMAT_1.parse(TRACK_TIME_3).getTime(); - assertEquals( - time1 - time0 + time3 - time2, track.getValue().getTripStatistics().getTotalTime()); + Assert.assertEquals(time1 - time0 + time3 - time2, trackCaptor.getValue().getTripStatistics().getTotalTime()); - AndroidMock.verify(contentProviderUtils); - verifyTrack(track.getValue(), TRACK_NAME_0, TRACK_DESCRIPTION_0, - DATE_FORMAT_0.parse(TRACK_TIME_0).getTime()); + verify(contentProviderUtils); + verifyTrack(trackCaptor.getValue(), TRACK_NAME_0, TRACK_DESCRIPTION_0, DATE_FORMAT_0.parse(TRACK_TIME_0).getTime()); } } diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/LocationsMatcher.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/LocationsMatcher.java deleted file mode 100644 index 6d725f96b..000000000 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/LocationsMatcher.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package de.dennisguse.opentracks.io.file.importer; - -import android.location.Location; - -import com.google.android.testing.mocking.AndroidMock; - -import org.easymock.IArgumentMatcher; - -import java.util.Arrays; - -/** - * Locations matcher. Workaround because of capture bug 2617107 in easymock: - * http://sourceforge.net/tracker/?func=detail&aid=2617107&group_id=82958&atid=567837 - * - * @author Jimmy Shih - */ -public class LocationsMatcher implements IArgumentMatcher { - - private final Location[] expectedLocations; - - private LocationsMatcher(Location[] expected) { - this.expectedLocations = expected; - } - - public static Location[] eqLoc(Location expected) { - return eqLoc(new Location[]{expected}); - } - - public static Location[] eqLoc(Location[] expected) { - IArgumentMatcher matcher = new LocationsMatcher(expected); - AndroidMock.reportMatcher(matcher); - return null; - } - - @Override - public void appendTo(StringBuffer buf) { - buf.append("eqLoc(").append(Arrays.toString(expectedLocations)).append(")"); - } - - @Override - public boolean matches(Object obj) { - if (!(obj instanceof Location[])) { - return false; - } - Location[] locations = (Location[]) obj; - if (locations.length < expectedLocations.length) { - return false; - } - - // Only check the first elements (those that will be taken into account) - for (int i = 0; i < expectedLocations.length; i++) { - if (!matchLocation(locations[i], expectedLocations[i])) { - return false; - } - } - return true; - } - - private boolean matchLocation(Location location1, Location location2) { - return (location1.getTime() == location2.getTime()) - && (location1.getLatitude() == location2.getLatitude()) - && (location1.getLongitude() == location2.getLongitude()) - && (location1.getAltitude() == location2.getAltitude()); - } -}