added a test that reads all messages from the test file

This commit is contained in:
Axel Uhl committed 2011-08-25 23:20:43 +02:00
1 parent 7a45beb74b
commit 01e669da9f
5 files changed
+56 -2

No files matched your search

@@ -5,6 +5,8 @@ import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
@@ -25,4 +27,23 @@ public class ParseSingleSwissTimingPacketFromFileTest {
assertEquals((double) lat / 10000000., swissTimingMessage.getPosition().getLatDeg(), 0.0000000001);
assertEquals((double) lng / 10000000., swissTimingMessage.getPosition().getLngDeg(), 0.0000000001);
}
@Test
public void readAllPacketsFromFile() throws IOException, SwissTimingFormatException {
byte[] message = new byte[65536];
List<SwissTimingMessage> messages = new ArrayList<SwissTimingMessage>();
InputStream is = getClass().getResourceAsStream("/SwissTimingExampleTrack.bin");
int bytesRead = is.read(message);
int offset = 0;
int messageLength = 0;
while (offset < bytesRead) {
SwissTimingMessage swissTimingMessage = SwissTimingMessageParser.INSTANCE.parse(message, offset);
assertNotNull(swissTimingMessage);
messages.add(swissTimingMessage);
messageLength = swissTimingMessage.length();
offset += messageLength;
}
assertEquals(bytesRead/messageLength, messages.size());
}
}
@@ -20,4 +20,9 @@ public interface SwissTimingMessage {
int getNumberOfSatellites();
int getBatteryPercent();
/**
* @return the number of bytes that were used to encode this message
*/
int length();
}
@@ -6,4 +6,6 @@ public interface SwissTimingMessageParser {
SwissTimingMessageParser INSTANCE = new SwissTimingMessageParserImpl();
SwissTimingMessage parse(byte[] message) throws SwissTimingFormatException;
SwissTimingMessage parse(byte[] message, int offset) throws SwissTimingFormatException;
}
@@ -14,9 +14,10 @@ public class SwissTimingMessageImpl implements SwissTimingMessage {
private final Speed speed;
private final int numberOfSatellites;
private final int batteryPercent;
private final int length;
public SwissTimingMessageImpl(String raceID, int packetID, TimePoint timestamp, int gpsID, Position position, Speed speed,
int numberOfSatellites, int batteryPercent) {
int numberOfSatellites, int batteryPercent, int length) {
super();
this.raceID = raceID;
this.packetID = packetID;
@@ -26,38 +27,57 @@ public class SwissTimingMessageImpl implements SwissTimingMessage {
this.speed = speed;
this.numberOfSatellites = numberOfSatellites;
this.batteryPercent = batteryPercent;
this.length = length;
}
@Override
public String getRaceID() {
return raceID;
}
@Override
public int getPacketID() {
return packetID;
}
@Override
public TimePoint getTimestamp() {
return timestamp;
}
@Override
public int getGpsID() {
return gpsID;
}
@Override
public Position getPosition() {
return position;
}
@Override
public Speed getSpeed() {
return speed;
}
@Override
public int getNumberOfSatellites() {
return numberOfSatellites;
}
@Override
public int getBatteryPercent() {
return batteryPercent;
}
@Override
public int length() {
return length;
}
@Override
public String toString() {
return "#"+getPacketID()+"/"+getGpsID()+" "+getTimestamp()+": "+getPosition()+", "+getSpeed()+". "+getNumberOfSatellites()+" satellites, battery: "+
getBatteryPercent()+"%";
}
}
@@ -13,6 +13,12 @@ public class SwissTimingMessageParserImpl implements SwissTimingMessageParser {
@Override
public SwissTimingMessage parse(byte[] message) throws SwissTimingFormatException {
int i=0;
return parse(message, i);
}
@Override
public SwissTimingMessage parse(byte[] message, int offset) throws SwissTimingFormatException {
int i = offset;
if (message[i] != 0x10 || message[i+1] != 0x00) {
throw new SwissTimingFormatException("Didn't find start marker 0x1000", message);
}
@@ -48,7 +54,7 @@ public class SwissTimingMessageParserImpl implements SwissTimingMessageParser {
return new SwissTimingMessageImpl(raceID, packetID, new MillisecondsTimePoint(timestamp), gpsID,
new DegreePosition((double) latitude / 10000000., (double) longitude / 10000000.),
new KilometersPerHourSpeedWithBearingImpl(0.36*speedInDecimetersPerSecond, new DegreeBearingImpl(course)),
numberOfSatellites, batteryPercent);
numberOfSatellites, batteryPercent, i-offset);
}
private short parseShort(byte[] message, int offset) {