#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ tests.py Tests for micropyGPS module # Copyright (c) 2018 Michael Calvin McCoy (calvin.mccoy@protonmail.com) # MIT License (MIT) - see LICENSE file """ import hashlib from micropyGPS import MicropyGPS test_RMC = ['$GPRMC,081836,A,3751.65,S,14507.36,E,000.0,360.0,130998,011.3,E*62\n', '$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A\n', '$GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68\n', '$GPRMC,180041.896,A,3749.1851,N,08338.7891,W,001.9,154.9,240911,,,A*7A\n', '$GPRMC,180049.896,A,3749.1808,N,08338.7869,W,001.8,156.3,240911,,,A*70\n', '$GPRMC,092751.000,A,5321.6802,N,00630.3371,W,0.06,31.66,280511,,,A*45\n', '$GPRMC,193448.00,A,3746.2622056,N,12224.1897266,W,0.01,,041218,,,D*58\n', '$GPRMC,193449.00,A,3746.2622284,N,12224.1897308,W,0.01,,041218,,,D*5D\n'] rmc_parsed_strings = [['GPRMC', '081836', 'A', '3751.65', 'S', '14507.36', 'E', '000.0', '360.0', '130998', '011.3', 'E', '62'], ['GPRMC', '123519', 'A', '4807.038', 'N', '01131.000', 'E', '022.4', '084.4', '230394', '003.1', 'W', '6A'], ['GPRMC', '225446', 'A', '4916.45', 'N', '12311.12', 'W', '000.5', '054.7', '191194', '020.3', 'E', '68'], ['GPRMC', '180041.896', 'A', '3749.1851', 'N', '08338.7891', 'W', '001.9', '154.9', '240911', '', '', 'A', '7A'], ['GPRMC', '180049.896', 'A', '3749.1808', 'N', '08338.7869', 'W', '001.8', '156.3', '240911', '', '', 'A', '70'], ['GPRMC', '092751.000', 'A', '5321.6802', 'N', '00630.3371', 'W', '0.06', '31.66', '280511', '', '', 'A', '45'], ['GPRMC', '193448.00', 'A', '3746.2622056', 'N', '12224.1897266', 'W', '0.01', '', '041218', '', '', 'D', '58'], ['GPRMC', '193449.00', 'A', '3746.2622284', 'N', '12224.1897308', 'W', '0.01', '', '041218', '', '', 'D', '5D']] rmc_crc_values = [0x62, 0x6a, 0x68, 0x7a, 0x70, 0x45, 0x58, 0x5D] rmc_longitude = [[145, 7.36, 'E'], [11, 31.0, 'E'], [123, 11.12, 'W'], [83, 38.7891, 'W'], [83, 38.7869, 'W'], [6, 30.3371, 'W'], [122, 24.1897266, 'W'], [122, 24.1897308, 'W']] rmc_latitude = [[37, 51.65, 'S'], [48, 7.038, 'N'], [49, 16.45, 'N'], [37, 49.1851, 'N'], [37, 49.1808, 'N'], [53, 21.6802, 'N'], [37, 46.2622056, 'N'], [37, 46.2622284, 'N']] rmc_utc = [[8, 18, 36.0], [12, 35, 19.0], [22, 54, 46.0], [18, 0, 41.896], [18, 0, 49.896], [9, 27, 51.0], [19, 34, 48.0], [19, 34, 49.0]] rmc_speed = [[0.0, 0.0, 0.0], [22.4, 25.7824, 41.4848], [0.5, 0.5755, 0.926], [1.9, 2.1869, 3.5188], [1.8, 2.0718, 3.3336], [0.06, 0.06906, 0.11112], [0.01, 0.011510000000000001, 0.018520000000000002], [0.01, 0.011510000000000001, 0.018520000000000002]] rmc_date = [(13, 9, 98), (23, 3, 94), (19, 11, 94), (24, 9, 11), (24, 9, 11), (28, 5, 11), (4, 12, 18), (4, 12, 18)] rmc_course = [360.0, 84.4, 54.7, 154.9, 156.3, 31.66, 0.0, 0.0] rmc_compass = ['N', 'E', 'NE', 'SSE', 'SSE', 'NNE', 'N', 'N'] test_VTG = ['$GPVTG,232.9,T,,M,002.3,N,004.3,K,A*01\n'] test_GGA = ['$GPGGA,180126.905,4254.931,N,07702.496,W,0,00,,,M,,M,,*54\n', '$GPGGA,181433.343,4054.931,N,07502.498,W,0,00,,,M,,M,,*52\n', '$GPGGA,180050.896,3749.1802,N,08338.7865,W,1,07,1.1,397.4,M,-32.5,M,,0000*6C\n', '$GPGGA,172814.0,3723.46587704,N,12202.26957864,W,2,6,1.2,18.893,M,-25.669,M,2.0,0031*4F\n'] gga_parsed_strings = [['GPGGA', '180126.905', '4254.931', 'N', '07702.496', 'W', '0', '00', '', '', 'M', '', 'M', '', '', '54'], ['GPGGA', '181433.343', '4054.931', 'N', '07502.498', 'W', '0', '00', '', '', 'M', '', 'M', '', '', '52'], ['GPGGA', '180050.896', '3749.1802', 'N', '08338.7865', 'W', '1', '07', '1.1', '397.4', 'M', '-32.5', 'M', '', '0000', '6C'], ['GPGGA', '172814.0', '3723.46587704', 'N', '12202.26957864', 'W', '2', '6', '1.2', '18.893', 'M', '-25.669', 'M', '2.0', '0031', '4F']] gga_latitudes = [[0, 0.0, 'N'], [0, 0.0, 'N'], [37, 49.1802, 'N'], [37, 23.46587704, 'N']] gga_longitudes = [[0, 0.0, 'W'], [0, 0.0, 'W'], [83, 38.7865, 'W'], [122, 2.26957864, 'W']] gga_fixes = [0, 0, 1, 2] gga_timestamps = [[18, 1, 26.905], [18, 14, 33.343], [18, 0, 50.896], [17, 28, 14.0]] gga_hdops = [0.0, 0.0, 1.1, 1.2] gga_altitudes = [0.0, 0.0, 397.4, 18.893] gga_satellites_in_uses = [0, 0, 7, 6] gga_geoid_heights = [0.0, 0.0, -32.5, -25.669] gga_crc_xors = [84, 82, 108, 79] test_GSA = ['$GPGSA,A,3,07,11,28,24,26,08,17,,,,,,2.0,1.1,1.7*37\n', '$GPGSA,A,3,07,02,26,27,09,04,15,,,,,,1.8,1.0,1.5*33\n'] gsa_parsed_strings = [['GPGSA', 'A', '3', '07', '11', '28', '24', '26', '08', '17', '', '', '', '', '', '2.0', '1.1', '1.7', '37'], ['GPGSA', 'A', '3', '07', '02', '26', '27', '09', '04', '15', '', '', '', '', '', '1.8', '1.0', '1.5', '33']] gsa_crc_values = [0x37, 0x33] gsa_sats_used = [[7, 11, 28, 24, 26, 8, 17], [7, 2, 26, 27, 9, 4, 15]] gsa_hdop = [1.1, 1.0] gsa_vdop = [1.7, 1.5] gsa_pdop = [2.0, 1.8] test_GSV = ['$GPGSV,3,1,12,28,72,355,39,01,52,063,33,17,51,272,44,08,46,184,38*74\n', '$GPGSV,3,2,12,24,42,058,33,11,34,053,33,07,20,171,40,20,15,116,*71\n', '$GPGSV,3,3,12,04,12,204,34,27,11,324,35,32,11,089,,26,10,264,40*7B\n', '$GPGSV,3,1,11,03,03,111,00,04,15,270,00,06,01,010,00,13,06,292,00*74\n', '$GPGSV,3,2,11,14,25,170,00,16,57,208,39,18,67,296,40,19,40,246,00*74\n', '$GPGSV,3,3,11,22,42,067,42,24,14,311,43,27,05,244,00,,,,*4D\n', '$GPGSV,4,1,14,22,81,349,25,14,64,296,22,18,54,114,21,51,40,212,*7D\n', '$GPGSV,4,2,14,24,30,047,22,04,22,312,26,31,22,204,,12,19,088,23*72\n', '$GPGSV,4,3,14,25,17,127,18,21,16,175,,11,09,315,16,19,05,273,*72\n', '$GPGSV,4,4,14,32,05,303,,15,02,073,*7A\n', '$GPGSV,3,1,12,13,65,002,50,02,61,098,47,39,60,352,,05,56,183,49*70\n', '$GPGSV,3,2,12,15,35,325,50,29,32,229,49,06,25,070,44,30,16,096,38*70\n', '$GPGSV,3,3,12,19,08,022,35,07,07,122,,12,06,316,49,25,03,278,36*7D\n'] gsv_parsed_string = [['GPGSV', '3', '1', '12', '28', '72', '355', '39', '01', '52', '063', '33', '17', '51', '272', '44', '08', '46', '184', '38', '74'], ['GPGSV', '3', '2', '12', '24', '42', '058', '33', '11', '34', '053', '33', '07', '20', '171', '40', '20', '15', '116', '', '71'], ['GPGSV', '3', '3', '12', '04', '12', '204', '34', '27', '11', '324', '35', '32', '11', '089', '', '26', '10', '264', '40', '7B'], ['GPGSV', '3', '1', '11', '03', '03', '111', '00', '04', '15', '270', '00', '06', '01', '010', '00', '13', '06', '292', '00', '74'], ['GPGSV', '3', '2', '11', '14', '25', '170', '00', '16', '57', '208', '39', '18', '67', '296', '40', '19', '40', '246', '00', '74'], ['GPGSV', '3', '3', '11', '22', '42', '067', '42', '24', '14', '311', '43', '27', '05', '244', '00', '', '', '', '', '4D'], ['GPGSV', '4', '1', '14', '22', '81', '349', '25', '14', '64', '296', '22', '18', '54', '114', '21', '51', '40', '212', '', '7D'], ['GPGSV', '4', '2', '14', '24', '30', '047', '22', '04', '22', '312', '26', '31', '22', '204', '', '12', '19', '088', '23', '72'], ['GPGSV', '4', '3', '14', '25', '17', '127', '18', '21', '16', '175', '', '11', '09', '315', '16', '19', '05', '273', '', '72'], ['GPGSV', '4', '4', '14', '32', '05', '303', '', '15', '02', '073', '', '7A'], ['GPGSV', '3', '1', '12', '13', '65', '002', '50', '02', '61', '098', '47', '39', '60', '352', '', '05', '56', '183', '49', '70'], ['GPGSV', '3', '2', '12', '15', '35', '325', '50', '29', '32', '229', '49', '06', '25', '070', '44', '30', '16', '096', '38', '70'], ['GPGSV', '3', '3', '12', '19', '08', '022', '35', '07', '07', '122', '', '12', '06', '316', '49', '25', '03', '278', '36', '7D']] gsv_crc_values = [0x74, 0x71, 0x7b, 0x74, 0x74, 0x4d, 0x7d, 0x72, 0x72, 0x7a, 0x70, 0x70, 0x7d] gsv_sv_setence = [1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3] gsv_total_sentence = [3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3] gsv_num_sats_in_view = [12, 12, 12, 11, 11, 11, 14, 14, 14, 14, 12, 12, 12] gsv_data_valid = [False, False, True, False, False, True, False, False, False, True, False, False, True] gsv_sat_data = [{28: (72, 355, 39), 1: (52, 63, 33), 17: (51, 272, 44), 8: (46, 184, 38)}, {28: (72, 355, 39), 1: (52, 63, 33), 17: (51, 272, 44), 8: (46, 184, 38), 24: (42, 58, 33), 11: (34, 53, 33), 7: (20, 171, 40), 20: (15, 116, None)}, {28: (72, 355, 39), 1: (52, 63, 33), 17: (51, 272, 44), 8: (46, 184, 38), 24: (42, 58, 33), 11: (34, 53, 33), 7: (20, 171, 40), 20: (15, 116, None), 4: (12, 204, 34), 27: (11, 324, 35), 32: (11, 89, None), 26: (10, 264, 40)}, {3: (3, 111, 0), 4: (15, 270, 0), 6: (1, 10, 0), 13: (6, 292, 0)}, {3: (3, 111, 0), 4: (15, 270, 0), 6: (1, 10, 0), 13: (6, 292, 0), 14: (25, 170, 0), 16: (57, 208, 39), 18: (67, 296, 40), 19: (40, 246, 0)}, {3: (3, 111, 0), 4: (15, 270, 0), 6: (1, 10, 0), 13: (6, 292, 0), 14: (25, 170, 0), 16: (57, 208, 39), 18: (67, 296, 40), 19: (40, 246, 0), 22: (42, 67, 42), 24: (14, 311, 43), 27: (5, 244, 0)}, {22: (81, 349, 25), 14: (64, 296, 22), 18: (54, 114, 21), 51: (40, 212, None)}, {22: (81, 349, 25), 14: (64, 296, 22), 18: (54, 114, 21), 51: (40, 212, None), 24: (30, 47, 22), 4: (22, 312, 26), 31: (22, 204, None), 12: (19, 88, 23)}, {22: (81, 349, 25), 14: (64, 296, 22), 18: (54, 114, 21), 51: (40, 212, None), 24: (30, 47, 22), 4: (22, 312, 26), 31: (22, 204, None), 12: (19, 88, 23), 25: (17, 127, 18), 21: (16, 175, None), 11: (9, 315, 16), 19: (5, 273, None)}, {22: (81, 349, 25), 14: (64, 296, 22), 18: (54, 114, 21), 51: (40, 212, None), 24: (30, 47, 22), 4: (22, 312, 26), 31: (22, 204, None), 12: (19, 88, 23), 25: (17, 127, 18), 21: (16, 175, None), 11: (9, 315, 16), 19: (5, 273, None), 32: (5, 303, None), 15: (2, 73, None)}, {13: (65, 2, 50), 2: (61, 98, 47), 39: (60, 352, None), 5: (56, 183, 49)}, {13: (65, 2, 50), 2: (61, 98, 47), 39: (60, 352, None), 5: (56, 183, 49), 15: (35, 325, 50), 29: (32, 229, 49), 6: (25, 70, 44), 30: (16, 96, 38)}, {13: (65, 2, 50), 2: (61, 98, 47), 39: (60, 352, None), 5: (56, 183, 49), 15: (35, 325, 50), 29: (32, 229, 49), 6: (25, 70, 44), 30: (16, 96, 38), 19: (8, 22, 35), 7: (7, 122, None), 12: (6, 316, 49), 25: (3, 278, 36)}] gsv_sats_in_view = [[28, 1, 17, 8], [28, 1, 17, 8, 24, 11, 7, 20], [28, 1, 17, 8, 24, 11, 7, 20, 4, 27, 32, 26], [3, 4, 6, 13], [3, 4, 6, 13, 14, 16, 18, 19], [3, 4, 6, 13, 14, 16, 18, 19, 22, 24, 27], [22, 14, 18, 51], [22, 14, 18, 51, 24, 4, 31, 12], [22, 14, 18, 51, 24, 4, 31, 12, 25, 21, 11, 19], [22, 14, 18, 51, 24, 4, 31, 12, 25, 21, 11, 19, 32, 15], [13, 2, 39, 5], [13, 2, 39, 5, 15, 29, 6, 30], [13, 2, 39, 5, 15, 29, 6, 30, 19, 7, 12, 25]] test_GLL = ['$GPGLL,3711.0942,N,08671.4472,W,000812.000,A,A*46\n', '$GPGLL,4916.45,N,12311.12,W,225444,A,*1D\n', '$GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D\n', '$GPGLL,0000.0000,N,00000.0000,E,235947.000,V*2D\n'] gll_parsed_string = [['GPGLL', '3711.0942', 'N', '08671.4472', 'W', '000812.000', 'A', 'A', '46'], ['GPGLL', '4916.45', 'N', '12311.12', 'W', '225444', 'A', '', '1D'], ['GPGLL', '4250.5589', 'S', '14718.5084', 'E', '092204.999', 'A', '2D'], ['GPGLL', '0000.0000', 'N', '00000.0000', 'E', '235947.000', 'V', '2D']] gll_crc_values = [0x46, 0x1d, 0x2d, 0x2d] gll_longitude = [[86, 71.4472, 'W'], [123, 11.12, 'W'], [147, 18.5084, 'E'], [0, 0.0, 'W']] gll_latitude = [[37, 11.0942, 'N'], [49, 16.45, 'N'], [42, 50.5589, 'S'], [0, 0.0, 'N']] gll_timestamp = [[0, 8, 12.0], [22, 54, 44.0], [9, 22, 4.999], [23, 59, 47.0]] gll_valid = [True, True, True, False] def test_rmc_sentences(): my_gps = MicropyGPS() sentence = '' print('') for sentence_count, RMC_sentence in enumerate(test_RMC): for y in RMC_sentence: sentence = my_gps.update(y) if sentence: assert sentence == "GPRMC" print('Parsed a', sentence, 'Sentence') assert my_gps.gps_segments == rmc_parsed_strings[sentence_count] print('Parsed Strings:', my_gps.gps_segments) assert my_gps.crc_xor == rmc_crc_values[sentence_count] print('Sentence CRC Value:', hex(my_gps.crc_xor)) assert my_gps.longitude == rmc_longitude[sentence_count] print('Longitude:', my_gps.longitude) assert my_gps.latitude == rmc_latitude[sentence_count] print('Latitude', my_gps.latitude) assert my_gps.timestamp == rmc_utc[sentence_count] print('UTC Timestamp:', my_gps.timestamp) assert my_gps.speed == rmc_speed[sentence_count] print('Speed:', my_gps.speed) assert my_gps.date == rmc_date[sentence_count] print('Date Stamp:', my_gps.date) assert my_gps.course == rmc_course[sentence_count] print('Course', my_gps.course) assert my_gps.valid print('Data is Valid:', my_gps.valid) assert my_gps.compass_direction() == rmc_compass[sentence_count] print('Compass Direction:', my_gps.compass_direction()) assert my_gps.clean_sentences == len(test_RMC) assert my_gps.parsed_sentences == len(test_RMC) assert my_gps.crc_fails == 0 def test_vtg_sentences(): my_gps = MicropyGPS() sentence = '' print('') for VTG_sentence in test_VTG: for y in VTG_sentence: sentence = my_gps.update(y) if sentence: assert sentence == "GPVTG" print('Parsed a', sentence, 'Sentence') assert my_gps.gps_segments == ['GPVTG', '232.9', 'T', '', 'M', '002.3', 'N', '004.3', 'K', 'A', '01'] print('Parsed Strings', my_gps.gps_segments) assert my_gps.crc_xor == 0x1 print('Sentence CRC Value:', hex(my_gps.crc_xor)) assert my_gps.speed == (2.3, 2.6473, 4.2596) print('Speed:', my_gps.speed) assert my_gps.course == 232.9 print('Course', my_gps.course) assert my_gps.compass_direction() == 'SW' print('Compass Direction:', my_gps.compass_direction()) assert my_gps.clean_sentences == len(test_VTG) assert my_gps.parsed_sentences == len(test_VTG) assert my_gps.crc_fails == 0 def test_gga_sentences(): my_gps = MicropyGPS() sentence = '' print('') for sentence_count, GGA_sentence in enumerate(test_GGA): for y in GGA_sentence: sentence = my_gps.update(y) if sentence: assert sentence == "GPGGA" print('Parsed a', sentence, 'Sentence') assert my_gps.gps_segments == gga_parsed_strings[sentence_count] print('Parsed Strings', my_gps.gps_segments) assert my_gps.crc_xor == gga_crc_xors[sentence_count] print('Sentence CRC Value:', hex(my_gps.crc_xor)) assert my_gps.longitude == gga_longitudes[sentence_count] print('Longitude', my_gps.longitude) assert my_gps.latitude == gga_latitudes[sentence_count] print('Latitude', my_gps.latitude) assert my_gps.timestamp == gga_timestamps[sentence_count] print('UTC Timestamp:', my_gps.timestamp) assert my_gps.fix_stat == gga_fixes[sentence_count] print('Fix Status:', my_gps.fix_stat) assert my_gps.altitude == gga_altitudes[sentence_count] print('Altitude:', my_gps.altitude) assert my_gps.geoid_height == gga_geoid_heights[sentence_count] print('Height Above Geoid:', my_gps.geoid_height) assert my_gps.hdop == gga_hdops[sentence_count] print('Horizontal Dilution of Precision:', my_gps.hdop) assert my_gps.satellites_in_use == gga_satellites_in_uses[sentence_count] print('Satellites in Use by Receiver:', my_gps.satellites_in_use) assert my_gps.clean_sentences == len(test_GGA) assert my_gps.parsed_sentences == len(test_GGA) assert my_gps.crc_fails == 0 def test_gsa_sentences(): my_gps = MicropyGPS() sentence = '' print('') for sentence_count, GSA_sentence in enumerate(test_GSA): for y in GSA_sentence: sentence = my_gps.update(y) if sentence: assert sentence == "GPGSA" print('Parsed a', sentence, 'Sentence') assert my_gps.gps_segments == gsa_parsed_strings[sentence_count] print('Parsed Strings', my_gps.gps_segments) assert my_gps.crc_xor == gsa_crc_values[sentence_count] print('Sentence CRC Value:', hex(my_gps.crc_xor)) assert my_gps.satellites_used == gsa_sats_used[sentence_count] print('Satellites Used', my_gps.satellites_used) assert my_gps.fix_type == 3 print('Fix Type Code:', my_gps.fix_type) assert my_gps.hdop == gsa_hdop[sentence_count] print('Horizontal Dilution of Precision:', my_gps.hdop) assert my_gps.vdop == gsa_vdop[sentence_count] print('Vertical Dilution of Precision:', my_gps.vdop) assert my_gps.pdop == gsa_pdop[sentence_count] print('Position Dilution of Precision:', my_gps.pdop) assert my_gps.clean_sentences == len(test_GSA) assert my_gps.parsed_sentences == len(test_GSA) assert my_gps.crc_fails == 0 def test_gsv_sentences(): my_gps = MicropyGPS() sentence = '' print('') for sentence_count, GSV_sentence in enumerate(test_GSV): for y in GSV_sentence: sentence = my_gps.update(y) if sentence: assert sentence == "GPGSV" print('Parsed a', sentence, 'Sentence') assert my_gps.gps_segments == gsv_parsed_string[sentence_count] print('Parsed Strings', my_gps.gps_segments) assert my_gps.crc_xor == gsv_crc_values[sentence_count] print('Sentence CRC Value:', hex(my_gps.crc_xor)) assert my_gps.last_sv_sentence == gsv_sv_setence[sentence_count] print('SV Sentences Parsed', my_gps.last_sv_sentence) assert my_gps.total_sv_sentences == gsv_total_sentence[sentence_count] print('SV Sentences in Total', my_gps.total_sv_sentences) assert my_gps.satellites_in_view == gsv_num_sats_in_view[sentence_count] print('# of Satellites in View:', my_gps.satellites_in_view) assert my_gps.satellite_data_updated() == gsv_data_valid[sentence_count] data_valid = my_gps.satellite_data_updated() print('Is Satellite Data Valid?:', data_valid) if data_valid: print('Complete Satellite Data:', my_gps.satellite_data) print('Complete Satellites Visible:', my_gps.satellites_visible()) else: print('Current Satellite Data:', my_gps.satellite_data) print('Current Satellites Visible:', my_gps.satellites_visible()) assert my_gps.satellite_data == gsv_sat_data[sentence_count] assert my_gps.satellites_visible() == gsv_sats_in_view[sentence_count] assert my_gps.clean_sentences == len(test_GSV) assert my_gps.parsed_sentences == len(test_GSV) assert my_gps.crc_fails == 0 def test_gll_sentences(): my_gps = MicropyGPS() sentence = '' print('') for sentence_count, GLL_sentence in enumerate(test_GLL): for y in GLL_sentence: sentence = my_gps.update(y) if sentence: assert sentence == "GPGLL" print('Parsed a', sentence, 'Sentence') assert my_gps.gps_segments == gll_parsed_string[sentence_count] print('Parsed Strings', my_gps.gps_segments) assert my_gps.crc_xor == gll_crc_values[sentence_count] print('Sentence CRC Value:', hex(my_gps.crc_xor)) assert my_gps.longitude == gll_longitude[sentence_count] print('Longitude:', my_gps.longitude) assert my_gps.latitude == gll_latitude[sentence_count] print('Latitude', my_gps.latitude) assert my_gps.timestamp == gll_timestamp[sentence_count] print('UTC Timestamp:', my_gps.timestamp) assert my_gps.valid == gll_valid[sentence_count] print('Data is Valid:', my_gps.valid) assert my_gps.clean_sentences == len(test_GLL) assert my_gps.parsed_sentences == len(test_GLL) assert my_gps.crc_fails == 0 def test_logging(): my_gps = MicropyGPS() assert my_gps.start_logging('test.txt', mode="new") assert my_gps.write_log('micropyGPS test log\n') for RMC_sentence in test_RMC: for y in RMC_sentence: my_gps.update(y) assert my_gps.stop_logging() with open('test.txt', 'rb') as log_file: log_hash = hashlib.md5() log_hash.update(log_file.read()) assert log_hash.digest() == b'\x33\xa7\x5e\xae\xeb\x8d\xf8\xe8\xad\x5e\x54\xa2\xfd\x6a\x11\xa3' assert my_gps.start_logging('test.txt', mode="append") for GSV_sentence in test_GSV: for y in GSV_sentence: my_gps.update(y) assert my_gps.stop_logging() with open('test.txt', 'rb') as log_file: log_hash = hashlib.md5() log_hash.update(log_file.read()) assert log_hash.digest() == b'\xa4\x16\x79\xe1\xf9\x30\x0e\xd9\x73\xc8\x43\xc4\xa4\x0f\xe4\x3b' def test_pretty_print(): my_gps = MicropyGPS() for RMC_sentence in test_RMC[5]: for y in RMC_sentence: my_gps.update(y) for GGA_sentence in test_GGA[2]: for y in GGA_sentence: my_gps.update(y) for VTG_sentence in test_VTG: for y in VTG_sentence: my_gps.update(y) print('') assert my_gps.latitude_string() == "37° 49.1802' N" print('Latitude:', my_gps.latitude_string()) assert my_gps.longitude_string() == "83° 38.7865' W" print('Longitude:', my_gps.longitude_string()) assert my_gps.speed_string('kph') == '4.2596 km/h' print('Speed:', my_gps.speed_string('kph'), 'or', my_gps.speed_string('mph'), 'or', my_gps.speed_string('knot')) assert my_gps.speed_string('mph') == '2.6473 mph' assert my_gps.speed_string('knot') == '2.3 knots' assert my_gps.date_string('long') == 'May 28th, 2011' print('Date (Long Format):', my_gps.date_string('long')) assert my_gps.date_string('s_dmy') == '28/05/11' print('Date (Short D/M/Y Format):', my_gps.date_string('s_dmy')) assert my_gps.date_string('s_mdy') == '05/28/11' print('Date (Short M/D/Y Format):', my_gps.date_string('s_mdy')) def test_coordinate_representations(): my_gps = MicropyGPS(location_formatting='dd') for RMC_sentence in test_RMC[5]: for y in RMC_sentence: my_gps.update(y) print('') assert my_gps.latitude_string() == '53.361336666666666° N' print('Decimal Degrees Latitude:', my_gps.latitude_string()) assert my_gps.longitude_string() == '6.5056183333333335° W' print('Decimal Degrees Longitude:', my_gps.longitude_string()) my_gps.coord_format = 'dms' print('Degrees Minutes Seconds Latitude:', my_gps.latitude_string()) assert my_gps.latitude_string() == """53° 21' 41" N""" assert my_gps.longitude_string() == """6° 30' 20" W""" print('Degrees Minutes Seconds Longitude:', my_gps.longitude_string())