From fd9f801caba03823be5a2c662228d3ab29356a39 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 9 May 2014 22:11:33 +0200 Subject: [PATCH] Define some magic methods for usertypes --- qutebrowser/test/utils/usertypes/test_fakedict.py | 3 +++ .../test/utils/usertypes/test_neighborlist.py | 13 +++++++++++++ qutebrowser/utils/usertypes.py | 15 ++++++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/qutebrowser/test/utils/usertypes/test_fakedict.py b/qutebrowser/test/utils/usertypes/test_fakedict.py index 6f9e432de..191779281 100644 --- a/qutebrowser/test/utils/usertypes/test_fakedict.py +++ b/qutebrowser/test/utils/usertypes/test_fakedict.py @@ -40,6 +40,9 @@ class FakeDictTests(TestCase): with self.assertRaises(TypeError): self.fd["eggs"] = "bar" + def test_repr(self): + self.assertEqual(repr(self.fd), "FakeDict('foo')") + if __name__ == '__main__': unittest.main() diff --git a/qutebrowser/test/utils/usertypes/test_neighborlist.py b/qutebrowser/test/utils/usertypes/test_neighborlist.py index a95735eea..dc4894ed8 100644 --- a/qutebrowser/test/utils/usertypes/test_neighborlist.py +++ b/qutebrowser/test/utils/usertypes/test_neighborlist.py @@ -37,6 +37,19 @@ class InitTests(TestCase): nl = NeighborList([1, 2, 3]) self.assertEqual(nl.items, [1, 2, 3]) + def test_len(self): + nl = NeighborList([1, 2, 3]) + self.assertEqual(len(nl), 3) + + def test_repr(self): + nl = NeighborList([1, 2, 3]) + self.assertEqual(repr(nl), 'NeighborList([1, 2, 3])') + + def test_contains(self): + nl = NeighborList([1, 2, 3]) + self.assertIn(2, nl) + self.assertNotIn(4, nl) + class DefaultTests(TestCase): diff --git a/qutebrowser/utils/usertypes.py b/qutebrowser/utils/usertypes.py index 7e524a5a6..107813807 100644 --- a/qutebrowser/utils/usertypes.py +++ b/qutebrowser/utils/usertypes.py @@ -23,6 +23,7 @@ Module attributes: import operator import logging +import collections.abc _UNSET = object() @@ -55,7 +56,7 @@ class EnumBase(type): return cls._mapping[key] -class NeighborList: +class NeighborList(collections.abc.Sequence): """A list of items which saves it current position. @@ -94,6 +95,15 @@ class NeighborList: self._mode = mode self.fuzzyval = None + def __getitem__(self, key): + return self._items[key] + + def __len__(self): + return len(self._items) + + def __repr__(self): + return '{}({})'.format(self.__class__.__name__, self._items) + def _snap_in(self, offset): """Set the current item to the closest item to self.fuzzyval. @@ -208,3 +218,6 @@ class FakeDict: def __getitem__(self, _key): return self._val + + def __repr__(self): + return "FakeDict('{}')".format(self._val)