/* This file is part of RouteConverter. RouteConverter is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. RouteConverter 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 General Public License for more details. You should have received a copy of the GNU General Public License along with RouteConverter; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Copyright (C) 2007 Christian Pesch. All Rights Reserved. */ package slash.navigation.itn; import org.junit.Test; import slash.common.type.CompactCalendar; import java.io.IOException; import static org.junit.Assert.*; import static slash.common.TestCase.assertDoubleEquals; import static slash.common.TestCase.calendar; import static slash.navigation.base.RouteComments.parseDescription; public class TomTomRouteFormatTest { private TomTomRouteFormat format = new TomTom5RouteFormat(); @Test public void testIsPosition() { assertTrue(format.isPosition("1046348|5364352|Linau|1|")); assertTrue(format.isPosition("+1046348|+5364352|Linau|1|")); assertTrue(format.isPosition("-1046348|5364352|Linau|1|")); assertTrue(format.isPosition("-1046348|+5364352|Linau|1|")); assertTrue(format.isPosition("1046348|-5364352|Linau|1|")); assertTrue(format.isPosition("+1046348|-5364352|Linau|1|")); assertTrue(format.isPosition("-7342221|4111437||4|")); assertTrue(format.isPosition("980401|4894505|TC-Rp,27,|5|")); assertTrue(format.isPosition("980401|4894505|TC-Rp,27,|7|")); assertTrue(format.isPosition("718697|5334397|Borkum - Anleger|0|")); assertTrue(format.isPosition("991830|5755430|12:23:10 Start (#1)|0")); assertFalse(format.isPosition("1046348|5364352|Linau")); assertFalse(format.isPosition("1046348|5364352|Linau|")); assertFalse(format.isPosition("-+1046348|5364352|Linau|1")); assertFalse(format.isPosition("+-1046348|5364352|Linau|1")); assertFalse(format.isPosition("1046348|+-5364352|Linau|1")); assertFalse(format.isPosition("1046348|-+5364352|Linau|1")); assertFalse(format.isPosition("A|5364352|Linau|1|")); assertFalse(format.isPosition("1046348|B|Linau|1|")); assertFalse(format.isPosition("1046348|5364352|Linau|A|")); assertFalse(format.isPosition("1046348|5364352|Linau|10|")); } @Test public void testParsePosition() { TomTomPosition position = format.parsePosition("1003200|5356948|Hamburg/Uhlenhorst|4|"); assertEquals(1003200, position.getLongitudeAsInt().intValue()); assertEquals(5356948, position.getLatitudeAsInt().intValue()); assertEquals("Hamburg/Uhlenhorst", position.getDescription()); } @Test public void testParsePositionFromITNConv() { TomTomPosition position = format.parsePosition("+1003200|+5356948|Hamburg/Uhlenhorst|4|"); assertEquals(1003200, position.getLongitudeAsInt().intValue()); assertEquals(5356948, position.getLatitudeAsInt().intValue()); assertEquals("Hamburg/Uhlenhorst", position.getDescription()); } @Test public void testParsePositionWithNegativeNumbers() { TomTomPosition position = format.parsePosition("-4253127|-3910293|Nirgendwo|3|"); assertEquals(-4253127, position.getLongitudeAsInt().intValue()); assertEquals(-3910293, position.getLatitudeAsInt().intValue()); assertEquals("Nirgendwo", position.getDescription()); } @Test public void testParsePositionFromMotorradTourenplaner() { TomTomPosition position = format.parsePosition("1003200|5356949|Finkenau, Hamburg, Uhlenhorst (Hamburg) |2|"); assertEquals(1003200, position.getLongitudeAsInt().intValue()); assertEquals(5356949, position.getLatitudeAsInt().intValue()); assertEquals("Finkenau, Hamburg, Uhlenhorst (Hamburg)", position.getDescription()); } @Test public void testParsePositionFromTripmaster() { TomTomPosition position = format.parsePosition("992001|5356396|Abstand 6 - 11:32:26 - 34 m - Bahrenfeld|0|"); assertEquals(992001, position.getLongitudeAsInt().intValue()); assertEquals(5356396, position.getLatitudeAsInt().intValue()); assertEquals("Bahrenfeld", position.getDescription()); assertEquals("Bahrenfeld", position.getCity()); assertDoubleEquals(34.0, position.getElevation()); assertEquals("Abstand 6", position.getReason()); assertEquals(calendar(1970, 1, 1, 11, 32, 26), position.getTime()); } @Test public void testParsePositionFromTripmasterWithStrangeNullPointerException() { TomTomPosition position = format.parsePosition("967193|5362179|Punkt - 12:01:38 - 10.9 m - Holm DE (Pinneberg)|0|"); assertEquals(967193, position.getLongitudeAsInt().intValue()); assertEquals(5362179, position.getLatitudeAsInt().intValue()); assertEquals("Holm DE (Pinneberg)", position.getDescription()); assertDoubleEquals(10.9, position.getElevation()); assertEquals("Punkt", position.getReason()); assertEquals(calendar(1970, 1, 1, 12, 1, 38), position.getTime()); } @Test public void testIsName() { assertTrue(format.isName("\"\"")); assertTrue(format.isName("\"a\"")); assertTrue(format.isName("\"abc\"")); assertFalse(format.isName("\"\"\"")); } @Test public void testParseName() { assertEquals("abc", format.parseName("\"abc\"")); } @Test public void testSinglePositionFile() throws IOException { TomTomPosition position = format.parsePosition("883644|4939999|kommandantenhaus|2|"); assertEquals(883644, position.getLongitudeAsInt().intValue()); assertEquals(4939999, position.getLatitudeAsInt().intValue()); assertEquals("kommandantenhaus", position.getDescription()); } @Test public void testSetLongitudeAndLatitudeAndElevation() { TomTomPosition position = format.parsePosition("992001|5356396|Abstand 6 - 11:32:26 - 34 m - Bahrenfeld|0|"); assertEquals(992001, position.getLongitudeAsInt().intValue()); assertEquals(5356396, position.getLatitudeAsInt().intValue()); assertDoubleEquals(34.0, position.getElevation()); position.setLongitude(19.02522); position.setLatitude(62.963395); position.setElevation(67.42); assertEquals(1902522, position.getLongitudeAsInt().intValue()); assertEquals(6296339, position.getLatitudeAsInt().intValue()); assertDoubleEquals(19.02522, position.getLongitude()); assertDoubleEquals(62.96339, position.getLatitude()); assertDoubleEquals(67.42, position.getElevation()); position.setLongitude(null); position.setLatitude(null); position.setElevation(null); assertNull(position.getLongitudeAsInt()); assertNull(position.getLatitudeAsInt()); assertNull(position.getLongitude()); assertNull(position.getLatitude()); assertNull(position.getElevation()); } @Test public void testFormatFirstName() { TomTomPosition position = format.parsePosition("883644|4939999|Los|2|"); String description = format.formatFirstOrLastName(position, "Start", null); assertEquals("Los", description); position.setDescription(description); parseDescription(position, description); assertEquals("Los", position.getDescription()); } private static final CompactCalendar DATE = calendar(2004, 8, 7, 3, 29, 10, 542); private static final CompactCalendar TIME = calendar(1970, 1, 1, 3, 29, 10, 542); @Test public void testFormatFirstNameWithDate() { TomTomPosition position = format.parsePosition("883644|4939999|Los|2|"); position.setTime(DATE); String description = format.formatFirstOrLastName(position, "Start", null); assertEquals("Start : Los : 07/08/2004 03:29:10 - 0.0 m - 0.0 Km/h - 0.0 deg", description); position.setTime(null); position.setDescription(description); assertEquals("Los", position.getDescription()); assertEquals("Start", position.getReason()); assertEquals(DATE.getTimeInMillis() / 1000, position.getTime().getTimeInMillis() / 1000); position.setElevation(47.4); description = format.formatFirstOrLastName(position, "Start", null); assertEquals("Start : Los : 07/08/2004 03:29:10 - 47.4 m - 0.0 Km/h - 0.0 deg", description); position.setElevation(null); position.setDescription(description); assertDoubleEquals(47.4, position.getElevation()); description = format.formatFirstOrLastName(position, "Start", 10.0); assertEquals("Start : Los : 07/08/2004 03:29:10 - 47.4 m - 0.0 Km/h - 0.0 deg - 10 Km", description); position.setElevation(null); position.setDescription(description); assertDoubleEquals(47.4, position.getElevation()); } @Test public void testFormatLastName() { TomTomPosition position = format.parsePosition("883644|4939999|Los|2|"); position.setTime(DATE); position.setElevation(82.4); position.setHeading(248.9); position.setSpeed(61.3); String description = format.formatFirstOrLastName(position, "Finish", 1354.4); assertEquals("Finish : Los : 07/08/2004 03:29:10 - 82.4 m - 61.3 Km/h - 248.9 deg - 1354 Km", description); position.setElevation(null); position.setTime(null); position.setDescription(description); assertDoubleEquals(82.4, position.getElevation()); assertDoubleEquals(248.9, position.getHeading()); assertDoubleEquals(61.3, position.getSpeed()); } @Test public void testFormatIntermediateName() { TomTomPosition position = format.parsePosition("883644|4939999|Weiter|2|"); String description = format.formatIntermediateName(position, null); assertEquals("Weiter", description); position.setDescription(description); parseDescription(position, description); assertEquals("Weiter", position.getDescription()); } @Test public void testFormatIntermediateNameWithDateElevationSpeedAndHeading() { TomTomPosition position = format.parsePosition("883644|4939999|Weiter|2|"); position.setTime(TIME); String description = format.formatIntermediateName(position, null); assertEquals("Weiter : 03:29:10 - 0.0 m - 0.0 Km/h - 0.0 deg", description); position.setTime(null); position.setDescription(description); assertEquals("Weiter", position.getDescription()); assertNull(position.getReason()); assertEquals(TIME.getTimeInMillis() / 1000, position.getTime().getTimeInMillis() / 1000); position.setElevation(47.4); position.setHeading(248.9); position.setSpeed(61.3); description = format.formatIntermediateName(position, 5.0); assertEquals("Weiter : 03:29:10 - 47.4 m - 61.3 Km/h - 248.9 deg - 5 Km", description); position.setElevation(null); position.setHeading(null); position.setSpeed(null); position.setDescription(description); assertEquals("Weiter", position.getDescription()); assertDoubleEquals(47.4, position.getElevation()); assertDoubleEquals(248.9, position.getHeading()); assertDoubleEquals(61.3, position.getSpeed()); } }