diff -r 46e600fa8d05 Lib/test/test_pulldom.py --- a/Lib/test/test_pulldom.py Fri Mar 09 07:25:32 2012 -0800 +++ b/Lib/test/test_pulldom.py Sun Mar 11 22:18:53 2012 +0100 @@ -128,25 +128,15 @@ next(items) # Skip character data evt, node = next(items) self.assertEqual(node.tagName, "html") + next(items) # Skip END_DOCUMENT with self.assertRaises(StopIteration): next(items) items.clear() self.assertIsNone(items.parser) self.assertIsNone(items.stream) - @unittest.expectedFailure - def test_comment(self): - """PullDOM does not receive "comment" events.""" - items = pulldom.parseString(SMALL_SAMPLE) - for evt, _ in items: - if evt == pulldom.COMMENT: - break - else: - self.fail("No comment was encountered") - - @unittest.expectedFailure def test_end_document(self): - """PullDOM does not receive "end-document" events.""" + """ Test for the receiving END_DOCUMENT event. """ items = pulldom.parseString(SMALL_SAMPLE) # Read all of the nodes up to and including : for evt, node in items: @@ -159,6 +149,16 @@ except StopIteration: self.fail( "Ran out of events, but should have received END_DOCUMENT") + + @unittest.expectedFailure + def test_comment(self): + """PullDOM does not receive "comment" events.""" + items = pulldom.parseString(SMALL_SAMPLE) + for evt, _ in items: + if evt == pulldom.COMMENT: + break + else: + self.fail("No comment was encountered") class ThoroughTestCase(unittest.TestCase): diff -r 46e600fa8d05 Lib/xml/dom/pulldom.py --- a/Lib/xml/dom/pulldom.py Fri Mar 09 07:25:32 2012 -0800 +++ b/Lib/xml/dom/pulldom.py Sun Mar 11 22:18:53 2012 +0100 @@ -208,6 +208,7 @@ self.bufsize = bufsize if not hasattr(self.parser, 'feed'): self.getEvent = self._slurp + self._documentEnded = False self.reset() def reset(self): @@ -223,10 +224,11 @@ raise IndexError def __next__(self): + if self._documentEnded: + raise StopIteration rc = self.getEvent() if rc: return rc - raise StopIteration def __iter__(self): return self @@ -255,7 +257,8 @@ buf = self.stream.read(self.bufsize) if not buf: self.parser.close() - return None + self._documentEnded = True + return self.pulldom.firstEvent[1][0] self.parser.feed(buf) rc = self.pulldom.firstEvent[1][0] self.pulldom.firstEvent[1] = self.pulldom.firstEvent[1][1]