diff options
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/crashers/iter.py | 53 | ||||
-rw-r--r-- | Lib/test/test_fileio.py | 11 |
2 files changed, 64 insertions, 0 deletions
diff --git a/Lib/test/crashers/iter.py b/Lib/test/crashers/iter.py new file mode 100644 index 0000000..081dcbc --- /dev/null +++ b/Lib/test/crashers/iter.py @@ -0,0 +1,53 @@ +# Calls to PyIter_Next, or direct calls to tp_iternext, on an object +# which might no longer be an iterable because its 'next' method was +# removed. These are all variants of Issue3720. + +""" +Run this script with an argument between 1 and <N> to test for +different crashes. +""" +N = 8 + +import sys + +class Foo(object): + def __iter__(self): + return self + def next(self): + del Foo.next + return (1, 2) + +def case1(): + list(enumerate(Foo())) + +def case2(): + x, y = Foo() + +def case3(): + filter(None, Foo()) + +def case4(): + map(None, Foo(), Foo()) + +def case5(): + max(Foo()) + +def case6(): + sum(Foo(), ()) + +def case7(): + dict(Foo()) + +def case8(): + sys.stdout.writelines(Foo()) + +# etc... + + +if __name__ == '__main__': + if len(sys.argv) < 2: + print __doc__.replace('<N>', str(N)) + else: + n = int(sys.argv[1]) + func = globals()['case%d' % n] + func() diff --git a/Lib/test/test_fileio.py b/Lib/test/test_fileio.py index a676bc2..0404a19 100644 --- a/Lib/test/test_fileio.py +++ b/Lib/test/test_fileio.py @@ -100,6 +100,17 @@ class AutoFileTests(unittest.TestCase): # should raise on closed file self.assertRaises(ValueError, method) + def testOpendir(self): + # Issue 3703: opening a directory should fill the errno + # Windows always returns "[Errno 13]: Permission denied + # Unix calls dircheck() and returns "[Errno 21]: Is a directory" + try: + _fileio._FileIO('.', 'r') + except IOError as e: + self.assertNotEqual(e.errno, 0) + else: + self.fail("Should have raised IOError") + class OtherFileTests(unittest.TestCase): |