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

This commit is contained in:
Neal Norwitz 2005-11-27 20:37:43 +00:00
parent 307021f40b
commit fcf4435ae0
5 changed files with 75 additions and 0 deletions

View file

@ -238,8 +238,11 @@ def test_compile(self):
self.assertRaises(TypeError, compile)
self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'badmode')
self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'single', 0xff)
self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
if have_unicode:
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):
import sys
@ -421,6 +424,7 @@ def __setitem__(self, key, value):
unlink(TESTFN)
self.assertRaises(TypeError, execfile)
self.assertRaises(TypeError, execfile, TESTFN, {}, ())
import os
self.assertRaises(IOError, execfile, os.curdir)
self.assertRaises(IOError, execfile, "I_dont_exist")
@ -1008,6 +1012,9 @@ class BadSeq:
def __getitem__(self, index):
raise ValueError
self.assertRaises(ValueError, map, lambda x: x, BadSeq())
def badfunc(x):
raise RuntimeError
self.assertRaises(RuntimeError, map, badfunc, range(5))
def test_max(self):
self.assertEqual(max('123123'), '3')
@ -1239,6 +1246,12 @@ def test_range(self):
self.assertRaises(TypeError, range)
self.assertRaises(TypeError, range, 1, 2, 3, 4)
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.
# (smaller floats still accepted, but deprecated)

View file

@ -100,6 +100,39 @@ class NonString: pass
print "writelines accepted sequence of non-string objects"
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
bad_mode = "qwerty"
try:

View file

@ -1589,6 +1589,11 @@ def printsolution(self, x):
...
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:

View file

@ -606,6 +606,8 @@ def test_empty_difference_rev(self):
def test_iteration(self):
for v in self.set:
self.assert_(v in self.values)
setiter = iter(self.set)
self.assertEqual(setiter._length_cue(), len(self.set))
def test_pickling(self):
p = pickle.dumps(self.set)
@ -693,6 +695,16 @@ def test_instancesWithoutException(self):
set('abc')
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):

View file

@ -42,6 +42,18 @@ def test_global_err_then_warn(self):
self._check_error(source, "global")
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():
test_support.run_unittest(SyntaxTestCase)