1
0
mirror of https://github.com/arsenetar/dupeguru.git synced 2024-11-18 04:59:03 +00:00
dupeguru/core/tests/ignore_test.py

184 lines
4.3 KiB
Python
Raw Normal View History

2016-05-29 19:02:39 +00:00
# Copyright 2016 Hardcoded Software (http://www.hardcoded.net)
#
# This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
# which should be included with this package. The terms are also available at
# http://www.gnu.org/licenses/gpl-3.0.html
import io
from xml.etree import ElementTree as ET
2012-03-14 16:47:21 +00:00
from pytest import raises
from hscommon.testutil import eq_
2016-05-29 19:02:39 +00:00
from ..ignore import IgnoreList
def test_empty():
il = IgnoreList()
2016-05-29 19:02:39 +00:00
eq_(0, len(il))
assert not il.AreIgnored("foo", "bar")
def test_simple():
il = IgnoreList()
il.Ignore("foo", "bar")
assert il.AreIgnored("foo", "bar")
assert il.AreIgnored("bar", "foo")
assert not il.AreIgnored("foo", "bleh")
assert not il.AreIgnored("bleh", "bar")
2016-05-29 19:02:39 +00:00
eq_(1, len(il))
def test_multiple():
il = IgnoreList()
il.Ignore("foo", "bar")
il.Ignore("foo", "bleh")
il.Ignore("bleh", "bar")
il.Ignore("aybabtu", "bleh")
assert il.AreIgnored("foo", "bar")
assert il.AreIgnored("bar", "foo")
assert il.AreIgnored("foo", "bleh")
assert il.AreIgnored("bleh", "bar")
assert not il.AreIgnored("aybabtu", "bar")
2016-05-29 19:02:39 +00:00
eq_(4, len(il))
def test_clear():
il = IgnoreList()
il.Ignore("foo", "bar")
il.Clear()
assert not il.AreIgnored("foo", "bar")
assert not il.AreIgnored("bar", "foo")
2016-05-29 19:02:39 +00:00
eq_(0, len(il))
def test_add_same_twice():
il = IgnoreList()
il.Ignore("foo", "bar")
il.Ignore("bar", "foo")
2016-05-29 19:02:39 +00:00
eq_(1, len(il))
def test_save_to_xml():
il = IgnoreList()
il.Ignore("foo", "bar")
il.Ignore("foo", "bleh")
il.Ignore("bleh", "bar")
f = io.BytesIO()
il.save_to_xml(f)
f.seek(0)
doc = ET.parse(f)
root = doc.getroot()
eq_(root.tag, "ignore_list")
eq_(len(root), 2)
eq_(len([c for c in root if c.tag == "file"]), 2)
f1, f2 = root[:]
subchildren = [c for c in f1 if c.tag == "file"] + [
c for c in f2 if c.tag == "file"
]
eq_(len(subchildren), 3)
def test_SaveThenLoad():
il = IgnoreList()
il.Ignore("foo", "bar")
il.Ignore("foo", "bleh")
il.Ignore("bleh", "bar")
il.Ignore("\u00e9", "bar")
f = io.BytesIO()
il.save_to_xml(f)
f.seek(0)
il = IgnoreList()
il.load_from_xml(f)
2016-05-29 19:02:39 +00:00
eq_(4, len(il))
assert il.AreIgnored("\u00e9", "bar")
2016-05-29 19:02:39 +00:00
def test_LoadXML_with_empty_file_tags():
f = io.BytesIO()
f.write(
b'<?xml version="1.0" encoding="utf-8"?><ignore_list><file><file/></file></ignore_list>'
)
f.seek(0)
il = IgnoreList()
il.load_from_xml(f)
2016-05-29 19:02:39 +00:00
eq_(0, len(il))
def test_AreIgnore_works_when_a_child_is_a_key_somewhere_else():
il = IgnoreList()
il.Ignore("foo", "bar")
il.Ignore("bar", "baz")
assert il.AreIgnored("bar", "foo")
def test_no_dupes_when_a_child_is_a_key_somewhere_else():
il = IgnoreList()
il.Ignore("foo", "bar")
il.Ignore("bar", "baz")
il.Ignore("bar", "foo")
2016-05-29 19:02:39 +00:00
eq_(2, len(il))
def test_iterate():
# It must be possible to iterate through ignore list
il = IgnoreList()
expected = [("foo", "bar"), ("bar", "baz"), ("foo", "baz")]
for i in expected:
2016-05-29 19:02:39 +00:00
il.Ignore(i[0], i[1])
for i in il:
expected.remove(i) # No exception should be raised
assert not expected # expected should be empty
def test_filter():
il = IgnoreList()
il.Ignore("foo", "bar")
il.Ignore("bar", "baz")
il.Ignore("foo", "baz")
il.Filter(lambda f, s: f == "bar")
2016-05-29 19:02:39 +00:00
eq_(1, len(il))
assert not il.AreIgnored("foo", "bar")
assert il.AreIgnored("bar", "baz")
def test_save_with_non_ascii_items():
il = IgnoreList()
il.Ignore("\xac", "\xbf")
f = io.BytesIO()
try:
il.save_to_xml(f)
except Exception as e:
raise AssertionError(str(e))
def test_len():
il = IgnoreList()
2016-05-29 19:02:39 +00:00
eq_(0, len(il))
il.Ignore("foo", "bar")
2016-05-29 19:02:39 +00:00
eq_(1, len(il))
def test_nonzero():
il = IgnoreList()
assert not il
il.Ignore("foo", "bar")
assert il
2012-03-14 16:47:21 +00:00
2012-03-14 16:47:21 +00:00
def test_remove():
il = IgnoreList()
il.Ignore("foo", "bar")
il.Ignore("foo", "baz")
il.remove("bar", "foo")
2012-03-14 16:47:21 +00:00
eq_(len(il), 1)
assert not il.AreIgnored("foo", "bar")
2012-03-14 16:47:21 +00:00
def test_remove_non_existant():
il = IgnoreList()
il.Ignore("foo", "bar")
il.Ignore("foo", "baz")
2012-03-14 16:47:21 +00:00
with raises(ValueError):
il.remove("foo", "bleh")