Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: tests/test_filter_block.py

Issue 30053555: Issue 7471 - Add an API for working with blocks of filters (Closed) Base URL: https://hg.adblockplus.org/python-abp
Patch Set: Created May 8, 2019, 4:33 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « abp/filters/blocks.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/test_filter_block.py
===================================================================
new file mode 100644
--- /dev/null
+++ b/tests/test_filter_block.py
@@ -0,0 +1,70 @@
+# 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/>.
+
+from __future__ import unicode_literals
+
+import pytest
+
+from abp.filters import parse_line, SelectorType, FilterAction, ParseError
+from abp.filters.blocks import to_blocks, FilterBlock
+
+BLOCKS = """
+! Example block
+!:foo=bar
+!:baz=some_tricky?variable=with&funny=chars#and-stuff
+! Another comment
+||block.ing/filter$domain=foo.com|~bar.com
+white.list.ing#@#hiding.filter
+! Second block
+@@whateve.rs
+"""
+
+BLOCK_LINES = list(map(parse_line, BLOCKS.splitlines()))
+
+
+def test_to_blocks():
+ blocks = list(to_blocks(BLOCK_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\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_asdict():
+ blocks = list(to_blocks(BLOCK_LINES))
+ d = blocks[0]._asdict()
+ assert d['foo'] == 'bar'
+ assert d['baz'] == 'some_tricky?variable=with&funny=chars#and-stuff'
+ assert d['description'] == 'Example block\nAnother comment'
+ assert len(d['filters']) == 2
+ assert d['filters'][0]['selector']['type'] == SelectorType.URL_PATTERN
+ assert d['filters'][1]['action'] == FilterAction.SHOW
+
+
+@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):
+ FilterBlock([parse_line(line)], [])
« no previous file with comments | « abp/filters/blocks.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld