diff --git a/tests/test_regression.py b/tests/test_regression.py index 7694e61b..809236e2 100644 --- a/tests/test_regression.py +++ b/tests/test_regression.py @@ -19,14 +19,10 @@ import threading from werkzeug.exceptions import NotFound - _gc_lock = threading.Lock() -class _NoLeakAsserter(object): - - def __init__(self, testcase): - self.testcase = testcase +class assert_no_leak(object): def __enter__(self): gc.disable() @@ -47,7 +43,7 @@ class _NoLeakAsserter(object): gc.collect() new_objects = len(gc.get_objects()) if new_objects > self.old_objects: - self.testcase.fail('Example code leaked') + pytest.fail('Example code leaked') _gc_lock.release() gc.enable() @@ -56,62 +52,56 @@ class _NoLeakAsserter(object): # ported Flask to Python 3. @pytest.mark.skipif(os.environ.get('RUN_FLASK_MEMORY_TESTS') != '1', reason='Turned off due to envvar.') -class TestMemory(object): +def test_memory_consumption(): + app = flask.Flask(__name__) - def assert_no_leak(self): - return _NoLeakAsserter(self) - - def test_memory_consumption(self): - app = flask.Flask(__name__) - - @app.route('/') - def index(): - return flask.render_template('simple_template.html', whiskey=42) - - def fire(): - with app.test_client() as c: - rv = c.get('/') - assert rv.status_code == 200 - assert rv.data == b'

42

' - - # Trigger caches - fire() - - # This test only works on CPython 2.7. - if sys.version_info >= (2, 7) and \ - not hasattr(sys, 'pypy_translation_info'): - with self.assert_no_leak(): - for x in range(10): - fire() - - def test_safe_join_toplevel_pardir(self): - from flask.helpers import safe_join - with pytest.raises(NotFound): - safe_join('/foo', '..') - - -class TestException(object): - - def test_aborting(self): - class Foo(Exception): - whatever = 42 - app = flask.Flask(__name__) - app.testing = True - - @app.errorhandler(Foo) - def handle_foo(e): - return str(e.whatever) - - @app.route('/') - def index(): - raise flask.abort(flask.redirect(flask.url_for('test'))) - - @app.route('/test') - def test(): - raise Foo() + @app.route('/') + def index(): + return flask.render_template('simple_template.html', whiskey=42) + def fire(): with app.test_client() as c: rv = c.get('/') - assert rv.headers['Location'] == 'http://localhost/test' - rv = c.get('/test') - assert rv.data == b'42' + assert rv.status_code == 200 + assert rv.data == b'

42

' + + # Trigger caches + fire() + + # This test only works on CPython 2.7. + if sys.version_info >= (2, 7) and \ + not hasattr(sys, 'pypy_translation_info'): + with assert_no_leak(): + for x in range(10): + fire() + + +def test_safe_join_toplevel_pardir(): + from flask.helpers import safe_join + with pytest.raises(NotFound): + safe_join('/foo', '..') + + +def test_aborting(): + class Foo(Exception): + whatever = 42 + app = flask.Flask(__name__) + app.testing = True + + @app.errorhandler(Foo) + def handle_foo(e): + return str(e.whatever) + + @app.route('/') + def index(): + raise flask.abort(flask.redirect(flask.url_for('test'))) + + @app.route('/test') + def test(): + raise Foo() + + with app.test_client() as c: + rv = c.get('/') + assert rv.headers['Location'] == 'http://localhost/test' + rv = c.get('/test') + assert rv.data == b'42'