Skip to content

Commit a09e0d6

Browse files
committed
Complete test coverage
1 parent 1e3e0cd commit a09e0d6

File tree

3 files changed

+43
-5
lines changed

3 files changed

+43
-5
lines changed

tests/test_nested_loader.py

+23
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,26 @@ def test_nested_load_item(self):
9898
self.assertEqual(item['name'], ['marta'])
9999
self.assertEqual(item['url'], ['http://www.scrapy.org'])
100100
self.assertEqual(item['image'], ['/images/logo.png'])
101+
102+
def test_nested_from_item(self):
103+
"""Check that everything works as usual when the nested selector has a
104+
parent item"""
105+
item = {'foo': 'bar'}
106+
loader = ItemLoader(selector=self.selector, item=item)
107+
nl1 = loader.nested_xpath('//footer')
108+
nl2 = nl1.nested_xpath('img')
109+
110+
loader.add_xpath('name', '//header/div/text()')
111+
nl1.add_xpath('url', 'a/@href')
112+
nl2.add_xpath('image', '@src')
113+
114+
item = loader.load_item()
115+
116+
assert item is loader.item
117+
assert item is nl1.item
118+
assert item is nl2.item
119+
120+
self.assertEqual(item['foo'], ['bar'])
121+
self.assertEqual(item['name'], ['marta'])
122+
self.assertEqual(item['url'], ['http://www.scrapy.org'])
123+
self.assertEqual(item['image'], ['/images/logo.png'])

tests/test_output_processor.py

+19-4
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,13 @@
44
from itemloaders.processors import Identity, Compose, TakeFirst
55

66

7-
class TestOutputProcessorDict(unittest.TestCase):
8-
def test_output_processor(self):
7+
def take_first(value):
8+
return value[0]
9+
10+
11+
class TestOutputProcessor(unittest.TestCase):
12+
13+
def test_item_class(self):
914

1015
class TempDict(dict):
1116
def __init__(self, *args, **kwargs):
@@ -22,9 +27,8 @@ class TempLoader(ItemLoader):
2227
self.assertIsInstance(item, TempDict)
2328
self.assertEqual(dict(item), {'temp': 0.3})
2429

30+
def test_item_object(self):
2531

26-
class TestOutputProcessorItem(unittest.TestCase):
27-
def test_output_processor(self):
2832
class TempLoader(ItemLoader):
2933
default_input_processor = Identity()
3034
default_output_processor = Compose(TakeFirst())
@@ -35,3 +39,14 @@ class TempLoader(ItemLoader):
3539
item = loader.load_item()
3640
self.assertIsInstance(item, dict)
3741
self.assertEqual(dict(item), {'temp': 0.3})
42+
43+
def test_unbound_processor(self):
44+
"""Ensure that a processor not taking a `self` parameter does not break
45+
anything"""
46+
47+
class TempLoader(ItemLoader):
48+
default_output_processor = take_first
49+
50+
loader = TempLoader()
51+
loader.add_value('foo', 'bar')
52+
self.assertEqual(loader.load_item(), {'foo': 'bar'})

tox.ini

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ deps =
88

99
commands =
1010
py.test \
11-
--cov-report=term --cov-report=html --cov-report= --cov=itemloaders \
11+
--cov-report=term --cov-report=html --cov-report=term-missing --cov=itemloaders \
1212
--doctest-modules \
1313
{posargs:itemloaders tests}
1414

0 commit comments

Comments
 (0)