python-ogn-client/tests/parser/test_parse.py

84 wiersze
3.2 KiB
Python
Czysty Zwykły widok Historia

import unittest
import unittest.mock as mock
import os
from datetime import datetime
from time import sleep
from ogn.parser.parse import parse_aprs, parse_ogn_beacon
from ogn.parser.exceptions import AprsParseError
class TestStringMethods(unittest.TestCase):
2017-09-28 06:43:50 +00:00
def parse_valid_beacon_data_file(self, filename, beacon_type):
with open(os.path.dirname(__file__) + '/valid_beacon_data/' + filename) as f:
for line in f:
if not line[0] == '#':
aprs = parse_aprs(line, datetime(2015, 4, 10, 17, 0))
self.assertFalse(aprs is None)
2017-05-07 10:56:06 +00:00
if aprs['comment']:
2017-09-28 06:43:50 +00:00
message = parse_ogn_beacon(aprs['comment'], dstcall=aprs['dstcall'])
self.assertEqual(message['beacon_type'], beacon_type)
2017-09-28 06:43:50 +00:00
def test_aprs_aircraft_beacons(self):
self.parse_valid_beacon_data_file(filename='aprs_aircraft.txt', beacon_type='aircraft_beacon')
def test_aprs_receiver_beacons(self):
self.parse_valid_beacon_data_file(filename='aprs_receiver.txt', beacon_type='receiver_beacon')
def test_lt24_beacons(self):
2017-09-28 06:43:50 +00:00
self.parse_valid_beacon_data_file(filename='lt24.txt', beacon_type='lt24_beacon')
def test_naviter_beacons(self):
2017-09-28 06:43:50 +00:00
self.parse_valid_beacon_data_file(filename='naviter.txt', beacon_type='naviter_beacon')
def test_skylines_beacons(self):
2017-09-28 06:43:50 +00:00
self.parse_valid_beacon_data_file(filename='skylines.txt', beacon_type='skylines_beacon')
def test_spider_beacons(self):
2017-09-28 06:43:50 +00:00
self.parse_valid_beacon_data_file(filename='spider.txt', beacon_type='spider_beacon')
def test_spot_beacons(self):
2017-09-28 06:43:50 +00:00
self.parse_valid_beacon_data_file(filename='spot.txt', beacon_type='spot_beacon')
def test_fail_parse_aprs_none(self):
with self.assertRaises(TypeError):
parse_aprs(None)
def test_parse_ogn_none(self):
parse_ogn_beacon(None)
def test_fail_empty(self):
with self.assertRaises(AprsParseError):
parse_aprs("")
def test_fail_bad_string(self):
with self.assertRaises(AprsParseError):
parse_aprs("Lachens>APRS,TCPIwontbeavalidstring")
@mock.patch('ogn.parser.parse.createTimestamp')
def test_default_reference_date(self, createTimestamp_mock):
valid_aprs_string = "Lachens>APRS,TCPIP*,qAC,GLIDERN2:/165334h4344.70NI00639.19E&/A=005435 v0.2.1 CPU:0.3 RAM:1764.4/21"
parse_aprs(valid_aprs_string)
call_args_before = createTimestamp_mock.call_args
sleep(1)
parse_aprs(valid_aprs_string)
call_args_seconds_later = createTimestamp_mock.call_args
self.assertNotEqual(call_args_before, call_args_seconds_later)
def test_copy_constructor(self):
valid_aprs_string = "FLRDDA5BA>APRS,qAS,LFMX:/160829h4415.41N/00600.03E'342/049/A=005524 id0ADDA5BA -454fpm -1.1rot 8.8dB 0e +51.2kHz gps4x5"
aprs = parse_aprs(valid_aprs_string, reference_date=datetime(2015, 1, 1, 16, 8, 29))
aircraft_beacon = parse_ogn_beacon(aprs['comment'])
self.assertEqual(aprs['name'], 'FLRDDA5BA')
self.assertEqual(aircraft_beacon['address'], 'DDA5BA')
if __name__ == '__main__':
unittest.main()