Index: tests/test_filters_blocks.py |
=================================================================== |
new file mode 100644 |
--- /dev/null |
+++ b/tests/test_filters_blocks.py |
@@ -0,0 +1,72 @@ |
+# This file is part of Adblock Plus <https://adblockplus.org/>, |
+# Copyright (C) 2006-present eyeo GmbH |
+# |
+# Adblock Plus is free software: you can redistribute it and/or modify |
+# it under the terms of the GNU General Public License version 3 as |
+# published by the Free Software Foundation. |
+# |
+# Adblock Plus is distributed in the hope that it will be useful, |
+# but WITHOUT ANY WARRANTY; without even the implied warranty of |
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+# GNU General Public License for more details. |
+# |
+# You should have received a copy of the GNU General Public License |
+# along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
+ |
+"""Tests for abp.filters.blocks.""" |
+ |
+from __future__ import unicode_literals |
+ |
+import json |
+import os |
+ |
+import pytest |
+ |
+from abp.filters import (parse_line, parse_filterlist, SelectorType, |
+ FilterAction, ParseError) |
+from abp.filters.blocks import to_blocks, FiltersBlock |
+ |
+DATA_PATH = os.path.join(os.path.dirname(__file__), 'data') |
+ |
+ |
+@pytest.fixture() |
+def fl_lines(): |
+ with open(os.path.join(DATA_PATH, 'filterlist.txt')) as f: |
+ return list(parse_filterlist(f)) |
+ |
+ |
+@pytest.fixture() |
+def expected_blocks(): |
+ with open(os.path.join(DATA_PATH, 'expected_blocks.json')) as f: |
+ return json.load(f) |
+ |
+ |
+def test_to_blocks(fl_lines): |
+ blocks = list(to_blocks(fl_lines)) |
+ assert len(blocks) == 2 |
+ block = blocks[0] |
+ assert block.foo == 'bar' |
+ assert block.baz == 'some_tricky?variable=with&funny=chars#and-stuff' |
+ assert block.description == 'Example block 1\nAnother comment' |
+ # Don't test the filters thouroughly: filter parsing is tested elsewhere. |
+ assert len(block.filters) == 2 |
+ assert block.filters[0].selector['type'] == SelectorType.URL_PATTERN |
+ assert block.filters[1].action == FilterAction.SHOW |
+ |
+ |
+def test_to_dict(fl_lines, expected_blocks): |
+ blocks = [b.to_dict() for b in to_blocks(fl_lines)] |
+ print(json.dumps(blocks, indent=2)) |
+ assert blocks == expected_blocks |
+ |
+ |
+@pytest.mark.parametrize('line', [ |
+ '!:__dict__=foo', |
+ '!:_var=bar', |
+ '!:filters=stuff', |
+ '!:description=he he', |
+]) |
+def test_illegal_vars(line): |
+ """Check that illegal variable names are not allowed.""" |
+ with pytest.raises(ParseError): |
+ FiltersBlock([parse_line(line)], []) |