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)); }