Mercurial > piecrust2
comparison tests/test_data_iterators.py @ 10:cd35d356ccce
Fix some bugs with iterators, add some unit tests.
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Sun, 17 Aug 2014 21:18:48 -0700 |
| parents | |
| children | 4379d8f8f831 |
comparison
equal
deleted
inserted
replaced
| 9:8f7ba2c95025 | 10:cd35d356ccce |
|---|---|
| 1 import mock | |
| 2 from piecrust.data.iterators import PageIterator | |
| 3 from piecrust.page import Page, PageConfiguration | |
| 4 | |
| 5 | |
| 6 def test_skip(): | |
| 7 it = PageIterator(range(12)) | |
| 8 it.skip(5) | |
| 9 assert it.total_count == 12 | |
| 10 assert len(it) == 7 | |
| 11 assert list(it) == list(range(5, 12)) | |
| 12 | |
| 13 | |
| 14 def test_limit(): | |
| 15 it = PageIterator(range(12)) | |
| 16 it.limit(4) | |
| 17 assert it.total_count == 12 | |
| 18 assert len(it) == 4 | |
| 19 assert list(it) == list(range(4)) | |
| 20 | |
| 21 | |
| 22 def test_slice(): | |
| 23 it = PageIterator(range(12)) | |
| 24 it.slice(3, 4) | |
| 25 assert it.total_count == 12 | |
| 26 assert len(it) == 4 | |
| 27 assert list(it) == list(range(3, 7)) | |
| 28 | |
| 29 | |
| 30 def test_natural_sort(): | |
| 31 it = PageIterator([4, 3, 1, 2, 0]) | |
| 32 it.sort() | |
| 33 assert it.total_count == 5 | |
| 34 assert len(it) == 5 | |
| 35 assert list(it) == list(range(5)) | |
| 36 | |
| 37 | |
| 38 def test_natural_sort_reversed(): | |
| 39 it = PageIterator([4, 3, 1, 2, 0]) | |
| 40 it.sort(reverse=True) | |
| 41 assert it.total_count == 5 | |
| 42 assert len(it) == 5 | |
| 43 assert list(it) == list(reversed(range(5))) | |
| 44 | |
| 45 | |
| 46 class TestItem(object): | |
| 47 def __init__(self, value): | |
| 48 self.name = str(value) | |
| 49 self.config = {'foo': value} # `config` makes it look like a `Page`. | |
| 50 | |
| 51 def __eq__(self, other): | |
| 52 return other.name == self.name | |
| 53 | |
| 54 | |
| 55 def test_setting_sort(): | |
| 56 it = PageIterator([TestItem(v) for v in [4, 3, 1, 2, 0]]) | |
| 57 it.sort('foo') | |
| 58 assert it.total_count == 5 | |
| 59 assert len(it) == 5 | |
| 60 assert list(it) == [TestItem(v) for v in range(5)] | |
| 61 | |
| 62 | |
| 63 def test_setting_sort_reversed(): | |
| 64 it = PageIterator([TestItem(v) for v in [4, 3, 1, 2, 0]]) | |
| 65 it.sort('foo', reverse=True) | |
| 66 assert it.total_count == 5 | |
| 67 assert len(it) == 5 | |
| 68 assert list(it) == [TestItem(v) for v in reversed(range(5))] | |
| 69 | |
| 70 | |
| 71 def test_filter(): | |
| 72 page = mock.MagicMock(spec=Page) | |
| 73 page.config = PageConfiguration() | |
| 74 page.config.set('threes', {'is_foo': 3}) | |
| 75 it = PageIterator([TestItem(v) for v in [3, 2, 3, 1, 4, 3]], page) | |
| 76 it.filter('threes') | |
| 77 assert it.total_count == 3 | |
| 78 assert len(it) == 3 | |
| 79 assert list(it) == [TestItem(3), TestItem(3), TestItem(3)] | |
| 80 | |
| 81 | |
| 82 def test_magic_filter(): | |
| 83 it = PageIterator([TestItem(v) for v in [3, 2, 3, 1, 4, 3]]) | |
| 84 it.is_foo(3) | |
| 85 assert it.total_count == 3 | |
| 86 assert len(it) == 3 | |
| 87 assert list(it) == [TestItem(3), TestItem(3), TestItem(3)] | |
| 88 |
