diff options
| author | Chris McDonough <chrism@plope.com> | 2011-10-05 22:05:41 -0400 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2011-10-05 22:05:41 -0400 |
| commit | 262cea6db9ff01068d0a40726959849006d3b27c (patch) | |
| tree | d67fc74d9c4d58928969ae85e47e69e5707c45e2 | |
| parent | eb0432c504f4f4d45cc714e94709ee2976bb7b8f (diff) | |
| download | pyramid-262cea6db9ff01068d0a40726959849006d3b27c.tar.gz pyramid-262cea6db9ff01068d0a40726959849006d3b27c.tar.bz2 pyramid-262cea6db9ff01068d0a40726959849006d3b27c.zip | |
break script tests into separate files
| -rw-r--r-- | pyramid/tests/test_scripts.py | 1027 | ||||
| -rw-r--r-- | pyramid/tests/test_scripts/__init__.py | 1 | ||||
| -rw-r--r-- | pyramid/tests/test_scripts/dummy.py | 151 | ||||
| -rw-r--r-- | pyramid/tests/test_scripts/test_proutes.py | 129 | ||||
| -rw-r--r-- | pyramid/tests/test_scripts/test_pshell.py | 249 | ||||
| -rw-r--r-- | pyramid/tests/test_scripts/test_ptweens.py | 53 | ||||
| -rw-r--r-- | pyramid/tests/test_scripts/test_pviews.py | 467 |
7 files changed, 1050 insertions, 1027 deletions
diff --git a/pyramid/tests/test_scripts.py b/pyramid/tests/test_scripts.py deleted file mode 100644 index c76839f80..000000000 --- a/pyramid/tests/test_scripts.py +++ /dev/null @@ -1,1027 +0,0 @@ -import unittest - -class TestPShellCommand(unittest.TestCase): - def _getTargetClass(self): - from pyramid.scripts.pshell import PShellCommand - return PShellCommand - - def _makeOne(self, patch_bootstrap=True, patch_config=True, - patch_args=True, patch_options=True): - cmd = self._getTargetClass()([]) - if patch_bootstrap: - self.bootstrap = DummyBootstrap() - cmd.bootstrap = (self.bootstrap,) - if patch_config: - self.config_factory = DummyConfigParserFactory() - cmd.ConfigParser = self.config_factory - if patch_args: - self.args = ('/foo/bar/myapp.ini#myapp',) - cmd.args = self.args - if patch_options: - class Options(object): pass - self.options = Options() - self.options.disable_ipython = True - self.options.setup = None - cmd.options = self.options - return cmd - - def test_make_default_shell(self): - command = self._makeOne() - interact = DummyInteractor() - shell = command.make_default_shell(interact) - shell({'foo': 'bar'}, 'a help message') - self.assertEqual(interact.local, {'foo': 'bar'}) - self.assertTrue('a help message' in interact.banner) - - def test_make_ipython_v0_11_shell(self): - command = self._makeOne() - ipshell_factory = DummyIPShellFactory() - shell = command.make_ipython_v0_11_shell(ipshell_factory) - shell({'foo': 'bar'}, 'a help message') - self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'}) - self.assertTrue('a help message' in ipshell_factory.kw['banner2']) - self.assertTrue(ipshell_factory.shell.called) - - def test_make_ipython_v0_10_shell(self): - command = self._makeOne() - ipshell_factory = DummyIPShellFactory() - shell = command.make_ipython_v0_10_shell(ipshell_factory) - shell({'foo': 'bar'}, 'a help message') - self.assertEqual(ipshell_factory.kw['argv'], []) - self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'}) - self.assertTrue('a help message' in ipshell_factory.shell.banner) - self.assertTrue(ipshell_factory.shell.called) - - def test_command_loads_default_shell(self): - command = self._makeOne() - shell = DummyShell() - command.make_ipython_v0_11_shell = lambda: None - command.make_ipython_v0_10_shell = lambda: None - command.make_default_shell = lambda: shell - command.run() - self.assertTrue(self.config_factory.parser) - self.assertEqual(self.config_factory.parser.filename, - '/foo/bar/myapp.ini') - self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') - self.assertEqual(shell.env, { - 'app':self.bootstrap.app, 'root':self.bootstrap.root, - 'registry':self.bootstrap.registry, - 'request':self.bootstrap.request, - 'root_factory':self.bootstrap.root_factory, - }) - self.assertTrue(self.bootstrap.closer.called) - self.assertTrue(shell.help) - - def test_command_loads_default_shell_with_ipython_disabled(self): - command = self._makeOne() - shell = DummyShell() - bad_shell = DummyShell() - command.make_ipython_v0_11_shell = lambda: bad_shell - command.make_ipython_v0_10_shell = lambda: bad_shell - command.make_default_shell = lambda: shell - command.options.disable_ipython = True - command.run() - self.assertTrue(self.config_factory.parser) - self.assertEqual(self.config_factory.parser.filename, - '/foo/bar/myapp.ini') - self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') - self.assertEqual(shell.env, { - 'app':self.bootstrap.app, 'root':self.bootstrap.root, - 'registry':self.bootstrap.registry, - 'request':self.bootstrap.request, - 'root_factory':self.bootstrap.root_factory, - }) - self.assertEqual(bad_shell.env, {}) - self.assertTrue(self.bootstrap.closer.called) - self.assertTrue(shell.help) - - def test_command_loads_ipython_v0_11(self): - command = self._makeOne() - shell = DummyShell() - command.make_ipython_v0_11_shell = lambda: shell - command.make_ipython_v0_10_shell = lambda: None - command.make_default_shell = lambda: None - command.options.disable_ipython = False - command.run() - self.assertTrue(self.config_factory.parser) - self.assertEqual(self.config_factory.parser.filename, - '/foo/bar/myapp.ini') - self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') - self.assertEqual(shell.env, { - 'app':self.bootstrap.app, 'root':self.bootstrap.root, - 'registry':self.bootstrap.registry, - 'request':self.bootstrap.request, - 'root_factory':self.bootstrap.root_factory, - }) - self.assertTrue(self.bootstrap.closer.called) - self.assertTrue(shell.help) - - def test_command_loads_ipython_v0_10(self): - command = self._makeOne() - shell = DummyShell() - command.make_ipython_v0_11_shell = lambda: None - command.make_ipython_v0_10_shell = lambda: shell - command.make_default_shell = lambda: None - command.options.disable_ipython = False - command.run() - self.assertTrue(self.config_factory.parser) - self.assertEqual(self.config_factory.parser.filename, - '/foo/bar/myapp.ini') - self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') - self.assertEqual(shell.env, { - 'app':self.bootstrap.app, 'root':self.bootstrap.root, - 'registry':self.bootstrap.registry, - 'request':self.bootstrap.request, - 'root_factory':self.bootstrap.root_factory, - }) - self.assertTrue(self.bootstrap.closer.called) - self.assertTrue(shell.help) - - def test_command_loads_custom_items(self): - command = self._makeOne() - model = Dummy() - self.config_factory.items = [('m', model)] - shell = DummyShell() - command.run(shell) - self.assertTrue(self.config_factory.parser) - self.assertEqual(self.config_factory.parser.filename, - '/foo/bar/myapp.ini') - self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') - self.assertEqual(shell.env, { - 'app':self.bootstrap.app, 'root':self.bootstrap.root, - 'registry':self.bootstrap.registry, - 'request':self.bootstrap.request, - 'root_factory':self.bootstrap.root_factory, - 'm':model, - }) - self.assertTrue(self.bootstrap.closer.called) - self.assertTrue(shell.help) - - def test_command_setup(self): - command = self._makeOne() - def setup(env): - env['a'] = 1 - env['root'] = 'root override' - self.config_factory.items = [('setup', setup)] - shell = DummyShell() - command.run(shell) - self.assertTrue(self.config_factory.parser) - self.assertEqual(self.config_factory.parser.filename, - '/foo/bar/myapp.ini') - self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') - self.assertEqual(shell.env, { - 'app':self.bootstrap.app, 'root':'root override', - 'registry':self.bootstrap.registry, - 'request':self.bootstrap.request, - 'root_factory':self.bootstrap.root_factory, - 'a':1, - }) - self.assertTrue(self.bootstrap.closer.called) - self.assertTrue(shell.help) - - def test_command_loads_check_variable_override_order(self): - command = self._makeOne() - model = Dummy() - def setup(env): - env['a'] = 1 - env['m'] = 'model override' - env['root'] = 'root override' - self.config_factory.items = [('setup', setup), ('m', model)] - shell = DummyShell() - command.run(shell) - self.assertTrue(self.config_factory.parser) - self.assertEqual(self.config_factory.parser.filename, - '/foo/bar/myapp.ini') - self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') - self.assertEqual(shell.env, { - 'app':self.bootstrap.app, 'root':'root override', - 'registry':self.bootstrap.registry, - 'request':self.bootstrap.request, - 'root_factory':self.bootstrap.root_factory, - 'a':1, 'm':model, - }) - self.assertTrue(self.bootstrap.closer.called) - self.assertTrue(shell.help) - - def test_command_loads_setup_from_options(self): - command = self._makeOne() - def setup(env): - env['a'] = 1 - env['root'] = 'root override' - model = Dummy() - self.config_factory.items = [('setup', 'abc'), - ('m', model)] - command.options.setup = setup - shell = DummyShell() - command.run(shell) - self.assertTrue(self.config_factory.parser) - self.assertEqual(self.config_factory.parser.filename, - '/foo/bar/myapp.ini') - self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') - self.assertEqual(shell.env, { - 'app':self.bootstrap.app, 'root':'root override', - 'registry':self.bootstrap.registry, - 'request':self.bootstrap.request, - 'root_factory':self.bootstrap.root_factory, - 'a':1, 'm':model, - }) - self.assertTrue(self.bootstrap.closer.called) - self.assertTrue(shell.help) - - def test_command_custom_section_override(self): - command = self._makeOne() - dummy = Dummy() - self.config_factory.items = [('app', dummy), ('root', dummy), - ('registry', dummy), ('request', dummy)] - shell = DummyShell() - command.run(shell) - self.assertTrue(self.config_factory.parser) - self.assertEqual(self.config_factory.parser.filename, - '/foo/bar/myapp.ini') - self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') - self.assertEqual(shell.env, { - 'app':dummy, 'root':dummy, 'registry':dummy, 'request':dummy, - 'root_factory':self.bootstrap.root_factory, - }) - self.assertTrue(self.bootstrap.closer.called) - self.assertTrue(shell.help) - -class TestPRoutesCommand(unittest.TestCase): - def _getTargetClass(self): - from pyramid.scripts.proutes import PRoutesCommand - return PRoutesCommand - - def _makeOne(self): - cmd = self._getTargetClass()([]) - cmd.bootstrap = (DummyBootstrap(),) - cmd.args = ('/foo/bar/myapp.ini#myapp',) - return cmd - - def test_no_routes(self): - command = self._makeOne() - mapper = DummyMapper() - command._get_mapper = lambda *arg: mapper - L = [] - command.out = L.append - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L, []) - - def test_no_mapper(self): - command = self._makeOne() - command._get_mapper = lambda *arg:None - L = [] - command.out = L.append - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L, []) - - def test_single_route_no_route_registered(self): - command = self._makeOne() - route = DummyRoute('a', '/a') - mapper = DummyMapper(route) - command._get_mapper = lambda *arg: mapper - L = [] - command.out = L.append - result = command.run() - self.assertEqual(result, None) - self.assertEqual(len(L), 3) - self.assertEqual(L[-1].split(), ['a', '/a', '<unknown>']) - - def test_single_route_no_views_registered(self): - from zope.interface import Interface - from pyramid.registry import Registry - from pyramid.interfaces import IRouteRequest - registry = Registry() - def view():pass - class IMyRoute(Interface): - pass - registry.registerUtility(IMyRoute, IRouteRequest, name='a') - command = self._makeOne() - route = DummyRoute('a', '/a') - mapper = DummyMapper(route) - command._get_mapper = lambda *arg: mapper - L = [] - command.out = L.append - command.bootstrap = (DummyBootstrap(registry=registry),) - result = command.run() - self.assertEqual(result, None) - self.assertEqual(len(L), 3) - self.assertEqual(L[-1].split()[:3], ['a', '/a', 'None']) - - def test_single_route_one_view_registered(self): - from zope.interface import Interface - from pyramid.registry import Registry - from pyramid.interfaces import IRouteRequest - from pyramid.interfaces import IViewClassifier - from pyramid.interfaces import IView - registry = Registry() - def view():pass - class IMyRoute(Interface): - pass - registry.registerAdapter(view, - (IViewClassifier, IMyRoute, Interface), - IView, '') - registry.registerUtility(IMyRoute, IRouteRequest, name='a') - command = self._makeOne() - route = DummyRoute('a', '/a') - mapper = DummyMapper(route) - command._get_mapper = lambda *arg: mapper - L = [] - command.out = L.append - command.bootstrap = (DummyBootstrap(registry=registry),) - result = command.run() - self.assertEqual(result, None) - self.assertEqual(len(L), 3) - self.assertEqual(L[-1].split()[:4], ['a', '/a', '<function', 'view']) - - def test_single_route_one_view_registered_with_factory(self): - from zope.interface import Interface - from pyramid.registry import Registry - from pyramid.interfaces import IRouteRequest - from pyramid.interfaces import IViewClassifier - from pyramid.interfaces import IView - registry = Registry() - def view():pass - class IMyRoot(Interface): - pass - class IMyRoute(Interface): - pass - registry.registerAdapter(view, - (IViewClassifier, IMyRoute, IMyRoot), - IView, '') - registry.registerUtility(IMyRoute, IRouteRequest, name='a') - command = self._makeOne() - def factory(request): pass - route = DummyRoute('a', '/a', factory=factory) - mapper = DummyMapper(route) - command._get_mapper = lambda *arg: mapper - L = [] - command.out = L.append - command.bootstrap = (DummyBootstrap(registry=registry),) - result = command.run() - self.assertEqual(result, None) - self.assertEqual(len(L), 3) - self.assertEqual(L[-1].split()[:3], ['a', '/a', '<unknown>']) - - def test__get_mapper(self): - from pyramid.registry import Registry - from pyramid.urldispatch import RoutesMapper - command = self._makeOne() - registry = Registry() - result = command._get_mapper(registry) - self.assertEqual(result.__class__, RoutesMapper) - -class TestPViewsCommand(unittest.TestCase): - def _getTargetClass(self): - from pyramid.scripts.pviews import PViewsCommand - return PViewsCommand - - def _makeOne(self, registry=None): - cmd = self._getTargetClass()([]) - cmd.bootstrap = (DummyBootstrap(registry=registry),) - cmd.args = ('/foo/bar/myapp.ini#myapp',) - return cmd - - def _register_mapper(self, registry, routes): - from pyramid.interfaces import IRoutesMapper - mapper = DummyMapper(*routes) - registry.registerUtility(mapper, IRoutesMapper) - - def test__find_view_no_match(self): - from pyramid.registry import Registry - registry = Registry() - self._register_mapper(registry, []) - command = self._makeOne(registry) - result = command._find_view('/a', registry) - self.assertEqual(result, None) - - def test__find_view_no_match_multiview_registered(self): - from zope.interface import implementer - from zope.interface import providedBy - from pyramid.interfaces import IRequest - from pyramid.interfaces import IViewClassifier - from pyramid.interfaces import IMultiView - from pyramid.traversal import DefaultRootFactory - from pyramid.registry import Registry - registry = Registry() - @implementer(IMultiView) - class View1(object): - pass - request = DummyRequest({'PATH_INFO':'/a'}) - root = DefaultRootFactory(request) - root_iface = providedBy(root) - registry.registerAdapter(View1(), - (IViewClassifier, IRequest, root_iface), - IMultiView) - self._register_mapper(registry, []) - command = self._makeOne(registry=registry) - result = command._find_view('/x', registry) - self.assertEqual(result, None) - - def test__find_view_traversal(self): - from zope.interface import providedBy - from pyramid.interfaces import IRequest - from pyramid.interfaces import IViewClassifier - from pyramid.interfaces import IView - from pyramid.traversal import DefaultRootFactory - from pyramid.registry import Registry - registry = Registry() - def view1(): pass - request = DummyRequest({'PATH_INFO':'/a'}) - root = DefaultRootFactory(request) - root_iface = providedBy(root) - registry.registerAdapter(view1, - (IViewClassifier, IRequest, root_iface), - IView, name='a') - self._register_mapper(registry, []) - command = self._makeOne(registry=registry) - result = command._find_view('/a', registry) - self.assertEqual(result, view1) - - def test__find_view_traversal_multiview(self): - from zope.interface import implementer - from zope.interface import providedBy - from pyramid.interfaces import IRequest - from pyramid.interfaces import IViewClassifier - from pyramid.interfaces import IMultiView - from pyramid.traversal import DefaultRootFactory - from pyramid.registry import Registry - registry = Registry() - @implementer(IMultiView) - class View1(object): - pass - request = DummyRequest({'PATH_INFO':'/a'}) - root = DefaultRootFactory(request) - root_iface = providedBy(root) - view = View1() - registry.registerAdapter(view, - (IViewClassifier, IRequest, root_iface), - IMultiView, name='a') - self._register_mapper(registry, []) - command = self._makeOne(registry=registry) - result = command._find_view('/a', registry) - self.assertEqual(result, view) - - def test__find_view_route_no_multiview(self): - from zope.interface import Interface - from zope.interface import implementer - from pyramid.interfaces import IRouteRequest - from pyramid.interfaces import IViewClassifier - from pyramid.interfaces import IView - from pyramid.registry import Registry - registry = Registry() - def view():pass - class IMyRoot(Interface): - pass - class IMyRoute(Interface): - pass - registry.registerAdapter(view, - (IViewClassifier, IMyRoute, IMyRoot), - IView, '') - registry.registerUtility(IMyRoute, IRouteRequest, name='a') - @implementer(IMyRoot) - class Factory(object): - def __init__(self, request): - pass - routes = [DummyRoute('a', '/a', factory=Factory, matchdict={}), - DummyRoute('b', '/b', factory=Factory)] - self._register_mapper(registry, routes) - command = self._makeOne(registry=registry) - result = command._find_view('/a', registry) - self.assertEqual(result, view) - - def test__find_view_route_multiview_no_view_registered(self): - from zope.interface import Interface - from zope.interface import implementer - from pyramid.interfaces import IRouteRequest - from pyramid.interfaces import IMultiView - from pyramid.interfaces import IRootFactory - from pyramid.registry import Registry - registry = Registry() - def view1():pass - def view2():pass - class IMyRoot(Interface): - pass - class IMyRoute1(Interface): - pass - class IMyRoute2(Interface): - pass - registry.registerUtility(IMyRoute1, IRouteRequest, name='a') - registry.registerUtility(IMyRoute2, IRouteRequest, name='b') - @implementer(IMyRoot) - class Factory(object): - def __init__(self, request): - pass - registry.registerUtility(Factory, IRootFactory) - routes = [DummyRoute('a', '/a', matchdict={}), - DummyRoute('b', '/a', matchdict={})] - self._register_mapper(registry, routes) - command = self._makeOne(registry=registry) - result = command._find_view('/a', registry) - self.assertTrue(IMultiView.providedBy(result)) - - def test__find_view_route_multiview(self): - from zope.interface import Interface - from zope.interface import implementer - from pyramid.interfaces import IRouteRequest - from pyramid.interfaces import IViewClassifier - from pyramid.interfaces import IView - from pyramid.interfaces import IMultiView - from pyramid.interfaces import IRootFactory - from pyramid.registry import Registry - registry = Registry() - def view1():pass - def view2():pass - class IMyRoot(Interface): - pass - class IMyRoute1(Interface): - pass - class IMyRoute2(Interface): - pass - registry.registerAdapter(view1, - (IViewClassifier, IMyRoute1, IMyRoot), - IView, '') - registry.registerAdapter(view2, - (IViewClassifier, IMyRoute2, IMyRoot), - IView, '') - registry.registerUtility(IMyRoute1, IRouteRequest, name='a') - registry.registerUtility(IMyRoute2, IRouteRequest, name='b') - @implementer(IMyRoot) - class Factory(object): - def __init__(self, request): - pass - registry.registerUtility(Factory, IRootFactory) - routes = [DummyRoute('a', '/a', matchdict={}), - DummyRoute('b', '/a', matchdict={})] - self._register_mapper(registry, routes) - command = self._makeOne(registry=registry) - result = command._find_view('/a', registry) - self.assertTrue(IMultiView.providedBy(result)) - self.assertEqual(len(result.views), 2) - self.assertTrue((None, view1, None) in result.views) - self.assertTrue((None, view2, None) in result.views) - - def test__find_multi_routes_all_match(self): - command = self._makeOne() - def factory(request): pass - routes = [DummyRoute('a', '/a', factory=factory, matchdict={}), - DummyRoute('b', '/a', factory=factory, matchdict={})] - mapper = DummyMapper(*routes) - request = DummyRequest({'PATH_INFO':'/a'}) - result = command._find_multi_routes(mapper, request) - self.assertEqual(result, [{'match':{}, 'route':routes[0]}, - {'match':{}, 'route':routes[1]}]) - - def test__find_multi_routes_some_match(self): - command = self._makeOne() - def factory(request): pass - routes = [DummyRoute('a', '/a', factory=factory), - DummyRoute('b', '/a', factory=factory, matchdict={})] - mapper = DummyMapper(*routes) - request = DummyRequest({'PATH_INFO':'/a'}) - result = command._find_multi_routes(mapper, request) - self.assertEqual(result, [{'match':{}, 'route':routes[1]}]) - - def test__find_multi_routes_none_match(self): - command = self._makeOne() - def factory(request): pass - routes = [DummyRoute('a', '/a', factory=factory), - DummyRoute('b', '/a', factory=factory)] - mapper = DummyMapper(*routes) - request = DummyRequest({'PATH_INFO':'/a'}) - result = command._find_multi_routes(mapper, request) - self.assertEqual(result, []) - - def test_views_command_not_found(self): - from pyramid.registry import Registry - registry = Registry() - command = self._makeOne(registry=registry) - L = [] - command.out = L.append - command._find_view = lambda arg1, arg2: None - command.args = ('/foo/bar/myapp.ini#myapp', '/a') - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L[1], 'URL = /a') - self.assertEqual(L[3], ' Not found.') - - def test_views_command_not_found_url_starts_without_slash(self): - from pyramid.registry import Registry - registry = Registry() - command = self._makeOne(registry=registry) - L = [] - command.out = L.append - command._find_view = lambda arg1, arg2: None - command.args = ('/foo/bar/myapp.ini#myapp', 'a') - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L[1], 'URL = /a') - self.assertEqual(L[3], ' Not found.') - - def test_views_command_single_view_traversal(self): - from pyramid.registry import Registry - registry = Registry() - command = self._makeOne(registry=registry) - L = [] - command.out = L.append - view = DummyView(context='context', view_name='a') - command._find_view = lambda arg1, arg2: view - command.args = ('/foo/bar/myapp.ini#myapp', '/a') - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L[1], 'URL = /a') - self.assertEqual(L[3], ' context: context') - self.assertEqual(L[4], ' view name: a') - self.assertEqual(L[8], ' pyramid.tests.test_scripts.DummyView') - - def test_views_command_single_view_function_traversal(self): - from pyramid.registry import Registry - registry = Registry() - command = self._makeOne(registry=registry) - L = [] - command.out = L.append - def view(): pass - view.__request_attrs__ = {'context': 'context', 'view_name': 'a'} - command._find_view = lambda arg1, arg2: view - command.args = ('/foo/bar/myapp.ini#myapp', '/a') - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L[1], 'URL = /a') - self.assertEqual(L[3], ' context: context') - self.assertEqual(L[4], ' view name: a') - self.assertEqual(L[8], ' pyramid.tests.test_scripts.view') - - def test_views_command_single_view_traversal_with_permission(self): - from pyramid.registry import Registry - registry = Registry() - command = self._makeOne(registry=registry) - L = [] - command.out = L.append - view = DummyView(context='context', view_name='a') - view.__permission__ = 'test' - command._find_view = lambda arg1, arg2: view - command.args = ('/foo/bar/myapp.ini#myapp', '/a') - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L[1], 'URL = /a') - self.assertEqual(L[3], ' context: context') - self.assertEqual(L[4], ' view name: a') - self.assertEqual(L[8], ' pyramid.tests.test_scripts.DummyView') - self.assertEqual(L[9], ' required permission = test') - - def test_views_command_single_view_traversal_with_predicates(self): - from pyramid.registry import Registry - registry = Registry() - command = self._makeOne(registry=registry) - L = [] - command.out = L.append - def predicate(): pass - predicate.__text__ = "predicate = x" - view = DummyView(context='context', view_name='a') - view.__predicates__ = [predicate] - command._find_view = lambda arg1, arg2: view - command.args = ('/foo/bar/myapp.ini#myapp', '/a') - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L[1], 'URL = /a') - self.assertEqual(L[3], ' context: context') - self.assertEqual(L[4], ' view name: a') - self.assertEqual(L[8], ' pyramid.tests.test_scripts.DummyView') - self.assertEqual(L[9], ' view predicates (predicate = x)') - - def test_views_command_single_view_route(self): - from pyramid.registry import Registry - registry = Registry() - command = self._makeOne(registry=registry) - L = [] - command.out = L.append - route = DummyRoute('a', '/a', matchdict={}) - view = DummyView(context='context', view_name='a', - matched_route=route, subpath='') - command._find_view = lambda arg1, arg2: view - command.args = ('/foo/bar/myapp.ini#myapp', '/a') - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L[1], 'URL = /a') - self.assertEqual(L[3], ' context: context') - self.assertEqual(L[4], ' view name: a') - self.assertEqual(L[6], ' Route:') - self.assertEqual(L[8], ' route name: a') - self.assertEqual(L[9], ' route pattern: /a') - self.assertEqual(L[10], ' route path: /a') - self.assertEqual(L[11], ' subpath: ') - self.assertEqual(L[15], ' pyramid.tests.test_scripts.DummyView') - - def test_views_command_multi_view_nested(self): - from pyramid.registry import Registry - registry = Registry() - command = self._makeOne(registry=registry) - L = [] - command.out = L.append - view1 = DummyView(context='context', view_name='a1') - view1.__name__ = 'view1' - view1.__view_attr__ = 'call' - multiview1 = DummyMultiView(view1, context='context', view_name='a1') - multiview2 = DummyMultiView(multiview1, context='context', - view_name='a') - command._find_view = lambda arg1, arg2: multiview2 - command.args = ('/foo/bar/myapp.ini#myapp', '/a') - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L[1], 'URL = /a') - self.assertEqual(L[3], ' context: context') - self.assertEqual(L[4], ' view name: a') - self.assertEqual(L[8], ' pyramid.tests.test_scripts.DummyMultiView') - self.assertEqual(L[12], ' pyramid.tests.test_scripts.view1.call') - - def test_views_command_single_view_route_with_route_predicates(self): - from pyramid.registry import Registry - registry = Registry() - command = self._makeOne(registry=registry) - L = [] - command.out = L.append - def predicate(): pass - predicate.__text__ = "predicate = x" - route = DummyRoute('a', '/a', matchdict={}, predicate=predicate) - view = DummyView(context='context', view_name='a', - matched_route=route, subpath='') - command._find_view = lambda arg1, arg2: view - command.args = ('/foo/bar/myapp.ini#myapp', '/a') - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L[1], 'URL = /a') - self.assertEqual(L[3], ' context: context') - self.assertEqual(L[4], ' view name: a') - self.assertEqual(L[6], ' Route:') - self.assertEqual(L[8], ' route name: a') - self.assertEqual(L[9], ' route pattern: /a') - self.assertEqual(L[10], ' route path: /a') - self.assertEqual(L[11], ' subpath: ') - self.assertEqual(L[12], ' route predicates (predicate = x)') - self.assertEqual(L[16], ' pyramid.tests.test_scripts.DummyView') - - def test_views_command_multiview(self): - from pyramid.registry import Registry - registry = Registry() - command = self._makeOne(registry=registry) - L = [] - command.out = L.append - view = DummyView(context='context') - view.__name__ = 'view' - view.__view_attr__ = 'call' - multiview = DummyMultiView(view, context='context', view_name='a') - command._find_view = lambda arg1, arg2: multiview - command.args = ('/foo/bar/myapp.ini#myapp', '/a') - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L[1], 'URL = /a') - self.assertEqual(L[3], ' context: context') - self.assertEqual(L[4], ' view name: a') - self.assertEqual(L[8], ' pyramid.tests.test_scripts.view.call') - - def test_views_command_multiview_with_permission(self): - from pyramid.registry import Registry - registry = Registry() - command = self._makeOne(registry=registry) - L = [] - command.out = L.append - view = DummyView(context='context') - view.__name__ = 'view' - view.__view_attr__ = 'call' - view.__permission__ = 'test' - multiview = DummyMultiView(view, context='context', view_name='a') - command._find_view = lambda arg1, arg2: multiview - command.args = ('/foo/bar/myapp.ini#myapp', '/a') - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L[1], 'URL = /a') - self.assertEqual(L[3], ' context: context') - self.assertEqual(L[4], ' view name: a') - self.assertEqual(L[8], ' pyramid.tests.test_scripts.view.call') - self.assertEqual(L[9], ' required permission = test') - - def test_views_command_multiview_with_predicates(self): - from pyramid.registry import Registry - registry = Registry() - command = self._makeOne(registry=registry) - L = [] - command.out = L.append - def predicate(): pass - predicate.__text__ = "predicate = x" - view = DummyView(context='context') - view.__name__ = 'view' - view.__view_attr__ = 'call' - view.__predicates__ = [predicate] - multiview = DummyMultiView(view, context='context', view_name='a') - command._find_view = lambda arg1, arg2: multiview - command.args = ('/foo/bar/myapp.ini#myapp', '/a') - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L[1], 'URL = /a') - self.assertEqual(L[3], ' context: context') - self.assertEqual(L[4], ' view name: a') - self.assertEqual(L[8], ' pyramid.tests.test_scripts.view.call') - self.assertEqual(L[9], ' view predicates (predicate = x)') - -class TestPTweensCommand(unittest.TestCase): - def _getTargetClass(self): - from pyramid.scripts.ptweens import PTweensCommand - return PTweensCommand - - def _makeOne(self): - cmd = self._getTargetClass()([]) - cmd.bootstrap = (DummyBootstrap(),) - cmd.args = ('/foo/bar/myapp.ini#myapp',) - return cmd - - def test_command_no_tweens(self): - command = self._makeOne() - command._get_tweens = lambda *arg: None - L = [] - command.out = L.append - result = command.run() - self.assertEqual(result, None) - self.assertEqual(L, []) - - def test_command_implicit_tweens_only(self): - command = self._makeOne() - tweens = DummyTweens([('name', 'item')], None) - command._get_tweens = lambda *arg: tweens - L = [] - command.out = L.append - result = command.run() - self.assertEqual(result, None) - self.assertEqual( - L[0], - '"pyramid.tweens" config value NOT set (implicitly ordered tweens ' - 'used)') - - def test_command_implicit_and_explicit_tweens(self): - command = self._makeOne() - tweens = DummyTweens([('name', 'item')], [('name2', 'item2')]) - command._get_tweens = lambda *arg: tweens - L = [] - command.out = L.append - result = command.run() - self.assertEqual(result, None) - self.assertEqual( - L[0], - '"pyramid.tweens" config value set (explicitly ordered tweens used)') - - def test__get_tweens(self): - command = self._makeOne() - registry = DummyRegistry() - self.assertEqual(command._get_tweens(registry), None) - -class DummyTweens(object): - def __init__(self, implicit, explicit): - self._implicit = implicit - self.explicit = explicit - self.name_to_alias = {} - def implicit(self): - return self._implicit - -class Dummy: - pass - -dummy_root = Dummy() - -class DummyRegistry(object): - settings = {} - def queryUtility(self, iface, default=None, name=''): - return default - -dummy_registry = DummyRegistry() - -class DummyShell(object): - env = {} - help = '' - - def __call__(self, env, help): - self.env = env - self.help = help - -class DummyInteractor: - def __call__(self, banner, local): - self.banner = banner - self.local = local - -class DummyIPShell(object): - IP = Dummy() - IP.BANNER = 'foo' - - def set_banner(self, banner): - self.banner = banner - - def __call__(self): - self.called = True - -class DummyIPShellFactory(object): - def __call__(self, **kw): - self.kw = kw - self.shell = DummyIPShell() - return self.shell - -class DummyApp: - def __init__(self): - self.registry = dummy_registry - -class DummyMapper(object): - def __init__(self, *routes): - self.routes = routes - - def get_routes(self): - return self.routes - -class DummyRoute(object): - def __init__(self, name, pattern, factory=None, - matchdict=None, predicate=None): - self.name = name - self.path = pattern - self.pattern = pattern - self.factory = factory - self.matchdict = matchdict - self.predicates = [] - if predicate is not None: - self.predicates = [predicate] - - def match(self, route): - return self.matchdict - -class DummyRequest: - application_url = 'http://example.com:5432' - script_name = '' - def __init__(self, environ): - self.environ = environ - self.matchdict = {} - -class DummyView(object): - def __init__(self, **attrs): - self.__request_attrs__ = attrs - -from zope.interface import implementer -from pyramid.interfaces import IMultiView -@implementer(IMultiView) -class DummyMultiView(object): - - def __init__(self, *views, **attrs): - self.views = [(None, view, None) for view in views] - self.__request_attrs__ = attrs - -class DummyConfigParser(object): - def __init__(self, result): - self.result = result - - def read(self, filename): - self.filename = filename - - def items(self, section): - self.section = section - if self.result is None: - from pyramid.compat import configparser - raise configparser.NoSectionError(section) - return self.result - -class DummyConfigParserFactory(object): - items = None - - def __call__(self): - self.parser = DummyConfigParser(self.items) - return self.parser - -class DummyCloser(object): - def __call__(self): - self.called = True - -class DummyBootstrap(object): - def __init__(self, app=None, registry=None, request=None, root=None, - root_factory=None, closer=None): - self.app = app or DummyApp() - if registry is None: - registry = DummyRegistry() - self.registry = registry - if request is None: - request = DummyRequest({}) - self.request = request - if root is None: - root = Dummy() - self.root = root - if root_factory is None: - root_factory = Dummy() - self.root_factory = root_factory - if closer is None: - closer = DummyCloser() - self.closer = closer - - def __call__(self, *a, **kw): - self.a = a - self.kw = kw - return { - 'app': self.app, - 'registry': self.registry, - 'request': self.request, - 'root': self.root, - 'root_factory': self.root_factory, - 'closer': self.closer, - } diff --git a/pyramid/tests/test_scripts/__init__.py b/pyramid/tests/test_scripts/__init__.py new file mode 100644 index 000000000..5bb534f79 --- /dev/null +++ b/pyramid/tests/test_scripts/__init__.py @@ -0,0 +1 @@ +# package diff --git a/pyramid/tests/test_scripts/dummy.py b/pyramid/tests/test_scripts/dummy.py new file mode 100644 index 000000000..3275f7804 --- /dev/null +++ b/pyramid/tests/test_scripts/dummy.py @@ -0,0 +1,151 @@ +class DummyTweens(object): + def __init__(self, implicit, explicit): + self._implicit = implicit + self.explicit = explicit + self.name_to_alias = {} + def implicit(self): + return self._implicit + +class Dummy: + pass + +dummy_root = Dummy() + +class DummyRegistry(object): + settings = {} + def queryUtility(self, iface, default=None, name=''): + return default + +dummy_registry = DummyRegistry() + +class DummyShell(object): + env = {} + help = '' + + def __call__(self, env, help): + self.env = env + self.help = help + +class DummyInteractor: + def __call__(self, banner, local): + self.banner = banner + self.local = local + +class DummyIPShell(object): + IP = Dummy() + IP.BANNER = 'foo' + + def set_banner(self, banner): + self.banner = banner + + def __call__(self): + self.called = True + +class DummyIPShellFactory(object): + def __call__(self, **kw): + self.kw = kw + self.shell = DummyIPShell() + return self.shell + +class DummyApp: + def __init__(self): + self.registry = dummy_registry + +class DummyMapper(object): + def __init__(self, *routes): + self.routes = routes + + def get_routes(self): + return self.routes + +class DummyRoute(object): + def __init__(self, name, pattern, factory=None, + matchdict=None, predicate=None): + self.name = name + self.path = pattern + self.pattern = pattern + self.factory = factory + self.matchdict = matchdict + self.predicates = [] + if predicate is not None: + self.predicates = [predicate] + + def match(self, route): + return self.matchdict + +class DummyRequest: + application_url = 'http://example.com:5432' + script_name = '' + def __init__(self, environ): + self.environ = environ + self.matchdict = {} + +class DummyView(object): + def __init__(self, **attrs): + self.__request_attrs__ = attrs + +from zope.interface import implementer +from pyramid.interfaces import IMultiView +@implementer(IMultiView) +class DummyMultiView(object): + + def __init__(self, *views, **attrs): + self.views = [(None, view, None) for view in views] + self.__request_attrs__ = attrs + +class DummyConfigParser(object): + def __init__(self, result): + self.result = result + + def read(self, filename): + self.filename = filename + + def items(self, section): + self.section = section + if self.result is None: + from pyramid.compat import configparser + raise configparser.NoSectionError(section) + return self.result + +class DummyConfigParserFactory(object): + items = None + + def __call__(self): + self.parser = DummyConfigParser(self.items) + return self.parser + +class DummyCloser(object): + def __call__(self): + self.called = True + +class DummyBootstrap(object): + def __init__(self, app=None, registry=None, request=None, root=None, + root_factory=None, closer=None): + self.app = app or DummyApp() + if registry is None: + registry = DummyRegistry() + self.registry = registry + if request is None: + request = DummyRequest({}) + self.request = request + if root is None: + root = Dummy() + self.root = root + if root_factory is None: + root_factory = Dummy() + self.root_factory = root_factory + if closer is None: + closer = DummyCloser() + self.closer = closer + + def __call__(self, *a, **kw): + self.a = a + self.kw = kw + return { + 'app': self.app, + 'registry': self.registry, + 'request': self.request, + 'root': self.root, + 'root_factory': self.root_factory, + 'closer': self.closer, + } diff --git a/pyramid/tests/test_scripts/test_proutes.py b/pyramid/tests/test_scripts/test_proutes.py new file mode 100644 index 000000000..a8b577316 --- /dev/null +++ b/pyramid/tests/test_scripts/test_proutes.py @@ -0,0 +1,129 @@ +import unittest +from pyramid.tests.test_scripts import dummy + +class TestPRoutesCommand(unittest.TestCase): + def _getTargetClass(self): + from pyramid.scripts.proutes import PRoutesCommand + return PRoutesCommand + + def _makeOne(self): + cmd = self._getTargetClass()([]) + cmd.bootstrap = (dummy.DummyBootstrap(),) + cmd.args = ('/foo/bar/myapp.ini#myapp',) + return cmd + + def test_no_routes(self): + command = self._makeOne() + mapper = dummy.DummyMapper() + command._get_mapper = lambda *arg: mapper + L = [] + command.out = L.append + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L, []) + + def test_no_mapper(self): + command = self._makeOne() + command._get_mapper = lambda *arg:None + L = [] + command.out = L.append + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L, []) + + def test_single_route_no_route_registered(self): + command = self._makeOne() + route = dummy.DummyRoute('a', '/a') + mapper = dummy.DummyMapper(route) + command._get_mapper = lambda *arg: mapper + L = [] + command.out = L.append + result = command.run() + self.assertEqual(result, None) + self.assertEqual(len(L), 3) + self.assertEqual(L[-1].split(), ['a', '/a', '<unknown>']) + + def test_single_route_no_views_registered(self): + from zope.interface import Interface + from pyramid.registry import Registry + from pyramid.interfaces import IRouteRequest + registry = Registry() + def view():pass + class IMyRoute(Interface): + pass + registry.registerUtility(IMyRoute, IRouteRequest, name='a') + command = self._makeOne() + route = dummy.DummyRoute('a', '/a') + mapper = dummy.DummyMapper(route) + command._get_mapper = lambda *arg: mapper + L = [] + command.out = L.append + command.bootstrap = (dummy.DummyBootstrap(registry=registry),) + result = command.run() + self.assertEqual(result, None) + self.assertEqual(len(L), 3) + self.assertEqual(L[-1].split()[:3], ['a', '/a', 'None']) + + def test_single_route_one_view_registered(self): + from zope.interface import Interface + from pyramid.registry import Registry + from pyramid.interfaces import IRouteRequest + from pyramid.interfaces import IViewClassifier + from pyramid.interfaces import IView + registry = Registry() + def view():pass + class IMyRoute(Interface): + pass + registry.registerAdapter(view, + (IViewClassifier, IMyRoute, Interface), + IView, '') + registry.registerUtility(IMyRoute, IRouteRequest, name='a') + command = self._makeOne() + route = dummy.DummyRoute('a', '/a') + mapper = dummy.DummyMapper(route) + command._get_mapper = lambda *arg: mapper + L = [] + command.out = L.append + command.bootstrap = (dummy.DummyBootstrap(registry=registry),) + result = command.run() + self.assertEqual(result, None) + self.assertEqual(len(L), 3) + self.assertEqual(L[-1].split()[:4], ['a', '/a', '<function', 'view']) + + def test_single_route_one_view_registered_with_factory(self): + from zope.interface import Interface + from pyramid.registry import Registry + from pyramid.interfaces import IRouteRequest + from pyramid.interfaces import IViewClassifier + from pyramid.interfaces import IView + registry = Registry() + def view():pass + class IMyRoot(Interface): + pass + class IMyRoute(Interface): + pass + registry.registerAdapter(view, + (IViewClassifier, IMyRoute, IMyRoot), + IView, '') + registry.registerUtility(IMyRoute, IRouteRequest, name='a') + command = self._makeOne() + def factory(request): pass + route = dummy.DummyRoute('a', '/a', factory=factory) + mapper = dummy.DummyMapper(route) + command._get_mapper = lambda *arg: mapper + L = [] + command.out = L.append + command.bootstrap = (dummy.DummyBootstrap(registry=registry),) + result = command.run() + self.assertEqual(result, None) + self.assertEqual(len(L), 3) + self.assertEqual(L[-1].split()[:3], ['a', '/a', '<unknown>']) + + def test__get_mapper(self): + from pyramid.registry import Registry + from pyramid.urldispatch import RoutesMapper + command = self._makeOne() + registry = Registry() + result = command._get_mapper(registry) + self.assertEqual(result.__class__, RoutesMapper) + diff --git a/pyramid/tests/test_scripts/test_pshell.py b/pyramid/tests/test_scripts/test_pshell.py new file mode 100644 index 000000000..b0ea8c5ea --- /dev/null +++ b/pyramid/tests/test_scripts/test_pshell.py @@ -0,0 +1,249 @@ +import unittest +from pyramid.tests.test_scripts import dummy + +class TestPShellCommand(unittest.TestCase): + def _getTargetClass(self): + from pyramid.scripts.pshell import PShellCommand + return PShellCommand + + def _makeOne(self, patch_bootstrap=True, patch_config=True, + patch_args=True, patch_options=True): + cmd = self._getTargetClass()([]) + if patch_bootstrap: + self.bootstrap = dummy.DummyBootstrap() + cmd.bootstrap = (self.bootstrap,) + if patch_config: + self.config_factory = dummy.DummyConfigParserFactory() + cmd.ConfigParser = self.config_factory + if patch_args: + self.args = ('/foo/bar/myapp.ini#myapp',) + cmd.args = self.args + if patch_options: + class Options(object): pass + self.options = Options() + self.options.disable_ipython = True + self.options.setup = None + cmd.options = self.options + return cmd + + def test_make_default_shell(self): + command = self._makeOne() + interact = dummy.DummyInteractor() + shell = command.make_default_shell(interact) + shell({'foo': 'bar'}, 'a help message') + self.assertEqual(interact.local, {'foo': 'bar'}) + self.assertTrue('a help message' in interact.banner) + + def test_make_ipython_v0_11_shell(self): + command = self._makeOne() + ipshell_factory = dummy.DummyIPShellFactory() + shell = command.make_ipython_v0_11_shell(ipshell_factory) + shell({'foo': 'bar'}, 'a help message') + self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'}) + self.assertTrue('a help message' in ipshell_factory.kw['banner2']) + self.assertTrue(ipshell_factory.shell.called) + + def test_make_ipython_v0_10_shell(self): + command = self._makeOne() + ipshell_factory = dummy.DummyIPShellFactory() + shell = command.make_ipython_v0_10_shell(ipshell_factory) + shell({'foo': 'bar'}, 'a help message') + self.assertEqual(ipshell_factory.kw['argv'], []) + self.assertEqual(ipshell_factory.kw['user_ns'], {'foo': 'bar'}) + self.assertTrue('a help message' in ipshell_factory.shell.banner) + self.assertTrue(ipshell_factory.shell.called) + + def test_command_loads_default_shell(self): + command = self._makeOne() + shell = dummy.DummyShell() + command.make_ipython_v0_11_shell = lambda: None + command.make_ipython_v0_10_shell = lambda: None + command.make_default_shell = lambda: shell + command.run() + self.assertTrue(self.config_factory.parser) + self.assertEqual(self.config_factory.parser.filename, + '/foo/bar/myapp.ini') + self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') + self.assertEqual(shell.env, { + 'app':self.bootstrap.app, 'root':self.bootstrap.root, + 'registry':self.bootstrap.registry, + 'request':self.bootstrap.request, + 'root_factory':self.bootstrap.root_factory, + }) + self.assertTrue(self.bootstrap.closer.called) + self.assertTrue(shell.help) + + def test_command_loads_default_shell_with_ipython_disabled(self): + command = self._makeOne() + shell = dummy.DummyShell() + bad_shell = dummy.DummyShell() + command.make_ipython_v0_11_shell = lambda: bad_shell + command.make_ipython_v0_10_shell = lambda: bad_shell + command.make_default_shell = lambda: shell + command.options.disable_ipython = True + command.run() + self.assertTrue(self.config_factory.parser) + self.assertEqual(self.config_factory.parser.filename, + '/foo/bar/myapp.ini') + self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') + self.assertEqual(shell.env, { + 'app':self.bootstrap.app, 'root':self.bootstrap.root, + 'registry':self.bootstrap.registry, + 'request':self.bootstrap.request, + 'root_factory':self.bootstrap.root_factory, + }) + self.assertEqual(bad_shell.env, {}) + self.assertTrue(self.bootstrap.closer.called) + self.assertTrue(shell.help) + + def test_command_loads_ipython_v0_11(self): + command = self._makeOne() + shell = dummy.DummyShell() + command.make_ipython_v0_11_shell = lambda: shell + command.make_ipython_v0_10_shell = lambda: None + command.make_default_shell = lambda: None + command.options.disable_ipython = False + command.run() + self.assertTrue(self.config_factory.parser) + self.assertEqual(self.config_factory.parser.filename, + '/foo/bar/myapp.ini') + self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') + self.assertEqual(shell.env, { + 'app':self.bootstrap.app, 'root':self.bootstrap.root, + 'registry':self.bootstrap.registry, + 'request':self.bootstrap.request, + 'root_factory':self.bootstrap.root_factory, + }) + self.assertTrue(self.bootstrap.closer.called) + self.assertTrue(shell.help) + + def test_command_loads_ipython_v0_10(self): + command = self._makeOne() + shell = dummy.DummyShell() + command.make_ipython_v0_11_shell = lambda: None + command.make_ipython_v0_10_shell = lambda: shell + command.make_default_shell = lambda: None + command.options.disable_ipython = False + command.run() + self.assertTrue(self.config_factory.parser) + self.assertEqual(self.config_factory.parser.filename, + '/foo/bar/myapp.ini') + self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') + self.assertEqual(shell.env, { + 'app':self.bootstrap.app, 'root':self.bootstrap.root, + 'registry':self.bootstrap.registry, + 'request':self.bootstrap.request, + 'root_factory':self.bootstrap.root_factory, + }) + self.assertTrue(self.bootstrap.closer.called) + self.assertTrue(shell.help) + + def test_command_loads_custom_items(self): + command = self._makeOne() + model = dummy.Dummy() + self.config_factory.items = [('m', model)] + shell = dummy.DummyShell() + command.run(shell) + self.assertTrue(self.config_factory.parser) + self.assertEqual(self.config_factory.parser.filename, + '/foo/bar/myapp.ini') + self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') + self.assertEqual(shell.env, { + 'app':self.bootstrap.app, 'root':self.bootstrap.root, + 'registry':self.bootstrap.registry, + 'request':self.bootstrap.request, + 'root_factory':self.bootstrap.root_factory, + 'm':model, + }) + self.assertTrue(self.bootstrap.closer.called) + self.assertTrue(shell.help) + + def test_command_setup(self): + command = self._makeOne() + def setup(env): + env['a'] = 1 + env['root'] = 'root override' + self.config_factory.items = [('setup', setup)] + shell = dummy.DummyShell() + command.run(shell) + self.assertTrue(self.config_factory.parser) + self.assertEqual(self.config_factory.parser.filename, + '/foo/bar/myapp.ini') + self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') + self.assertEqual(shell.env, { + 'app':self.bootstrap.app, 'root':'root override', + 'registry':self.bootstrap.registry, + 'request':self.bootstrap.request, + 'root_factory':self.bootstrap.root_factory, + 'a':1, + }) + self.assertTrue(self.bootstrap.closer.called) + self.assertTrue(shell.help) + + def test_command_loads_check_variable_override_order(self): + command = self._makeOne() + model = dummy.Dummy() + def setup(env): + env['a'] = 1 + env['m'] = 'model override' + env['root'] = 'root override' + self.config_factory.items = [('setup', setup), ('m', model)] + shell = dummy.DummyShell() + command.run(shell) + self.assertTrue(self.config_factory.parser) + self.assertEqual(self.config_factory.parser.filename, + '/foo/bar/myapp.ini') + self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') + self.assertEqual(shell.env, { + 'app':self.bootstrap.app, 'root':'root override', + 'registry':self.bootstrap.registry, + 'request':self.bootstrap.request, + 'root_factory':self.bootstrap.root_factory, + 'a':1, 'm':model, + }) + self.assertTrue(self.bootstrap.closer.called) + self.assertTrue(shell.help) + + def test_command_loads_setup_from_options(self): + command = self._makeOne() + def setup(env): + env['a'] = 1 + env['root'] = 'root override' + model = dummy.Dummy() + self.config_factory.items = [('setup', 'abc'), + ('m', model)] + command.options.setup = setup + shell = dummy.DummyShell() + command.run(shell) + self.assertTrue(self.config_factory.parser) + self.assertEqual(self.config_factory.parser.filename, + '/foo/bar/myapp.ini') + self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') + self.assertEqual(shell.env, { + 'app':self.bootstrap.app, 'root':'root override', + 'registry':self.bootstrap.registry, + 'request':self.bootstrap.request, + 'root_factory':self.bootstrap.root_factory, + 'a':1, 'm':model, + }) + self.assertTrue(self.bootstrap.closer.called) + self.assertTrue(shell.help) + + def test_command_custom_section_override(self): + command = self._makeOne() + dummy_ = dummy.Dummy() + self.config_factory.items = [('app', dummy_), ('root', dummy_), + ('registry', dummy_), ('request', dummy_)] + shell = dummy.DummyShell() + command.run(shell) + self.assertTrue(self.config_factory.parser) + self.assertEqual(self.config_factory.parser.filename, + '/foo/bar/myapp.ini') + self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp') + self.assertEqual(shell.env, { + 'app':dummy_, 'root':dummy_, 'registry':dummy_, 'request':dummy_, + 'root_factory':self.bootstrap.root_factory, + }) + self.assertTrue(self.bootstrap.closer.called) + self.assertTrue(shell.help) + diff --git a/pyramid/tests/test_scripts/test_ptweens.py b/pyramid/tests/test_scripts/test_ptweens.py new file mode 100644 index 000000000..4ee38dd85 --- /dev/null +++ b/pyramid/tests/test_scripts/test_ptweens.py @@ -0,0 +1,53 @@ +import unittest +from pyramid.tests.test_scripts import dummy + +class TestPTweensCommand(unittest.TestCase): + def _getTargetClass(self): + from pyramid.scripts.ptweens import PTweensCommand + return PTweensCommand + + def _makeOne(self): + cmd = self._getTargetClass()([]) + cmd.bootstrap = (dummy.DummyBootstrap(),) + cmd.args = ('/foo/bar/myapp.ini#myapp',) + return cmd + + def test_command_no_tweens(self): + command = self._makeOne() + command._get_tweens = lambda *arg: None + L = [] + command.out = L.append + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L, []) + + def test_command_implicit_tweens_only(self): + command = self._makeOne() + tweens = dummy.DummyTweens([('name', 'item')], None) + command._get_tweens = lambda *arg: tweens + L = [] + command.out = L.append + result = command.run() + self.assertEqual(result, None) + self.assertEqual( + L[0], + '"pyramid.tweens" config value NOT set (implicitly ordered tweens ' + 'used)') + + def test_command_implicit_and_explicit_tweens(self): + command = self._makeOne() + tweens = dummy.DummyTweens([('name', 'item')], [('name2', 'item2')]) + command._get_tweens = lambda *arg: tweens + L = [] + command.out = L.append + result = command.run() + self.assertEqual(result, None) + self.assertEqual( + L[0], + '"pyramid.tweens" config value set (explicitly ordered tweens used)') + + def test__get_tweens(self): + command = self._makeOne() + registry = dummy.DummyRegistry() + self.assertEqual(command._get_tweens(registry), None) + diff --git a/pyramid/tests/test_scripts/test_pviews.py b/pyramid/tests/test_scripts/test_pviews.py new file mode 100644 index 000000000..473ba5598 --- /dev/null +++ b/pyramid/tests/test_scripts/test_pviews.py @@ -0,0 +1,467 @@ +import unittest +from pyramid.tests.test_scripts import dummy + +class TestPViewsCommand(unittest.TestCase): + def _getTargetClass(self): + from pyramid.scripts.pviews import PViewsCommand + return PViewsCommand + + def _makeOne(self, registry=None): + cmd = self._getTargetClass()([]) + cmd.bootstrap = (dummy.DummyBootstrap(registry=registry),) + cmd.args = ('/foo/bar/myapp.ini#myapp',) + return cmd + + def _register_mapper(self, registry, routes): + from pyramid.interfaces import IRoutesMapper + mapper = dummy.DummyMapper(*routes) + registry.registerUtility(mapper, IRoutesMapper) + + def test__find_view_no_match(self): + from pyramid.registry import Registry + registry = Registry() + self._register_mapper(registry, []) + command = self._makeOne(registry) + result = command._find_view('/a', registry) + self.assertEqual(result, None) + + def test__find_view_no_match_multiview_registered(self): + from zope.interface import implementer + from zope.interface import providedBy + from pyramid.interfaces import IRequest + from pyramid.interfaces import IViewClassifier + from pyramid.interfaces import IMultiView + from pyramid.traversal import DefaultRootFactory + from pyramid.registry import Registry + registry = Registry() + @implementer(IMultiView) + class View1(object): + pass + request = dummy.DummyRequest({'PATH_INFO':'/a'}) + root = DefaultRootFactory(request) + root_iface = providedBy(root) + registry.registerAdapter(View1(), + (IViewClassifier, IRequest, root_iface), + IMultiView) + self._register_mapper(registry, []) + command = self._makeOne(registry=registry) + result = command._find_view('/x', registry) + self.assertEqual(result, None) + + def test__find_view_traversal(self): + from zope.interface import providedBy + from pyramid.interfaces import IRequest + from pyramid.interfaces import IViewClassifier + from pyramid.interfaces import IView + from pyramid.traversal import DefaultRootFactory + from pyramid.registry import Registry + registry = Registry() + def view1(): pass + request = dummy.DummyRequest({'PATH_INFO':'/a'}) + root = DefaultRootFactory(request) + root_iface = providedBy(root) + registry.registerAdapter(view1, + (IViewClassifier, IRequest, root_iface), + IView, name='a') + self._register_mapper(registry, []) + command = self._makeOne(registry=registry) + result = command._find_view('/a', registry) + self.assertEqual(result, view1) + + def test__find_view_traversal_multiview(self): + from zope.interface import implementer + from zope.interface import providedBy + from pyramid.interfaces import IRequest + from pyramid.interfaces import IViewClassifier + from pyramid.interfaces import IMultiView + from pyramid.traversal import DefaultRootFactory + from pyramid.registry import Registry + registry = Registry() + @implementer(IMultiView) + class View1(object): + pass + request = dummy.DummyRequest({'PATH_INFO':'/a'}) + root = DefaultRootFactory(request) + root_iface = providedBy(root) + view = View1() + registry.registerAdapter(view, + (IViewClassifier, IRequest, root_iface), + IMultiView, name='a') + self._register_mapper(registry, []) + command = self._makeOne(registry=registry) + result = command._find_view('/a', registry) + self.assertEqual(result, view) + + def test__find_view_route_no_multiview(self): + from zope.interface import Interface + from zope.interface import implementer + from pyramid.interfaces import IRouteRequest + from pyramid.interfaces import IViewClassifier + from pyramid.interfaces import IView + from pyramid.registry import Registry + registry = Registry() + def view():pass + class IMyRoot(Interface): + pass + class IMyRoute(Interface): + pass + registry.registerAdapter(view, + (IViewClassifier, IMyRoute, IMyRoot), + IView, '') + registry.registerUtility(IMyRoute, IRouteRequest, name='a') + @implementer(IMyRoot) + class Factory(object): + def __init__(self, request): + pass + routes = [dummy.DummyRoute('a', '/a', factory=Factory, matchdict={}), + dummy.DummyRoute('b', '/b', factory=Factory)] + self._register_mapper(registry, routes) + command = self._makeOne(registry=registry) + result = command._find_view('/a', registry) + self.assertEqual(result, view) + + def test__find_view_route_multiview_no_view_registered(self): + from zope.interface import Interface + from zope.interface import implementer + from pyramid.interfaces import IRouteRequest + from pyramid.interfaces import IMultiView + from pyramid.interfaces import IRootFactory + from pyramid.registry import Registry + registry = Registry() + def view1():pass + def view2():pass + class IMyRoot(Interface): + pass + class IMyRoute1(Interface): + pass + class IMyRoute2(Interface): + pass + registry.registerUtility(IMyRoute1, IRouteRequest, name='a') + registry.registerUtility(IMyRoute2, IRouteRequest, name='b') + @implementer(IMyRoot) + class Factory(object): + def __init__(self, request): + pass + registry.registerUtility(Factory, IRootFactory) + routes = [dummy.DummyRoute('a', '/a', matchdict={}), + dummy.DummyRoute('b', '/a', matchdict={})] + self._register_mapper(registry, routes) + command = self._makeOne(registry=registry) + result = command._find_view('/a', registry) + self.assertTrue(IMultiView.providedBy(result)) + + def test__find_view_route_multiview(self): + from zope.interface import Interface + from zope.interface import implementer + from pyramid.interfaces import IRouteRequest + from pyramid.interfaces import IViewClassifier + from pyramid.interfaces import IView + from pyramid.interfaces import IMultiView + from pyramid.interfaces import IRootFactory + from pyramid.registry import Registry + registry = Registry() + def view1():pass + def view2():pass + class IMyRoot(Interface): + pass + class IMyRoute1(Interface): + pass + class IMyRoute2(Interface): + pass + registry.registerAdapter(view1, + (IViewClassifier, IMyRoute1, IMyRoot), + IView, '') + registry.registerAdapter(view2, + (IViewClassifier, IMyRoute2, IMyRoot), + IView, '') + registry.registerUtility(IMyRoute1, IRouteRequest, name='a') + registry.registerUtility(IMyRoute2, IRouteRequest, name='b') + @implementer(IMyRoot) + class Factory(object): + def __init__(self, request): + pass + registry.registerUtility(Factory, IRootFactory) + routes = [dummy.DummyRoute('a', '/a', matchdict={}), + dummy.DummyRoute('b', '/a', matchdict={})] + self._register_mapper(registry, routes) + command = self._makeOne(registry=registry) + result = command._find_view('/a', registry) + self.assertTrue(IMultiView.providedBy(result)) + self.assertEqual(len(result.views), 2) + self.assertTrue((None, view1, None) in result.views) + self.assertTrue((None, view2, None) in result.views) + + def test__find_multi_routes_all_match(self): + command = self._makeOne() + def factory(request): pass + routes = [dummy.DummyRoute('a', '/a', factory=factory, matchdict={}), + dummy.DummyRoute('b', '/a', factory=factory, matchdict={})] + mapper = dummy.DummyMapper(*routes) + request = dummy.DummyRequest({'PATH_INFO':'/a'}) + result = command._find_multi_routes(mapper, request) + self.assertEqual(result, [{'match':{}, 'route':routes[0]}, + {'match':{}, 'route':routes[1]}]) + + def test__find_multi_routes_some_match(self): + command = self._makeOne() + def factory(request): pass + routes = [dummy.DummyRoute('a', '/a', factory=factory), + dummy.DummyRoute('b', '/a', factory=factory, matchdict={})] + mapper = dummy.DummyMapper(*routes) + request = dummy.DummyRequest({'PATH_INFO':'/a'}) + result = command._find_multi_routes(mapper, request) + self.assertEqual(result, [{'match':{}, 'route':routes[1]}]) + + def test__find_multi_routes_none_match(self): + command = self._makeOne() + def factory(request): pass + routes = [dummy.DummyRoute('a', '/a', factory=factory), + dummy.DummyRoute('b', '/a', factory=factory)] + mapper = dummy.DummyMapper(*routes) + request = dummy.DummyRequest({'PATH_INFO':'/a'}) + result = command._find_multi_routes(mapper, request) + self.assertEqual(result, []) + + def test_views_command_not_found(self): + from pyramid.registry import Registry + registry = Registry() + command = self._makeOne(registry=registry) + L = [] + command.out = L.append + command._find_view = lambda arg1, arg2: None + command.args = ('/foo/bar/myapp.ini#myapp', '/a') + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L[1], 'URL = /a') + self.assertEqual(L[3], ' Not found.') + + def test_views_command_not_found_url_starts_without_slash(self): + from pyramid.registry import Registry + registry = Registry() + command = self._makeOne(registry=registry) + L = [] + command.out = L.append + command._find_view = lambda arg1, arg2: None + command.args = ('/foo/bar/myapp.ini#myapp', 'a') + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L[1], 'URL = /a') + self.assertEqual(L[3], ' Not found.') + + def test_views_command_single_view_traversal(self): + from pyramid.registry import Registry + registry = Registry() + command = self._makeOne(registry=registry) + L = [] + command.out = L.append + view = dummy.DummyView(context='context', view_name='a') + command._find_view = lambda arg1, arg2: view + command.args = ('/foo/bar/myapp.ini#myapp', '/a') + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L[1], 'URL = /a') + self.assertEqual(L[3], ' context: context') + self.assertEqual(L[4], ' view name: a') + self.assertEqual(L[8], + ' pyramid.tests.test_scripts.dummy.DummyView') + + def test_views_command_single_view_function_traversal(self): + from pyramid.registry import Registry + registry = Registry() + command = self._makeOne(registry=registry) + L = [] + command.out = L.append + def view(): pass + view.__request_attrs__ = {'context': 'context', 'view_name': 'a'} + command._find_view = lambda arg1, arg2: view + command.args = ('/foo/bar/myapp.ini#myapp', '/a') + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L[1], 'URL = /a') + self.assertEqual(L[3], ' context: context') + self.assertEqual(L[4], ' view name: a') + self.assertEqual(L[8], + ' pyramid.tests.test_scripts.test_pviews.view') + + def test_views_command_single_view_traversal_with_permission(self): + from pyramid.registry import Registry + registry = Registry() + command = self._makeOne(registry=registry) + L = [] + command.out = L.append + view = dummy.DummyView(context='context', view_name='a') + view.__permission__ = 'test' + command._find_view = lambda arg1, arg2: view + command.args = ('/foo/bar/myapp.ini#myapp', '/a') + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L[1], 'URL = /a') + self.assertEqual(L[3], ' context: context') + self.assertEqual(L[4], ' view name: a') + self.assertEqual(L[8], + ' pyramid.tests.test_scripts.dummy.DummyView') + self.assertEqual(L[9], ' required permission = test') + + def test_views_command_single_view_traversal_with_predicates(self): + from pyramid.registry import Registry + registry = Registry() + command = self._makeOne(registry=registry) + L = [] + command.out = L.append + def predicate(): pass + predicate.__text__ = "predicate = x" + view = dummy.DummyView(context='context', view_name='a') + view.__predicates__ = [predicate] + command._find_view = lambda arg1, arg2: view + command.args = ('/foo/bar/myapp.ini#myapp', '/a') + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L[1], 'URL = /a') + self.assertEqual(L[3], ' context: context') + self.assertEqual(L[4], ' view name: a') + self.assertEqual(L[8], + ' pyramid.tests.test_scripts.dummy.DummyView') + self.assertEqual(L[9], ' view predicates (predicate = x)') + + def test_views_command_single_view_route(self): + from pyramid.registry import Registry + registry = Registry() + command = self._makeOne(registry=registry) + L = [] + command.out = L.append + route = dummy.DummyRoute('a', '/a', matchdict={}) + view = dummy.DummyView(context='context', view_name='a', + matched_route=route, subpath='') + command._find_view = lambda arg1, arg2: view + command.args = ('/foo/bar/myapp.ini#myapp', '/a') + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L[1], 'URL = /a') + self.assertEqual(L[3], ' context: context') + self.assertEqual(L[4], ' view name: a') + self.assertEqual(L[6], ' Route:') + self.assertEqual(L[8], ' route name: a') + self.assertEqual(L[9], ' route pattern: /a') + self.assertEqual(L[10], ' route path: /a') + self.assertEqual(L[11], ' subpath: ') + self.assertEqual(L[15], + ' pyramid.tests.test_scripts.dummy.DummyView') + + def test_views_command_multi_view_nested(self): + from pyramid.registry import Registry + registry = Registry() + command = self._makeOne(registry=registry) + L = [] + command.out = L.append + view1 = dummy.DummyView(context='context', view_name='a1') + view1.__name__ = 'view1' + view1.__view_attr__ = 'call' + multiview1 = dummy.DummyMultiView(view1, context='context', + view_name='a1') + multiview2 = dummy.DummyMultiView(multiview1, context='context', + view_name='a') + command._find_view = lambda arg1, arg2: multiview2 + command.args = ('/foo/bar/myapp.ini#myapp', '/a') + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L[1], 'URL = /a') + self.assertEqual(L[3], ' context: context') + self.assertEqual(L[4], ' view name: a') + self.assertEqual(L[8], + ' pyramid.tests.test_scripts.dummy.DummyMultiView') + self.assertEqual(L[12], + ' pyramid.tests.test_scripts.dummy.view1.call') + + def test_views_command_single_view_route_with_route_predicates(self): + from pyramid.registry import Registry + registry = Registry() + command = self._makeOne(registry=registry) + L = [] + command.out = L.append + def predicate(): pass + predicate.__text__ = "predicate = x" + route = dummy.DummyRoute('a', '/a', matchdict={}, predicate=predicate) + view = dummy.DummyView(context='context', view_name='a', + matched_route=route, subpath='') + command._find_view = lambda arg1, arg2: view + command.args = ('/foo/bar/myapp.ini#myapp', '/a') + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L[1], 'URL = /a') + self.assertEqual(L[3], ' context: context') + self.assertEqual(L[4], ' view name: a') + self.assertEqual(L[6], ' Route:') + self.assertEqual(L[8], ' route name: a') + self.assertEqual(L[9], ' route pattern: /a') + self.assertEqual(L[10], ' route path: /a') + self.assertEqual(L[11], ' subpath: ') + self.assertEqual(L[12], ' route predicates (predicate = x)') + self.assertEqual(L[16], + ' pyramid.tests.test_scripts.dummy.DummyView') + + def test_views_command_multiview(self): + from pyramid.registry import Registry + registry = Registry() + command = self._makeOne(registry=registry) + L = [] + command.out = L.append + view = dummy.DummyView(context='context') + view.__name__ = 'view' + view.__view_attr__ = 'call' + multiview = dummy.DummyMultiView(view, context='context', view_name='a') + command._find_view = lambda arg1, arg2: multiview + command.args = ('/foo/bar/myapp.ini#myapp', '/a') + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L[1], 'URL = /a') + self.assertEqual(L[3], ' context: context') + self.assertEqual(L[4], ' view name: a') + self.assertEqual(L[8], + ' pyramid.tests.test_scripts.dummy.view.call') + + def test_views_command_multiview_with_permission(self): + from pyramid.registry import Registry + registry = Registry() + command = self._makeOne(registry=registry) + L = [] + command.out = L.append + view = dummy.DummyView(context='context') + view.__name__ = 'view' + view.__view_attr__ = 'call' + view.__permission__ = 'test' + multiview = dummy.DummyMultiView(view, context='context', view_name='a') + command._find_view = lambda arg1, arg2: multiview + command.args = ('/foo/bar/myapp.ini#myapp', '/a') + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L[1], 'URL = /a') + self.assertEqual(L[3], ' context: context') + self.assertEqual(L[4], ' view name: a') + self.assertEqual(L[8], + ' pyramid.tests.test_scripts.dummy.view.call') + self.assertEqual(L[9], ' required permission = test') + + def test_views_command_multiview_with_predicates(self): + from pyramid.registry import Registry + registry = Registry() + command = self._makeOne(registry=registry) + L = [] + command.out = L.append + def predicate(): pass + predicate.__text__ = "predicate = x" + view = dummy.DummyView(context='context') + view.__name__ = 'view' + view.__view_attr__ = 'call' + view.__predicates__ = [predicate] + multiview = dummy.DummyMultiView(view, context='context', view_name='a') + command._find_view = lambda arg1, arg2: multiview + command.args = ('/foo/bar/myapp.ini#myapp', '/a') + result = command.run() + self.assertEqual(result, None) + self.assertEqual(L[1], 'URL = /a') + self.assertEqual(L[3], ' context: context') + self.assertEqual(L[4], ' view name: a') + self.assertEqual(L[8], + ' pyramid.tests.test_scripts.dummy.view.call') + self.assertEqual(L[9], ' view predicates (predicate = x)') + |
