Author: Armin Rigo <ar...@tunes.org> Branch: kill-someobject Changeset: r57968:b11c05a74ff1 Date: 2012-10-10 11:51 +0200 http://bitbucket.org/pypy/pypy/changeset/b11c05a74ff1/
Log: Fix test_exception. Adds a general way to expect fatal RPython errors. diff --git a/pypy/translator/c/test/test_exception.py b/pypy/translator/c/test/test_exception.py --- a/pypy/translator/c/test/test_exception.py +++ b/pypy/translator/c/test/test_exception.py @@ -62,23 +62,20 @@ return 5 else: return 2 - f1 = getcompiled(f) + f1 = getcompiled(f, []) assert f1() == 5 def test_raise_outside_testfn(): def testfn(n): if n < 0: raise ValueError("hello") + elif n > 0: + raise MyException("world") else: - raise MyException("world") + return 0 f1 = getcompiled(testfn, [int]) - assert py.test.raises(ValueError, f1, -1) - try: - f1(1) - except Exception, e: - assert str(e) == 'MyException' # which is genc's best effort - else: - py.test.fail("f1(1) did not raise anything") + f1(-1, expected_exception_name='ValueError') + f1(1, expected_exception_name='MyException') def test_memoryerror(): # in rev 30717 this test causes a segfault on some Linux, but usually @@ -113,7 +110,7 @@ assert f1(10) == 42 assert f1(sys.maxint) == 1000 for i in range(20): - assert f1((sys.maxint+1) // 2 - i) == 1000 + assert f1(int((sys.maxint+1) // 2 - i)) == 1000 assert f1(sys.maxint // 2 - 16384) == 1000 assert f1(sys.maxint // 2 + 16384) == 1000 @@ -126,11 +123,7 @@ assert res is None, repr(res) res = f1(42) assert res is None, repr(res) - e = py.test.raises(Exception, f1, -2) - assert e.type.__name__ == 'AssertionError' - # ^^^ indirection, because we really want - # the original AssertionError and not the - # one patched by the py lib + f1(-2, expected_exception_name='AssertionError') def test_reraise_exception(): diff --git a/pypy/translator/c/test/test_genc.py b/pypy/translator/c/test/test_genc.py --- a/pypy/translator/c/test/test_genc.py +++ b/pypy/translator/c/test/test_genc.py @@ -93,16 +93,24 @@ pass def f(*args, **kwds): - if 'expected_extra_mallocs' in kwds: - expected_extra_mallocs = kwds.pop('expected_extra_mallocs') - else: - expected_extra_mallocs = 0 + expected_extra_mallocs = kwds.pop('expected_extra_mallocs', 0) + expected_exception_name = kwds.pop('expected_exception_name', None) assert not kwds assert len(args) == len(argtypes) for arg, argtype in zip(args, argtypes): assert isinstance(arg, argtype) - stdout = t.driver.cbuilder.cmdexec(" ".join([llrepr_in(arg) for arg in args])) + + stdout = t.driver.cbuilder.cmdexec( + " ".join([llrepr_in(arg) for arg in args]), + expect_crash=(expected_exception_name is not None)) print stdout + if expected_exception_name is not None: + stdout, stderr = stdout + stderr, lastline, empty = stderr.rsplit('\n', 2) + assert empty == '' + assert lastline == ('Fatal RPython error: ' + + expected_exception_name) + return None stdout, lastline, empty = stdout.rsplit('\n', 2) assert empty == '' assert lastline.startswith('MALLOC COUNTERS: ') _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit