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 HAC4TURParser class. * * @author Stefan Saring (the C# version was done by Ilja Booij) */ public class HAC4TURParserTest { /** * Instance to be tested. */ private AbstractExerciseParser parser; /** * This method initializes the environment for testing. */ @Before public void setUp() throws Exception { parser = new HAC4TURParser(); } /** * This method must fail on parsing an exerise file which doesn't exists. */ @Test public void testParseExerciseMissingFile() { try { parser.parseExercise("missing-file.tur"); fail("Parse of the missing file must fail ..."); } catch (EVException e) { } } /** * This method test the parser by using a HAC4 cycling exercise file. */ @Test public void testParseCyclingExercise() throws EVException { // parse exercise EVExercise exercise = parser.parseExercise("misc/testdata/hac4/pailheres.tur"); assertEquals(EVExercise.ExerciseFileType.HAC4TUR, exercise.getFileType()); assertEquals("HACtronic - Tour", exercise.getDeviceName()); assertEquals((short) 20, exercise.getRecordingInterval()); // check recording mode assertTrue(exercise.getRecordingMode().isSpeed()); assertFalse(exercise.getRecordingMode().isCadence()); assertTrue(exercise.getRecordingMode().isAltitude()); assertFalse(exercise.getRecordingMode().isPower()); assertTrue(exercise.getRecordingMode().isTemperature()); // time information assertEquals(LocalDateTime.of(2005, 10, 10, 14, 5, 0), exercise.getDateTime()); assertEquals(9037 * 10, exercise.getDuration()); assertEquals(183 * 60 + 14, exercise.getSumExerciseTime()); // heart rates assertEquals((short) 159, exercise.getHeartRateAVG()); assertEquals((short) 184, exercise.getHeartRateMax()); // distance & speed & odometer assertEquals(40.1f, exercise.getSpeed().getDistance() / 1000f, 0.01f); assertEquals(72f, exercise.getSpeed().getSpeedMax(), 0.01f); assertEquals(22.21f, exercise.getSpeed().getSpeedAVG(), 0.01f); assertEquals(4817, exercise.getOdometer()); // altitudes assertEquals((short) 1901, exercise.getAltitude().getAltitudeMax()); assertEquals((short) 624, exercise.getAltitude().getAltitudeMin()); assertEquals((short) 1352, exercise.getAltitude().getAltitudeAVG()); assertEquals(1281, exercise.getAltitude().getAscent()); // temperatures assertEquals((short) 15, exercise.getTemperature().getTemperatureMin()); assertEquals((short) 17, exercise.getTemperature().getTemperatureAVG()); assertEquals((short) 23, exercise.getTemperature().getTemperatureMax()); // heart rate limits assertEquals(1, exercise.getHeartRateLimits().length); assertEquals((short) 140, exercise.getHeartRateLimits()[0].getLowerHeartRate()); assertEquals((short) 150, exercise.getHeartRateLimits()[0].getUpperHeartRate()); assertEquals(61 * 60, exercise.getHeartRateLimits()[0].getTimeBelow()); assertEquals(6 * 60 + 20, exercise.getHeartRateLimits()[0].getTimeWithin()); assertEquals((1 * 60 + 23) * 60 + 40, exercise.getHeartRateLimits()[0].getTimeAbove()); // we don't have any lap data yet: assertEquals(1, exercise.getLapList().length); // too lazy to check samples for now.. assertEquals(0, exercise.getSampleList()[0].getTimestamp()); assertEquals(50 * 20 * 1000, exercise.getSampleList()[50].getTimestamp()); assertEquals(100 * 20 * 1000, exercise.getSampleList()[100].getTimestamp()); } /** * This method test the parser by using a HAC5 cycling exercise file. */ @Test public void testParseHAC5CyclingExercise() throws EVException { EVExercise exercise = parser.parseExercise("misc/testdata/hac4/hac5.tur"); assertEquals(EVExercise.ExerciseFileType.HAC4TUR, exercise.getFileType()); assertEquals("HACtronic - Tour", exercise.getDeviceName()); assertEquals((short) 5, exercise.getRecordingInterval()); // check recording mode assertTrue(exercise.getRecordingMode().isSpeed()); assertTrue(exercise.getRecordingMode().isCadence()); assertTrue(exercise.getRecordingMode().isAltitude()); assertFalse(exercise.getRecordingMode().isPower()); assertTrue(exercise.getRecordingMode().isTemperature()); // time information assertEquals(LocalDateTime.of(2006, 2, 4, 10, 34, 0), exercise.getDateTime()); assertEquals(16675 * 10, exercise.getDuration()); assertEquals(13965 / 60, exercise.getSumExerciseTime()); // heart rates assertEquals((short) 128, exercise.getHeartRateAVG()); assertEquals((short) 157, exercise.getHeartRateMax()); // distance & speed & odometer assertEquals(105.56f, exercise.getSpeed().getDistance() / 1000f, 0.01f); assertEquals(43.2f, exercise.getSpeed().getSpeedMax(), 0.01f); assertEquals(27.21f, exercise.getSpeed().getSpeedAVG(), 0.01f); assertEquals(105, exercise.getOdometer()); // Cadence values assertEquals((short) 58, exercise.getCadence().getCadenceAVG()); assertEquals((short) 110, exercise.getCadence().getCadenceMax()); // altitudes assertEquals((short) 5, exercise.getAltitude().getAltitudeMax()); assertEquals((short) 2, exercise.getAltitude().getAltitudeMin()); assertEquals((short) 2, exercise.getAltitude().getAltitudeAVG()); assertEquals(10, exercise.getAltitude().getAscent()); // temperatures assertEquals((short) 6, exercise.getTemperature().getTemperatureMin()); assertEquals((short) 7, exercise.getTemperature().getTemperatureAVG()); assertEquals((short) 16, exercise.getTemperature().getTemperatureMax()); // heart rate limits assertEquals(1, exercise.getHeartRateLimits().length); assertEquals((short) 42, exercise.getHeartRateLimits()[0].getLowerHeartRate()); assertEquals((short) 195, exercise.getHeartRateLimits()[0].getUpperHeartRate()); assertEquals(0, exercise.getHeartRateLimits()[0].getTimeBelow()); assertEquals(16680, exercise.getHeartRateLimits()[0].getTimeWithin()); assertEquals(0, exercise.getHeartRateLimits()[0].getTimeAbove()); // we don't have any lap data yet: assertEquals(1, exercise.getLapList().length); // too lazy to check samples for now.. assertEquals(0, exercise.getSampleList()[0].getTimestamp()); assertEquals(50 * 5 * 1000, exercise.getSampleList()[50].getTimestamp()); assertEquals(100 * 5 * 1000, exercise.getSampleList()[100].getTimestamp()); } }