Commit 5791a8ab authored by Neal Norwitz's avatar Neal Norwitz

Improve test coverage. Hope the test_file changes work the same on windows.

parent 48d9388c
...@@ -238,8 +238,11 @@ class BuiltinTest(unittest.TestCase): ...@@ -238,8 +238,11 @@ class BuiltinTest(unittest.TestCase):
self.assertRaises(TypeError, compile) self.assertRaises(TypeError, compile)
self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'badmode') self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'badmode')
self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'single', 0xff) self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'single', 0xff)
self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
if have_unicode: if have_unicode:
compile(unicode('print u"\xc3\xa5"\n', 'utf8'), '', 'exec') compile(unicode('print u"\xc3\xa5"\n', 'utf8'), '', 'exec')
self.assertRaises(TypeError, compile, unichr(0), 'f', 'exec')
self.assertRaises(ValueError, compile, unicode('a = 1'), 'f', 'bad')
def test_delattr(self): def test_delattr(self):
import sys import sys
...@@ -421,6 +424,7 @@ class BuiltinTest(unittest.TestCase): ...@@ -421,6 +424,7 @@ class BuiltinTest(unittest.TestCase):
unlink(TESTFN) unlink(TESTFN)
self.assertRaises(TypeError, execfile) self.assertRaises(TypeError, execfile)
self.assertRaises(TypeError, execfile, TESTFN, {}, ())
import os import os
self.assertRaises(IOError, execfile, os.curdir) self.assertRaises(IOError, execfile, os.curdir)
self.assertRaises(IOError, execfile, "I_dont_exist") self.assertRaises(IOError, execfile, "I_dont_exist")
...@@ -1008,6 +1012,9 @@ class BuiltinTest(unittest.TestCase): ...@@ -1008,6 +1012,9 @@ class BuiltinTest(unittest.TestCase):
def __getitem__(self, index): def __getitem__(self, index):
raise ValueError raise ValueError
self.assertRaises(ValueError, map, lambda x: x, BadSeq()) self.assertRaises(ValueError, map, lambda x: x, BadSeq())
def badfunc(x):
raise RuntimeError
self.assertRaises(RuntimeError, map, badfunc, range(5))
def test_max(self): def test_max(self):
self.assertEqual(max('123123'), '3') self.assertEqual(max('123123'), '3')
...@@ -1239,6 +1246,12 @@ class BuiltinTest(unittest.TestCase): ...@@ -1239,6 +1246,12 @@ class BuiltinTest(unittest.TestCase):
self.assertRaises(TypeError, range) self.assertRaises(TypeError, range)
self.assertRaises(TypeError, range, 1, 2, 3, 4) self.assertRaises(TypeError, range, 1, 2, 3, 4)
self.assertRaises(ValueError, range, 1, 2, 0) self.assertRaises(ValueError, range, 1, 2, 0)
self.assertRaises(ValueError, range, a, a + 1, long(0))
class badzero(int):
def __cmp__(self, other):
raise RuntimeError
self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
# Reject floats when it would require PyLongs to represent. # Reject floats when it would require PyLongs to represent.
# (smaller floats still accepted, but deprecated) # (smaller floats still accepted, but deprecated)
......
...@@ -100,6 +100,39 @@ else: ...@@ -100,6 +100,39 @@ else:
print "writelines accepted sequence of non-string objects" print "writelines accepted sequence of non-string objects"
f.close() f.close()
try:
sys.stdin.seek(0)
except IOError:
pass
else:
print "should not be able to seek on sys.stdin"
try:
sys.stdin.tell()
except IOError:
pass
else:
print "should not be able to seek on sys.stdin"
try:
sys.stdin.truncate()
except IOError:
pass
else:
print "should not be able to truncate on sys.stdin"
# verify repr works
f = open(TESTFN)
if not repr(f).startswith("<open file '" + TESTFN):
print "repr(file) failed"
f.close()
# verify repr works for unicode too
f = open(unicode(TESTFN))
if not repr(f).startswith("<open file u'" + TESTFN):
print "repr(file with unicode name) failed"
f.close()
# verify that we get a sensible error message for bad mode argument # verify that we get a sensible error message for bad mode argument
bad_mode = "qwerty" bad_mode = "qwerty"
try: try:
......
...@@ -1589,6 +1589,11 @@ Traceback (most recent call last): ...@@ -1589,6 +1589,11 @@ Traceback (most recent call last):
... ...
ValueError: 7 ValueError: 7
>>> f().throw("abc") # throw on just-opened generator
Traceback (most recent call last):
...
TypeError: exceptions must be classes, or instances, not str
Now let's try closing a generator: Now let's try closing a generator:
......
...@@ -606,6 +606,8 @@ class TestBasicOps(unittest.TestCase): ...@@ -606,6 +606,8 @@ class TestBasicOps(unittest.TestCase):
def test_iteration(self): def test_iteration(self):
for v in self.set: for v in self.set:
self.assert_(v in self.values) self.assert_(v in self.values)
setiter = iter(self.set)
self.assertEqual(setiter._length_cue(), len(self.set))
def test_pickling(self): def test_pickling(self):
p = pickle.dumps(self.set) p = pickle.dumps(self.set)
...@@ -693,6 +695,16 @@ class TestExceptionPropagation(unittest.TestCase): ...@@ -693,6 +695,16 @@ class TestExceptionPropagation(unittest.TestCase):
set('abc') set('abc')
set(gooditer()) set(gooditer())
def test_changingSizeWhileIterating(self):
s = set([1,2,3])
try:
for i in s:
s.update([4])
except RuntimeError:
pass
else:
self.fail("no exception when changing size during iteration")
#============================================================================== #==============================================================================
class TestSetOfSets(unittest.TestCase): class TestSetOfSets(unittest.TestCase):
......
...@@ -42,6 +42,18 @@ class SyntaxTestCase(unittest.TestCase): ...@@ -42,6 +42,18 @@ class SyntaxTestCase(unittest.TestCase):
self._check_error(source, "global") self._check_error(source, "global")
warnings.filters.pop(0) warnings.filters.pop(0)
def test_break_outside_loop(self):
self._check_error("break", "outside loop")
def test_delete_deref(self):
source = re.sub('(?m)^ *:', '', """\
:def foo(x):
: def bar():
: print x
: del x
:""")
self._check_error(source, "nested scope")
def test_main(): def test_main():
test_support.run_unittest(SyntaxTestCase) test_support.run_unittest(SyntaxTestCase)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment