| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790 |
- # -*- coding: utf-8 -*-
- """
- flask.testsuite.blueprints
- ~~~~~~~~~~~~~~~~~~~~~~~~~~
- Blueprints (and currently modules)
- :copyright: (c) 2011 by Armin Ronacher.
- :license: BSD, see LICENSE for more details.
- """
- import flask
- import unittest
- import warnings
- from flask.testsuite import FlaskTestCase, emits_module_deprecation_warning
- from flask._compat import text_type
- from werkzeug.exceptions import NotFound
- from werkzeug.http import parse_cache_control_header
- from jinja2 import TemplateNotFound
- # import moduleapp here because it uses deprecated features and we don't
- # want to see the warnings
- warnings.simplefilter('ignore', DeprecationWarning)
- from moduleapp import app as moduleapp
- warnings.simplefilter('default', DeprecationWarning)
- class ModuleTestCase(FlaskTestCase):
- @emits_module_deprecation_warning
- def test_basic_module(self):
- app = flask.Flask(__name__)
- admin = flask.Module(__name__, 'admin', url_prefix='/admin')
- @admin.route('/')
- def admin_index():
- return 'admin index'
- @admin.route('/login')
- def admin_login():
- return 'admin login'
- @admin.route('/logout')
- def admin_logout():
- return 'admin logout'
- @app.route('/')
- def index():
- return 'the index'
- app.register_module(admin)
- c = app.test_client()
- self.assert_equal(c.get('/').data, b'the index')
- self.assert_equal(c.get('/admin/').data, b'admin index')
- self.assert_equal(c.get('/admin/login').data, b'admin login')
- self.assert_equal(c.get('/admin/logout').data, b'admin logout')
- @emits_module_deprecation_warning
- def test_default_endpoint_name(self):
- app = flask.Flask(__name__)
- mod = flask.Module(__name__, 'frontend')
- def index():
- return 'Awesome'
- mod.add_url_rule('/', view_func=index)
- app.register_module(mod)
- rv = app.test_client().get('/')
- self.assert_equal(rv.data, b'Awesome')
- with app.test_request_context():
- self.assert_equal(flask.url_for('frontend.index'), '/')
- @emits_module_deprecation_warning
- def test_request_processing(self):
- catched = []
- app = flask.Flask(__name__)
- admin = flask.Module(__name__, 'admin', url_prefix='/admin')
- @admin.before_request
- def before_admin_request():
- catched.append('before-admin')
- @admin.after_request
- def after_admin_request(response):
- catched.append('after-admin')
- return response
- @admin.route('/')
- def admin_index():
- return 'the admin'
- @app.before_request
- def before_request():
- catched.append('before-app')
- @app.after_request
- def after_request(response):
- catched.append('after-app')
- return response
- @app.route('/')
- def index():
- return 'the index'
- app.register_module(admin)
- c = app.test_client()
- self.assert_equal(c.get('/').data, b'the index')
- self.assert_equal(catched, ['before-app', 'after-app'])
- del catched[:]
- self.assert_equal(c.get('/admin/').data, b'the admin')
- self.assert_equal(catched, ['before-app', 'before-admin',
- 'after-admin', 'after-app'])
- @emits_module_deprecation_warning
- def test_context_processors(self):
- app = flask.Flask(__name__)
- admin = flask.Module(__name__, 'admin', url_prefix='/admin')
- @app.context_processor
- def inject_all_regular():
- return {'a': 1}
- @admin.context_processor
- def inject_admin():
- return {'b': 2}
- @admin.app_context_processor
- def inject_all_module():
- return {'c': 3}
- @app.route('/')
- def index():
- return flask.render_template_string('{{ a }}{{ b }}{{ c }}')
- @admin.route('/')
- def admin_index():
- return flask.render_template_string('{{ a }}{{ b }}{{ c }}')
- app.register_module(admin)
- c = app.test_client()
- self.assert_equal(c.get('/').data, b'13')
- self.assert_equal(c.get('/admin/').data, b'123')
- @emits_module_deprecation_warning
- def test_late_binding(self):
- app = flask.Flask(__name__)
- admin = flask.Module(__name__, 'admin')
- @admin.route('/')
- def index():
- return '42'
- app.register_module(admin, url_prefix='/admin')
- self.assert_equal(app.test_client().get('/admin/').data, b'42')
- @emits_module_deprecation_warning
- def test_error_handling(self):
- app = flask.Flask(__name__)
- admin = flask.Module(__name__, 'admin')
- @admin.app_errorhandler(404)
- def not_found(e):
- return 'not found', 404
- @admin.app_errorhandler(500)
- def internal_server_error(e):
- return 'internal server error', 500
- @admin.route('/')
- def index():
- flask.abort(404)
- @admin.route('/error')
- def error():
- 1 // 0
- app.register_module(admin)
- c = app.test_client()
- rv = c.get('/')
- self.assert_equal(rv.status_code, 404)
- self.assert_equal(rv.data, b'not found')
- rv = c.get('/error')
- self.assert_equal(rv.status_code, 500)
- self.assert_equal(b'internal server error', rv.data)
- def test_templates_and_static(self):
- app = moduleapp
- app.testing = True
- c = app.test_client()
- rv = c.get('/')
- self.assert_equal(rv.data, b'Hello from the Frontend')
- rv = c.get('/admin/')
- self.assert_equal(rv.data, b'Hello from the Admin')
- rv = c.get('/admin/index2')
- self.assert_equal(rv.data, b'Hello from the Admin')
- rv = c.get('/admin/static/test.txt')
- self.assert_equal(rv.data.strip(), b'Admin File')
- rv.close()
- rv = c.get('/admin/static/css/test.css')
- self.assert_equal(rv.data.strip(), b'/* nested file */')
- rv.close()
- with app.test_request_context():
- self.assert_equal(flask.url_for('admin.static', filename='test.txt'),
- '/admin/static/test.txt')
- with app.test_request_context():
- try:
- flask.render_template('missing.html')
- except TemplateNotFound as e:
- self.assert_equal(e.name, 'missing.html')
- else:
- self.assert_true(0, 'expected exception')
- with flask.Flask(__name__).test_request_context():
- self.assert_equal(flask.render_template('nested/nested.txt'), 'I\'m nested')
- def test_safe_access(self):
- app = moduleapp
- with app.test_request_context():
- f = app.view_functions['admin.static']
- try:
- f('/etc/passwd')
- except NotFound:
- pass
- else:
- self.assert_true(0, 'expected exception')
- try:
- f('../__init__.py')
- except NotFound:
- pass
- else:
- self.assert_true(0, 'expected exception')
- # testcase for a security issue that may exist on windows systems
- import os
- import ntpath
- old_path = os.path
- os.path = ntpath
- try:
- try:
- f('..\\__init__.py')
- except NotFound:
- pass
- else:
- self.assert_true(0, 'expected exception')
- finally:
- os.path = old_path
- @emits_module_deprecation_warning
- def test_endpoint_decorator(self):
- from werkzeug.routing import Submount, Rule
- from flask import Module
- app = flask.Flask(__name__)
- app.testing = True
- app.url_map.add(Submount('/foo', [
- Rule('/bar', endpoint='bar'),
- Rule('/', endpoint='index')
- ]))
- module = Module(__name__, __name__)
- @module.endpoint('bar')
- def bar():
- return 'bar'
- @module.endpoint('index')
- def index():
- return 'index'
- app.register_module(module)
- c = app.test_client()
- self.assert_equal(c.get('/foo/').data, b'index')
- self.assert_equal(c.get('/foo/bar').data, b'bar')
- class BlueprintTestCase(FlaskTestCase):
- def test_blueprint_specific_error_handling(self):
- frontend = flask.Blueprint('frontend', __name__)
- backend = flask.Blueprint('backend', __name__)
- sideend = flask.Blueprint('sideend', __name__)
- @frontend.errorhandler(403)
- def frontend_forbidden(e):
- return 'frontend says no', 403
- @frontend.route('/frontend-no')
- def frontend_no():
- flask.abort(403)
- @backend.errorhandler(403)
- def backend_forbidden(e):
- return 'backend says no', 403
- @backend.route('/backend-no')
- def backend_no():
- flask.abort(403)
- @sideend.route('/what-is-a-sideend')
- def sideend_no():
- flask.abort(403)
- app = flask.Flask(__name__)
- app.register_blueprint(frontend)
- app.register_blueprint(backend)
- app.register_blueprint(sideend)
- @app.errorhandler(403)
- def app_forbidden(e):
- return 'application itself says no', 403
- c = app.test_client()
- self.assert_equal(c.get('/frontend-no').data, b'frontend says no')
- self.assert_equal(c.get('/backend-no').data, b'backend says no')
- self.assert_equal(c.get('/what-is-a-sideend').data, b'application itself says no')
- def test_blueprint_url_definitions(self):
- bp = flask.Blueprint('test', __name__)
- @bp.route('/foo', defaults={'baz': 42})
- def foo(bar, baz):
- return '%s/%d' % (bar, baz)
- @bp.route('/bar')
- def bar(bar):
- return text_type(bar)
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/1', url_defaults={'bar': 23})
- app.register_blueprint(bp, url_prefix='/2', url_defaults={'bar': 19})
- c = app.test_client()
- self.assert_equal(c.get('/1/foo').data, b'23/42')
- self.assert_equal(c.get('/2/foo').data, b'19/42')
- self.assert_equal(c.get('/1/bar').data, b'23')
- self.assert_equal(c.get('/2/bar').data, b'19')
- def test_blueprint_url_processors(self):
- bp = flask.Blueprint('frontend', __name__, url_prefix='/<lang_code>')
- @bp.url_defaults
- def add_language_code(endpoint, values):
- values.setdefault('lang_code', flask.g.lang_code)
- @bp.url_value_preprocessor
- def pull_lang_code(endpoint, values):
- flask.g.lang_code = values.pop('lang_code')
- @bp.route('/')
- def index():
- return flask.url_for('.about')
- @bp.route('/about')
- def about():
- return flask.url_for('.index')
- app = flask.Flask(__name__)
- app.register_blueprint(bp)
- c = app.test_client()
- self.assert_equal(c.get('/de/').data, b'/de/about')
- self.assert_equal(c.get('/de/about').data, b'/de/')
- def test_templates_and_static(self):
- from blueprintapp import app
- c = app.test_client()
- rv = c.get('/')
- self.assert_equal(rv.data, b'Hello from the Frontend')
- rv = c.get('/admin/')
- self.assert_equal(rv.data, b'Hello from the Admin')
- rv = c.get('/admin/index2')
- self.assert_equal(rv.data, b'Hello from the Admin')
- rv = c.get('/admin/static/test.txt')
- self.assert_equal(rv.data.strip(), b'Admin File')
- rv.close()
- rv = c.get('/admin/static/css/test.css')
- self.assert_equal(rv.data.strip(), b'/* nested file */')
- rv.close()
- # try/finally, in case other tests use this app for Blueprint tests.
- max_age_default = app.config['SEND_FILE_MAX_AGE_DEFAULT']
- try:
- expected_max_age = 3600
- if app.config['SEND_FILE_MAX_AGE_DEFAULT'] == expected_max_age:
- expected_max_age = 7200
- app.config['SEND_FILE_MAX_AGE_DEFAULT'] = expected_max_age
- rv = c.get('/admin/static/css/test.css')
- cc = parse_cache_control_header(rv.headers['Cache-Control'])
- self.assert_equal(cc.max_age, expected_max_age)
- rv.close()
- finally:
- app.config['SEND_FILE_MAX_AGE_DEFAULT'] = max_age_default
- with app.test_request_context():
- self.assert_equal(flask.url_for('admin.static', filename='test.txt'),
- '/admin/static/test.txt')
- with app.test_request_context():
- try:
- flask.render_template('missing.html')
- except TemplateNotFound as e:
- self.assert_equal(e.name, 'missing.html')
- else:
- self.assert_true(0, 'expected exception')
- with flask.Flask(__name__).test_request_context():
- self.assert_equal(flask.render_template('nested/nested.txt'), 'I\'m nested')
- def test_default_static_cache_timeout(self):
- app = flask.Flask(__name__)
- class MyBlueprint(flask.Blueprint):
- def get_send_file_max_age(self, filename):
- return 100
- blueprint = MyBlueprint('blueprint', __name__, static_folder='static')
- app.register_blueprint(blueprint)
- # try/finally, in case other tests use this app for Blueprint tests.
- max_age_default = app.config['SEND_FILE_MAX_AGE_DEFAULT']
- try:
- with app.test_request_context():
- unexpected_max_age = 3600
- if app.config['SEND_FILE_MAX_AGE_DEFAULT'] == unexpected_max_age:
- unexpected_max_age = 7200
- app.config['SEND_FILE_MAX_AGE_DEFAULT'] = unexpected_max_age
- rv = blueprint.send_static_file('index.html')
- cc = parse_cache_control_header(rv.headers['Cache-Control'])
- self.assert_equal(cc.max_age, 100)
- rv.close()
- finally:
- app.config['SEND_FILE_MAX_AGE_DEFAULT'] = max_age_default
- def test_templates_list(self):
- from blueprintapp import app
- templates = sorted(app.jinja_env.list_templates())
- self.assert_equal(templates, ['admin/index.html',
- 'frontend/index.html'])
- def test_dotted_names(self):
- frontend = flask.Blueprint('myapp.frontend', __name__)
- backend = flask.Blueprint('myapp.backend', __name__)
- @frontend.route('/fe')
- def frontend_index():
- return flask.url_for('myapp.backend.backend_index')
- @frontend.route('/fe2')
- def frontend_page2():
- return flask.url_for('.frontend_index')
- @backend.route('/be')
- def backend_index():
- return flask.url_for('myapp.frontend.frontend_index')
- app = flask.Flask(__name__)
- app.register_blueprint(frontend)
- app.register_blueprint(backend)
- c = app.test_client()
- self.assert_equal(c.get('/fe').data.strip(), b'/be')
- self.assert_equal(c.get('/fe2').data.strip(), b'/fe')
- self.assert_equal(c.get('/be').data.strip(), b'/fe')
- def test_dotted_names_from_app(self):
- app = flask.Flask(__name__)
- app.testing = True
- test = flask.Blueprint('test', __name__)
- @app.route('/')
- def app_index():
- return flask.url_for('test.index')
- @test.route('/test/')
- def index():
- return flask.url_for('app_index')
- app.register_blueprint(test)
- with app.test_client() as c:
- rv = c.get('/')
- self.assert_equal(rv.data, b'/test/')
- def test_empty_url_defaults(self):
- bp = flask.Blueprint('bp', __name__)
- @bp.route('/', defaults={'page': 1})
- @bp.route('/page/<int:page>')
- def something(page):
- return str(page)
- app = flask.Flask(__name__)
- app.register_blueprint(bp)
- c = app.test_client()
- self.assert_equal(c.get('/').data, b'1')
- self.assert_equal(c.get('/page/2').data, b'2')
- def test_route_decorator_custom_endpoint(self):
- bp = flask.Blueprint('bp', __name__)
- @bp.route('/foo')
- def foo():
- return flask.request.endpoint
- @bp.route('/bar', endpoint='bar')
- def foo_bar():
- return flask.request.endpoint
- @bp.route('/bar/123', endpoint='123')
- def foo_bar_foo():
- return flask.request.endpoint
- @bp.route('/bar/foo')
- def bar_foo():
- return flask.request.endpoint
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- @app.route('/')
- def index():
- return flask.request.endpoint
- c = app.test_client()
- self.assertEqual(c.get('/').data, b'index')
- self.assertEqual(c.get('/py/foo').data, b'bp.foo')
- self.assertEqual(c.get('/py/bar').data, b'bp.bar')
- self.assertEqual(c.get('/py/bar/123').data, b'bp.123')
- self.assertEqual(c.get('/py/bar/foo').data, b'bp.bar_foo')
- def test_route_decorator_custom_endpoint_with_dots(self):
- bp = flask.Blueprint('bp', __name__)
- @bp.route('/foo')
- def foo():
- return flask.request.endpoint
- try:
- @bp.route('/bar', endpoint='bar.bar')
- def foo_bar():
- return flask.request.endpoint
- except AssertionError:
- pass
- else:
- raise AssertionError('expected AssertionError not raised')
- try:
- @bp.route('/bar/123', endpoint='bar.123')
- def foo_bar_foo():
- return flask.request.endpoint
- except AssertionError:
- pass
- else:
- raise AssertionError('expected AssertionError not raised')
- def foo_foo_foo():
- pass
- self.assertRaises(
- AssertionError,
- lambda: bp.add_url_rule(
- '/bar/123', endpoint='bar.123', view_func=foo_foo_foo
- )
- )
- self.assertRaises(
- AssertionError,
- bp.route('/bar/123', endpoint='bar.123'),
- lambda: None
- )
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- c = app.test_client()
- self.assertEqual(c.get('/py/foo').data, b'bp.foo')
- # The rule's didn't actually made it through
- rv = c.get('/py/bar')
- assert rv.status_code == 404
- rv = c.get('/py/bar/123')
- assert rv.status_code == 404
- def test_template_filter(self):
- bp = flask.Blueprint('bp', __name__)
- @bp.app_template_filter()
- def my_reverse(s):
- return s[::-1]
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- self.assert_in('my_reverse', app.jinja_env.filters.keys())
- self.assert_equal(app.jinja_env.filters['my_reverse'], my_reverse)
- self.assert_equal(app.jinja_env.filters['my_reverse']('abcd'), 'dcba')
- def test_add_template_filter(self):
- bp = flask.Blueprint('bp', __name__)
- def my_reverse(s):
- return s[::-1]
- bp.add_app_template_filter(my_reverse)
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- self.assert_in('my_reverse', app.jinja_env.filters.keys())
- self.assert_equal(app.jinja_env.filters['my_reverse'], my_reverse)
- self.assert_equal(app.jinja_env.filters['my_reverse']('abcd'), 'dcba')
- def test_template_filter_with_name(self):
- bp = flask.Blueprint('bp', __name__)
- @bp.app_template_filter('strrev')
- def my_reverse(s):
- return s[::-1]
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- self.assert_in('strrev', app.jinja_env.filters.keys())
- self.assert_equal(app.jinja_env.filters['strrev'], my_reverse)
- self.assert_equal(app.jinja_env.filters['strrev']('abcd'), 'dcba')
- def test_add_template_filter_with_name(self):
- bp = flask.Blueprint('bp', __name__)
- def my_reverse(s):
- return s[::-1]
- bp.add_app_template_filter(my_reverse, 'strrev')
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- self.assert_in('strrev', app.jinja_env.filters.keys())
- self.assert_equal(app.jinja_env.filters['strrev'], my_reverse)
- self.assert_equal(app.jinja_env.filters['strrev']('abcd'), 'dcba')
- def test_template_filter_with_template(self):
- bp = flask.Blueprint('bp', __name__)
- @bp.app_template_filter()
- def super_reverse(s):
- return s[::-1]
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- @app.route('/')
- def index():
- return flask.render_template('template_filter.html', value='abcd')
- rv = app.test_client().get('/')
- self.assert_equal(rv.data, b'dcba')
- def test_template_filter_after_route_with_template(self):
- app = flask.Flask(__name__)
- @app.route('/')
- def index():
- return flask.render_template('template_filter.html', value='abcd')
- bp = flask.Blueprint('bp', __name__)
- @bp.app_template_filter()
- def super_reverse(s):
- return s[::-1]
- app.register_blueprint(bp, url_prefix='/py')
- rv = app.test_client().get('/')
- self.assert_equal(rv.data, b'dcba')
- def test_add_template_filter_with_template(self):
- bp = flask.Blueprint('bp', __name__)
- def super_reverse(s):
- return s[::-1]
- bp.add_app_template_filter(super_reverse)
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- @app.route('/')
- def index():
- return flask.render_template('template_filter.html', value='abcd')
- rv = app.test_client().get('/')
- self.assert_equal(rv.data, b'dcba')
- def test_template_filter_with_name_and_template(self):
- bp = flask.Blueprint('bp', __name__)
- @bp.app_template_filter('super_reverse')
- def my_reverse(s):
- return s[::-1]
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- @app.route('/')
- def index():
- return flask.render_template('template_filter.html', value='abcd')
- rv = app.test_client().get('/')
- self.assert_equal(rv.data, b'dcba')
- def test_add_template_filter_with_name_and_template(self):
- bp = flask.Blueprint('bp', __name__)
- def my_reverse(s):
- return s[::-1]
- bp.add_app_template_filter(my_reverse, 'super_reverse')
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- @app.route('/')
- def index():
- return flask.render_template('template_filter.html', value='abcd')
- rv = app.test_client().get('/')
- self.assert_equal(rv.data, b'dcba')
- def test_template_test(self):
- bp = flask.Blueprint('bp', __name__)
- @bp.app_template_test()
- def is_boolean(value):
- return isinstance(value, bool)
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- self.assert_in('is_boolean', app.jinja_env.tests.keys())
- self.assert_equal(app.jinja_env.tests['is_boolean'], is_boolean)
- self.assert_true(app.jinja_env.tests['is_boolean'](False))
- def test_add_template_test(self):
- bp = flask.Blueprint('bp', __name__)
- def is_boolean(value):
- return isinstance(value, bool)
- bp.add_app_template_test(is_boolean)
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- self.assert_in('is_boolean', app.jinja_env.tests.keys())
- self.assert_equal(app.jinja_env.tests['is_boolean'], is_boolean)
- self.assert_true(app.jinja_env.tests['is_boolean'](False))
- def test_template_test_with_name(self):
- bp = flask.Blueprint('bp', __name__)
- @bp.app_template_test('boolean')
- def is_boolean(value):
- return isinstance(value, bool)
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- self.assert_in('boolean', app.jinja_env.tests.keys())
- self.assert_equal(app.jinja_env.tests['boolean'], is_boolean)
- self.assert_true(app.jinja_env.tests['boolean'](False))
- def test_add_template_test_with_name(self):
- bp = flask.Blueprint('bp', __name__)
- def is_boolean(value):
- return isinstance(value, bool)
- bp.add_app_template_test(is_boolean, 'boolean')
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- self.assert_in('boolean', app.jinja_env.tests.keys())
- self.assert_equal(app.jinja_env.tests['boolean'], is_boolean)
- self.assert_true(app.jinja_env.tests['boolean'](False))
- def test_template_test_with_template(self):
- bp = flask.Blueprint('bp', __name__)
- @bp.app_template_test()
- def boolean(value):
- return isinstance(value, bool)
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- @app.route('/')
- def index():
- return flask.render_template('template_test.html', value=False)
- rv = app.test_client().get('/')
- self.assert_in(b'Success!', rv.data)
- def test_template_test_after_route_with_template(self):
- app = flask.Flask(__name__)
- @app.route('/')
- def index():
- return flask.render_template('template_test.html', value=False)
- bp = flask.Blueprint('bp', __name__)
- @bp.app_template_test()
- def boolean(value):
- return isinstance(value, bool)
- app.register_blueprint(bp, url_prefix='/py')
- rv = app.test_client().get('/')
- self.assert_in(b'Success!', rv.data)
- def test_add_template_test_with_template(self):
- bp = flask.Blueprint('bp', __name__)
- def boolean(value):
- return isinstance(value, bool)
- bp.add_app_template_test(boolean)
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- @app.route('/')
- def index():
- return flask.render_template('template_test.html', value=False)
- rv = app.test_client().get('/')
- self.assert_in(b'Success!', rv.data)
- def test_template_test_with_name_and_template(self):
- bp = flask.Blueprint('bp', __name__)
- @bp.app_template_test('boolean')
- def is_boolean(value):
- return isinstance(value, bool)
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- @app.route('/')
- def index():
- return flask.render_template('template_test.html', value=False)
- rv = app.test_client().get('/')
- self.assert_in(b'Success!', rv.data)
- def test_add_template_test_with_name_and_template(self):
- bp = flask.Blueprint('bp', __name__)
- def is_boolean(value):
- return isinstance(value, bool)
- bp.add_app_template_test(is_boolean, 'boolean')
- app = flask.Flask(__name__)
- app.register_blueprint(bp, url_prefix='/py')
- @app.route('/')
- def index():
- return flask.render_template('template_test.html', value=False)
- rv = app.test_client().get('/')
- self.assert_in(b'Success!', rv.data)
- def suite():
- suite = unittest.TestSuite()
- suite.addTest(unittest.makeSuite(BlueprintTestCase))
- suite.addTest(unittest.makeSuite(ModuleTestCase))
- return suite
|