package de.saring.exerciseviewer.parser.impl; import de.saring.exerciseviewer.core.EVException; import de.saring.exerciseviewer.data.EVExercise; import de.saring.exerciseviewer.parser.AbstractExerciseParser; import org.junit.Before; import org.junit.Test; import java.time.LocalDateTime; import static org.junit.Assert.*; import static org.junit.Assert.assertEquals; /** * This class contains all unit tests for the PolarHsrRawParser class. * <p/> * This file is based on PolarSRawParser.java by Stefan Saring * * @author Remco den Breeje */ public class PolarHsrParserTest { /** * Instance to be tested. */ private AbstractExerciseParser parser; /** * This method initializes the environment for testing. */ @Before public void setUp() throws Exception { parser = new PolarHsrRawParser(); } /** * This method must fail on parsing an exerise file which doesn't exists. */ @Test public void testParseExerciseMissingFile() { try { parser.parseExercise("missing-file.srd"); fail("Parse of the missing file must fail ..."); } catch (EVException e) { } } /** * This method tests the parser with an Polar S510 raw exercise file * recorded in metric units. * This test is taken from the C# test class so the code could be better :-) */ @Test public void testParseS510ExerciseCyclingWithMetricUnits() throws EVException { // parse exercise file EVExercise exercise = parser.parseExercise("misc/testdata/s510/cycling-metric.hsr"); // check exercise data assertEquals(exercise.getFileType(), EVExercise.ExerciseFileType.S510RAW); assertEquals("Polar S4xx/S5xx Series", exercise.getDeviceName()); assertEquals(LocalDateTime.of(2007, 11, 3, 11, 03, 53), exercise.getDateTime()); assertEquals(exercise.getType(), "BasicUse"); assertEquals(exercise.getRecordingMode().isAltitude(), false); assertEquals(exercise.getRecordingMode().isSpeed(), true); assertEquals(exercise.getRecordingMode().isCadence(), false); assertEquals(exercise.getRecordingMode().isPower(), false); assertEquals(exercise.getRecordingMode().getBikeNumber(), (byte) 2); assertEquals(exercise.getDuration(), 10 * ((2 * 60 * 60) + (14 * 60) + 51) + 5); assertEquals(exercise.getRecordingInterval(), (short) 120); assertEquals(exercise.getHeartRateAVG(), (short) 171); assertEquals(exercise.getHeartRateMax(), (short) 194); assertEquals(exercise.getSpeed().getDistance(), 45800); assertEquals(Math.round(exercise.getSpeed().getSpeedAVG() * 10), 206); assertEquals(Math.round(exercise.getSpeed().getSpeedMax() * 10), 494); assertEquals(exercise.getCadence(), null); assertEquals(exercise.getAltitude(), null); assertEquals(exercise.getTemperature(), null); assertEquals(exercise.getEnergy(), 1616); assertEquals(exercise.getEnergyTotal(), 160947); assertEquals(exercise.getSumExerciseTime(), (644 * 60) + 41); assertEquals(exercise.getSumRideTime(), 8173); assertEquals(exercise.getOdometer(), 3007); // check heart rate limits assertEquals(exercise.getHeartRateLimits().length, 3); assertTrue(exercise.getHeartRateLimits()[0].isAbsoluteRange()); assertEquals(exercise.getHeartRateLimits()[0].getLowerHeartRate(), (short) 150); assertEquals(exercise.getHeartRateLimits()[0].getUpperHeartRate(), (short) 160); assertEquals(exercise.getHeartRateLimits()[0].getTimeBelow(), (0 * 60 * 60) + (0 * 60) + 0); assertEquals(exercise.getHeartRateLimits()[0].getTimeWithin(), (0 * 60 * 60) + (0 * 60) + 0); assertEquals(exercise.getHeartRateLimits()[0].getTimeAbove(), (0 * 60 * 60) + (0 * 60) + 0); assertTrue(exercise.getHeartRateLimits()[1].isAbsoluteRange()); assertEquals(exercise.getHeartRateLimits()[1].getLowerHeartRate(), (short) 183); assertEquals(exercise.getHeartRateLimits()[1].getUpperHeartRate(), (short) 187); assertEquals(exercise.getHeartRateLimits()[1].getTimeBelow(), (0 * 60 * 60) + (0 * 60) + 0); assertEquals(exercise.getHeartRateLimits()[1].getTimeWithin(), (0 * 60 * 60) + (0 * 60) + 0); assertEquals(exercise.getHeartRateLimits()[1].getTimeAbove(), (0 * 60 * 60) + (0 * 60) + 0); assertTrue(exercise.getHeartRateLimits()[2].isAbsoluteRange()); assertEquals(exercise.getHeartRateLimits()[2].getLowerHeartRate(), (short) 90); assertEquals(exercise.getHeartRateLimits()[2].getUpperHeartRate(), (short) 130); assertEquals(exercise.getHeartRateLimits()[2].getTimeBelow(), (0 * 60 * 60) + (0 * 60) + 0); assertEquals(exercise.getHeartRateLimits()[2].getTimeWithin(), (0 * 60 * 60) + (0 * 60) + 0); assertEquals(exercise.getHeartRateLimits()[2].getTimeAbove(), (0 * 60 * 60) + (0 * 60) + 0); // check lap data assertEquals(exercise.getLapList().length, 2); assertEquals(exercise.getLapList()[0].getTimeSplit(), (1 * 60 * 60 * 10) + (31 * 60 * 10) + (11 * 10) + 7); assertEquals(exercise.getLapList()[0].getHeartRateSplit(), (short) 156); assertEquals(exercise.getLapList()[0].getHeartRateAVG(), (short) 173); assertEquals(exercise.getLapList()[0].getHeartRateMax(), (short) 194); assertEquals(Math.round(exercise.getLapList()[0].getSpeed().getSpeedEnd() * 10), 164); assertEquals(Math.round(exercise.getLapList()[0].getSpeed().getDistance() / 100f), 310); assertEquals(exercise.getLapList()[0].getAltitude(), null); assertEquals(exercise.getLapList()[0].getTemperature(), null); assertEquals(exercise.getLapList()[1].getTimeSplit(), (2 * 60 * 60 * 10) + (14 * 60 * 10) + (51 * 10) + 5); assertEquals(exercise.getLapList()[1].getHeartRateSplit(), (short) 155); assertEquals(exercise.getLapList()[1].getHeartRateAVG(), (short) 169); assertEquals(exercise.getLapList()[1].getHeartRateMax(), (short) 189); assertEquals(Math.round(exercise.getLapList()[1].getSpeed().getSpeedEnd() * 10), 3); assertEquals(Math.round(exercise.getLapList()[1].getSpeed().getDistance() / 100), 458); assertEquals(exercise.getLapList()[1].getAltitude(), null); assertEquals(exercise.getLapList()[1].getTemperature(), null); // check sample data (first, two from middle and last only) assertEquals(exercise.getSampleList().length, 67); assertEquals(0, exercise.getSampleList()[0].getTimestamp()); assertEquals(exercise.getSampleList()[0].getHeartRate(), (short) 152); assertEquals(exercise.getSampleList()[0].getAltitude(), (short) 0); assertEquals(Math.round(exercise.getSampleList()[0].getSpeed() * 10), 230); assertEquals(exercise.getSampleList()[0].getCadence(), (short) 0); assertEquals(exercise.getSampleList()[0].getDistance(), 0); assertEquals(24 * 120 * 1000, exercise.getSampleList()[24].getTimestamp()); assertEquals(exercise.getSampleList()[24].getHeartRate(), (short) 165); assertEquals(exercise.getSampleList()[24].getAltitude(), (short) 0); assertEquals(Math.round(exercise.getSampleList()[24].getSpeed() * 10), 270); assertEquals(exercise.getSampleList()[24].getCadence(), (short) 0); assertEquals(exercise.getSampleList()[24].getDistance(), 16500); assertEquals(48 * 120 * 1000, exercise.getSampleList()[48].getTimestamp()); assertEquals(exercise.getSampleList()[48].getHeartRate(), (short) 164); assertEquals(exercise.getSampleList()[48].getAltitude(), (short) 0); assertEquals(Math.round(exercise.getSampleList()[48].getSpeed() * 10), 190); assertEquals(exercise.getSampleList()[48].getCadence(), (short) 0); assertEquals(exercise.getSampleList()[48].getDistance(), 32933); assertEquals(66 * 120 * 1000, exercise.getSampleList()[66].getTimestamp()); assertEquals(exercise.getSampleList()[66].getHeartRate(), (short) 161); assertEquals(exercise.getSampleList()[66].getAltitude(), (short) 0); assertEquals(Math.round(exercise.getSampleList()[66].getSpeed() * 10), 210); assertEquals(exercise.getSampleList()[66].getCadence(), (short) 0); assertEquals(exercise.getSampleList()[66].getDistance(), 45800); } /** * This method tests the parser with an Polar S510 raw exercise file * recorded in metric units. * This test is taken from the C# test class so the code could be better :-) */ @Test public void testParseS510ExerciseRunningIntervaltrainingWithMetricUnits() throws EVException { // parse exercise file EVExercise exercise = parser.parseExercise("misc/testdata/s510/running-interval-metric.hsr"); // check exercise data assertEquals(exercise.getFileType(), EVExercise.ExerciseFileType.S510RAW); assertEquals("Polar S4xx/S5xx Series", exercise.getDeviceName()); assertEquals(LocalDateTime.of(2007, 8, 20, 21, 10, 11), exercise.getDateTime()); assertEquals(exercise.getType(), "ExeSet5"); assertEquals(exercise.getRecordingMode().isAltitude(), false); assertEquals(exercise.getRecordingMode().isSpeed(), false); assertEquals(exercise.getRecordingMode().isCadence(), false); assertEquals(exercise.getRecordingMode().isPower(), false); assertEquals(exercise.getRecordingMode().getBikeNumber(), (byte) 0); assertEquals(exercise.getDuration(), 10 * ((0 * 60 * 60) + (59 * 60) + 31) + 7); assertEquals(exercise.getRecordingInterval(), (short) 30); assertEquals(exercise.getHeartRateAVG(), (short) 161); assertEquals(exercise.getHeartRateMax(), (short) 190); assertEquals(exercise.getSpeed(), null); assertEquals(exercise.getCadence(), null); assertEquals(exercise.getAltitude(), null); assertEquals(exercise.getTemperature(), null); assertEquals(exercise.getEnergy(), 645); assertEquals(exercise.getEnergyTotal(), 142456); assertEquals(exercise.getSumExerciseTime(), (617 * 60) + 29); assertEquals(exercise.getSumRideTime(), 7516); assertEquals(exercise.getOdometer(), 2793); // check heart rate limits assertEquals(exercise.getHeartRateLimits().length, 3); assertTrue(exercise.getHeartRateLimits()[0].isAbsoluteRange()); assertEquals(exercise.getHeartRateLimits()[0].getLowerHeartRate(), (short) 150); assertEquals(exercise.getHeartRateLimits()[0].getUpperHeartRate(), (short) 160); assertEquals(exercise.getHeartRateLimits()[0].getTimeBelow(), (0 * 60 * 60) + (13 * 60) + 42); assertEquals(exercise.getHeartRateLimits()[0].getTimeWithin(), (0 * 60 * 60) + (23 * 60) + 30); assertEquals(exercise.getHeartRateLimits()[0].getTimeAbove(), (0 * 60 * 60) + (22 * 60) + 19); assertTrue(exercise.getHeartRateLimits()[1].isAbsoluteRange()); assertEquals(exercise.getHeartRateLimits()[1].getLowerHeartRate(), (short) 183); assertEquals(exercise.getHeartRateLimits()[1].getUpperHeartRate(), (short) 187); assertEquals(exercise.getHeartRateLimits()[1].getTimeBelow(), (0 * 60 * 60) + (46 * 60) + 10); assertEquals(exercise.getHeartRateLimits()[1].getTimeWithin(), (0 * 60 * 60) + (12 * 60) + 46); assertEquals(exercise.getHeartRateLimits()[1].getTimeAbove(), (0 * 60 * 60) + (0 * 60) + 35); assertTrue(exercise.getHeartRateLimits()[2].isAbsoluteRange()); assertEquals(exercise.getHeartRateLimits()[2].getLowerHeartRate(), (short) 90); assertEquals(exercise.getHeartRateLimits()[2].getUpperHeartRate(), (short) 130); assertEquals(exercise.getHeartRateLimits()[2].getTimeBelow(), (0 * 60 * 60) + (0 * 60) + 9); assertEquals(exercise.getHeartRateLimits()[2].getTimeWithin(), (0 * 60 * 60) + (0 * 60) + 17); assertEquals(exercise.getHeartRateLimits()[2].getTimeAbove(), (0 * 60 * 60) + (59 * 60) + 5); // check lap data (first, two from middle and last only) assertEquals(exercise.getLapList().length, 7); assertEquals(exercise.getLapList()[0].getTimeSplit(), 10 * ((0 * 60 * 60) + (15 * 60) + 0) + 0); assertEquals(exercise.getLapList()[0].getHeartRateSplit(), (short) 154); assertEquals(exercise.getLapList()[0].getHeartRateAVG(), (short) 155); assertEquals(exercise.getLapList()[0].getHeartRateMax(), (short) 168); assertEquals(exercise.getLapList()[0].getSpeed(), null); assertEquals(exercise.getLapList()[0].getAltitude(), null); assertEquals(exercise.getLapList()[0].getTemperature(), null); assertEquals(exercise.getLapList()[2].getTimeSplit(), 10 * ((0 * 60 * 60) + (27 * 60) + 20) + 0); assertEquals(exercise.getLapList()[2].getHeartRateSplit(), (short) 187); assertEquals(exercise.getLapList()[2].getHeartRateAVG(), (short) 182); assertEquals(exercise.getLapList()[2].getHeartRateMax(), (short) 188); assertEquals(exercise.getLapList()[4].getTimeSplit(), 10 * ((0 * 60 * 60) + (39 * 60) + 30) + 0); assertEquals(exercise.getLapList()[4].getHeartRateSplit(), (short) 147); assertEquals(exercise.getLapList()[4].getHeartRateAVG(), (short) 182); assertEquals(exercise.getLapList()[4].getHeartRateMax(), (short) 147); assertEquals(exercise.getLapList()[6].getTimeSplit(), 10 * ((0 * 60 * 60) + (59 * 60) + 31) + 7); assertEquals(exercise.getLapList()[6].getHeartRateSplit(), (short) 126); assertEquals(exercise.getLapList()[6].getHeartRateAVG(), (short) 161); assertEquals(exercise.getLapList()[6].getHeartRateMax(), (short) 190); // check sample data (first, two from middle and last only) assertEquals(exercise.getSampleList().length, 119); assertEquals(0, exercise.getSampleList()[0].getTimestamp()); assertEquals(exercise.getSampleList()[0].getHeartRate(), (short) 143); assertEquals(exercise.getSampleList()[0].getAltitude(), (short) 0); assertEquals(exercise.getSampleList()[0].getSpeed(), 0f, 0f); assertEquals(exercise.getSampleList()[0].getCadence(), (short) 0); assertEquals(exercise.getSampleList()[0].getDistance(), 0); assertEquals(44 * 30 * 1000, exercise.getSampleList()[44].getTimestamp()); assertEquals(exercise.getSampleList()[44].getHeartRate(), (short) 151); assertEquals(exercise.getSampleList()[44].getAltitude(), (short) 0); assertEquals(exercise.getSampleList()[44].getSpeed(), 0f, 0f); assertEquals(exercise.getSampleList()[44].getCadence(), (short) 0); assertEquals(exercise.getSampleList()[44].getDistance(), 0); assertEquals(88 * 30 * 1000, exercise.getSampleList()[88].getTimestamp()); assertEquals(exercise.getSampleList()[88].getHeartRate(), (short) 153); assertEquals(exercise.getSampleList()[88].getAltitude(), (short) 0); assertEquals(exercise.getSampleList()[88].getSpeed(), 0f, 0f); assertEquals(exercise.getSampleList()[88].getCadence(), (short) 0); assertEquals(exercise.getSampleList()[88].getDistance(), 0); assertEquals(118 * 30 * 1000, exercise.getSampleList()[118].getTimestamp()); assertEquals(exercise.getSampleList()[118].getHeartRate(), (short) 140); assertEquals(exercise.getSampleList()[118].getAltitude(), (short) 0); assertEquals(exercise.getSampleList()[118].getSpeed(), 0f, 0f); assertEquals(exercise.getSampleList()[118].getCadence(), (short) 0); assertEquals(exercise.getSampleList()[118].getDistance(), 0); } }