| 
									
										
										
										
											2017-04-27 20:21:27 +02:00
										 |  |  | // SPDX-License-Identifier: GPL-2.0
 | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | #include "testgpscoords.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //unit under test
 | 
					
						
							|  |  |  | extern bool parseGpsText(const QString &gps_text, double *latitude, double *longitude); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testISO6709DParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("52°49'02.388\"N 1°36'17.388\"E", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(52, 49, 2.388), coord2double(1, 36, 17.388)); | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testNegativeISO6709DParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("52°49'02.388\"S 1°36'17.388\"W", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(-52, -49, -2.388), coord2double(-1, -36, -17.388)); | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testSpaceISO6709DParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("52 ° 49 ' 02.388 \" N  1 ° 36 ' 17.388 \" E", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(52, 49, 2.388), coord2double(1, 36, 17.388)); | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testSecondsParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("N52°49'02.388\" E1°36'17.388\"", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(52, 49, 2.388), coord2double(1, 36, 17.388)); | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testSpaceSecondsParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK(" N 52 ° 49 ' 02.388 \"  E 1 ° 36 ' 17.388 \"", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(52, 49, 2.388), coord2double(1, 36, 17.388)); | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testNegativeSecondsParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("-52°49'02.388\" -1°36'17.388\"", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(-52, -49, -2.388), coord2double(-1, -36, -17.388)); | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testMinutesParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("N52°49.03' E1d36.23'", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(52, 49.03), coord2double(1, 36.23)); | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testSpaceMinutesParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK(" N 52 ° 49.03 '  E 1 ° 36.23 ' ", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(52, 49.03), coord2double(1, 36.23)); | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testMinutesInversedParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("2° 53.836' N 73° 32.839' E", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(2, 53.836), coord2double(73, 32.839)); | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testDecimalParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("N52.83° E1.61", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(52.83), coord2double(1.61)); | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testDecimalInversedParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("52.83N 1.61E", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(52.83), coord2double(1.61)); | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testSpaceDecimalParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK(" N 52.83  E 1.61 ", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(52.83), coord2double(1.61)); | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 13:38:41 +01:00
										 |  |  | void TestGpsCoords::testXmlFormatParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("46.473881 6.784696", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(46.473881), coord2double(6.784696)); | 
					
						
							| 
									
										
										
										
											2015-02-23 13:38:41 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testNegativeXmlFormatParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("46.473881 -6.784696", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(46.473881), -coord2double(6.784696)); | 
					
						
							| 
									
										
										
										
											2015-02-23 13:38:41 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testNoUnitParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("48 51.491n 2 17.677e", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(48, 51.491), coord2double(2, 17.677)); | 
					
						
							| 
									
										
										
										
											2015-02-23 13:38:41 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testPrefixNoUnitParse() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("n48 51.491 w2 17.677", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(48, 51.491), -coord2double(2, 17.677)); | 
					
						
							| 
									
										
										
										
											2015-02-23 13:38:41 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-07 17:18:44 +01:00
										 |  |  | void TestGpsCoords::testOurWeb() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("12° 8' 0.24\" , -68° 16' 58.44\"", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(12, 8, 0.24), -coord2double(68, 16, 58.44)); | 
					
						
							| 
									
										
										
										
											2015-10-07 17:18:44 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TestGpsCoords::testGoogle() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	testParseOK("12.133400, -68.282900", | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 		    coord2double(12, 8, 0.24), -coord2double(68, 16, 58.44)); | 
					
						
							| 
									
										
										
										
											2015-10-07 17:18:44 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | void TestGpsCoords::testParseOK(const QString &txt, double expectedLat, | 
					
						
							| 
									
										
										
										
											2018-07-25 12:39:04 -07:00
										 |  |  | 				double expectedLon) | 
					
						
							| 
									
										
										
										
											2015-02-04 09:30:24 +01:00
										 |  |  | { | 
					
						
							|  |  |  | 	double actualLat, actualLon; | 
					
						
							|  |  |  | 	QVERIFY(parseGpsText(txt, &actualLat, &actualLon)); | 
					
						
							|  |  |  | 	QCOMPARE(actualLat, expectedLat); | 
					
						
							|  |  |  | 	QCOMPARE(actualLon, expectedLon); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | double TestGpsCoords::coord2double(double deg, double min, double sec) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return deg + min / 60.0 + sec / 3600.0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-05 23:26:51 +01:00
										 |  |  | QTEST_GUILESS_MAIN(TestGpsCoords) |