diff --git a/scrapy/trunk/scrapy/tests/test_xpath.py b/scrapy/trunk/scrapy/tests/test_xpath.py index 99c06119b..4a937a8ec 100644 --- a/scrapy/trunk/scrapy/tests/test_xpath.py +++ b/scrapy/trunk/scrapy/tests/test_xpath.py @@ -4,7 +4,7 @@ import unittest import libxml2 from scrapy.http import Response -from scrapy.xpath.selector import XmlXPathSelector, HtmlXPathSelector +from scrapy.xpath.selector import XmlXPathSelector, HtmlXPathSelector, XPathSelectorList class XPathTestCase(unittest.TestCase): @@ -220,6 +220,15 @@ class XPathTestCase(unittest.TestCase): u'\n ', u'\n pff\n']) + def test_selectorlist_add(self): + '''Adding XPathSelectorLists should return another XPathSelectorList''' + hxs = HtmlXPathSelector(text='') + xlist1 = XPathSelectorList([hxs.x('/'), hxs.x('//tag1')]) + xlist2 = XPathSelectorList([hxs.x('/html')]) + xlist3 = [1, 2, 3] + self.assertTrue(isinstance(xlist1 + xlist2, XPathSelectorList)) + self.assertTrue(isinstance(xlist2 + xlist3, list)) + if __name__ == "__main__": unittest.main() diff --git a/scrapy/trunk/scrapy/xpath/selector.py b/scrapy/trunk/scrapy/xpath/selector.py index f614f9f5f..f83db70b0 100644 --- a/scrapy/trunk/scrapy/xpath/selector.py +++ b/scrapy/trunk/scrapy/xpath/selector.py @@ -102,6 +102,12 @@ class XPathSelectorList(list): def __getslice__(self, i, j): return XPathSelectorList(list.__getslice__(self, i, j)) + def __add__(self, other): + if isinstance(other, XPathSelectorList): + return XPathSelectorList(super(XPathSelectorList, self).__add__(other)) + else: + return super(XPathSelectorList, self).__add__(other) + def x(self, xpath): """Perform the given XPath query on each XPathSelector of the list and return a new (flattened) XPathSelectorList of the results"""