diff --git a/src/test/java/net/sf/marineapi/nmea/parser/ChecksumTest.java b/src/test/java/net/sf/marineapi/nmea/parser/ChecksumTest.java
index 272c574c..3e2b5ab1 100644
--- a/src/test/java/net/sf/marineapi/nmea/parser/ChecksumTest.java
+++ b/src/test/java/net/sf/marineapi/nmea/parser/ChecksumTest.java
@@ -1,20 +1,20 @@
-/*
+/*
* ChecksumTest.java
* Copyright (C) 2010 Kimmo Tuukkanen
- *
+ *
* This file is part of Java Marine API.
*
- *
+ *
* Java Marine API is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
- *
+ *
* Java Marine API is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public License
* along with Java Marine API. If not, see .
*/
@@ -27,7 +27,7 @@
/**
* Tests the Checksum class.
- *
+ *
* @author Kimmo Tuukkanen
*/
public class ChecksumTest {
@@ -47,6 +47,27 @@ public void testAdd() {
assertEquals(expected, Checksum.add(c));
}
+ @Test
+ public void testAddAIS() {
+ assertEquals("!AIVDM,2,1,0,A,58wt8Ui`g??r21`7S=:220588OA;0sk,0*7B",
+ Checksum.add("!AIVDM,2,1,0,A,58wt8Ui`g??r21`7S=:220588OA;0sk,0"));
+
+ assertEquals("!AIVDM,2,2,0,A,eQ8823mDm3kP00000000000,2*5D",
+ Checksum.add("!AIVDM,2,2,0,A,eQ8823mDm3kP00000000000,2"));
+
+ assertEquals("!AIVDM,2,1,9,B,61c2;qLPH1m@wsm6ARhp34k;S8i=3To,0*2C",
+ Checksum.add("!AIVDM,2,1,9,B,61c2;qLPH1m@wsm6ARhp34k;S8i=3To,0"));
+
+ assertEquals("!AIVDM,2,2,9,B,Djhi=3Di<2pp=34k>4D,2*03",
+ Checksum.add("!AIVDM,2,2,9,B,Djhi=3Di<2pp=34k>4D,2"));
+
+ assertEquals("!AIVDM,1,1,,B,;8u:8CAuiT7Bm2CIM=fsDJ100000,0*51",
+ Checksum.add("!AIVDM,1,1,,B,;8u:8CAuiT7Bm2CIM=fsDJ100000,0"));
+
+ assertEquals("!AIVDM,1,1,,A,B6CdCm0t3`tba35f@V9faHi7kP06,0*58",
+ Checksum.add("!AIVDM,1,1,,A,B6CdCm0t3`tba35f@V9faHi7kP06,0"));
+ }
+
/**
* Test method for
* {@link net.sf.marineapi.nmea.sentence.Checksum#calculate(java.lang.String)}
@@ -63,10 +84,55 @@ public void testCalculate() {
assertEquals("58", Checksum.calculate(RMBTest.EXAMPLE));
assertEquals("25", Checksum.calculate(RTETest.EXAMPLE));
}
-
+
@Test
public void testDelimiterIndex() {
assertEquals(13, Checksum.index("$GPGGA,,,,,,,"));
assertEquals(13, Checksum.index("$GPGGA,,,,,,,*00"));
}
+
+ @Test
+ public void testCalculateAIS() {
+ assertEquals("7B", Checksum.calculate("!AIVDM,2,1,0,A,58wt8Ui`g??r21`7S=:220588OA;0sk,0"));
+ assertEquals("7B", Checksum.calculate("!AIVDM,2,1,0,A,58wt8Ui`g??r21`7S=:220588OA;0sk,0*7B"));
+
+ assertEquals("5D", Checksum.calculate("!AIVDM,2,2,0,A,eQ8823mDm3kP00000000000,2"));
+ assertEquals("5D", Checksum.calculate("!AIVDM,2,2,0,A,eQ8823mDm3kP00000000000,2*5D"));
+
+ assertEquals("2C", Checksum.calculate("!AIVDM,2,1,9,B,61c2;qLPH1m@wsm6ARhp34k;S8i=3To,0"));
+ assertEquals("2C", Checksum.calculate("!AIVDM,2,1,9,B,61c2;qLPH1m@wsm6ARhp34k;S8i=3To,0*2C"));
+
+ assertEquals("03", Checksum.calculate("!AIVDM,2,2,9,B,Djhi=3Di<2pp=34k>4D,2"));
+ assertEquals("03", Checksum.calculate("!AIVDM,2,2,9,B,Djhi=3Di<2pp=34k>4D,2*03"));
+
+ assertEquals("51", Checksum.calculate("!AIVDM,1,1,,B,;8u:8CAuiT7Bm2CIM=fsDJ100000,0"));
+ assertEquals("51", Checksum.calculate("!AIVDM,1,1,,B,;8u:8CAuiT7Bm2CIM=fsDJ100000,0*51"));
+
+ assertEquals("58", Checksum.calculate("!AIVDM,1,1,,A,B6CdCm0t3`tba35f@V9faHi7kP06,0"));
+ assertEquals("58", Checksum.calculate("!AIVDM,1,1,,A,B6CdCm0t3`tba35f@V9faHi7kP06,0*58"));
+ }
+
+ @Test
+ public void testCalculateIssue134() {
+ assertEquals("3F", Checksum.calculate("!AIVDM,1,1,,A,133sfv002POVWD0Je4sMA:a@00S?,0"));
+ assertEquals("3F", Checksum.calculate("!AIVDM,1,1,,A,133sfv002POVWD0Je4sMA:a@00S?,0*3F"));
+
+ assertEquals("4F", Checksum.calculate("!AIVDM,1,1,,A,13IWB67P00wdI9pKF>atlww>2@G4,0"));
+ assertEquals("4F", Checksum.calculate("!AIVDM,1,1,,A,13IWB67P00wdI9pKF>atlww>2@G4,0*4F"));
+
+ assertEquals("6D", Checksum.calculate("!AIVDM,1,1,,B,1CI7wSg000woG1rK3DMh0q3D00RV,0"));
+ assertEquals("6D", Checksum.calculate("!AIVDM,1,1,,B,1CI7wSg000woG1rK3DMh0q3D00RV,0*6D"));
+ }
+
+ @Test
+ public void testAddIssue134() {
+ assertEquals("!AIVDM,1,1,,A,133sfv002POVWD0Je4sMA:a@00S?,0*3F",
+ Checksum.add("!AIVDM,1,1,,A,133sfv002POVWD0Je4sMA:a@00S?,0"));
+
+ assertEquals("!AIVDM,1,1,,A,13IWB67P00wdI9pKF>atlww>2@G4,0*4F",
+ Checksum.add("!AIVDM,1,1,,A,13IWB67P00wdI9pKF>atlww>2@G4,0"));
+
+ assertEquals("!AIVDM,1,1,,B,1CI7wSg000woG1rK3DMh0q3D00RV,0*6D",
+ Checksum.add("!AIVDM,1,1,,B,1CI7wSg000woG1rK3DMh0q3D00RV,0"));
+ }
}
diff --git a/src/test/java/net/sf/marineapi/nmea/sentence/SentenceValidatorTest.java b/src/test/java/net/sf/marineapi/nmea/sentence/SentenceValidatorTest.java
index 09b40510..30709f4f 100644
--- a/src/test/java/net/sf/marineapi/nmea/sentence/SentenceValidatorTest.java
+++ b/src/test/java/net/sf/marineapi/nmea/sentence/SentenceValidatorTest.java
@@ -106,6 +106,18 @@ public void testIsValidWithValidInput() {
assertTrue(SentenceValidator.isValid(ZDATest.EXAMPLE));
}
+ @Test
+ public void testIsValidAIS() {
+ assertTrue(SentenceValidator.isValid("!AIVDM,1,1,,A,133sfv002POVWD0Je4sMA:a@00S?,0"));
+ assertTrue(SentenceValidator.isValid("!AIVDM,1,1,,A,133sfv002POVWD0Je4sMA:a@00S?,0*3F"));
+
+ assertTrue(SentenceValidator.isValid("!AIVDM,1,1,,A,13IWB67P00wdI9pKF>atlww>2@G4,0"));
+ assertTrue(SentenceValidator.isValid("!AIVDM,1,1,,A,13IWB67P00wdI9pKF>atlww>2@G4,0*4F"));
+
+ assertTrue(SentenceValidator.isValid("!AIVDM,1,1,,B,1CI7wSg000woG1rK3DMh0q3D00RV,0"));
+ assertTrue(SentenceValidator.isValid("!AIVDM,1,1,,B,1CI7wSg000woG1rK3DMh0q3D00RV,0*6D"));
+ }
+
@Test
public void testIsValidWithLongProprietaryId() {
String str = "$PRWIILOG,GGA,A,T,1,0";
@@ -122,10 +134,10 @@ public void testIsValidWithShortProprietaryId() {
@Test
public void testIsSentenceWithChecksum() {
-
+
String nmea = "$GPRMC,142312.000,V,,,,,,,080514,,*20";
assertTrue(SentenceValidator.isSentence(nmea));
-
+
nmea = "$GPRMC,142312.000,V,,,,,,,080514,,*20xy";
assertFalse(SentenceValidator.isSentence(nmea));
@@ -138,16 +150,16 @@ public void testIsSentenceWithChecksum() {
nmea = "$GPRMC,142312.000,V,,,,,,,080514,,*";
assertFalse(SentenceValidator.isSentence(nmea));
}
-
+
@Test
public void testIsSentenceWithoutChecksum() {
String nmea = "$GPRMC,142312.000,V,,,,,,,080514,,";
assertTrue(SentenceValidator.isSentence(nmea));
}
-
+
@Test
public void testIsSentenceWithChecksumAndNewline() {
-
+
String nmea = "$GPRMC,142312.000,V,,,,,,,080514,,*20\r\n";
assertTrue(SentenceValidator.isSentence(nmea));
@@ -159,14 +171,14 @@ public void testIsSentenceWithChecksumAndNewline() {
nmea = "$GPRMC,142312.000,V,,,,,,,080514,,*20\n";
assertTrue(SentenceValidator.isSentence(nmea));
-
+
nmea = "$GPRMC,142312.000,V,,,,,,,080514,,*20\r\n\r\n";
assertFalse(SentenceValidator.isSentence(nmea));
- }
-
+ }
+
@Test
public void testIsSentenceNoChecksumWithNewline() {
-
+
String nmea = "$GPRMC,142312.000,V,,,,,,,080514,,\r\n";
assertTrue(SentenceValidator.isSentence(nmea));
@@ -178,7 +190,7 @@ public void testIsSentenceNoChecksumWithNewline() {
nmea = "$GPRMC,142312.000,V,,,,,,,080514,,\n";
assertTrue(SentenceValidator.isSentence(nmea));
-
+
nmea = "$GPRMC,142312.000,V,,,,,,,080514,,\r\n\r\n";
assertFalse(SentenceValidator.isSentence(nmea));
}