Index: tests/test_parser.py |
=================================================================== |
--- a/tests/test_parser.py |
+++ b/tests/test_parser.py |
@@ -153,31 +153,63 @@ |
assert line.target == 'foo:bar/baz.txt' |
def test_parse_bad_instruction(): |
with pytest.raises(ParseError): |
parse_line('%foo bar%') |
-def test_parse_bad_header(): |
+def test_parse_start(): |
+ # Header-line lines are headers. |
+ assert parse_line('[Adblock Plus 1.1]', mode='start').type == 'header' |
+ # But space is not allowed in headers. |
+ assert parse_line(' [Adblock Plus 1.1]', mode='start').type == 'filter' |
+ assert parse_line('[Adblock Plus 1.1] ', mode='start').type == 'filter' |
+ |
with pytest.raises(ParseError): |
- parse_line('[Adblock 1.1]') |
+ # Invalid headers cause exceptions. |
+ parse_line('[Adblock 1.1]', mode='start') |
+ |
+ # Metadata-like lines are metadata. |
+ assert parse_line('! Foo: bar', mode='metadata').type == 'metadata' |
+ |
+ |
+def test_parse_metadata(): |
+ # Header-like lines are just filters. |
+ assert parse_line('[Adblock 1.1]', mode='metadata').type == 'filter' |
+ # Metadata-like lines are metadata. |
+ assert parse_line('! Foo: bar', mode='metadata').type == 'metadata' |
+ |
+ |
+def test_parse_body(): |
+ # Header-like lines are just filters. |
+ assert parse_line('[Adblock 1.1]', mode='body').type == 'filter' |
+ # Metadata-like lines are comments. |
+ assert parse_line('! Foo: bar', mode='body').type == 'comment' |
+ # But there's an exception for the checksum. |
+ assert parse_line('! Checksum: 42', mode='body').type == 'metadata' |
+ |
+ |
+def test_parse_invalid_mode(): |
+ with pytest.raises(ValueError): |
+ parse_line('', mode='nonsense') |
def test_parse_filterlist(): |
result = parse_filterlist(['[Adblock Plus 1.1]', |
- '! Last modified: 26 Jul 2018 02:10 UTC', |
+ ' ! Last modified: 26 Jul 2018 02:10 UTC ', |
'! Homepage : http://aaa.com/b', |
'||example.com^', |
'! Checksum: OaopkIiiAl77sSHk/VAWDA', |
'! Note: bla bla']) |
assert next(result) == Header('Adblock Plus 1.1') |
- assert next(result) == Metadata('Last modified', '26 Jul 2018 02:10 UTC') |
+ # Check that trailing space is not stripped (like in ABP). |
+ assert next(result) == Metadata('Last modified', '26 Jul 2018 02:10 UTC ') |
assert next(result) == Metadata('Homepage', 'http://aaa.com/b') |
assert next(result).type == 'filter' |
assert next(result) == Metadata('Checksum', 'OaopkIiiAl77sSHk/VAWDA') |
assert next(result).type == 'comment' |
with pytest.raises(StopIteration): |
next(result) |