From a0b59eeaf7a117c86a69735efac0f8d9ea8bb450 Mon Sep 17 00:00:00 2001 From: Rossen Georgiev Date: Sun, 22 Mar 2015 03:04:06 +0000 Subject: [PATCH] first part of tests for parsing submodule --- aprslib/IS.py | 2 +- aprslib/__init__.py | 2 +- aprslib/{parse.py => parsing.py} | 6 +-- tests/test_parse.py | 77 ++++++++++++++++++++++++++- tests/test_parse_comment_telemetry.py | 2 +- tests/test_parse_header.py | 4 +- 6 files changed, 84 insertions(+), 9 deletions(-) rename aprslib/{parse.py => parsing.py} (99%) diff --git a/aprslib/IS.py b/aprslib/IS.py index 8f99d62..63790e4 100644 --- a/aprslib/IS.py +++ b/aprslib/IS.py @@ -25,7 +25,7 @@ import logging import sys from . import __version__ -from .parse import parse +from .parsing import parse from .exceptions import ( GenericError, ConnectionDrop, diff --git a/aprslib/__init__.py b/aprslib/__init__.py index a181640..2b1f361 100644 --- a/aprslib/__init__.py +++ b/aprslib/__init__.py @@ -42,7 +42,7 @@ __author__ = "Rossen Georgiev" __all__ = ['IS', 'parse', 'passcode'] from .exceptions import * -from .parse import parse +from .parsing import parse from .passcode import passcode from .IS import IS diff --git a/aprslib/parse.py b/aprslib/parsing.py similarity index 99% rename from aprslib/parse.py rename to aprslib/parsing.py index 887aa82..c6d9669 100644 --- a/aprslib/parse.py +++ b/aprslib/parsing.py @@ -34,8 +34,8 @@ except ImportError: def detect(x): return {'confidence': 0.0, 'encoding': 'windows-1252'} -from .exceptions import (UnknownFormat, ParseError) -from . import base91 +from exceptions import (UnknownFormat, ParseError) +import base91 __all__ = ['parse'] @@ -99,7 +99,7 @@ def parse(packet): # typical packet format # # CALL1>CALL2,CALL3,CALL4:>longtext...... - # |--------header--------|-----body-------| + # |--------header---------|-----body------| # try: (head, body) = packet.split(':', 1) diff --git a/tests/test_parse.py b/tests/test_parse.py index 4987e28..d9fb871 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -1,8 +1,11 @@ # encoding: utf-8 import unittest +import mox -from aprslib.parse import parse +from aprslib import parse +from aprslib import parsing +from aprslib.exceptions import ParseError, UnknownFormat class ParseTestCase(unittest.TestCase): @@ -31,6 +34,78 @@ class ParseTestCase(unittest.TestCase): self.assertIsInstance(result['status'], unicode) self.assertEqual(result['status'], u"статус") + def test_empty_packet(self): + self.assertRaises(ParseError, parse, "") + + def test_no_body(self): + self.assertRaises(ParseError, parse, "A>B") + + def test_empty_body(self): + self.assertRaises(ParseError, parse, "A>B:") + + def test_parse_header_exception(self): + self.assertRaises(ParseError, parse, "A:asd") + + def test_empty_body_of_format_that_is_not_status(self): + self.assertRaises(ParseError, parse, "A>B:!") + + try: + parse("A>B:>") + except: + self.fail("empty status packed shouldn't raise exception") + + def test_unsupported_formats_raising(self): + with self.assertRaises(UnknownFormat): + for packet_type in '#$%)*,B:%saaa" % packet_type) + + +class ParseBranchesTestCase(unittest.TestCase): + def setUp(self): + self.m = mox.Mox() + + def tearDown(self): + self.m.UnsetStubs() + + def test_status_format_branch(self): + self.m.StubOutWithMock(parsing, "_parse_timestamp") + parsing._parse_timestamp(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(("test", {})) + self.m.ReplayAll() + + expected = { + 'status': 'test', + 'raw': u'A>B:>test', + 'via': '', + 'from': u'A', + 'to': u'B', + 'path': [], + 'format': 'status' + } + result = parse("A>B:>test") + + self.assertEqual(result, expected) + self.m.VerifyAll() + + def test_mice_format_branch(self): + self.m.StubOutWithMock(parsing, "_parse_mice") + parsing._parse_mice("B","test").AndReturn(('', {'format':''})) + parsing._parse_mice("D","test").AndReturn(('', {'format':''})) + self.m.ReplayAll() + + parse("A>B:`test") + parse("C>D:'test") + + self.m.VerifyAll() + + def test_message_format_branch(self): + self.m.StubOutWithMock(parsing, "_parse_message") + parsing._parse_message("test").AndReturn(('', {'format':''})) + self.m.ReplayAll() + + parse("A>B::test") + + self.m.VerifyAll() + if __name__ == '__main__': unittest.main() diff --git a/tests/test_parse_comment_telemetry.py b/tests/test_parse_comment_telemetry.py index d0c8f4b..1d40f23 100644 --- a/tests/test_parse_comment_telemetry.py +++ b/tests/test_parse_comment_telemetry.py @@ -1,6 +1,6 @@ import unittest -from aprslib.parse import _parse_comment_telemetry +from aprslib.parsing import _parse_comment_telemetry from aprslib import base91 from random import randint diff --git a/tests/test_parse_header.py b/tests/test_parse_header.py index ab61212..92b8126 100644 --- a/tests/test_parse_header.py +++ b/tests/test_parse_header.py @@ -2,8 +2,8 @@ import unittest import string from random import randint, randrange, sample -from aprslib.parse import _parse_header -from aprslib.parse import _validate_callsign +from aprslib.parsing import _parse_header +from aprslib.parsing import _validate_callsign from aprslib.exceptions import ParseError