From ecdb5093716dc7fdab5605edc3bf0e3631981d97 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Mon, 22 Jun 2020 21:56:22 +0200 Subject: [PATCH] Export/import test now verifies the TrackPoints. --- .../opentracks/content/data/TestDataUtil.java | 24 ++--- .../io/file/importer/ExportImportTest.java | 90 ++++++++++++++++--- .../importer/AbstractFileTrackImporter.java | 7 +- .../file/importer/KmlFileTrackImporter.java | 2 +- 4 files changed, 96 insertions(+), 27 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java index e6c9cc278..c98547df5 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java @@ -39,7 +39,7 @@ public class TestDataUtil { TrackPoint[] trackPoints = new TrackPoint[numPoints]; for (int i = 0; i < numPoints; i++) { - trackPoints[i] = (createTrackPoint(i)); + trackPoints[i] = createTrackPoint(i); } return new Pair<>(track, trackPoints); @@ -56,17 +56,21 @@ public class TestDataUtil { /** * Creates a location. * - * @param i the index to set the value of location. - * @return created location + * @param i the index for the TrackPoint. */ public static TrackPoint createTrackPoint(int i) { - Location location = new Location("test"); - location.setLatitude(INITIAL_LATITUDE + (double) i / 10000.0); - location.setLongitude(INITIAL_LONGITUDE - (double) i / 10000.0); - location.setAccuracy((float) i / 100.0f); - location.setAltitude(i * ALTITUDE_INTERVAL); - location.setTime(i + 1); - return new TrackPoint(location); + TrackPoint trackPoint = new TrackPoint(); + trackPoint.setLatitude(INITIAL_LATITUDE + (double) i / 10000.0); + trackPoint.setLongitude(INITIAL_LONGITUDE - (double) i / 10000.0); + trackPoint.setAccuracy((float) i / 100.0f); + trackPoint.setAltitude(i * ALTITUDE_INTERVAL); + trackPoint.setTime(i + 1); + + trackPoint.setHeartRate_bpm(100f + i); + trackPoint.setCyclingCadence_rpm(200f + i); + trackPoint.setCyclingCadence_rpm(300f + i); + trackPoint.setPower(400f + i); + return trackPoint; } /** diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java index bf3520000..cf6945386 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java @@ -17,6 +17,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import de.dennisguse.opentracks.content.data.TestDataUtil; @@ -35,6 +36,7 @@ import static org.junit.Assert.assertNotNull; * Export a track to {@link TrackFileFormat} and verify that the import is identical. *

* TODO: test ignores {@link TrackStatistics} for now. + * TODO: enable verify speed. */ @RunWith(JUnit4.class) public class ExportImportTest { @@ -48,7 +50,10 @@ public class ExportImportTest { private static final String TRACK_ICON = "the track icon"; private static final String TRACK_CATEGORY = "the category"; private static final String TRACK_DESCRIPTION = "the description"; + private final List waypoints = new ArrayList<>(); + private final List trackPoints = new ArrayList<>(); + private long importTrackId; private final long trackId = System.currentTimeMillis(); @@ -61,6 +66,9 @@ public class ExportImportTest { contentProviderUtils.insertTrack(track.first); contentProviderUtils.bulkInsertTrackPoint(track.second, track.first.getId()); + trackPoints.clear(); + trackPoints.addAll(Arrays.asList(track.second)); + for (int i = 0; i < 3; i++) { Waypoint waypoint = new Waypoint(track.second[i].getLocation()); waypoint.setName("the waypoint " + i); @@ -104,7 +112,40 @@ public class ExportImportTest { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); trackExporter.writeTrack(context, outputStream); - System.out.println(outputStream.toString()); + // 2. import + InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); + AbstractFileTrackImporter trackImporter = new KmlFileTrackImporter(context, -1L); + importTrackId = trackImporter.importFile(inputStream); + + // then + // 1. track + Track importedTrack = contentProviderUtils.getTrack(importTrackId); + assertNotNull(importedTrack); + assertEquals(track.getCategory(), importedTrack.getCategory()); + assertEquals(track.getDescription(), importedTrack.getDescription()); + assertEquals(track.getName(), importedTrack.getName()); + assertEquals(track.getIcon(), importedTrack.getIcon()); + + // 2. waypoints + assertWaypoints(); + + // 3. trackpoints + assertTrackpoints(false, false, false, false); + } + + @LargeTest + @Test + public void kml_with_trackdetail_and_sensordata() { + // given + Track track = contentProviderUtils.getTrack(trackId); + + TrackFileFormat trackFileFormat = TrackFileFormat.KML_WITH_TRACKDETAIL_AND_SENSORDATA; + TrackExporter trackExporter = trackFileFormat.newTrackExporter(context, new Track[]{track}); + + // when + // 1. export + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + trackExporter.writeTrack(context, outputStream); // 2. import InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); @@ -115,7 +156,6 @@ public class ExportImportTest { // 1. track Track importedTrack = contentProviderUtils.getTrack(importTrackId); assertNotNull(importedTrack); - //TODO assertEquals(track.getTrackPoints(), importedTrack.getTrackPoints()); assertEquals(track.getCategory(), importedTrack.getCategory()); assertEquals(track.getDescription(), importedTrack.getDescription()); assertEquals(track.getName(), importedTrack.getName()); @@ -124,14 +164,8 @@ public class ExportImportTest { // 2. waypoints assertWaypoints(); - //TODO Check absolute time of trackpoints - } - - @LargeTest - @Test - public void kml_with_trackdetail_and_sensordata() { - // TODO - Log.e(TAG, "Test not implemented."); + // 3. trackpoints + assertTrackpoints(false, true, true, true); } @LargeTest @@ -185,7 +219,6 @@ public class ExportImportTest { // 1. track Track trackImported = contentProviderUtils.getTrack(importTrackId); assertNotNull(trackImported); - //TODO assertEquals(track.getTrackPoints(), trackImported.getTrackPoints()); assertEquals(track.getCategory(), trackImported.getCategory()); assertEquals(track.getDescription(), trackImported.getDescription()); assertEquals(track.getName(), trackImported.getName()); @@ -196,7 +229,9 @@ public class ExportImportTest { // 2. waypoints assertWaypoints(); - //TODO Check absolute time of trackpoints + // 3. trackpoints + //TODO Verify speed + assertTrackpoints(false, false, false, false); } private void assertWaypoints() { @@ -217,4 +252,35 @@ public class ExportImportTest { assertEquals(waypoint.getLocation().getAltitude(), importedWaypoint.getLocation().getAltitude(), 0.001); } } + + private void assertTrackpoints(boolean verifySpeed, boolean verifyPower, boolean verifyHeartrate, boolean verifyCadence) { + List importedTrackPoints = contentProviderUtils.getTrackPoints(importTrackId); + assertEquals(trackPoints.size(), importedTrackPoints.size()); + + for (int i = 0; i < trackPoints.size(); i++) { + TrackPoint trackPoint = trackPoints.get(i); + TrackPoint importedTrackPoint = importedTrackPoints.get(i); + + assertEquals(trackPoint.getTime(), importedTrackPoint.getTime(), 0.01); + + // TODO Not exported for GPX/KML + // assertEquals(trackPoint.getAccuracy(), importedTrackPoint.getAccuracy(), 0.01); + + assertEquals(trackPoint.getLatitude(), importedTrackPoint.getLatitude(), 0.001); + assertEquals(trackPoint.getLongitude(), importedTrackPoint.getLongitude(), 0.001); + assertEquals(trackPoint.getAltitude(), importedTrackPoint.getAltitude(), 0.001); + if (verifySpeed) { + assertEquals(trackPoint.getSpeed(), importedTrackPoint.getSpeed(), 0.01); + } + if (verifyHeartrate) { + assertEquals(trackPoint.getHeartRate_bpm(), importedTrackPoint.getHeartRate_bpm(), 0.01); + } + if (verifyCadence) { + assertEquals(trackPoint.getCyclingCadence_rpm(), importedTrackPoint.getCyclingCadence_rpm(), 0.01); + } + if (verifyPower) { + assertEquals(trackPoint.getPower(), importedTrackPoint.getPower(), 0.01); + } + } + } } \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java index b1acb5f83..30e7efbd5 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java @@ -323,7 +323,7 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track // Check for negative time change if (timeDifference <= 0) { - Log.w(TAG, "Time difference not postive."); + Log.w(TAG, "Time difference not positive."); } else { /* @@ -389,9 +389,8 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track Uri photoUri = FileUtils.getUriForFile(context, file); return "" + photoUri; } - else { - return null; - } + + return null; } /** diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/KmlFileTrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/KmlFileTrackImporter.java index f783f2df1..32234b74b 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/KmlFileTrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/KmlFileTrackImporter.java @@ -229,7 +229,7 @@ public class KmlFileTrackImporter extends AbstractFileTrackImporter { trackPoint.setCyclingCadence_rpm(cadenceList.get(i)); } if (i < powerList.size()) { - trackPoint.setPower(cadenceList.get(i)); + trackPoint.setPower(powerList.get(i)); } insertTrackPoint(trackPoint);