{
    "file_diffs": [
        {
            "old_file_content": "import unittest\nfrom pyramid import testing\nfrom pyramid.compat import (\n    text_,\n    PY3,\n    )\n\nclass TestRoute(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.urldispatch import Route\n        return Route\n\n    def _makeOne(self, *arg):\n        return self._getTargetClass()(*arg)\n\n    def test_provides_IRoute(self):\n        from pyramid.interfaces import IRoute\n        from zope.interface.verify import verifyObject\n        verifyObject(IRoute, self._makeOne('name', 'pattern'))\n\n    def test_ctor(self):\n        import types\n        route = self._makeOne('name', ':path', 'factory')\n        self.assertEqual(route.pattern, ':path')\n        self.assertEqual(route.path, ':path')\n        self.assertEqual(route.name, 'name')\n        self.assertEqual(route.factory, 'factory')\n        self.assertTrue(route.generate.__class__ is types.FunctionType)\n        self.assertTrue(route.match.__class__ is types.FunctionType)\n\n    def test_ctor_defaults(self):\n        import types\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.pattern, ':path')\n        self.assertEqual(route.path, ':path')\n        self.assertEqual(route.name, 'name')\n        self.assertEqual(route.factory, None)\n        self.assertTrue(route.generate.__class__ is types.FunctionType)\n        self.assertTrue(route.match.__class__ is types.FunctionType)\n\n    def test_match(self):\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.match('/whatever'), {'path':'whatever'})\n\n    def test_generate(self):\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.generate({'path':'abc'}), '/abc')\n\nclass RoutesMapperTests(unittest.TestCase):\n    def setUp(self):\n        testing.setUp()\n\n    def tearDown(self):\n        testing.tearDown()\n        \n    def _getRequest(self, **kw):\n        from pyramid.threadlocal import get_current_registry\n        environ = {'SERVER_NAME':'localhost',\n                   'wsgi.url_scheme':'http'}\n        environ.update(kw)\n        request = DummyRequest(environ)\n        reg = get_current_registry()\n        request.registry = reg\n        return request\n\n    def _getTargetClass(self):\n        from pyramid.urldispatch import RoutesMapper\n        return RoutesMapper\n\n    def _makeOne(self):\n        klass = self._getTargetClass()\n        return klass()\n\n    def test_provides_IRoutesMapper(self):\n        from pyramid.interfaces import IRoutesMapper\n        from zope.interface.verify import verifyObject\n        verifyObject(IRoutesMapper, self._makeOne())\n\n    def test_no_route_matches(self):\n        mapper = self._makeOne()\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['match'], None)\n        self.assertEqual(result['route'], None)\n\n    def test_connect_name_exists_removes_old(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article')\n        mapper.connect('foo', 'archives/:action/:article2')\n        self.assertEqual(len(mapper.routelist), 1)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article2')\n        self.assertEqual(mapper.routelist[0].pattern,\n                         'archives/:action/:article2')\n\n    def test_connect_static(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article', static=True)\n        self.assertEqual(len(mapper.routelist), 0)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article')\n\n    def test_connect_static_overridden(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article', static=True)\n        self.assertEqual(len(mapper.routelist), 0)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article')\n        mapper.connect('foo', 'archives/:action/:article2')\n        self.assertEqual(len(mapper.routelist), 1)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article2')\n        self.assertEqual(mapper.routelist[0].pattern,\n                         'archives/:action/:article2')\n\n    def test___call__pathinfo_cant_be_decoded(self):\n        from pyramid.exceptions import URLDecodeError\n        mapper = self._makeOne()\n        if PY3: # pragma: no cover\n            path_info = b'\\xff\\xfe\\xe6\\x00'.decode('latin-1')\n        else:\n            path_info = b'\\xff\\xfe\\xe6\\x00'\n        request = self._getRequest(PATH_INFO=path_info)\n        self.assertRaises(URLDecodeError, mapper, request)\n\n    def test___call__route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article')\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['foo'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__route_matches_with_predicates(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article',\n                       predicates=[lambda *arg: True])\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['foo'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__route_fails_to_match_with_predicates(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/article1',\n                       predicates=[lambda *arg: True, lambda *arg: False])\n        mapper.connect('bar', 'archives/:action/:article')\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['bar'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__custom_predicate_gets_info(self):\n        mapper = self._makeOne()\n        def pred(info, request):\n            self.assertEqual(info['match'], {'action':'action1'})\n            self.assertEqual(info['route'], mapper.routes['foo'])\n            return True\n        mapper.connect('foo', 'archives/:action/article1', predicates=[pred])\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        mapper(request)\n\n    def test_cc_bug(self):\n        # \"unordered\" as reported in IRC by author of\n        # http://labs.creativecommons.org/2010/01/13/cc-engine-and-web-non-frameworks/\n        mapper = self._makeOne()\n        mapper.connect('rdf', 'licenses/:license_code/:license_version/rdf')\n        mapper.connect('juri',\n                       'licenses/:license_code/:license_version/:jurisdiction')\n\n        request = self._getRequest(PATH_INFO='/licenses/1/v2/rdf')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['rdf'])\n        self.assertEqual(result['match']['license_code'], '1')\n        self.assertEqual(result['match']['license_version'], 'v2')\n\n        request = self._getRequest(PATH_INFO='/licenses/1/v2/usa')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['juri'])\n        self.assertEqual(result['match']['license_code'], '1')\n        self.assertEqual(result['match']['license_version'], 'v2')\n        self.assertEqual(result['match']['jurisdiction'], 'usa')\n\n    def test___call__root_route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_matches2(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_when_path_info_empty(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_when_path_info_notempty(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__no_path_info(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest()\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test_has_routes(self):\n        mapper = self._makeOne()\n        self.assertEqual(mapper.has_routes(), False)\n        mapper.connect('whatever', 'archives/:action/:article')\n        self.assertEqual(mapper.has_routes(), True)\n\n    def test_get_routes(self):\n        from pyramid.urldispatch import Route\n        mapper = self._makeOne()\n        self.assertEqual(mapper.get_routes(), [])\n        mapper.connect('whatever', 'archives/:action/:article')\n        routes = mapper.get_routes()\n        self.assertEqual(len(routes), 1)\n        self.assertEqual(routes[0].__class__, Route)\n\n    def test_get_route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('whatever', 'archives/:action/:article')\n        result = mapper.get_route('whatever')\n        self.assertEqual(result.pattern, 'archives/:action/:article')\n\n    def test_get_route_misses(self):\n        mapper = self._makeOne()\n        result = mapper.get_route('whatever')\n        self.assertEqual(result, None)\n\n    def test_generate(self):\n        mapper = self._makeOne()\n        def generator(kw):\n            return 123\n        route = DummyRoute(generator)\n        mapper.routes['abc'] =  route\n        self.assertEqual(mapper.generate('abc', {}), 123)\n\nclass TestCompileRoute(unittest.TestCase):\n    def _callFUT(self, pattern):\n        from pyramid.urldispatch import _compile_route\n        return _compile_route(pattern)\n\n    def test_no_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_with_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar*traverse')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'traverse':()})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'traverse':('everything', 'else', 'here')})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'traverse':'/a/b'}), '/foo/1/biz/2/bar/a/b')\n    \n    def test_with_bracket_star(self):\n        matcher, generator = self._callFUT(\n            '/foo/{baz}/biz/{buz}/bar{remainder:.*}')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'remainder':''})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'remainder':'/everything/else/here'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'remainder':'/a/b'}), '/foo/1/biz/2/bar%2Fa%2Fb')\n\n    def test_no_beginning_slash(self):\n        matcher, generator = self._callFUT('foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:[^/\\.]+}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n\n    def test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle(self):\n        # pattern: '\\\\/foo\\\\/(?P<baz>abc)\\\\/biz\\\\/(?P<buz>[^/]+)\\\\/bar$'\n        # note presence of :abc in pattern (oldstyle match)\n        matcher, generator = self._callFUT('foo/{baz:abc}/biz/{buz}/bar')\n        self.assertEqual(matcher('/foo/abc/biz/buz/bar'),\n                         {'baz':'abc', 'buz':'buz'})\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex_with_embedded_squigglies(self):\n        matcher, generator = self._callFUT('/{buz:\\d{4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies2(self):\n        matcher, generator = self._callFUT('/{buz:\\d{3,4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), {'buz':'200'})\n        self.assertEqual(matcher('/20'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies3(self):\n        matcher, generator = self._callFUT(\n            '/{buz:(\\d{2}|\\d{4})-[a-zA-Z]{3,4}-\\d{2}}')\n        self.assertEqual(matcher('/2001-Nov-15'), {'buz':'2001-Nov-15'})\n        self.assertEqual(matcher('/99-June-10'), {'buz':'99-June-10'})\n        self.assertEqual(matcher('/2-Nov-15'), None)\n        self.assertEqual(matcher('/200-Nov-15'), None)\n        self.assertEqual(matcher('/2001-No-15'), None)\n        self.assertEqual(generator({'buz':'2001-Nov-15'}), '/2001-Nov-15')\n        self.assertEqual(generator({'buz':'99-June-10'}), '/99-June-10')\n\n    def test_pattern_with_high_order_literal(self):\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{x}', 'utf-8')\n        matcher, generator = self._callFUT(pattern)\n        self.assertEqual(matcher(text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8')),\n                         {'x':'x'})\n        self.assertEqual(generator({'x':'1'}), '/La%20Pe%C3%B1a/1')\n\n    def test_pattern_generate_with_high_order_dynamic(self):\n        pattern = '/{x}'\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')}),\n            '/La%20Pe%C3%B1a')\n\n    def test_docs_sample_generate(self):\n        # sample from urldispatch.rst\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{city}', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'city':text_(b'Qu\\xc3\\xa9bec', 'utf-8')}),\n            '/La%20Pe%C3%B1a/Qu%C3%A9bec')\n\n    def test_generate_with_mixedtype_values(self):\n        pattern = '/{city}/{state}'\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'city': text_(b'Qu\\xc3\\xa9bec', 'utf-8'),\n             'state': b'La Pe\\xc3\\xb1a'}\n            )\n        self.assertEqual(result, '/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_highorder_pattern_utf8(self):\n        pattern = b'/La Pe\\xc3\\xb1a/{city}'\n        self.assertRaises(ValueError, self._callFUT, pattern)\n\n    def test_generate_with_string_remainder_and_unicode_replacement(self):\n        pattern = text_(b'/abc*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': text_(b'/Qu\\xc3\\xa9bec/La Pe\\xc3\\xb1a', 'utf-8')}\n            )\n        self.assertEqual(result, '/abc/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_generate_with_string_remainder_and_nonstring_replacement(self):\n        pattern = text_(b'/abc/*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': None}\n            )\n        self.assertEqual(result, '/abc/None')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\nclass TestCompileRouteFunctional(unittest.TestCase):\n    def matches(self, pattern, path, expected):\n        from pyramid.urldispatch import _compile_route\n        matcher = _compile_route(pattern)[0]\n        result = matcher(path)\n        self.assertEqual(result, expected)\n\n    def generates(self, pattern, dict, result):\n        from pyramid.urldispatch import _compile_route\n        self.assertEqual(_compile_route(pattern)[1](dict), result)\n\n    def test_matcher_functional_notdynamic(self):\n        self.matches('/', '', None)\n        self.matches('', '', None)\n        self.matches('/', '/foo', None)\n        self.matches('/foo/', '/foo', None)\n        self.matches('', '/', {})\n        self.matches('/', '/', {})\n\n    def test_matcher_functional_newstyle(self):\n        self.matches('/{x}', '', None)\n        self.matches('/{x}', '/', None)\n        self.matches('/abc/{def}', '/abc/', None)\n        self.matches('/{x}', '/a', {'x':'a'})\n        self.matches('zzz/{x}', '/zzz/abc', {'x':'abc'})\n        self.matches('zzz/{x}*traverse', '/zzz/abc', {'x':'abc', 'traverse':()})\n        self.matches('zzz/{x}*traverse', '/zzz/abc/def/g',\n                     {'x':'abc', 'traverse':('def', 'g')})\n        self.matches('*traverse', '/zzz/abc', {'traverse':('zzz', 'abc')})\n        self.matches('*traverse', '/zzz/ abc', {'traverse':('zzz', ' abc')})\n        #'/La%20Pe%C3%B1a'\n        self.matches('{x}', text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                     {'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')})\n        # '/La%20Pe%C3%B1a/x'\n        self.matches('*traverse', text_(b'/La Pe\\xc3\\xb1a/x'),\n                     {'traverse':(text_(b'La Pe\\xc3\\xb1a'), 'x')})\n        self.matches('/foo/{id}.html', '/foo/bar.html', {'id':'bar'})\n        self.matches('/{num:[0-9]+}/*traverse', '/555/abc/def',\n                     {'num':'555', 'traverse':('abc', 'def')})\n        self.matches('/{num:[0-9]*}/*traverse', '/555/abc/def',\n                     {'num':'555', 'traverse':('abc', 'def')})\n        self.matches('zzz/{_}', '/zzz/abc', {'_':'abc'})\n        self.matches('zzz/{_abc}', '/zzz/abc', {'_abc':'abc'})\n        self.matches('zzz/{abc_def}', '/zzz/abc', {'abc_def':'abc'})\n\n    def test_matcher_functional_oldstyle(self):\n        self.matches('/:x', '', None)\n        self.matches('/:x', '/', None)\n        self.matches('/abc/:def', '/abc/', None)\n        self.matches('/:x', '/a', {'x':'a'})\n        self.matches('zzz/:x', '/zzz/abc', {'x':'abc'})\n        self.matches('zzz/:x*traverse', '/zzz/abc', {'x':'abc', 'traverse':()})\n        self.matches('zzz/:x*traverse', '/zzz/abc/def/g',\n                     {'x':'abc', 'traverse':('def', 'g')})\n        self.matches('*traverse', '/zzz/abc', {'traverse':('zzz', 'abc')})\n        self.matches('*traverse', '/zzz/ abc', {'traverse':('zzz', ' abc')})\n        #'/La%20Pe%C3%B1a'\n        # pattern, path, expected\n        self.matches(':x', text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                     {'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')})\n        # '/La%20Pe%C3%B1a/x'\n        self.matches('*traverse', text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8'),\n                     {'traverse':(text_(b'La Pe\\xc3\\xb1a', 'utf-8'), 'x')})\n        self.matches('/foo/:id.html', '/foo/bar.html', {'id':'bar'})\n        self.matches('/foo/:id_html', '/foo/bar_html', {'id_html':'bar_html'})\n        self.matches('zzz/:_', '/zzz/abc', {'_':'abc'})\n        self.matches('zzz/:_abc', '/zzz/abc', {'_abc':'abc'})\n        self.matches('zzz/:abc_def', '/zzz/abc', {'abc_def':'abc'})\n\n    def test_generator_functional_notdynamic(self):\n        self.generates('', {}, '/')\n        self.generates('/', {}, '/')\n\n    def test_generator_functional_newstyle(self):\n        self.generates('/{x}', {'x':''}, '/')\n        self.generates('/{x}', {'x':'a'}, '/a')\n        self.generates('zzz/{x}', {'x':'abc'}, '/zzz/abc')\n        self.generates('zzz/{x}*traverse', {'x':'abc', 'traverse':''},\n                       '/zzz/abc')\n        self.generates('zzz/{x}*traverse', {'x':'abc', 'traverse':'/def/g'},\n                       '/zzz/abc/def/g')\n        self.generates('/{x}', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8')},\n                       '/%2FLa%20Pe%C3%B1a')\n        self.generates('/{x}*y', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                                 'y':'/rest/of/path'},\n                       '/%2FLa%20Pe%C3%B1a/rest/of/path')\n        self.generates('*traverse', {'traverse':('a', text_(b'La Pe\\xf1a'))},\n                       '/a/La%20Pe%C3%B1a')\n        self.generates('/foo/{id}.html', {'id':'bar'}, '/foo/bar.html')\n        self.generates('/foo/{_}', {'_':'20'}, '/foo/20')\n        self.generates('/foo/{_abc}', {'_abc':'20'}, '/foo/20')\n        self.generates('/foo/{abc_def}', {'abc_def':'20'}, '/foo/20')\n        \n    def test_generator_functional_oldstyle(self):\n        self.generates('/:x', {'x':''}, '/')\n        self.generates('/:x', {'x':'a'}, '/a')\n        self.generates('zzz/:x', {'x':'abc'}, '/zzz/abc')\n        self.generates('zzz/:x*traverse', {'x':'abc', 'traverse':''},\n                       '/zzz/abc')\n        self.generates('zzz/:x*traverse', {'x':'abc', 'traverse':'/def/g'},\n                       '/zzz/abc/def/g')\n        self.generates('/:x', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8')},\n                       '/%2FLa%20Pe%C3%B1a')\n        self.generates('/:x*y', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                                 'y':'/rest/of/path'},\n                       '/%2FLa%20Pe%C3%B1a/rest/of/path')\n        self.generates('*traverse', {'traverse':('a', text_(b'La Pe\\xf1a'))},\n                       '/a/La%20Pe%C3%B1a')\n        self.generates('/foo/:id.html', {'id':'bar'}, '/foo/bar.html')\n        self.generates('/foo/:_', {'_':'20'}, '/foo/20')\n        self.generates('/foo/:_abc', {'_abc':'20'}, '/foo/20')\n        self.generates('/foo/:abc_def', {'abc_def':'20'}, '/foo/20')\n\nclass DummyContext(object):\n    \"\"\" \"\"\"\n        \nclass DummyRequest(object):\n    def __init__(self, environ):\n        self.environ = environ\n    \nclass DummyRoute(object):\n    def __init__(self, generator):\n        self.generate = generator\n        \n",
            "new_file_content": "import unittest\nfrom pyramid import testing\nfrom pyramid.compat import (\n    text_,\n    PY3,\n    )\n\nclass TestRoute(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.urldispatch import Route\n        return Route\n\n    def _makeOne(self, *arg):\n        return self._getTargetClass()(*arg)\n\n    def test_provides_IRoute(self):\n        from pyramid.interfaces import IRoute\n        from zope.interface.verify import verifyObject\n        verifyObject(IRoute, self._makeOne('name', 'pattern'))\n\n    def test_ctor(self):\n        import types\n        route = self._makeOne('name', ':path', 'factory')\n        self.assertEqual(route.pattern, ':path')\n        self.assertEqual(route.path, ':path')\n        self.assertEqual(route.name, 'name')\n        self.assertEqual(route.factory, 'factory')\n        self.assertTrue(route.generate.__class__ is types.FunctionType)\n        self.assertTrue(route.match.__class__ is types.FunctionType)\n\n    def test_ctor_defaults(self):\n        import types\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.pattern, ':path')\n        self.assertEqual(route.path, ':path')\n        self.assertEqual(route.name, 'name')\n        self.assertEqual(route.factory, None)\n        self.assertTrue(route.generate.__class__ is types.FunctionType)\n        self.assertTrue(route.match.__class__ is types.FunctionType)\n\n    def test_match(self):\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.match('/whatever'), {'path':'whatever'})\n\n    def test_generate(self):\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.generate({'path':'abc'}), '/abc')\n\nclass RoutesMapperTests(unittest.TestCase):\n    def setUp(self):\n        testing.setUp()\n\n    def tearDown(self):\n        testing.tearDown()\n        \n    def _getRequest(self, **kw):\n        from pyramid.threadlocal import get_current_registry\n        environ = {'SERVER_NAME':'localhost',\n                   'wsgi.url_scheme':'http'}\n        environ.update(kw)\n        request = DummyRequest(environ)\n        reg = get_current_registry()\n        request.registry = reg\n        return request\n\n    def _getTargetClass(self):\n        from pyramid.urldispatch import RoutesMapper\n        return RoutesMapper\n\n    def _makeOne(self):\n        klass = self._getTargetClass()\n        return klass()\n\n    def test_provides_IRoutesMapper(self):\n        from pyramid.interfaces import IRoutesMapper\n        from zope.interface.verify import verifyObject\n        verifyObject(IRoutesMapper, self._makeOne())\n\n    def test_no_route_matches(self):\n        mapper = self._makeOne()\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['match'], None)\n        self.assertEqual(result['route'], None)\n\n    def test_connect_name_exists_removes_old(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article')\n        mapper.connect('foo', 'archives/:action/:article2')\n        self.assertEqual(len(mapper.routelist), 1)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article2')\n        self.assertEqual(mapper.routelist[0].pattern,\n                         'archives/:action/:article2')\n\n    def test_connect_static(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article', static=True)\n        self.assertEqual(len(mapper.routelist), 0)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article')\n\n    def test_connect_static_overridden(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article', static=True)\n        self.assertEqual(len(mapper.routelist), 0)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article')\n        mapper.connect('foo', 'archives/:action/:article2')\n        self.assertEqual(len(mapper.routelist), 1)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article2')\n        self.assertEqual(mapper.routelist[0].pattern,\n                         'archives/:action/:article2')\n\n    def test___call__pathinfo_cant_be_decoded(self):\n        from pyramid.exceptions import URLDecodeError\n        mapper = self._makeOne()\n        if PY3: # pragma: no cover\n            path_info = b'\\xff\\xfe\\xe6\\x00'.decode('latin-1')\n        else:\n            path_info = b'\\xff\\xfe\\xe6\\x00'\n        request = self._getRequest(PATH_INFO=path_info)\n        self.assertRaises(URLDecodeError, mapper, request)\n\n    def test___call__route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article')\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['foo'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__route_matches_with_predicates(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article',\n                       predicates=[lambda *arg: True])\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['foo'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__route_fails_to_match_with_predicates(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/article1',\n                       predicates=[lambda *arg: True, lambda *arg: False])\n        mapper.connect('bar', 'archives/:action/:article')\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['bar'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__custom_predicate_gets_info(self):\n        mapper = self._makeOne()\n        def pred(info, request):\n            self.assertEqual(info['match'], {'action':'action1'})\n            self.assertEqual(info['route'], mapper.routes['foo'])\n            return True\n        mapper.connect('foo', 'archives/:action/article1', predicates=[pred])\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        mapper(request)\n\n    def test_cc_bug(self):\n        # \"unordered\" as reported in IRC by author of\n        # http://labs.creativecommons.org/2010/01/13/cc-engine-and-web-non-frameworks/\n        mapper = self._makeOne()\n        mapper.connect('rdf', 'licenses/:license_code/:license_version/rdf')\n        mapper.connect('juri',\n                       'licenses/:license_code/:license_version/:jurisdiction')\n\n        request = self._getRequest(PATH_INFO='/licenses/1/v2/rdf')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['rdf'])\n        self.assertEqual(result['match']['license_code'], '1')\n        self.assertEqual(result['match']['license_version'], 'v2')\n\n        request = self._getRequest(PATH_INFO='/licenses/1/v2/usa')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['juri'])\n        self.assertEqual(result['match']['license_code'], '1')\n        self.assertEqual(result['match']['license_version'], 'v2')\n        self.assertEqual(result['match']['jurisdiction'], 'usa')\n\n    def test___call__root_route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_matches2(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_when_path_info_empty(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_when_path_info_notempty(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__no_path_info(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest()\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test_has_routes(self):\n        mapper = self._makeOne()\n        self.assertEqual(mapper.has_routes(), False)\n        mapper.connect('whatever', 'archives/:action/:article')\n        self.assertEqual(mapper.has_routes(), True)\n\n    def test_get_routes(self):\n        from pyramid.urldispatch import Route\n        mapper = self._makeOne()\n        self.assertEqual(mapper.get_routes(), [])\n        mapper.connect('whatever', 'archives/:action/:article')\n        routes = mapper.get_routes()\n        self.assertEqual(len(routes), 1)\n        self.assertEqual(routes[0].__class__, Route)\n\n    def test_get_route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('whatever', 'archives/:action/:article')\n        result = mapper.get_route('whatever')\n        self.assertEqual(result.pattern, 'archives/:action/:article')\n\n    def test_get_route_misses(self):\n        mapper = self._makeOne()\n        result = mapper.get_route('whatever')\n        self.assertEqual(result, None)\n\n    def test_generate(self):\n        mapper = self._makeOne()\n        def generator(kw):\n            return 123\n        route = DummyRoute(generator)\n        mapper.routes['abc'] =  route\n        self.assertEqual(mapper.generate('abc', {}), 123)\n\nclass TestCompileRoute(unittest.TestCase):\n    def _callFUT(self, pattern):\n        from pyramid.urldispatch import _compile_route\n        return _compile_route(pattern)\n\n    def test_no_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_with_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar*traverse')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'traverse':()})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'traverse':('everything', 'else', 'here')})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'traverse':'/a/b'}), '/foo/1/biz/2/bar/a/b')\n    \n    def test_with_bracket_star(self):\n        matcher, generator = self._callFUT(\n            '/foo/{baz}/biz/{buz}/bar{remainder:.*}')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'remainder':''})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'remainder':'/everything/else/here'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'remainder':'/a/b'}), '/foo/1/biz/2/bar%2Fa%2Fb')\n\n    def test_no_beginning_slash(self):\n        matcher, generator = self._callFUT('foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:[^/\\.]+}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n    \n    def test_custom_regex_with_colons(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n\n    def test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle(self):\n        # pattern: '\\\\/foo\\\\/(?P<baz>abc)\\\\/biz\\\\/(?P<buz>[^/]+)\\\\/bar$'\n        # note presence of :abc in pattern (oldstyle match)\n        matcher, generator = self._callFUT('foo/{baz:abc}/biz/{buz}/bar')\n        self.assertEqual(matcher('/foo/abc/biz/buz/bar'),\n                         {'baz':'abc', 'buz':'buz'})\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex_with_embedded_squigglies(self):\n        matcher, generator = self._callFUT('/{buz:\\d{4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies2(self):\n        matcher, generator = self._callFUT('/{buz:\\d{3,4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), {'buz':'200'})\n        self.assertEqual(matcher('/20'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies3(self):\n        matcher, generator = self._callFUT(\n            '/{buz:(\\d{2}|\\d{4})-[a-zA-Z]{3,4}-\\d{2}}')\n        self.assertEqual(matcher('/2001-Nov-15'), {'buz':'2001-Nov-15'})\n        self.assertEqual(matcher('/99-June-10'), {'buz':'99-June-10'})\n        self.assertEqual(matcher('/2-Nov-15'), None)\n        self.assertEqual(matcher('/200-Nov-15'), None)\n        self.assertEqual(matcher('/2001-No-15'), None)\n        self.assertEqual(generator({'buz':'2001-Nov-15'}), '/2001-Nov-15')\n        self.assertEqual(generator({'buz':'99-June-10'}), '/99-June-10')\n\n    def test_pattern_with_high_order_literal(self):\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{x}', 'utf-8')\n        matcher, generator = self._callFUT(pattern)\n        self.assertEqual(matcher(text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8')),\n                         {'x':'x'})\n        self.assertEqual(generator({'x':'1'}), '/La%20Pe%C3%B1a/1')\n\n    def test_pattern_generate_with_high_order_dynamic(self):\n        pattern = '/{x}'\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')}),\n            '/La%20Pe%C3%B1a')\n\n    def test_docs_sample_generate(self):\n        # sample from urldispatch.rst\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{city}', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'city':text_(b'Qu\\xc3\\xa9bec', 'utf-8')}),\n            '/La%20Pe%C3%B1a/Qu%C3%A9bec')\n\n    def test_generate_with_mixedtype_values(self):\n        pattern = '/{city}/{state}'\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'city': text_(b'Qu\\xc3\\xa9bec', 'utf-8'),\n             'state': b'La Pe\\xc3\\xb1a'}\n            )\n        self.assertEqual(result, '/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_highorder_pattern_utf8(self):\n        pattern = b'/La Pe\\xc3\\xb1a/{city}'\n        self.assertRaises(ValueError, self._callFUT, pattern)\n\n    def test_generate_with_string_remainder_and_unicode_replacement(self):\n        pattern = text_(b'/abc*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': text_(b'/Qu\\xc3\\xa9bec/La Pe\\xc3\\xb1a', 'utf-8')}\n            )\n        self.assertEqual(result, '/abc/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_generate_with_string_remainder_and_nonstring_replacement(self):\n        pattern = text_(b'/abc/*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': None}\n            )\n        self.assertEqual(result, '/abc/None')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\nclass TestCompileRouteFunctional(unittest.TestCase):\n    def matches(self, pattern, path, expected):\n        from pyramid.urldispatch import _compile_route\n        matcher = _compile_route(pattern)[0]\n        result = matcher(path)\n        self.assertEqual(result, expected)\n\n    def generates(self, pattern, dict, result):\n        from pyramid.urldispatch import _compile_route\n        self.assertEqual(_compile_route(pattern)[1](dict), result)\n\n    def test_matcher_functional_notdynamic(self):\n        self.matches('/', '', None)\n        self.matches('', '', None)\n        self.matches('/', '/foo', None)\n        self.matches('/foo/', '/foo', None)\n        self.matches('', '/', {})\n        self.matches('/', '/', {})\n\n    def test_matcher_functional_newstyle(self):\n        self.matches('/{x}', '', None)\n        self.matches('/{x}', '/', None)\n        self.matches('/abc/{def}', '/abc/', None)\n        self.matches('/{x}', '/a', {'x':'a'})\n        self.matches('zzz/{x}', '/zzz/abc', {'x':'abc'})\n        self.matches('zzz/{x}*traverse', '/zzz/abc', {'x':'abc', 'traverse':()})\n        self.matches('zzz/{x}*traverse', '/zzz/abc/def/g',\n                     {'x':'abc', 'traverse':('def', 'g')})\n        self.matches('*traverse', '/zzz/abc', {'traverse':('zzz', 'abc')})\n        self.matches('*traverse', '/zzz/ abc', {'traverse':('zzz', ' abc')})\n        #'/La%20Pe%C3%B1a'\n        self.matches('{x}', text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                     {'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')})\n        # '/La%20Pe%C3%B1a/x'\n        self.matches('*traverse', text_(b'/La Pe\\xc3\\xb1a/x'),\n                     {'traverse':(text_(b'La Pe\\xc3\\xb1a'), 'x')})\n        self.matches('/foo/{id}.html', '/foo/bar.html', {'id':'bar'})\n        self.matches('/{num:[0-9]+}/*traverse', '/555/abc/def',\n                     {'num':'555', 'traverse':('abc', 'def')})\n        self.matches('/{num:[0-9]*}/*traverse', '/555/abc/def',\n                     {'num':'555', 'traverse':('abc', 'def')})\n        self.matches('zzz/{_}', '/zzz/abc', {'_':'abc'})\n        self.matches('zzz/{_abc}', '/zzz/abc', {'_abc':'abc'})\n        self.matches('zzz/{abc_def}', '/zzz/abc', {'abc_def':'abc'})\n\n    def test_matcher_functional_oldstyle(self):\n        self.matches('/:x', '', None)\n        self.matches('/:x', '/', None)\n        self.matches('/abc/:def', '/abc/', None)\n        self.matches('/:x', '/a', {'x':'a'})\n        self.matches('zzz/:x', '/zzz/abc', {'x':'abc'})\n        self.matches('zzz/:x*traverse', '/zzz/abc', {'x':'abc', 'traverse':()})\n        self.matches('zzz/:x*traverse', '/zzz/abc/def/g',\n                     {'x':'abc', 'traverse':('def', 'g')})\n        self.matches('*traverse', '/zzz/abc', {'traverse':('zzz', 'abc')})\n        self.matches('*traverse', '/zzz/ abc', {'traverse':('zzz', ' abc')})\n        #'/La%20Pe%C3%B1a'\n        # pattern, path, expected\n        self.matches(':x', text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                     {'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')})\n        # '/La%20Pe%C3%B1a/x'\n        self.matches('*traverse', text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8'),\n                     {'traverse':(text_(b'La Pe\\xc3\\xb1a', 'utf-8'), 'x')})\n        self.matches('/foo/:id.html', '/foo/bar.html', {'id':'bar'})\n        self.matches('/foo/:id_html', '/foo/bar_html', {'id_html':'bar_html'})\n        self.matches('zzz/:_', '/zzz/abc', {'_':'abc'})\n        self.matches('zzz/:_abc', '/zzz/abc', {'_abc':'abc'})\n        self.matches('zzz/:abc_def', '/zzz/abc', {'abc_def':'abc'})\n\n    def test_generator_functional_notdynamic(self):\n        self.generates('', {}, '/')\n        self.generates('/', {}, '/')\n\n    def test_generator_functional_newstyle(self):\n        self.generates('/{x}', {'x':''}, '/')\n        self.generates('/{x}', {'x':'a'}, '/a')\n        self.generates('zzz/{x}', {'x':'abc'}, '/zzz/abc')\n        self.generates('zzz/{x}*traverse', {'x':'abc', 'traverse':''},\n                       '/zzz/abc')\n        self.generates('zzz/{x}*traverse', {'x':'abc', 'traverse':'/def/g'},\n                       '/zzz/abc/def/g')\n        self.generates('/{x}', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8')},\n                       '/%2FLa%20Pe%C3%B1a')\n        self.generates('/{x}*y', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                                 'y':'/rest/of/path'},\n                       '/%2FLa%20Pe%C3%B1a/rest/of/path')\n        self.generates('*traverse', {'traverse':('a', text_(b'La Pe\\xf1a'))},\n                       '/a/La%20Pe%C3%B1a')\n        self.generates('/foo/{id}.html', {'id':'bar'}, '/foo/bar.html')\n        self.generates('/foo/{_}', {'_':'20'}, '/foo/20')\n        self.generates('/foo/{_abc}', {'_abc':'20'}, '/foo/20')\n        self.generates('/foo/{abc_def}', {'abc_def':'20'}, '/foo/20')\n        \n    def test_generator_functional_oldstyle(self):\n        self.generates('/:x', {'x':''}, '/')\n        self.generates('/:x', {'x':'a'}, '/a')\n        self.generates('zzz/:x', {'x':'abc'}, '/zzz/abc')\n        self.generates('zzz/:x*traverse', {'x':'abc', 'traverse':''},\n                       '/zzz/abc')\n        self.generates('zzz/:x*traverse', {'x':'abc', 'traverse':'/def/g'},\n                       '/zzz/abc/def/g')\n        self.generates('/:x', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8')},\n                       '/%2FLa%20Pe%C3%B1a')\n        self.generates('/:x*y', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                                 'y':'/rest/of/path'},\n                       '/%2FLa%20Pe%C3%B1a/rest/of/path')\n        self.generates('*traverse', {'traverse':('a', text_(b'La Pe\\xf1a'))},\n                       '/a/La%20Pe%C3%B1a')\n        self.generates('/foo/:id.html', {'id':'bar'}, '/foo/bar.html')\n        self.generates('/foo/:_', {'_':'20'}, '/foo/20')\n        self.generates('/foo/:_abc', {'_abc':'20'}, '/foo/20')\n        self.generates('/foo/:abc_def', {'abc_def':'20'}, '/foo/20')\n\nclass DummyContext(object):\n    \"\"\" \"\"\"\n        \nclass DummyRequest(object):\n    def __init__(self, environ):\n        self.environ = environ\n    \nclass DummyRoute(object):\n    def __init__(self, generator):\n        self.generate = generator\n        \n",
            "header": {
                "file": {
                    "path": "pyramid/tests/test_urldispatch.py"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "e15242f75",
                "new_commit_hash": "b2164717e",
                "mode": "100644"
            },
            "is_binary_file": false,
            "binary_line": null,
            "minus_file": {
                "path": "a/pyramid/tests/test_urldispatch.py"
            },
            "plus_file": {
                "path": "b/pyramid/tests/test_urldispatch.py"
            },
            "hunks": [
                {
                    "descriptor": {
                        "old_range": {
                            "start": 311,
                            "length": 6
                        },
                        "new_range": {
                            "start": 311,
                            "length": 14
                        },
                        "section": "class TestCompileRoute(unittest.TestCase):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)",
                                "type": "context"
                            },
                            {
                                "content": "        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),",
                                "type": "context"
                            },
                            {
                                "content": "                         '/foo/1/biz/2.html')",
                                "type": "context"
                            },
                            {
                                "content": "    ",
                                "type": "added"
                            },
                            {
                                "content": "    def test_custom_regex_with_colons(self):",
                                "type": "added"
                            },
                            {
                                "content": "        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}')",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),",
                                "type": "added"
                            },
                            {
                                "content": "                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),",
                                "type": "added"
                            },
                            {
                                "content": "                         '/foo/1/biz/2.html')",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    def test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle(self):",
                                "type": "context"
                            },
                            {
                                "content": "        # pattern: '\\\\/foo\\\\/(?P<baz>abc)\\\\/biz\\\\/(?P<buz>[^/]+)\\\\/bar$'",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/tests/test_urldispatch.py",
                            "type": "class",
                            "name": "TestCompileRoute",
                            "content": "class TestCompileRoute(unittest.TestCase):\n    def _callFUT(self, pattern):\n        from pyramid.urldispatch import _compile_route\n        return _compile_route(pattern)\n\n    def test_no_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_with_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar*traverse')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'traverse':()})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'traverse':('everything', 'else', 'here')})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'traverse':'/a/b'}), '/foo/1/biz/2/bar/a/b')\n    \n    def test_with_bracket_star(self):\n        matcher, generator = self._callFUT(\n            '/foo/{baz}/biz/{buz}/bar{remainder:.*}')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'remainder':''})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'remainder':'/everything/else/here'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'remainder':'/a/b'}), '/foo/1/biz/2/bar%2Fa%2Fb')\n\n    def test_no_beginning_slash(self):\n        matcher, generator = self._callFUT('foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:[^/\\.]+}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n    \n    def test_custom_regex_with_colons(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n\n    def test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle(self):\n        # pattern: '\\\\/foo\\\\/(?P<baz>abc)\\\\/biz\\\\/(?P<buz>[^/]+)\\\\/bar$'\n        # note presence of :abc in pattern (oldstyle match)\n        matcher, generator = self._callFUT('foo/{baz:abc}/biz/{buz}/bar')\n        self.assertEqual(matcher('/foo/abc/biz/buz/bar'),\n                         {'baz':'abc', 'buz':'buz'})\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex_with_embedded_squigglies(self):\n        matcher, generator = self._callFUT('/{buz:\\d{4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies2(self):\n        matcher, generator = self._callFUT('/{buz:\\d{3,4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), {'buz':'200'})\n        self.assertEqual(matcher('/20'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies3(self):\n        matcher, generator = self._callFUT(\n            '/{buz:(\\d{2}|\\d{4})-[a-zA-Z]{3,4}-\\d{2}}')\n        self.assertEqual(matcher('/2001-Nov-15'), {'buz':'2001-Nov-15'})\n        self.assertEqual(matcher('/99-June-10'), {'buz':'99-June-10'})\n        self.assertEqual(matcher('/2-Nov-15'), None)\n        self.assertEqual(matcher('/200-Nov-15'), None)\n        self.assertEqual(matcher('/2001-No-15'), None)\n        self.assertEqual(generator({'buz':'2001-Nov-15'}), '/2001-Nov-15')\n        self.assertEqual(generator({'buz':'99-June-10'}), '/99-June-10')\n\n    def test_pattern_with_high_order_literal(self):\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{x}', 'utf-8')\n        matcher, generator = self._callFUT(pattern)\n        self.assertEqual(matcher(text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8')),\n                         {'x':'x'})\n        self.assertEqual(generator({'x':'1'}), '/La%20Pe%C3%B1a/1')\n\n    def test_pattern_generate_with_high_order_dynamic(self):\n        pattern = '/{x}'\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')}),\n            '/La%20Pe%C3%B1a')\n\n    def test_docs_sample_generate(self):\n        # sample from urldispatch.rst\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{city}', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'city':text_(b'Qu\\xc3\\xa9bec', 'utf-8')}),\n            '/La%20Pe%C3%B1a/Qu%C3%A9bec')\n\n    def test_generate_with_mixedtype_values(self):\n        pattern = '/{city}/{state}'\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'city': text_(b'Qu\\xc3\\xa9bec', 'utf-8'),\n             'state': b'La Pe\\xc3\\xb1a'}\n            )\n        self.assertEqual(result, '/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_highorder_pattern_utf8(self):\n        pattern = b'/La Pe\\xc3\\xb1a/{city}'\n        self.assertRaises(ValueError, self._callFUT, pattern)\n\n    def test_generate_with_string_remainder_and_unicode_replacement(self):\n        pattern = text_(b'/abc*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': text_(b'/Qu\\xc3\\xa9bec/La Pe\\xc3\\xb1a', 'utf-8')}\n            )\n        self.assertEqual(result, '/abc/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_generate_with_string_remainder_and_nonstring_replacement(self):\n        pattern = text_(b'/abc/*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': None}\n            )\n        self.assertEqual(result, '/abc/None')\n        # should be a native string\n        self.assertEqual(type(result), str)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 265,
                            "end_lineno": 410,
                            "parent": null
                        }
                    ],
                    "added_entities": [
                        {
                            "file_name": "pyramid/tests/test_urldispatch.py",
                            "type": "method",
                            "name": "TestCompileRoute.test_custom_regex_with_colons",
                            "content": "class TestCompileRoute(unittest.TestCase):\n    def _callFUT(self, pattern):\n        from pyramid.urldispatch import _compile_route\n        return _compile_route(pattern)\n\n    def test_no_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_with_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar*traverse')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'traverse':()})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'traverse':('everything', 'else', 'here')})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'traverse':'/a/b'}), '/foo/1/biz/2/bar/a/b')\n    \n    def test_with_bracket_star(self):\n        matcher, generator = self._callFUT(\n            '/foo/{baz}/biz/{buz}/bar{remainder:.*}')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'remainder':''})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'remainder':'/everything/else/here'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'remainder':'/a/b'}), '/foo/1/biz/2/bar%2Fa%2Fb')\n\n    def test_no_beginning_slash(self):\n        matcher, generator = self._callFUT('foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:[^/\\.]+}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n    \n    def test_custom_regex_with_colons(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n\n    def test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle(self):\n        # pattern: '\\\\/foo\\\\/(?P<baz>abc)\\\\/biz\\\\/(?P<buz>[^/]+)\\\\/bar$'\n        # note presence of :abc in pattern (oldstyle match)\n        matcher, generator = self._callFUT('foo/{baz:abc}/biz/{buz}/bar')\n        self.assertEqual(matcher('/foo/abc/biz/buz/bar'),\n                         {'baz':'abc', 'buz':'buz'})\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex_with_embedded_squigglies(self):\n        matcher, generator = self._callFUT('/{buz:\\d{4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies2(self):\n        matcher, generator = self._callFUT('/{buz:\\d{3,4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), {'buz':'200'})\n        self.assertEqual(matcher('/20'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies3(self):\n        matcher, generator = self._callFUT(\n            '/{buz:(\\d{2}|\\d{4})-[a-zA-Z]{3,4}-\\d{2}}')\n        self.assertEqual(matcher('/2001-Nov-15'), {'buz':'2001-Nov-15'})\n        self.assertEqual(matcher('/99-June-10'), {'buz':'99-June-10'})\n        self.assertEqual(matcher('/2-Nov-15'), None)\n        self.assertEqual(matcher('/200-Nov-15'), None)\n        self.assertEqual(matcher('/2001-No-15'), None)\n        self.assertEqual(generator({'buz':'2001-Nov-15'}), '/2001-Nov-15')\n        self.assertEqual(generator({'buz':'99-June-10'}), '/99-June-10')\n\n    def test_pattern_with_high_order_literal(self):\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{x}', 'utf-8')\n        matcher, generator = self._callFUT(pattern)\n        self.assertEqual(matcher(text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8')),\n                         {'x':'x'})\n        self.assertEqual(generator({'x':'1'}), '/La%20Pe%C3%B1a/1')\n\n    def test_pattern_generate_with_high_order_dynamic(self):\n        pattern = '/{x}'\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')}),\n            '/La%20Pe%C3%B1a')\n\n    def test_docs_sample_generate(self):\n        # sample from urldispatch.rst\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{city}', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'city':text_(b'Qu\\xc3\\xa9bec', 'utf-8')}),\n            '/La%20Pe%C3%B1a/Qu%C3%A9bec')\n\n    def test_generate_with_mixedtype_values(self):\n        pattern = '/{city}/{state}'\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'city': text_(b'Qu\\xc3\\xa9bec', 'utf-8'),\n             'state': b'La Pe\\xc3\\xb1a'}\n            )\n        self.assertEqual(result, '/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_highorder_pattern_utf8(self):\n        pattern = b'/La Pe\\xc3\\xb1a/{city}'\n        self.assertRaises(ValueError, self._callFUT, pattern)\n\n    def test_generate_with_string_remainder_and_unicode_replacement(self):\n        pattern = text_(b'/abc*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': text_(b'/Qu\\xc3\\xa9bec/La Pe\\xc3\\xb1a', 'utf-8')}\n            )\n        self.assertEqual(result, '/abc/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_generate_with_string_remainder_and_nonstring_replacement(self):\n        pattern = text_(b'/abc/*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': None}\n            )\n        self.assertEqual(result, '/abc/None')\n        # should be a native string\n        self.assertEqual(type(result), str)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 315,
                            "end_lineno": 321,
                            "parent": {
                                "file_name": "pyramid/tests/test_urldispatch.py",
                                "type": "class",
                                "name": "TestCompileRoute",
                                "content": "class TestCompileRoute(unittest.TestCase):\n    def _callFUT(self, pattern):\n        from pyramid.urldispatch import _compile_route\n        return _compile_route(pattern)\n\n    def test_no_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_with_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar*traverse')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'traverse':()})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'traverse':('everything', 'else', 'here')})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'traverse':'/a/b'}), '/foo/1/biz/2/bar/a/b')\n    \n    def test_with_bracket_star(self):\n        matcher, generator = self._callFUT(\n            '/foo/{baz}/biz/{buz}/bar{remainder:.*}')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'remainder':''})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'remainder':'/everything/else/here'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'remainder':'/a/b'}), '/foo/1/biz/2/bar%2Fa%2Fb')\n\n    def test_no_beginning_slash(self):\n        matcher, generator = self._callFUT('foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:[^/\\.]+}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n    \n    def test_custom_regex_with_colons(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n\n    def test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle(self):\n        # pattern: '\\\\/foo\\\\/(?P<baz>abc)\\\\/biz\\\\/(?P<buz>[^/]+)\\\\/bar$'\n        # note presence of :abc in pattern (oldstyle match)\n        matcher, generator = self._callFUT('foo/{baz:abc}/biz/{buz}/bar')\n        self.assertEqual(matcher('/foo/abc/biz/buz/bar'),\n                         {'baz':'abc', 'buz':'buz'})\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex_with_embedded_squigglies(self):\n        matcher, generator = self._callFUT('/{buz:\\d{4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies2(self):\n        matcher, generator = self._callFUT('/{buz:\\d{3,4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), {'buz':'200'})\n        self.assertEqual(matcher('/20'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies3(self):\n        matcher, generator = self._callFUT(\n            '/{buz:(\\d{2}|\\d{4})-[a-zA-Z]{3,4}-\\d{2}}')\n        self.assertEqual(matcher('/2001-Nov-15'), {'buz':'2001-Nov-15'})\n        self.assertEqual(matcher('/99-June-10'), {'buz':'99-June-10'})\n        self.assertEqual(matcher('/2-Nov-15'), None)\n        self.assertEqual(matcher('/200-Nov-15'), None)\n        self.assertEqual(matcher('/2001-No-15'), None)\n        self.assertEqual(generator({'buz':'2001-Nov-15'}), '/2001-Nov-15')\n        self.assertEqual(generator({'buz':'99-June-10'}), '/99-June-10')\n\n    def test_pattern_with_high_order_literal(self):\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{x}', 'utf-8')\n        matcher, generator = self._callFUT(pattern)\n        self.assertEqual(matcher(text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8')),\n                         {'x':'x'})\n        self.assertEqual(generator({'x':'1'}), '/La%20Pe%C3%B1a/1')\n\n    def test_pattern_generate_with_high_order_dynamic(self):\n        pattern = '/{x}'\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')}),\n            '/La%20Pe%C3%B1a')\n\n    def test_docs_sample_generate(self):\n        # sample from urldispatch.rst\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{city}', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'city':text_(b'Qu\\xc3\\xa9bec', 'utf-8')}),\n            '/La%20Pe%C3%B1a/Qu%C3%A9bec')\n\n    def test_generate_with_mixedtype_values(self):\n        pattern = '/{city}/{state}'\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'city': text_(b'Qu\\xc3\\xa9bec', 'utf-8'),\n             'state': b'La Pe\\xc3\\xb1a'}\n            )\n        self.assertEqual(result, '/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_highorder_pattern_utf8(self):\n        pattern = b'/La Pe\\xc3\\xb1a/{city}'\n        self.assertRaises(ValueError, self._callFUT, pattern)\n\n    def test_generate_with_string_remainder_and_unicode_replacement(self):\n        pattern = text_(b'/abc*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': text_(b'/Qu\\xc3\\xa9bec/La Pe\\xc3\\xb1a', 'utf-8')}\n            )\n        self.assertEqual(result, '/abc/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_generate_with_string_remainder_and_nonstring_replacement(self):\n        pattern = text_(b'/abc/*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': None}\n            )\n        self.assertEqual(result, '/abc/None')\n        # should be a native string\n        self.assertEqual(type(result), str)",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 265,
                                "end_lineno": 410,
                                "parent": null
                            }
                        }
                    ],
                    "deleted_entities": []
                }
            ]
        },
        {
            "old_file_content": "import re\nfrom zope.interface import implementer\n\nfrom pyramid.interfaces import (\n    IRoutesMapper,\n    IRoute,\n    )\n\nfrom pyramid.compat import (\n    PY3,\n    native_,\n    text_,\n    text_type,\n    string_types,\n    binary_type,\n    is_nonstr_iter,\n    decode_path_info,\n    )\n\nfrom pyramid.exceptions import URLDecodeError\n\nfrom pyramid.traversal import (\n    quote_path_segment,\n    split_path_info,\n    )\n\n_marker = object()\n\n@implementer(IRoute)\nclass Route(object):\n    def __init__(self, name, pattern, factory=None, predicates=(),\n                 pregenerator=None):\n        self.pattern = pattern\n        self.path = pattern # indefinite b/w compat, not in interface\n        self.match, self.generate = _compile_route(pattern)\n        self.name = name\n        self.factory = factory\n        self.predicates = predicates\n        self.pregenerator = pregenerator\n\n@implementer(IRoutesMapper)\nclass RoutesMapper(object):\n    def __init__(self):\n        self.routelist = []\n        self.routes = {}\n\n    def has_routes(self):\n        return bool(self.routelist)\n\n    def get_routes(self):\n        return self.routelist\n\n    def get_route(self, name):\n        return self.routes.get(name)\n\n    def connect(self, name, pattern, factory=None, predicates=(),\n                pregenerator=None, static=False):\n        if name in self.routes:\n            oldroute = self.routes[name]\n            if oldroute in self.routelist:\n                self.routelist.remove(oldroute)\n        route = Route(name, pattern, factory, predicates, pregenerator)\n        if not static:\n            self.routelist.append(route)\n        self.routes[name] = route\n        return route\n\n    def generate(self, name, kw):\n        return self.routes[name].generate(kw)\n\n    def __call__(self, request):\n        environ = request.environ\n        try:\n            # empty if mounted under a path in mod_wsgi, for example\n            path = decode_path_info(environ['PATH_INFO'] or '/')\n        except KeyError:\n            path = '/'\n        except UnicodeDecodeError as e:\n            raise URLDecodeError(e.encoding, e.object, e.start, e.end, e.reason)\n\n        for route in self.routelist:\n            match = route.match(path)\n            if match is not None:\n                preds = route.predicates\n                info = {'match':match, 'route':route}\n                if preds and not all((p(info, request) for p in preds)):\n                    continue\n                return info\n\n        return {'route':None, 'match':None}\n\n# stolen from bobo and modified\nold_route_re = re.compile(r'(\\:[_a-zA-Z]\\w*)')\nstar_at_end = re.compile(r'\\*\\w*$')\n\n# The tortuous nature of the regex named ``route_re`` below is due to the\n# fact that we need to support at least one level of \"inner\" squigglies\n# inside the expr of a {name:expr} pattern.  This regex used to be just\n# (\\{[a-zA-Z][^\\}]*\\}) but that choked when supplied with e.g. {foo:\\d{4}}.\nroute_re = re.compile(r'(\\{[_a-zA-Z][^{}]*(?:\\{[^{}]*\\}[^{}]*)*\\})')\n\ndef update_pattern(matchobj):\n    name = matchobj.group(0)\n    return '{%s}' % name[1:]\n\ndef _compile_route(route):\n    # This function really wants to consume Unicode patterns natively, but if\n    # someone passes us a bytestring, we allow it by converting it to Unicode\n    # using the ASCII decoding.  We decode it using ASCII because we don't\n    # want to accept bytestrings with high-order characters in them here as\n    # we have no idea what the encoding represents.\n    if route.__class__ is not text_type:\n        try:\n            route = text_(route, 'ascii')\n        except UnicodeDecodeError:\n            raise ValueError(\n                'The pattern value passed to add_route must be '\n                'either a Unicode string or a plain string without '\n                'any non-ASCII characters (you provided %r).' % route)\n\n    if old_route_re.search(route) and not route_re.search(route):\n        route = old_route_re.sub(update_pattern, route)\n\n    if not route.startswith('/'):\n        route = '/' + route\n\n    remainder = None\n    if star_at_end.search(route):\n        route, remainder = route.rsplit('*', 1)\n\n    pat = route_re.split(route)\n\n    # every element in \"pat\" will be Unicode (regardless of whether the\n    # route_re regex pattern is itself Unicode or str)\n    pat.reverse()\n    rpat = []\n    gen = []\n    prefix = pat.pop() # invar: always at least one element (route='/'+route)\n\n    # We want to generate URL-encoded URLs, so we url-quote the prefix, being\n    # careful not to quote any embedded slashes.  We have to replace '%' with\n    # '%%' afterwards, as the strings that go into \"gen\" are used as string\n    # replacement targets.\n    gen.append(quote_path_segment(prefix, safe='/').replace('%', '%%')) # native\n    rpat.append(re.escape(prefix)) # unicode\n\n    while pat:\n        name = pat.pop() # unicode\n        name = name[1:-1]\n        if ':' in name:\n            name, reg = name.split(':')\n        else:\n            reg = '[^/]+'\n        gen.append('%%(%s)s' % native_(name)) # native\n        name = '(?P<%s>%s)' % (name, reg) # unicode\n        rpat.append(name)\n        s = pat.pop() # unicode\n        if s:\n            rpat.append(re.escape(s)) # unicode\n            # We want to generate URL-encoded URLs, so we url-quote this\n            # literal in the pattern, being careful not to quote the embedded\n            # slashes.  We have to replace '%' with '%%' afterwards, as the\n            # strings that go into \"gen\" are used as string replacement\n            # targets.  What is appended to gen is a native string.\n            gen.append(quote_path_segment(s, safe='/').replace('%', '%%'))\n\n    if remainder:\n        rpat.append('(?P<%s>.*?)' % remainder) # unicode\n        gen.append('%%(%s)s' % native_(remainder)) # native\n\n    pattern = ''.join(rpat) + '$' # unicode\n\n    match = re.compile(pattern).match\n    def matcher(path):\n        # This function really wants to consume Unicode patterns natively,\n        # but if someone passes us a bytestring, we allow it by converting it\n        # to Unicode using the ASCII decoding.  We decode it using ASCII\n        # because we don't want to accept bytestrings with high-order\n        # characters in them here as we have no idea what the encoding\n        # represents.\n        if path.__class__ is not text_type:\n            path = text_(path, 'ascii')\n        m = match(path)\n        if m is None:\n            return None\n        d = {}\n        for k, v in m.groupdict().items():\n            # k and v will be Unicode 2.6.4 and lower doesnt accept unicode\n            # kwargs as **kw, so we explicitly cast the keys to native\n            # strings in case someone wants to pass the result as **kw\n            nk = native_(k, 'ascii')\n            if k == remainder:\n                d[nk] = split_path_info(v)\n            else:\n                d[nk] = v\n        return d\n\n    gen = ''.join(gen)\n    def generator(dict):\n        newdict = {}\n        for k, v in dict.items():\n            if PY3: # pragma: no cover\n                if v.__class__ is binary_type:\n                    # url_quote below needs a native string, not bytes on Py3\n                    v = v.decode('utf-8')\n            else:\n                if v.__class__ is text_type:\n                    # url_quote below needs bytes, not unicode on Py2\n                    v = v.encode('utf-8')\n\n            if k == remainder:\n                # a stararg argument\n                if is_nonstr_iter(v):\n                    v = '/'.join([quote_path_segment(x) for x in v]) # native\n                else:\n                    if v.__class__ not in string_types:\n                        v = str(v)\n                    v = quote_path_segment(v, safe='/')\n            else:\n                if v.__class__ not in string_types:\n                    v = str(v)\n                # v may be bytes (py2) or native string (py3)\n                v = quote_path_segment(v)\n\n            # at this point, the value will be a native string\n            newdict[k] = v\n\n        result = gen % newdict # native string result\n        return result\n\n    return matcher, generator\n",
            "new_file_content": "import re\nfrom zope.interface import implementer\n\nfrom pyramid.interfaces import (\n    IRoutesMapper,\n    IRoute,\n    )\n\nfrom pyramid.compat import (\n    PY3,\n    native_,\n    text_,\n    text_type,\n    string_types,\n    binary_type,\n    is_nonstr_iter,\n    decode_path_info,\n    )\n\nfrom pyramid.exceptions import URLDecodeError\n\nfrom pyramid.traversal import (\n    quote_path_segment,\n    split_path_info,\n    )\n\n_marker = object()\n\n@implementer(IRoute)\nclass Route(object):\n    def __init__(self, name, pattern, factory=None, predicates=(),\n                 pregenerator=None):\n        self.pattern = pattern\n        self.path = pattern # indefinite b/w compat, not in interface\n        self.match, self.generate = _compile_route(pattern)\n        self.name = name\n        self.factory = factory\n        self.predicates = predicates\n        self.pregenerator = pregenerator\n\n@implementer(IRoutesMapper)\nclass RoutesMapper(object):\n    def __init__(self):\n        self.routelist = []\n        self.routes = {}\n\n    def has_routes(self):\n        return bool(self.routelist)\n\n    def get_routes(self):\n        return self.routelist\n\n    def get_route(self, name):\n        return self.routes.get(name)\n\n    def connect(self, name, pattern, factory=None, predicates=(),\n                pregenerator=None, static=False):\n        if name in self.routes:\n            oldroute = self.routes[name]\n            if oldroute in self.routelist:\n                self.routelist.remove(oldroute)\n        route = Route(name, pattern, factory, predicates, pregenerator)\n        if not static:\n            self.routelist.append(route)\n        self.routes[name] = route\n        return route\n\n    def generate(self, name, kw):\n        return self.routes[name].generate(kw)\n\n    def __call__(self, request):\n        environ = request.environ\n        try:\n            # empty if mounted under a path in mod_wsgi, for example\n            path = decode_path_info(environ['PATH_INFO'] or '/')\n        except KeyError:\n            path = '/'\n        except UnicodeDecodeError as e:\n            raise URLDecodeError(e.encoding, e.object, e.start, e.end, e.reason)\n\n        for route in self.routelist:\n            match = route.match(path)\n            if match is not None:\n                preds = route.predicates\n                info = {'match':match, 'route':route}\n                if preds and not all((p(info, request) for p in preds)):\n                    continue\n                return info\n\n        return {'route':None, 'match':None}\n\n# stolen from bobo and modified\nold_route_re = re.compile(r'(\\:[_a-zA-Z]\\w*)')\nstar_at_end = re.compile(r'\\*\\w*$')\n\n# The tortuous nature of the regex named ``route_re`` below is due to the\n# fact that we need to support at least one level of \"inner\" squigglies\n# inside the expr of a {name:expr} pattern.  This regex used to be just\n# (\\{[a-zA-Z][^\\}]*\\}) but that choked when supplied with e.g. {foo:\\d{4}}.\nroute_re = re.compile(r'(\\{[_a-zA-Z][^{}]*(?:\\{[^{}]*\\}[^{}]*)*\\})')\n\ndef update_pattern(matchobj):\n    name = matchobj.group(0)\n    return '{%s}' % name[1:]\n\ndef _compile_route(route):\n    # This function really wants to consume Unicode patterns natively, but if\n    # someone passes us a bytestring, we allow it by converting it to Unicode\n    # using the ASCII decoding.  We decode it using ASCII because we don't\n    # want to accept bytestrings with high-order characters in them here as\n    # we have no idea what the encoding represents.\n    if route.__class__ is not text_type:\n        try:\n            route = text_(route, 'ascii')\n        except UnicodeDecodeError:\n            raise ValueError(\n                'The pattern value passed to add_route must be '\n                'either a Unicode string or a plain string without '\n                'any non-ASCII characters (you provided %r).' % route)\n\n    if old_route_re.search(route) and not route_re.search(route):\n        route = old_route_re.sub(update_pattern, route)\n\n    if not route.startswith('/'):\n        route = '/' + route\n\n    remainder = None\n    if star_at_end.search(route):\n        route, remainder = route.rsplit('*', 1)\n\n    pat = route_re.split(route)\n\n    # every element in \"pat\" will be Unicode (regardless of whether the\n    # route_re regex pattern is itself Unicode or str)\n    pat.reverse()\n    rpat = []\n    gen = []\n    prefix = pat.pop() # invar: always at least one element (route='/'+route)\n\n    # We want to generate URL-encoded URLs, so we url-quote the prefix, being\n    # careful not to quote any embedded slashes.  We have to replace '%' with\n    # '%%' afterwards, as the strings that go into \"gen\" are used as string\n    # replacement targets.\n    gen.append(quote_path_segment(prefix, safe='/').replace('%', '%%')) # native\n    rpat.append(re.escape(prefix)) # unicode\n\n    while pat:\n        name = pat.pop() # unicode\n        name = name[1:-1]\n        if ':' in name:\n            # reg may contain colons as well,\n            # so we must strictly split name into two parts\n            name, reg = name.split(':', 1)\n        else:\n            reg = '[^/]+'\n        gen.append('%%(%s)s' % native_(name)) # native\n        name = '(?P<%s>%s)' % (name, reg) # unicode\n        rpat.append(name)\n        s = pat.pop() # unicode\n        if s:\n            rpat.append(re.escape(s)) # unicode\n            # We want to generate URL-encoded URLs, so we url-quote this\n            # literal in the pattern, being careful not to quote the embedded\n            # slashes.  We have to replace '%' with '%%' afterwards, as the\n            # strings that go into \"gen\" are used as string replacement\n            # targets.  What is appended to gen is a native string.\n            gen.append(quote_path_segment(s, safe='/').replace('%', '%%'))\n\n    if remainder:\n        rpat.append('(?P<%s>.*?)' % remainder) # unicode\n        gen.append('%%(%s)s' % native_(remainder)) # native\n\n    pattern = ''.join(rpat) + '$' # unicode\n\n    match = re.compile(pattern).match\n    def matcher(path):\n        # This function really wants to consume Unicode patterns natively,\n        # but if someone passes us a bytestring, we allow it by converting it\n        # to Unicode using the ASCII decoding.  We decode it using ASCII\n        # because we don't want to accept bytestrings with high-order\n        # characters in them here as we have no idea what the encoding\n        # represents.\n        if path.__class__ is not text_type:\n            path = text_(path, 'ascii')\n        m = match(path)\n        if m is None:\n            return None\n        d = {}\n        for k, v in m.groupdict().items():\n            # k and v will be Unicode 2.6.4 and lower doesnt accept unicode\n            # kwargs as **kw, so we explicitly cast the keys to native\n            # strings in case someone wants to pass the result as **kw\n            nk = native_(k, 'ascii')\n            if k == remainder:\n                d[nk] = split_path_info(v)\n            else:\n                d[nk] = v\n        return d\n\n    gen = ''.join(gen)\n    def generator(dict):\n        newdict = {}\n        for k, v in dict.items():\n            if PY3: # pragma: no cover\n                if v.__class__ is binary_type:\n                    # url_quote below needs a native string, not bytes on Py3\n                    v = v.decode('utf-8')\n            else:\n                if v.__class__ is text_type:\n                    # url_quote below needs bytes, not unicode on Py2\n                    v = v.encode('utf-8')\n\n            if k == remainder:\n                # a stararg argument\n                if is_nonstr_iter(v):\n                    v = '/'.join([quote_path_segment(x) for x in v]) # native\n                else:\n                    if v.__class__ not in string_types:\n                        v = str(v)\n                    v = quote_path_segment(v, safe='/')\n            else:\n                if v.__class__ not in string_types:\n                    v = str(v)\n                # v may be bytes (py2) or native string (py3)\n                v = quote_path_segment(v)\n\n            # at this point, the value will be a native string\n            newdict[k] = v\n\n        result = gen % newdict # native string result\n        return result\n\n    return matcher, generator\n",
            "header": {
                "file": {
                    "path": "pyramid/urldispatch.py"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "cccff14ba",
                "new_commit_hash": "4182ea665",
                "mode": "100644"
            },
            "is_binary_file": false,
            "binary_line": null,
            "minus_file": {
                "path": "a/pyramid/urldispatch.py"
            },
            "plus_file": {
                "path": "b/pyramid/urldispatch.py"
            },
            "hunks": [
                {
                    "descriptor": {
                        "old_range": {
                            "start": 148,
                            "length": 7
                        },
                        "new_range": {
                            "start": 148,
                            "length": 9
                        },
                        "section": "def _compile_route(route):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "        name = pat.pop() # unicode",
                                "type": "context"
                            },
                            {
                                "content": "        name = name[1:-1]",
                                "type": "context"
                            },
                            {
                                "content": "        if ':' in name:",
                                "type": "context"
                            },
                            {
                                "content": "            name, reg = name.split(':')",
                                "type": "deleted"
                            },
                            {
                                "content": "            # reg may contain colons as well,",
                                "type": "added"
                            },
                            {
                                "content": "            # so we must strictly split name into two parts",
                                "type": "added"
                            },
                            {
                                "content": "            name, reg = name.split(':', 1)",
                                "type": "added"
                            },
                            {
                                "content": "        else:",
                                "type": "context"
                            },
                            {
                                "content": "            reg = '[^/]+'",
                                "type": "context"
                            },
                            {
                                "content": "        gen.append('%%(%s)s' % native_(name)) # native",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/urldispatch.py",
                            "type": "function",
                            "name": "_compile_route",
                            "content": "def _compile_route(route):\n    # This function really wants to consume Unicode patterns natively, but if\n    # someone passes us a bytestring, we allow it by converting it to Unicode\n    # using the ASCII decoding.  We decode it using ASCII because we don't\n    # want to accept bytestrings with high-order characters in them here as\n    # we have no idea what the encoding represents.\n    if route.__class__ is not text_type:\n        try:\n            route = text_(route, 'ascii')\n        except UnicodeDecodeError:\n            raise ValueError(\n                'The pattern value passed to add_route must be '\n                'either a Unicode string or a plain string without '\n                'any non-ASCII characters (you provided %r).' % route)\n\n    if old_route_re.search(route) and not route_re.search(route):\n        route = old_route_re.sub(update_pattern, route)\n\n    if not route.startswith('/'):\n        route = '/' + route\n\n    remainder = None\n    if star_at_end.search(route):\n        route, remainder = route.rsplit('*', 1)\n\n    pat = route_re.split(route)\n\n    # every element in \"pat\" will be Unicode (regardless of whether the\n    # route_re regex pattern is itself Unicode or str)\n    pat.reverse()\n    rpat = []\n    gen = []\n    prefix = pat.pop() # invar: always at least one element (route='/'+route)\n\n    # We want to generate URL-encoded URLs, so we url-quote the prefix, being\n    # careful not to quote any embedded slashes.  We have to replace '%' with\n    # '%%' afterwards, as the strings that go into \"gen\" are used as string\n    # replacement targets.\n    gen.append(quote_path_segment(prefix, safe='/').replace('%', '%%')) # native\n    rpat.append(re.escape(prefix)) # unicode\n\n    while pat:\n        name = pat.pop() # unicode\n        name = name[1:-1]\n        if ':' in name:\n            name, reg = name.split(':')\n        else:\n            reg = '[^/]+'\n        gen.append('%%(%s)s' % native_(name)) # native\n        name = '(?P<%s>%s)' % (name, reg) # unicode\n        rpat.append(name)\n        s = pat.pop() # unicode\n        if s:\n            rpat.append(re.escape(s)) # unicode\n            # We want to generate URL-encoded URLs, so we url-quote this\n            # literal in the pattern, being careful not to quote the embedded\n            # slashes.  We have to replace '%' with '%%' afterwards, as the\n            # strings that go into \"gen\" are used as string replacement\n            # targets.  What is appended to gen is a native string.\n            gen.append(quote_path_segment(s, safe='/').replace('%', '%%'))\n\n    if remainder:\n        rpat.append('(?P<%s>.*?)' % remainder) # unicode\n        gen.append('%%(%s)s' % native_(remainder)) # native\n\n    pattern = ''.join(rpat) + '$' # unicode\n\n    match = re.compile(pattern).match\n    def matcher(path):\n        # This function really wants to consume Unicode patterns natively,\n        # but if someone passes us a bytestring, we allow it by converting it\n        # to Unicode using the ASCII decoding.  We decode it using ASCII\n        # because we don't want to accept bytestrings with high-order\n        # characters in them here as we have no idea what the encoding\n        # represents.\n        if path.__class__ is not text_type:\n            path = text_(path, 'ascii')\n        m = match(path)\n        if m is None:\n            return None\n        d = {}\n        for k, v in m.groupdict().items():\n            # k and v will be Unicode 2.6.4 and lower doesnt accept unicode\n            # kwargs as **kw, so we explicitly cast the keys to native\n            # strings in case someone wants to pass the result as **kw\n            nk = native_(k, 'ascii')\n            if k == remainder:\n                d[nk] = split_path_info(v)\n            else:\n                d[nk] = v\n        return d\n\n    gen = ''.join(gen)\n    def generator(dict):\n        newdict = {}\n        for k, v in dict.items():\n            if PY3: # pragma: no cover\n                if v.__class__ is binary_type:\n                    # url_quote below needs a native string, not bytes on Py3\n                    v = v.decode('utf-8')\n            else:\n                if v.__class__ is text_type:\n                    # url_quote below needs bytes, not unicode on Py2\n                    v = v.encode('utf-8')\n\n            if k == remainder:\n                # a stararg argument\n                if is_nonstr_iter(v):\n                    v = '/'.join([quote_path_segment(x) for x in v]) # native\n                else:\n                    if v.__class__ not in string_types:\n                        v = str(v)\n                    v = quote_path_segment(v, safe='/')\n            else:\n                if v.__class__ not in string_types:\n                    v = str(v)\n                # v may be bytes (py2) or native string (py3)\n                v = quote_path_segment(v)\n\n            # at this point, the value will be a native string\n            newdict[k] = v\n\n        result = gen % newdict # native string result\n        return result\n\n    return matcher, generator",
                            "ast_type_str": "FunctionDef",
                            "start_lineno": 106,
                            "end_lineno": 231,
                            "parent": null
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                }
            ]
        }
    ],
    "old_commit_hash": "0d97ad3693c96215ee488f5c881847b812857aef^",
    "new_commit_hash": "0d97ad3693c96215ee488f5c881847b812857aef",
    "commit_message": "Merge branch 'master' of github.com:Pylons/pyramid",
    "commit_date": "2012-07-10T15:49:22-04:00",
    "metadata": {}
}
{
    "repo_name": "pyramid",
    "new_commit_hash": "0d97ad3693c96215ee488f5c881847b812857aef",
    "test_file_codes": [
        "import unittest\nfrom pyramid import testing\nfrom pyramid.compat import (\n    text_,\n    PY3,\n    )\n\nclass TestRoute(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.urldispatch import Route\n        return Route\n\n    def _makeOne(self, *arg):\n        return self._getTargetClass()(*arg)\n\n    def test_provides_IRoute(self):\n        from pyramid.interfaces import IRoute\n        from zope.interface.verify import verifyObject\n        verifyObject(IRoute, self._makeOne('name', 'pattern'))\n\n    def test_ctor(self):\n        import types\n        route = self._makeOne('name', ':path', 'factory')\n        self.assertEqual(route.pattern, ':path')\n        self.assertEqual(route.path, ':path')\n        self.assertEqual(route.name, 'name')\n        self.assertEqual(route.factory, 'factory')\n        self.assertTrue(route.generate.__class__ is types.FunctionType)\n        self.assertTrue(route.match.__class__ is types.FunctionType)\n\n    def test_ctor_defaults(self):\n        import types\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.pattern, ':path')\n        self.assertEqual(route.path, ':path')\n        self.assertEqual(route.name, 'name')\n        self.assertEqual(route.factory, None)\n        self.assertTrue(route.generate.__class__ is types.FunctionType)\n        self.assertTrue(route.match.__class__ is types.FunctionType)\n\n    def test_match(self):\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.match('/whatever'), {'path':'whatever'})\n\n    def test_generate(self):\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.generate({'path':'abc'}), '/abc')\n\nclass RoutesMapperTests(unittest.TestCase):\n    def setUp(self):\n        testing.setUp()\n\n    def tearDown(self):\n        testing.tearDown()\n        \n    def _getRequest(self, **kw):\n        from pyramid.threadlocal import get_current_registry\n        environ = {'SERVER_NAME':'localhost',\n                   'wsgi.url_scheme':'http'}\n        environ.update(kw)\n        request = DummyRequest(environ)\n        reg = get_current_registry()\n        request.registry = reg\n        return request\n\n    def _getTargetClass(self):\n        from pyramid.urldispatch import RoutesMapper\n        return RoutesMapper\n\n    def _makeOne(self):\n        klass = self._getTargetClass()\n        return klass()\n\n    def test_provides_IRoutesMapper(self):\n        from pyramid.interfaces import IRoutesMapper\n        from zope.interface.verify import verifyObject\n        verifyObject(IRoutesMapper, self._makeOne())\n\n    def test_no_route_matches(self):\n        mapper = self._makeOne()\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['match'], None)\n        self.assertEqual(result['route'], None)\n\n    def test_connect_name_exists_removes_old(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article')\n        mapper.connect('foo', 'archives/:action/:article2')\n        self.assertEqual(len(mapper.routelist), 1)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article2')\n        self.assertEqual(mapper.routelist[0].pattern,\n                         'archives/:action/:article2')\n\n    def test_connect_static(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article', static=True)\n        self.assertEqual(len(mapper.routelist), 0)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article')\n\n    def test_connect_static_overridden(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article', static=True)\n        self.assertEqual(len(mapper.routelist), 0)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article')\n        mapper.connect('foo', 'archives/:action/:article2')\n        self.assertEqual(len(mapper.routelist), 1)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article2')\n        self.assertEqual(mapper.routelist[0].pattern,\n                         'archives/:action/:article2')\n\n    def test___call__pathinfo_cant_be_decoded(self):\n        from pyramid.exceptions import URLDecodeError\n        mapper = self._makeOne()\n        if PY3: # pragma: no cover\n            path_info = b'\\xff\\xfe\\xe6\\x00'.decode('latin-1')\n        else:\n            path_info = b'\\xff\\xfe\\xe6\\x00'\n        request = self._getRequest(PATH_INFO=path_info)\n        self.assertRaises(URLDecodeError, mapper, request)\n\n    def test___call__route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article')\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['foo'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__route_matches_with_predicates(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article',\n                       predicates=[lambda *arg: True])\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['foo'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__route_fails_to_match_with_predicates(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/article1',\n                       predicates=[lambda *arg: True, lambda *arg: False])\n        mapper.connect('bar', 'archives/:action/:article')\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['bar'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__custom_predicate_gets_info(self):\n        mapper = self._makeOne()\n        def pred(info, request):\n            self.assertEqual(info['match'], {'action':'action1'})\n            self.assertEqual(info['route'], mapper.routes['foo'])\n            return True\n        mapper.connect('foo', 'archives/:action/article1', predicates=[pred])\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        mapper(request)\n\n    def test_cc_bug(self):\n        # \"unordered\" as reported in IRC by author of\n        # http://labs.creativecommons.org/2010/01/13/cc-engine-and-web-non-frameworks/\n        mapper = self._makeOne()\n        mapper.connect('rdf', 'licenses/:license_code/:license_version/rdf')\n        mapper.connect('juri',\n                       'licenses/:license_code/:license_version/:jurisdiction')\n\n        request = self._getRequest(PATH_INFO='/licenses/1/v2/rdf')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['rdf'])\n        self.assertEqual(result['match']['license_code'], '1')\n        self.assertEqual(result['match']['license_version'], 'v2')\n\n        request = self._getRequest(PATH_INFO='/licenses/1/v2/usa')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['juri'])\n        self.assertEqual(result['match']['license_code'], '1')\n        self.assertEqual(result['match']['license_version'], 'v2')\n        self.assertEqual(result['match']['jurisdiction'], 'usa')\n\n    def test___call__root_route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_matches2(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_when_path_info_empty(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_when_path_info_notempty(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__no_path_info(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest()\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test_has_routes(self):\n        mapper = self._makeOne()\n        self.assertEqual(mapper.has_routes(), False)\n        mapper.connect('whatever', 'archives/:action/:article')\n        self.assertEqual(mapper.has_routes(), True)\n\n    def test_get_routes(self):\n        from pyramid.urldispatch import Route\n        mapper = self._makeOne()\n        self.assertEqual(mapper.get_routes(), [])\n        mapper.connect('whatever', 'archives/:action/:article')\n        routes = mapper.get_routes()\n        self.assertEqual(len(routes), 1)\n        self.assertEqual(routes[0].__class__, Route)\n\n    def test_get_route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('whatever', 'archives/:action/:article')\n        result = mapper.get_route('whatever')\n        self.assertEqual(result.pattern, 'archives/:action/:article')\n\n    def test_get_route_misses(self):\n        mapper = self._makeOne()\n        result = mapper.get_route('whatever')\n        self.assertEqual(result, None)\n\n    def test_generate(self):\n        mapper = self._makeOne()\n        def generator(kw):\n            return 123\n        route = DummyRoute(generator)\n        mapper.routes['abc'] =  route\n        self.assertEqual(mapper.generate('abc', {}), 123)\n\nclass TestCompileRoute(unittest.TestCase):\n    def _callFUT(self, pattern):\n        from pyramid.urldispatch import _compile_route\n        return _compile_route(pattern)\n\n    def test_no_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_with_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar*traverse')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'traverse':()})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'traverse':('everything', 'else', 'here')})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'traverse':'/a/b'}), '/foo/1/biz/2/bar/a/b')\n    \n    def test_with_bracket_star(self):\n        matcher, generator = self._callFUT(\n            '/foo/{baz}/biz/{buz}/bar{remainder:.*}')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'remainder':''})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'remainder':'/everything/else/here'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'remainder':'/a/b'}), '/foo/1/biz/2/bar%2Fa%2Fb')\n\n    def test_no_beginning_slash(self):\n        matcher, generator = self._callFUT('foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:[^/\\.]+}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n    \n    def test_custom_regex_with_colons(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n\n    def test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle(self):\n        # pattern: '\\\\/foo\\\\/(?P<baz>abc)\\\\/biz\\\\/(?P<buz>[^/]+)\\\\/bar$'\n        # note presence of :abc in pattern (oldstyle match)\n        matcher, generator = self._callFUT('foo/{baz:abc}/biz/{buz}/bar')\n        self.assertEqual(matcher('/foo/abc/biz/buz/bar'),\n                         {'baz':'abc', 'buz':'buz'})\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex_with_embedded_squigglies(self):\n        matcher, generator = self._callFUT('/{buz:\\d{4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies2(self):\n        matcher, generator = self._callFUT('/{buz:\\d{3,4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), {'buz':'200'})\n        self.assertEqual(matcher('/20'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies3(self):\n        matcher, generator = self._callFUT(\n            '/{buz:(\\d{2}|\\d{4})-[a-zA-Z]{3,4}-\\d{2}}')\n        self.assertEqual(matcher('/2001-Nov-15'), {'buz':'2001-Nov-15'})\n        self.assertEqual(matcher('/99-June-10'), {'buz':'99-June-10'})\n        self.assertEqual(matcher('/2-Nov-15'), None)\n        self.assertEqual(matcher('/200-Nov-15'), None)\n        self.assertEqual(matcher('/2001-No-15'), None)\n        self.assertEqual(generator({'buz':'2001-Nov-15'}), '/2001-Nov-15')\n        self.assertEqual(generator({'buz':'99-June-10'}), '/99-June-10')\n\n    def test_pattern_with_high_order_literal(self):\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{x}', 'utf-8')\n        matcher, generator = self._callFUT(pattern)\n        self.assertEqual(matcher(text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8')),\n                         {'x':'x'})\n        self.assertEqual(generator({'x':'1'}), '/La%20Pe%C3%B1a/1')\n\n    def test_pattern_generate_with_high_order_dynamic(self):\n        pattern = '/{x}'\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')}),\n            '/La%20Pe%C3%B1a')\n\n    def test_docs_sample_generate(self):\n        # sample from urldispatch.rst\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{city}', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'city':text_(b'Qu\\xc3\\xa9bec', 'utf-8')}),\n            '/La%20Pe%C3%B1a/Qu%C3%A9bec')\n\n    def test_generate_with_mixedtype_values(self):\n        pattern = '/{city}/{state}'\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'city': text_(b'Qu\\xc3\\xa9bec', 'utf-8'),\n             'state': b'La Pe\\xc3\\xb1a'}\n            )\n        self.assertEqual(result, '/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_highorder_pattern_utf8(self):\n        pattern = b'/La Pe\\xc3\\xb1a/{city}'\n        self.assertRaises(ValueError, self._callFUT, pattern)\n\n    def test_generate_with_string_remainder_and_unicode_replacement(self):\n        pattern = text_(b'/abc*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': text_(b'/Qu\\xc3\\xa9bec/La Pe\\xc3\\xb1a', 'utf-8')}\n            )\n        self.assertEqual(result, '/abc/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_generate_with_string_remainder_and_nonstring_replacement(self):\n        pattern = text_(b'/abc/*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': None}\n            )\n        self.assertEqual(result, '/abc/None')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\nclass TestCompileRouteFunctional(unittest.TestCase):\n    def matches(self, pattern, path, expected):\n        from pyramid.urldispatch import _compile_route\n        matcher = _compile_route(pattern)[0]\n        result = matcher(path)\n        self.assertEqual(result, expected)\n\n    def generates(self, pattern, dict, result):\n        from pyramid.urldispatch import _compile_route\n        self.assertEqual(_compile_route(pattern)[1](dict), result)\n\n    def test_matcher_functional_notdynamic(self):\n        self.matches('/', '', None)\n        self.matches('', '', None)\n        self.matches('/', '/foo', None)\n        self.matches('/foo/', '/foo', None)\n        self.matches('', '/', {})\n        self.matches('/', '/', {})\n\n    def test_matcher_functional_newstyle(self):\n        self.matches('/{x}', '', None)\n        self.matches('/{x}', '/', None)\n        self.matches('/abc/{def}', '/abc/', None)\n        self.matches('/{x}', '/a', {'x':'a'})\n        self.matches('zzz/{x}', '/zzz/abc', {'x':'abc'})\n        self.matches('zzz/{x}*traverse', '/zzz/abc', {'x':'abc', 'traverse':()})\n        self.matches('zzz/{x}*traverse', '/zzz/abc/def/g',\n                     {'x':'abc', 'traverse':('def', 'g')})\n        self.matches('*traverse', '/zzz/abc', {'traverse':('zzz', 'abc')})\n        self.matches('*traverse', '/zzz/ abc', {'traverse':('zzz', ' abc')})\n        #'/La%20Pe%C3%B1a'\n        self.matches('{x}', text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                     {'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')})\n        # '/La%20Pe%C3%B1a/x'\n        self.matches('*traverse', text_(b'/La Pe\\xc3\\xb1a/x'),\n                     {'traverse':(text_(b'La Pe\\xc3\\xb1a'), 'x')})\n        self.matches('/foo/{id}.html', '/foo/bar.html', {'id':'bar'})\n        self.matches('/{num:[0-9]+}/*traverse', '/555/abc/def',\n                     {'num':'555', 'traverse':('abc', 'def')})\n        self.matches('/{num:[0-9]*}/*traverse', '/555/abc/def',\n                     {'num':'555', 'traverse':('abc', 'def')})\n        self.matches('zzz/{_}', '/zzz/abc', {'_':'abc'})\n        self.matches('zzz/{_abc}', '/zzz/abc', {'_abc':'abc'})\n        self.matches('zzz/{abc_def}', '/zzz/abc', {'abc_def':'abc'})\n\n    def test_matcher_functional_oldstyle(self):\n        self.matches('/:x', '', None)\n        self.matches('/:x', '/', None)\n        self.matches('/abc/:def', '/abc/', None)\n        self.matches('/:x', '/a', {'x':'a'})\n        self.matches('zzz/:x', '/zzz/abc', {'x':'abc'})\n        self.matches('zzz/:x*traverse', '/zzz/abc', {'x':'abc', 'traverse':()})\n        self.matches('zzz/:x*traverse', '/zzz/abc/def/g',\n                     {'x':'abc', 'traverse':('def', 'g')})\n        self.matches('*traverse', '/zzz/abc', {'traverse':('zzz', 'abc')})\n        self.matches('*traverse', '/zzz/ abc', {'traverse':('zzz', ' abc')})\n        #'/La%20Pe%C3%B1a'\n        # pattern, path, expected\n        self.matches(':x', text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                     {'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')})\n        # '/La%20Pe%C3%B1a/x'\n        self.matches('*traverse', text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8'),\n                     {'traverse':(text_(b'La Pe\\xc3\\xb1a', 'utf-8'), 'x')})\n        self.matches('/foo/:id.html', '/foo/bar.html', {'id':'bar'})\n        self.matches('/foo/:id_html', '/foo/bar_html', {'id_html':'bar_html'})\n        self.matches('zzz/:_', '/zzz/abc', {'_':'abc'})\n        self.matches('zzz/:_abc', '/zzz/abc', {'_abc':'abc'})\n        self.matches('zzz/:abc_def', '/zzz/abc', {'abc_def':'abc'})\n\n    def test_generator_functional_notdynamic(self):\n        self.generates('', {}, '/')\n        self.generates('/', {}, '/')\n\n    def test_generator_functional_newstyle(self):\n        self.generates('/{x}', {'x':''}, '/')\n        self.generates('/{x}', {'x':'a'}, '/a')\n        self.generates('zzz/{x}', {'x':'abc'}, '/zzz/abc')\n        self.generates('zzz/{x}*traverse', {'x':'abc', 'traverse':''},\n                       '/zzz/abc')\n        self.generates('zzz/{x}*traverse', {'x':'abc', 'traverse':'/def/g'},\n                       '/zzz/abc/def/g')\n        self.generates('/{x}', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8')},\n                       '/%2FLa%20Pe%C3%B1a')\n        self.generates('/{x}*y', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                                 'y':'/rest/of/path'},\n                       '/%2FLa%20Pe%C3%B1a/rest/of/path')\n        self.generates('*traverse', {'traverse':('a', text_(b'La Pe\\xf1a'))},\n                       '/a/La%20Pe%C3%B1a')\n        self.generates('/foo/{id}.html', {'id':'bar'}, '/foo/bar.html')\n        self.generates('/foo/{_}', {'_':'20'}, '/foo/20')\n        self.generates('/foo/{_abc}', {'_abc':'20'}, '/foo/20')\n        self.generates('/foo/{abc_def}', {'abc_def':'20'}, '/foo/20')\n        \n    def test_generator_functional_oldstyle(self):\n        self.generates('/:x', {'x':''}, '/')\n        self.generates('/:x', {'x':'a'}, '/a')\n        self.generates('zzz/:x', {'x':'abc'}, '/zzz/abc')\n        self.generates('zzz/:x*traverse', {'x':'abc', 'traverse':''},\n                       '/zzz/abc')\n        self.generates('zzz/:x*traverse', {'x':'abc', 'traverse':'/def/g'},\n                       '/zzz/abc/def/g')\n        self.generates('/:x', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8')},\n                       '/%2FLa%20Pe%C3%B1a')\n        self.generates('/:x*y', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                                 'y':'/rest/of/path'},\n                       '/%2FLa%20Pe%C3%B1a/rest/of/path')\n        self.generates('*traverse', {'traverse':('a', text_(b'La Pe\\xf1a'))},\n                       '/a/La%20Pe%C3%B1a')\n        self.generates('/foo/:id.html', {'id':'bar'}, '/foo/bar.html')\n        self.generates('/foo/:_', {'_':'20'}, '/foo/20')\n        self.generates('/foo/:_abc', {'_abc':'20'}, '/foo/20')\n        self.generates('/foo/:abc_def', {'abc_def':'20'}, '/foo/20')\n\nclass DummyContext(object):\n    \"\"\" \"\"\"\n        \nclass DummyRequest(object):\n    def __init__(self, environ):\n        self.environ = environ\n    \nclass DummyRoute(object):\n    def __init__(self, generator):\n        self.generate = generator\n        \n"
    ],
    "test_file_names": [
        "test_1.py"
    ],
    "setup_res_code": 0,
    "setup_res_stdout": "",
    "setup_res_stderr": "Using CPython 3.8.20\nCreating virtual environment at: .venv\nActivate with: source .venv/bin/activate\nResolved 15 packages in 626ms\nPrepared 1 package in 680ms\nInstalled 15 packages in 17ms\n + chameleon==4.4.4\n + importlib-metadata==8.5.0\n + importlib-resources==6.4.5\n + mako==1.3.8\n + markupsafe==2.1.5\n + pastedeploy==3.1.0\n + pyramid==1.4.dev0 (from file:///home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef)\n + repoze-lru==0.7\n + setuptools==75.3.0\n + translationstring==1.4\n + venusian==3.1.1\n + webob==1.8.9\n + zipp==3.20.2\n + zope-deprecation==5.0\n + zope-interface==7.2\nResolved 25 packages in 18ms\nInstalled 10 packages in 10ms\n + beautifulsoup4==4.12.3\n + coverage==7.6.1\n + distlib==0.3.9\n + filelock==3.16.1\n + nose==1.3.7\n + platformdirs==4.3.6\n + soupsieve==2.6\n + virtualenv==20.29.0\n + waitress==3.0.0\n + webtest==3.0.1\nResolved 16 packages in 6ms\nInstalled 12 packages in 8ms\n + cachetools==5.5.0\n + chardet==5.2.0\n + colorama==0.4.6\n + exceptiongroup==1.2.2\n + iniconfig==2.0.0\n + packaging==24.2\n + pluggy==1.5.0\n + pyproject-api==1.8.0\n + pytest==8.3.4\n + tomli==2.2.1\n + tox==4.23.2\n + typing-extensions==4.12.2\n",
    "new_commit_res_code": 1,
    "new_commit_res_stdout": "============================= test session starts ==============================\nplatform linux -- Python 3.8.20, pytest-8.3.4, pluggy-1.5.0\nrootdir: /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef\ncollected 772 items\n\nr2e_tests/test_1.py .................................................    [  6%]\nr2e_tests/test_config/test_adapters.py .FF.........F..                   [  8%]\nr2e_tests/test_config/test_assets.py ...........FF.....................F [ 12%]\n....................                                                     [ 15%]\nr2e_tests/test_config/test_factories.py .............                    [ 17%]\nr2e_tests/test_config/test_i18n.py FFF.FF....                            [ 18%]\nr2e_tests/test_config/test_init.py ..................................... [ 23%]\nF..F....................F...........F................................... [ 32%]\nFF...................                                                    [ 35%]\nr2e_tests/test_config/test_rendering.py ....                             [ 35%]\nr2e_tests/test_config/test_routes.py ........................            [ 38%]\nr2e_tests/test_config/test_security.py .........                         [ 40%]\nr2e_tests/test_config/test_settings.py ......................            [ 42%]\nr2e_tests/test_config/test_testing.py ..........                         [ 44%]\nr2e_tests/test_config/test_tweens.py ..................................  [ 48%]\nr2e_tests/test_config/test_util.py .....................                 [ 51%]\nr2e_tests/test_config/test_views.py .......F............................ [ 55%]\n..........................................................FF............ [ 65%]\n........................................................................ [ 74%]\n.............FF.......F..F....F......................................... [ 83%]\n....................F                                                    [ 86%]\nr2e_tests/test_scripts/test_common.py .                                  [ 86%]\nr2e_tests/test_scripts/test_pcreate.py .........                         [ 87%]\nr2e_tests/test_scripts/test_prequest.py F.FFFFF.F.FF.                    [ 89%]\nr2e_tests/test_scripts/test_proutes.py .........                         [ 90%]\nr2e_tests/test_scripts/test_pserve.py ..........................         [ 94%]\nr2e_tests/test_scripts/test_pshell.py .................                  [ 96%]\nr2e_tests/test_scripts/test_ptweens.py .....                             [ 97%]\nr2e_tests/test_scripts/test_pviews.py ................F......            [100%]\n\n=================================== FAILURES ===================================\n__ AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_dotted_names ___\n\nself = <r2e_tests.test_config.test_adapters.AdaptersConfiguratorMixinTests testMethod=test_add_resource_url_adapter_dotted_names>\n\n    def test_add_resource_url_adapter_dotted_names(self):\n        from pyramid.interfaces import IResourceURL\n        config = self._makeOne(autocommit=True)\n        config.add_resource_url_adapter(\n            'pyramid.tests.test_config.test_adapters.DummyResourceURL',\n            'pyramid.tests.test_config.test_adapters.DummyIface',\n            )\n        iface = DummyIface()\n>       adapter = config.registry.getMultiAdapter((iface, iface),\n                                                    IResourceURL)\n\nr2e_tests/test_config/test_adapters.py:165: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <Registry r2e_tests.test_config>\nobjects = (<r2e_tests.test_config.test_adapters.DummyIface object at 0x73bc72f419d0>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x73bc72f419d0>)\ninterface = <InterfaceClass pyramid.interfaces.IResourceURL>, name = ''\n\n    def getMultiAdapter(self, objects, interface, name=''):\n        adapter = self.adapters.queryMultiAdapter(objects, interface, name)\n        if adapter is None:\n>           raise ComponentLookupError(objects, interface, name)\nE           zope.interface.interfaces.ComponentLookupError: ((<r2e_tests.test_config.test_adapters.DummyIface object at 0x73bc72f419d0>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x73bc72f419d0>), <InterfaceClass pyramid.interfaces.IResourceURL>, '')\n\n.venv/lib/python3.8/site-packages/zope/interface/registry.py:379: ComponentLookupError\n_ AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_introspectables _\n\nself = <r2e_tests.test_config.test_adapters.AdaptersConfiguratorMixinTests testMethod=test_add_resource_url_adapter_introspectables>\n\n    def test_add_resource_url_adapter_introspectables(self):\n        config = self._makeOne()\n        config.add_resource_url_adapter(DummyResourceURL, DummyIface)\n        actions = config.action_state.actions\n        self.assertEqual(len(actions), 1)\n        intrs  = actions[0]['introspectables']\n        self.assertEqual(len(intrs), 1)\n        intr = intrs[0]\n        self.assertEqual(intr.type_name, 'resource url adapter')\n        self.assertEqual(intr.discriminator,\n                         ('resource url adapter', DummyIface))\n        self.assertEqual(intr.category_name, 'resource url adapters')\n>       self.assertEqual(\n            intr.title,\n            \"resource url adapter for resource iface \"\n            \"<class 'pyramid.tests.test_config.test_adapters.DummyIface'>\"\n            )\nE       AssertionError: \"reso[34 chars]e <class 'r2e_tests.test_config.test_adapters.DummyIface'>\" != \"reso[34 chars]e <class 'pyramid.tests.test_config.test_adapters.DummyIface'>\"\nE       - resource url adapter for resource iface <class 'r2e_tests.test_config.test_adapters.DummyIface'>\nE       ?                                                  ^^^\nE       + resource url adapter for resource iface <class 'pyramid.tests.test_config.test_adapters.DummyIface'>\nE       ?                                                 ++ ^^^^^\n\nr2e_tests/test_config/test_adapters.py:211: AssertionError\n________ AdaptersConfiguratorMixinTests.test_add_traverser_dotted_names ________\n\nself = <r2e_tests.test_config.test_adapters.AdaptersConfiguratorMixinTests testMethod=test_add_traverser_dotted_names>\n\n    def test_add_traverser_dotted_names(self):\n        from pyramid.interfaces import ITraverser\n        config = self._makeOne(autocommit=True)\n        config.add_traverser(\n            'pyramid.tests.test_config.test_adapters.DummyTraverser',\n            'pyramid.tests.test_config.test_adapters.DummyIface')\n        iface = DummyIface()\n>       traverser = config.registry.getAdapter(iface, ITraverser)\n\nr2e_tests/test_config/test_adapters.py:122: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <Registry r2e_tests.test_config>\nobject = <r2e_tests.test_config.test_adapters.DummyIface object at 0x73bc7214e2b0>\ninterface = <InterfaceClass pyramid.interfaces.ITraverser>, name = ''\n\n    def getAdapter(self, object, interface, name=''):\n        adapter = self.adapters.queryAdapter(object, interface, name)\n        if adapter is None:\n>           raise ComponentLookupError(object, interface, name)\nE           zope.interface.interfaces.ComponentLookupError: (<r2e_tests.test_config.test_adapters.DummyIface object at 0x73bc7214e2b0>, <InterfaceClass pyramid.interfaces.ITraverser>, '')\n\n.venv/lib/python3.8/site-packages/zope/interface/registry.py:368: ComponentLookupError\n_________ TestOverrideProvider.test_get_resource_filename_no_overrides _________\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_no_overrides>\n\n    def test_get_resource_filename_no_overrides(self):\n        import os\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]88f5c881847b812857aef/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]88f5c881847b812857aef/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:158: AssertionError\n____ TestOverrideProvider.test_get_resource_filename_override_returns_None _____\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_override_returns_None>\n\n    def test_get_resource_filename_override_returns_None(self):\n        overrides = DummyOverrides(None)\n        self._registerOverrides(overrides)\n        import os\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]88f5c881847b812857aef/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]88f5c881847b812857aef/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:212: AssertionError\n____________________ TestPackageOverrides.test_get_filename ____________________\n\nself = <r2e_tests.test_config.test_assets.TestPackageOverrides testMethod=test_get_filename>\n\n    def test_get_filename(self):\n        import os\n        overrides = [ DummyOverride(None), DummyOverride(\n            ('pyramid.tests.test_config', 'test_assets.py'))]\n        package = DummyPackage('package')\n        po = self._makeOne(package)\n        po.overrides= overrides\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, 'test_assets.py')\n>       self.assertEqual(po.get_filename('whatever'), expected)\nE       AssertionError: '/hom[73 chars]88f5c881847b812857aef/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]88f5c881847b812857aef/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:401: AssertionError\n_________ TestI18NConfiguratorMixin.test_add_translation_dirs_abspath __________\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_abspath>\n\n    def test_add_translation_dirs_abspath(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n>       config.add_translation_dirs(locale)\n\nr2e_tests/test_config/test_i18n.py:102: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/util.py:58: in wrapper\n    result = wrapped(self, *arg, **kw)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <pyramid.config.Configurator object at 0x73bc72af7a60>\nspecs = ('/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale',)\nintrospectables = []\nspec = '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale'\npackage_name = None\n\n    @action_method\n    def add_translation_dirs(self, *specs):\n        \"\"\" Add one or more :term:`translation directory` paths to the\n        current configuration state.  The ``specs`` argument is a\n        sequence that may contain absolute directory paths\n        (e.g. ``/usr/share/locale``) or :term:`asset specification`\n        names naming a directory path (e.g. ``some.package:locale``)\n        or a combination of the two.\n    \n        Example:\n    \n        .. code-block:: python\n    \n           config.add_translation_dirs('/usr/share/locale',\n                                       'some.package:locale')\n    \n        Later calls to ``add_translation_dir`` insert directories into the\n        beginning of the list of translation directories created by earlier\n        calls.  This means that the same translation found in a directory\n        added later in the configuration process will be found before one\n        added earlier in the configuration process.  However, if multiple\n        specs are provided in a single call to ``add_translation_dirs``, the\n        directories will be inserted into the beginning of the directory list\n        in the order they're provided in the ``*specs`` list argument (items\n        earlier in the list trump ones later in the list).\n        \"\"\"\n        directories = []\n        introspectables = []\n    \n        for spec in specs[::-1]: # reversed\n            package_name, filename = self._split_spec(spec)\n            if package_name is None: # absolute filename\n                directory = filename\n            else:\n                __import__(package_name)\n                package = sys.modules[package_name]\n                directory = os.path.join(package_path(package), filename)\n    \n            if not os.path.isdir(os.path.realpath(directory)):\n>               raise ConfigurationError('\"%s\" is not a directory' %\n                                         directory)\nE               pyramid.exceptions.ConfigurationError: \"/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale\" is not a directory\n\npyramid/config/i18n.py:92: ConfigurationError\n________ TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec ________\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_asset_spec>\n\n    def test_add_translation_dirs_asset_spec(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale])\nE       AssertionError: Lists differ: ['/ho[70 chars]5ee488f5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale'] != ['/ho[70 chars]5ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]15ee488f5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]15ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale']\nE       ?                                                                                                       ^^^\n\nr2e_tests/test_config/test_i18n.py:57: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec_existing_translation_dirs _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_asset_spec_existing_translation_dirs>\n\n    def test_add_translation_dirs_asset_spec_existing_translation_dirs(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        directories = ['abc']\n        config.registry.registerUtility(directories, ITranslationDirectories)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale')\n        result = config.registry.getUtility(ITranslationDirectories)\n>       self.assertEqual(result, [locale, 'abc'])\nE       AssertionError: Lists differ: ['/ho[77 chars]5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale', 'abc'] != ['/ho[77 chars]5c881847b812857aef/r2e_tests/pkgs/localeapp/locale', 'abc']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]15ee488f5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]15ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale',\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale',\nE       ?                                                                                                       ^^^\nE       \nE          'abc']\n\nr2e_tests/test_config/test_i18n.py:67: AssertionError\n______ TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs ______\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_multiple_specs>\n\n    def test_add_translation_dirs_multiple_specs(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale',\n                                    'pyramid.tests.pkgs.localeapp:locale2')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale, locale2])\nE       AssertionError: Lists differ: ['/ho[91 chars]7aef/pyramid/tests/pkgs/localeapp/locale', '/h[130 chars]le2'] != ['/ho[91 chars]7aef/r2e_tests/pkgs/localeapp/locale', '/home/[122 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]15ee488f5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]15ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale'\nE       \nE       Diff is 1002 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_i18n.py:74: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs_multiple_calls _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_multiple_specs_multiple_calls>\n\n    def test_add_translation_dirs_multiple_specs_multiple_calls(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale',\n                                    'pyramid.tests.pkgs.localeapp:locale2')\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale3')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale3, locale, locale2])\nE       AssertionError: Lists differ: ['/ho[91 chars]7aef/pyramid/tests/pkgs/localeapp/locale3', '/[269 chars]le2'] != ['/ho[91 chars]7aef/r2e_tests/pkgs/localeapp/locale3', '/home[257 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]5ee488f5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale3'\nE       '/hom[69 chars]5ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale3'\nE       \nE       Diff is 1504 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_i18n.py:83: AssertionError\n___________________ ConfiguratorTests.test_ctor_no_registry ____________________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_ctor_no_registry>\n\n    def test_ctor_no_registry(self):\n        import sys\n        from pyramid.interfaces import ISettings\n        from pyramid.config import Configurator\n        from pyramid.interfaces import IRendererFactory\n        config = Configurator()\n        this_pkg = sys.modules['pyramid.tests.test_config']\n        self.assertTrue(config.registry.getUtility(ISettings))\n>       self.assertEqual(config.package, this_pkg)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:68: AssertionError\n_________ ConfiguratorTests.test_ctor_noreg_debug_logger_None_default __________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_ctor_noreg_debug_logger_None_default>\n\n    def test_ctor_noreg_debug_logger_None_default(self):\n        from pyramid.interfaces import IDebugLogger\n        config = self._makeOne()\n        logger = config.registry.getUtility(IDebugLogger)\n>       self.assertEqual(logger.name, 'pyramid.tests.test_config')\nE       AssertionError: 'r2e_tests.test_config' != 'pyramid.tests.test_config'\nE       - r2e_tests.test_config\nE       ?  ^^^\nE       + pyramid.tests.test_config\nE       ? ++ ^^^^^\n\nr2e_tests/test_config/test_init.py:129: AssertionError\n_______________ ConfiguratorTests.test_scan_integration_conflict _______________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_scan_integration_conflict>\n\n    def test_scan_integration_conflict(self):\n        from pyramid.tests.test_config.pkgs import selfscan\n        from pyramid.config import Configurator\n        c = Configurator()\n        c.scan(selfscan)\n        c.scan(selfscan)\n        try:\n>           c.commit()\n\nr2e_tests/test_config/test_init.py:1014: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:594: in commit\n    self.action_state.execute_actions(introspector=self.introspector)\npyramid/config/__init__.py:1030: in execute_actions\n    for action in resolveConflicts(self.actions):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nactions = []\n\n    def resolveConflicts(actions):\n        \"\"\"Resolve conflicting actions\n    \n        Given an actions list, identify and try to resolve conflicting actions.\n        Actions conflict if they have the same non-None discriminator.\n        Conflicting actions can be resolved if the include path of one of\n        the actions is a prefix of the includepaths of the other\n        conflicting actions and is unequal to the include paths in the\n        other conflicting actions.\n        \"\"\"\n    \n        # organize actions by discriminators\n        unique = {}\n        output = []\n        for i, action in enumerate(actions):\n            if not isinstance(action, dict):\n                # old-style tuple action\n                action = expand_action(*action)\n    \n            # \"order\" is an integer grouping. Actions in a lower order will be\n            # executed before actions in a higher order.  Within an order,\n            # actions are executed sequentially based on original action ordering\n            # (\"i\").\n            order = action['order'] or 0\n            discriminator = action['discriminator']\n    \n            # \"ainfo\" is a tuple of (order, i, action) where \"order\" is a\n            # user-supplied grouping, \"i\" is an integer expressing the relative\n            # position of this action in the action list being resolved, and\n            # \"action\" is an action dictionary.  The purpose of an ainfo is to\n            # associate an \"order\" and an \"i\" with a particular action; \"order\"\n            # and \"i\" exist for sorting purposes after conflict resolution.\n            ainfo = (order, i, action)\n    \n            if discriminator is None:\n                # The discriminator is None, so this action can never conflict.\n                # We can add it directly to the result.\n                output.append(ainfo)\n                continue\n    \n            L = unique.setdefault(discriminator, [])\n            L.append(ainfo)\n    \n        # Check for conflicts\n        conflicts = {}\n    \n        for discriminator, ainfos in unique.items():\n    \n            # We use (includepath, order, i) as a sort key because we need to\n            # sort the actions by the paths so that the shortest path with a\n            # given prefix comes first.  The \"first\" action is the one with the\n            # shortest include path.  We break sorting ties using \"order\", then\n            # \"i\".\n            def bypath(ainfo):\n                path, order, i = ainfo[2]['includepath'], ainfo[0], ainfo[1]\n                return path, order, i\n    \n            ainfos.sort(key=bypath)\n            ainfo, rest = ainfos[0], ainfos[1:]\n            output.append(ainfo)\n            _, _, action = ainfo\n            basepath, baseinfo, discriminator = (action['includepath'],\n                                                 action['info'],\n                                                 action['discriminator'])\n    \n            for _, _, action in rest:\n                includepath = action['includepath']\n                # Test whether path is a prefix of opath\n                if (includepath[:len(basepath)] != basepath # not a prefix\n                    or includepath == basepath):\n                    L = conflicts.setdefault(discriminator, [baseinfo])\n                    L.append(action['info'])\n    \n        if conflicts:\n>           raise ConfigurationConflictError(conflicts)\nE           pyramid.exceptions.ConfigurationConflictError: Conflicting configuration actions\nE             For: ('view', None, '', None, <InterfaceClass pyramid.interfaces.IView>, None, None, None, None, None, False, None, None, None, None)\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/test_config/pkgs/selfscan/__init__.py:\nE                   def abc(request):\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/test_config/pkgs/selfscan/__init__.py:\nE                   def abc(request):\nE             For: ('view', None, 'two', None, <InterfaceClass pyramid.interfaces.IView>, None, None, None, None, None, False, None, None, None, None)\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/test_config/pkgs/selfscan/another.py:\nE                   def two(request):\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/test_config/pkgs/selfscan/another.py:\nE                   def two(request):\n\npyramid/config/__init__.py:1136: ConfigurationConflictError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_scan_integration_conflict>\n\n    def test_scan_integration_conflict(self):\n        from pyramid.tests.test_config.pkgs import selfscan\n        from pyramid.config import Configurator\n        c = Configurator()\n        c.scan(selfscan)\n        c.scan(selfscan)\n        try:\n            c.commit()\n        except ConfigurationConflictError as why:\n            def scanconflicts(e):\n                conflicts = e._conflicts.values()\n                for conflict in conflicts:\n                    for confinst in conflict:\n                        yield confinst.src\n            which = list(scanconflicts(why))\n            self.assertEqual(len(which), 4)\n>           self.assertTrue(\"@view_config(renderer='string')\" in which)\nE           AssertionError: False is not true\n\nr2e_tests/test_config/test_init.py:1023: AssertionError\n_______ ConfiguratorTests.test_setup_registry_debug_logger_None_default ________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_setup_registry_debug_logger_None_default>\n\n    def test_setup_registry_debug_logger_None_default(self):\n        from pyramid.registry import Registry\n        from pyramid.interfaces import IDebugLogger\n        reg = Registry()\n        config = self._makeOne(reg)\n        config.setup_registry()\n        logger = reg.getUtility(IDebugLogger)\n>       self.assertEqual(logger.name, 'pyramid.tests.test_config')\nE       AssertionError: 'r2e_tests.test_config' != 'pyramid.tests.test_config'\nE       - r2e_tests.test_config\nE       ?  ^^^\nE       + pyramid.tests.test_config\nE       ? ++ ^^^^^\n\nr2e_tests/test_config/test_init.py:415: AssertionError\n_________ TestConfigurator_add_directive.test_extend_with_dotted_name __________\n\nself = <r2e_tests.test_config.test_init.TestConfigurator_add_directive testMethod=test_extend_with_dotted_name>\n\n    def test_extend_with_dotted_name(self):\n        from pyramid.tests import test_config\n        config = self.config\n        config.add_directive(\n            'dummy_extend', 'pyramid.tests.test_config.dummy_extend')\n        self.assertTrue(hasattr(config, 'dummy_extend'))\n        config.dummy_extend('discrim')\n        after = config.action_state\n        action = after.actions[-1]\n        self.assertEqual(action['discriminator'], 'discrim')\n        self.assertEqual(action['callable'], None)\n>       self.assertEqual(action['args'], test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:1415: AssertionError\n_______ TestConfigurator_add_directive.test_extend_with_python_callable ________\n\nself = <r2e_tests.test_config.test_init.TestConfigurator_add_directive testMethod=test_extend_with_python_callable>\n\n    def test_extend_with_python_callable(self):\n        from pyramid.tests import test_config\n        config = self.config\n        config.add_directive(\n            'dummy_extend', dummy_extend)\n        self.assertTrue(hasattr(config, 'dummy_extend'))\n        config.dummy_extend('discrim')\n        after = config.action_state\n        action = after.actions[-1]\n        self.assertEqual(action['discriminator'], 'discrim')\n        self.assertEqual(action['callable'], None)\n>       self.assertEqual(action['args'], test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:1428: AssertionError\n____ TestViewsConfigurationMixin.test_add_static_view_package_here_relative ____\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_static_view_package_here_relative>\n\n    def test_add_static_view_package_here_relative(self):\n        from pyramid.interfaces import IStaticURLInfo\n        info = DummyStaticURLInfo()\n        config = self._makeOne(autocommit=True)\n        config.registry.registerUtility(info, IStaticURLInfo)\n        config.add_static_view('static', 'files')\n>       self.assertEqual(\n            info.added,\n            [(config, 'static', 'pyramid.tests.test_config:files', {})])\nE       AssertionError: Lists differ: [(<py[39 chars]3bc727c71c0>, 'static', 'r2e_tests.test_config:files', {})] != [(<py[39 chars]3bc727c71c0>, 'static', 'pyramid.tests.test_config:files', {})]\nE       \nE       First differing element 0:\nE       (<pyr[37 chars]73bc727c71c0>, 'static', 'r2e_tests.test_config:files', {})\nE       (<pyr[37 chars]73bc727c71c0>, 'static', 'pyramid.tests.test_config:files', {})\nE       \nE         [(<pyramid.config.Configurator object at 0x73bc727c71c0>,\nE           'static',\nE       -   'r2e_tests.test_config:files',\nE       ?     ^^^\nE       \nE       +   'pyramid.tests.test_config:files',\nE       ?    ++ ^^^^^\nE       \nE           {})]\n\nr2e_tests/test_config/test_views.py:1670: AssertionError\n_______ TestViewsConfigurationMixin.test_add_view_with_template_renderer _______\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_view_with_template_renderer>\n\n    def test_add_view_with_template_renderer(self):\n        from pyramid.tests import test_config\n        from pyramid.interfaces import ISettings\n        class view(object):\n            def __init__(self, context, request):\n                self.request = request\n                self.context = context\n    \n            def __call__(self):\n                return {'a':'1'}\n        config = self._makeOne(autocommit=True)\n        renderer = self._registerRenderer(config)\n        fixture = 'pyramid.tests.test_config:files/minimal.txt'\n        config.add_view(view=view, renderer=fixture)\n        wrapper = self._getViewCallable(config)\n        request = self._makeRequest(config)\n        result = wrapper(None, request)\n        self.assertEqual(result.body, b'Hello!')\n        settings = config.registry.queryUtility(ISettings)\n        result = renderer.info\n        self.assertEqual(result.registry, config.registry)\n        self.assertEqual(result.type, '.txt')\n>       self.assertEqual(result.package, test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_views.py:998: AssertionError\n_ TestViewsConfigurationMixin.test_add_view_with_template_renderer_no_callable _\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_view_with_template_renderer_no_callable>\n\n    def test_add_view_with_template_renderer_no_callable(self):\n        from pyramid.tests import test_config\n        from pyramid.interfaces import ISettings\n        config = self._makeOne(autocommit=True)\n        renderer = self._registerRenderer(config)\n        fixture = 'pyramid.tests.test_config:files/minimal.txt'\n        config.add_view(view=None, renderer=fixture)\n        wrapper = self._getViewCallable(config)\n        request = self._makeRequest(config)\n        result = wrapper(None, request)\n        self.assertEqual(result.body, b'Hello!')\n        settings = config.registry.queryUtility(ISettings)\n        result = renderer.info\n        self.assertEqual(result.registry, config.registry)\n        self.assertEqual(result.type, '.txt')\n>       self.assertEqual(result.package, test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_views.py:1038: AssertionError\n_____________ TestViewDeriver.test_function_returns_non_adaptable ______________\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable>\n\n    def test_function_returns_non_adaptable(self):\n        def view(request):\n            return None\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n>           result(None, None)\n\nr2e_tests/test_config/test_views.py:2310: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable function r2e_tests.test_config.test_views.view into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable>\n\n    def test_function_returns_non_adaptable(self):\n        def view(request):\n            return None\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n            result(None, None)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                'Could not convert return value of the view callable function '\n                'pyramid.tests.test_config.test_views.view into a response '\n                'object. The value returned was None. You may have forgotten '\n                'to return a value from the view callable.'\n                )\nE           AssertionError: 'Coul[52 chars]tion r2e_tests.test_config.test_views.view int[110 chars]ble.' != 'Coul[52 chars]tion pyramid.tests.test_config.test_views.view[114 chars]ble.'\nE           Diff is 663 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2312: AssertionError\n___________ TestViewDeriver.test_function_returns_non_adaptable_dict ___________\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable_dict>\n\n    def test_function_returns_non_adaptable_dict(self):\n        def view(request):\n            return {'a':1}\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n>           result(None, None)\n\nr2e_tests/test_config/test_views.py:2329: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable function r2e_tests.test_config.test_views.view into a response object. The value returned was {'a': 1}. You may have forgotten to define a renderer in the view configuration.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable_dict>\n\n    def test_function_returns_non_adaptable_dict(self):\n        def view(request):\n            return {'a':1}\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n            result(None, None)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                \"Could not convert return value of the view callable function \"\n                \"pyramid.tests.test_config.test_views.view into a response \"\n                \"object. The value returned was {'a': 1}. You may have \"\n                \"forgotten to define a renderer in the view configuration.\"\n                )\nE           AssertionError: \"Coul[52 chars]tion r2e_tests.test_config.test_views.view int[120 chars]ion.\" != \"Coul[52 chars]tion pyramid.tests.test_config.test_views.view[124 chars]ion.\"\nE           Diff is 683 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2331: AssertionError\n_____________ TestViewDeriver.test_instance_returns_non_adaptable ______________\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_instance_returns_non_adaptable>\n\n    def test_instance_returns_non_adaptable(self):\n        class AView(object):\n            def __call__(self, request):\n                return None\n        view = AView()\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n>           result(None, None)\n\nr2e_tests/test_config/test_views.py:2350: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable object <r2e_tests.test_config.test_views.TestViewDeriver.test_instance_returns_non_adaptable.<locals>.AView object at 0x73bc7208ff10> into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_instance_returns_non_adaptable>\n\n    def test_instance_returns_non_adaptable(self):\n        class AView(object):\n            def __call__(self, request):\n                return None\n        view = AView()\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n            result(None, None)\n        except ValueError as e:\n            msg = e.args[0]\n>           self.assertTrue(msg.startswith(\n                'Could not convert return value of the view callable object '\n                '<pyramid.tests.test_config.test_views.'))\nE           AssertionError: False is not true\n\nr2e_tests/test_config/test_views.py:2353: AssertionError\n____ TestViewDeriver.test_requestonly_default_method_returns_non_adaptable _____\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_default_method_returns_non_adaptable>\n\n    def test_requestonly_default_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def __call__(self):\n                return None\n        deriver = self._makeOne()\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n>           result(None, request)\n\nr2e_tests/test_config/test_views.py:2373: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x73bc7218e760>\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable method __call__ of class r2e_tests.test_config.test_views.AView into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_default_method_returns_non_adaptable>\n\n    def test_requestonly_default_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def __call__(self):\n                return None\n        deriver = self._makeOne()\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n            result(None, request)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                'Could not convert return value of the view callable '\n                'method __call__ of '\n                'class pyramid.tests.test_config.test_views.AView into a '\n                'response object. The value returned was None. You may have '\n                'forgotten to return a value from the view callable.'\n                )\nE           AssertionError: 'Coul[68 chars]lass r2e_tests.test_config.test_views.AView in[111 chars]ble.' != 'Coul[68 chars]lass pyramid.tests.test_config.test_views.AVie[115 chars]ble.'\nE           Diff is 649 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2375: AssertionError\n___ TestViewDeriver.test_requestonly_nondefault_method_returns_non_adaptable ___\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_nondefault_method_returns_non_adaptable>\n\n    def test_requestonly_nondefault_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def theviewmethod(self):\n                return None\n        deriver = self._makeOne(attr='theviewmethod')\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n>           result(None, request)\n\nr2e_tests/test_config/test_views.py:2397: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x73bc7214eac0>\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable method theviewmethod of class r2e_tests.test_config.test_views.AView into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_nondefault_method_returns_non_adaptable>\n\n    def test_requestonly_nondefault_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def theviewmethod(self):\n                return None\n        deriver = self._makeOne(attr='theviewmethod')\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n            result(None, request)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                'Could not convert return value of the view callable '\n                'method theviewmethod of '\n                'class pyramid.tests.test_config.test_views.AView into a '\n                'response object. The value returned was None. You may have '\n                'forgotten to return a value from the view callable.'\n                )\nE           AssertionError: 'Coul[73 chars]lass r2e_tests.test_config.test_views.AView in[111 chars]ble.' != 'Coul[73 chars]lass pyramid.tests.test_config.test_views.AVie[115 chars]ble.'\nE           Diff is 669 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2399: AssertionError\n___________________ Test_view_description.test_without_text ____________________\n\nself = <r2e_tests.test_config.test_views.Test_view_description testMethod=test_without_text>\n\n    def test_without_text(self):\n        def view(): pass\n        result = self._callFUT(view)\n>       self.assertEqual(result,\n                         'function pyramid.tests.test_config.test_views.view')\nE       AssertionError: 'function r2e_tests.test_config.test_views.view' != 'function pyramid.tests.test_config.test_views.view'\nE       - function r2e_tests.test_config.test_views.view\nE       ?           ^^^\nE       + function pyramid.tests.test_config.test_views.view\nE       ?          ++ ^^^^^\n\nr2e_tests/test_config/test_views.py:3831: AssertionError\n_______________ TestPRequestCommand.test_command_display_headers _______________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_display_headers>\n\n    def test_command_display_headers(self):\n        command = self._makeOne(\n            ['', '--display-headers', 'development.ini', '/'])\n        command.run()\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(\n            self._out,\n            ['200 OK', 'Content-Type: text/html; charset=UTF-8', 'abc'])\nE       AssertionError: Lists differ: ['200 OK', b'abc'] != ['200 OK', 'Content-Type: text/html; charset=UTF-8', 'abc']\nE       \nE       First differing element 1:\nE       b'abc'\nE       'Content-Type: text/html; charset=UTF-8'\nE       \nE       Second list contains 1 additional elements.\nE       First extra element 2:\nE       'abc'\nE       \nE       - ['200 OK', b'abc']\nE       + ['200 OK', 'Content-Type: text/html; charset=UTF-8', 'abc']\n\nr2e_tests/test_scripts/test_prequest.py:131: AssertionError\n_________ TestPRequestCommand.test_command_has_content_type_header_var _________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_has_content_type_header_var>\n\n    def test_command_has_content_type_header_var(self):\n        command = self._makeOne(\n            ['', '--header=content-type:app/foo','development.ini', '/'])\n        command.run()\n        self.assertEqual(self._environ['CONTENT_TYPE'], 'app/foo')\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:77: AssertionError\n_____________ TestPRequestCommand.test_command_has_good_header_var _____________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_has_good_header_var>\n\n    def test_command_has_good_header_var(self):\n        command = self._makeOne(\n            ['', '--header=name:value','development.ini', '/'])\n        command.run()\n        self.assertEqual(self._environ['HTTP_NAME'], 'value')\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:67: AssertionError\n__________ TestPRequestCommand.test_command_has_multiple_header_vars ___________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_has_multiple_header_vars>\n\n    def test_command_has_multiple_header_vars(self):\n        command = self._makeOne(\n            ['',\n             '--header=name:value',\n             '--header=name2:value2',\n             'development.ini',\n             '/'])\n        command.run()\n        self.assertEqual(self._environ['HTTP_NAME'], 'value')\n        self.assertEqual(self._environ['HTTP_NAME2'], 'value2')\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:92: AssertionError\n_________________ TestPRequestCommand.test_command_method_get __________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_get>\n\n    def test_command_method_get(self):\n        command = self._makeOne(['', '--method=GET', 'development.ini', '/'])\n        command.run()\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:100: AssertionError\n_________________ TestPRequestCommand.test_command_method_post _________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_post>\n\n    def test_command_method_post(self):\n        from pyramid.compat import NativeIO\n        command = self._makeOne(['', '--method=POST', 'development.ini', '/'])\n        stdin = NativeIO()\n        command.stdin = stdin\n        command.run()\n        self.assertEqual(self._environ['CONTENT_LENGTH'], '-1')\n        self.assertEqual(self._environ['wsgi.input'], stdin)\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:113: AssertionError\n________ TestPRequestCommand.test_command_path_doesnt_start_with_slash _________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_path_doesnt_start_with_slash>\n\n    def test_command_path_doesnt_start_with_slash(self):\n        command = self._makeOne(['', 'development.ini', 'abc'])\n        command.run()\n        self.assertEqual(self._path_info, '/abc')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:48: AssertionError\n__________________ TestPRequestCommand.test_command_two_args ___________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_two_args>\n\n    def test_command_two_args(self):\n        command = self._makeOne(['', 'development.ini', '/'])\n        command.run()\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:40: AssertionError\n______________ TestPRequestCommand.test_command_with_query_string ______________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_with_query_string>\n\n    def test_command_with_query_string(self):\n        command = self._makeOne(['', 'development.ini', '/abc?a=1&b=2&c'])\n        command.run()\n        self.assertEqual(self._environ['QUERY_STRING'], 'a=1&b=2&c')\n        self.assertEqual(self._path_info, '/abc')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:122: AssertionError\n_____ TestPViewsCommand.test_views_command_single_view_function_traversal ______\n\nself = <r2e_tests.test_scripts.test_pviews.TestPViewsCommand testMethod=test_views_command_single_view_function_traversal>\n\n    def test_views_command_single_view_function_traversal(self):\n        from pyramid.registry import Registry\n        registry = Registry()\n        command = self._makeOne(registry=registry)\n        L = []\n        command.out = L.append\n        def view(): pass\n        view.__request_attrs__ = {'context': 'context', 'view_name': 'a'}\n        command._find_view = lambda arg1, arg2: view\n        command.args = ('/foo/bar/myapp.ini#myapp', '/a')\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(L[1], 'URL = /a')\n        self.assertEqual(L[3], '    context: context')\n        self.assertEqual(L[4], '    view name: a')\n>       self.assertEqual(L[8],\n                         '    pyramid.tests.test_scripts.test_pviews.view')\nE       AssertionError: '    r2e_tests.test_scripts.test_pviews.view' != '    pyramid.tests.test_scripts.test_pviews.view'\nE       -     r2e_tests.test_scripts.test_pviews.view\nE       ?      ^^^\nE       +     pyramid.tests.test_scripts.test_pviews.view\nE       ?     ++ ^^^^^\n\nr2e_tests/test_scripts/test_pviews.py:283: AssertionError\n==================================== PASSES ====================================\n=========================== short test summary info ============================\nPASSED r2e_tests/test_1.py::TestRoute::test_ctor\nPASSED r2e_tests/test_1.py::TestRoute::test_ctor_defaults\nPASSED r2e_tests/test_1.py::TestRoute::test_generate\nPASSED r2e_tests/test_1.py::TestRoute::test_match\nPASSED r2e_tests/test_1.py::TestRoute::test_provides_IRoute\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__custom_predicate_gets_info\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__no_path_info\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__pathinfo_cant_be_decoded\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_matches2\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_when_path_info_empty\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_when_path_info_notempty\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__route_fails_to_match_with_predicates\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__route_matches_with_predicates\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_cc_bug\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_connect_name_exists_removes_old\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_connect_static\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_connect_static_overridden\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_generate\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_get_route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_get_route_misses\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_get_routes\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_has_routes\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_no_route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_provides_IRoutesMapper\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_colons\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_embedded_squigglies\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_embedded_squigglies2\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_embedded_squigglies3\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_docs_sample_generate\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_generate_with_mixedtype_values\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_generate_with_string_remainder_and_nonstring_replacement\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_generate_with_string_remainder_and_unicode_replacement\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_highorder_pattern_utf8\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_no_beginning_slash\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_no_star\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_pattern_generate_with_high_order_dynamic\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_pattern_with_high_order_literal\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_with_bracket_star\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_with_star\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_generator_functional_newstyle\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_generator_functional_notdynamic\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_generator_functional_oldstyle\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_matcher_functional_newstyle\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_matcher_functional_notdynamic\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_matcher_functional_oldstyle\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_object_event_subscriber\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_default_resource_iface_means_Interface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_nodefault_resource_iface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter_dottednames\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter_self\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_defaults\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_dottednames\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_iface_specified\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_default_iface_means_Interface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_introspectables\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_nondefault_iface\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test__override_already_registered\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test__override_not_yet_registered\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_file\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_file\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_samename\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_True\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_False\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_values\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_package_already_has_loader_of_different_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_package_already_has_loader_of_same_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_registers_loader_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_sets_loader\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_sets_local_state\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_stream\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_stream_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_string\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_string_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_has_resource\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_has_resource_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_directory\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_emptystring\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_file\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_false\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_true\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_listdir\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_listdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_search_path\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_multiple_request_properties\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_multiple_request_properties_conflict\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_subscriber\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_with_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_with_property\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_with_unnamed_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory_as_None\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_session_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_session_factory_dottedname\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_missing_dir\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_no_specs\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_registers_chameleon_translate\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_set_locale_negotiator\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_set_locale_negotiator_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__matches\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__matches_no_action_wrap\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__missing_when_directives_dont_exist\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__missing_when_directives_exist\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_has_listeners\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_notify\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_queryAdapterOrSelf\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_registerSelfAdapter\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_already_absolute\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_notastring\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_relative\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_autocommit_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_autocommit_with_introspectables_introspection_off\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_kw_is_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_kw_is_not_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_with_config_info\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_without_config_info\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_nonautocommit_with_introspectables_introspection_off\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_autocommit_no_conflicts\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin_with_request\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_resolved_with_include\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_resolved_with_two_includes_and_local\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_simple\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_with_two_includes\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_conflict_set_forbidden_view\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_conflict_set_notfound_view\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_alternate_renderers\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_authentication_policy\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_authorization_policy_only\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_default_permission\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_default_renderers\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_default_view_mapper\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_exceptionresponse_view_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_exceptionresponse_view_custom\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_httpexception_view_default\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_no_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_custom_settings\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_debug_logger_non_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_session_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_with_introspection\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_with_package_registry\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_with_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_end\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_hook_zca\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_dotted_name\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_missing_source_file\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_module_defaults_to_includeme\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_module_defaults_to_includeme_missing\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_nested_route_prefix\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_python_callable\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_route_prefix\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_introspector_decorator\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_make_wsgi_app\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_notstring_success\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_string_fail\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_string_success\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_dottedname_package\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_extra_kw\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_ignore\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_onerror\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_alternate_renderers\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authentication_policy\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authentication_policy_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authorization_policy_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authorization_policy_only\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_calls_fix_registry\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_custom_settings\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_name\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_non_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_default_permission\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_dottedname_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_explicit_notfound_trumps_iexceptionresponse\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_includes\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_includes_spaces\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_locale_negotiator\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_locale_negotiator_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_no_default_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_exceptionresponse_view\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_webob_iresponse_adapter\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_renderer_globals_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_renderer_globals_factory_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_request_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_request_factory_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_tweens\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_unhook_zca\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package_module\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package_package\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_for_\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_attr\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_context\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_exception\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_for\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_permission\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_permission_alias\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_renderer\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_renderer_alias\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_conflict_route_with_view\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_directive_persists_across_configurator_creations\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_action_method_successful\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_same_name_doesnt_conflict\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_simple\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_includepath\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_includepath_and_info\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_info\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_order\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_dicts\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_error\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_tuples\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_with_introspectable_no_callable\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_it\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_processSpec\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_conflict\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_success_dicts\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_success_tuples\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_with_actions_grouped_by_order\nPASSED r2e_tests/test_config/test_init.py::TestGlobalRegistriesIntegration::test_global_registries\nPASSED r2e_tests/test_config/test_init.py::TestGlobalRegistriesIntegration::test_global_registries_empty\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_add_renderer\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_add_renderer_dottedname_factory\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_set_renderer_globals_factory\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_set_renderer_globals_factory_dottedname\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_defaults\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_discriminator\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_path_no_pattern\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_pattern_with_path\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_attr\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_context\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_permission\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_renderer\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_accept\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_custom_predicates\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_factory\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_factory_dottedname\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_header\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_path_info\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_path_info_highorder\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_path_info_regex\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_pregenerator\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_request_method\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_request_param\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_route_prefix\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_static\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_xhr\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_get_routes_mapper_already_registered\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_get_routes_mapper_not_yet_registered\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_no_authz_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_no_authz_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_with_authz_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_with_authz_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_no_authn_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_no_authn_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_with_authn_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_with_authn_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_default_permission\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test__set_settings_as_None\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test__set_settings_as_dictwithvalues\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_add_settings_settings_already_registered\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_add_settings_settings_not_yet_registered\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_get_settings_nosettings\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_get_settings_withsettings\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_all\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_authorization\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_notfound\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_routematch\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_templates\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_default_locale_name\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_getattr_fail\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_getattr_raises_attribute_error\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_getattr_success\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_noargs\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_originals_kept\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_prevent_http_cache\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_all\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_assets\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_resources\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_templates\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer_explicitrenderer\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer_twice\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_defaults\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_dottedname\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_multiple\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_single\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_template\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_resources\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_securitypolicy\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_dottedname\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_instance\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_name_ingress\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_name_main\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_over_ingress\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_over_ingress_iterable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_under_main\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_under_main_iterable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_unsuitable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_conflict\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_distinct\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_over_nonstringoriter\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_under_nonstringoriter\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_underover\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test___call___explicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test___call___implicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_add_explicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_add_implicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_1\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_2\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_3\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_4\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_5\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_conflict_direct\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_conflict_indirect\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_and_under_partials\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_partial\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_partial_with_fallback\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_under_partial\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_under_partial_with_fallback\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_missing_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_multiple_matching_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_partial_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestCyclicDependencyError::test___str__\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_custom_predicates_can_affect_traversal\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_different_custom_predicates_with_same_hash\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_dict\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_dict_fails\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_string\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_string_fails\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_hashable\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_importance_and_number\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_importance_of_predicates\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_number_of_predicates\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_xhr_and_request_method_trump_only_containment\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_predicate_text_is_correct\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_request_method_ordering_hashes_same\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_request_method_sequence\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_traverse_has_remainder_already\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_traverse_matches\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_traverse_matches_with_highorder_chars\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test___str__\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_class_conforms\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_ctor\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_instance_conforms\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_append_slash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_absolute\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_here_no_utility_registered\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_package_relative\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instance\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instancemethod\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instancemethod_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_oldstyle_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_trumps_for\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_custom_more_preds_first_bests_fewer_preds_last\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_custom_predicate_bests_standard_predicate\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_default_phash_overrides_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_default_phash_overrides_no_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_default_phash_overrides_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_default_phash_overrides_no_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_existing_securedview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_multiview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_mulview_replaces_existing_view_with___accept__\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_same_phash_overrides_existing_single_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_with_accept_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exception_register_secured_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_for__as_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_for_as_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_for_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview___discriminator__\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_call_ordering\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_context_superclass_then_subclass\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_exception_superclass_then_subclass\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_existing_securedview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_existing_view_with___accept__\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_multiview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_register_secured_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_same_phash_overrides_existing_single_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_same_predicates\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_view_callable_None_no_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_view_callable_None_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_view_callable_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_accept_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_accept_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_accept_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_containment_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_containment_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_containment_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_decorator\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_default_permission_no_explicit_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_default_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_function_callable\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_function_callable_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_badregex\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_noval_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_noval_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_missing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_http_cache\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_mapper\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_name_unicode\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_no_default_permission_no_explicit_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_nonexistant_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_badregex\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_get_implies_head\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_conflict\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_noval_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_noval_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_val_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_val_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_and_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_as_noniface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_route_name_exception\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_config_and_view_defaults_conflicts\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_config_and_view_defaults_doesnt_conflict\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults_viewname_is_dottedname_kwarg\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults_viewname_is_dottedname_nonkwarg\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_xhr_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_xhr_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_wrapped_view_is_decorated\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_views_with_accept_multiview_replaces_existing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_function\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_with_default_renderer_no_explicit_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_with_default_renderer_with_explicit_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_set_view_mapper\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_set_view_mapper_dottedname\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_noargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_with_attr_false\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_with_attr_true\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_nocall\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_method_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_firstname_request_with_secondname\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_noargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_noargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_no_init\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_requestonly_newstyle_class_init_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_requestonly_newstyle_class_init_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_requestonly_newstyle_class_no_init\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_IException\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_IException_subinterface\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_exception_class\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_exception_instance\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call__\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call__intermediate_not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call__raise_not_found_isnt_interpreted_as_pred_mismatch\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call_permissive_has_call_permissive\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call_permissive_has_no_call_permissive\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call__not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call__with_accept_match\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call__with_accept_miss\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call_permissive__not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_add\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_add_with_phash\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_add_with_phash_override_accept\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_class_implements_ISecuredView\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views_best_match_returns_None\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views_no_self_accepts\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views_request_has_no_accept\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_instance_implements_ISecuredView\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_match_not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_match_predicate_fails\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_match_predicate_succeeds\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_multiple_with_functions_as_views\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_permitted\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_permitted_no_match_with__permitted__\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_permitted_no_views\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_function_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_function_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_context_and_request_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_requestonly_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_context_and_request_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_requestonly_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_cls_context_request_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_cls_requestonly_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_attr_wrapped_view_branching_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_attr_wrapped_view_branching_nondefault_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_class_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_class_without_attr\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_denied\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_denied2\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_overridden\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_permitted\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_permitted_no_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_prevent_http_cache_in_settings\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_bad_tuple\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_integer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_prevent_auto_set\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_timedelta\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_tuple\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_tuple_seconds_None\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_predicate_mismatch_view_has_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_predicate_mismatch_view_has_no_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function_with_renderer_request_has_view\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function_with_renderer_request_override\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_authn_policy_no_authz_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_authz_policy_no_authn_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_raises_forbidden_no_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_raises_forbidden_with_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_authn_policy_no_authz_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_authz_policy_no_authn_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_no_authpol\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_no_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_predicates_all\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_predicates_checker\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_predicates_notall\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_view_mapper_config_specified\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_view_mapper_default_mapper_specified\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_view_mapper_view_specified\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_wrapper_viewname\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_wrapper_viewname_notfound\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test__view_as_function_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_context_and_request_and_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_context_and_request_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_context_and_request_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_different\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_different_with_existing_original_view\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_same\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_view_is_None\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_already_exists\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_url_noendslash\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_url_withendslash\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_for_\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_permission\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_route_prefix\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_attr\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_context\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_for\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_permission\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_renderer\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_missing\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_quoting\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_registration_miss\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_registration_no_registry_on_request\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_route_url\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name1\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name2\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_quoted_remote\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_unquoted_local\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_verifyClass\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_verifyObject\nPASSED r2e_tests/test_config/test_views.py::Test_view_description::test_with_text\nPASSED r2e_tests/test_scripts/test_common.py::Test_logging_file_config::test_it\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_absolute_path\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_multiple_rendered\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_single_rendered\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_no_project_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_no_scaffold_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_show_scaffolds_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_show_scaffolds_none_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_unknown_scaffold_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_bad_config_header\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_not_enough_args\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_response_has_no_charset\nPASSED r2e_tests/test_scripts/test_prequest.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test__get_mapper\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_mapper\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_routes\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_with_no_slash_prefix\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_route_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_views_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered_with_factory\nPASSED r2e_tests/test_scripts/test_proutes.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_parse_vars_bad\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_parse_vars_good\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_record_pid_not_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_record_pid_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_current_pid_is_not_pid_in_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_current_pid_is_not_written_pid\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_not_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_stale_pid_write_exception\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_unlink_exception\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_no_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_not_a_number\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_no_args\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_stop_daemon_bad_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_stop_daemon_invalid_pid_in_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_stop_daemon_no_such_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_read_pidfile::test_read_pidfile\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_read_pidfile::test_read_pidfile_no_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_read_pidfile::test_read_pidfile_not_a_number\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_flush\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_open\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_write\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_writeline\nPASSED r2e_tests/test_scripts/test_pserve.py::Test__methodwrapper::test___call__fail\nPASSED r2e_tests/test_scripts/test_pserve.py::Test__methodwrapper::test___call__succeed\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_custom_section_override\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_bpython_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_check_variable_override_order\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_custom_items\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_default_shell_with_unknown_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython_v0_10\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython_v0_11\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_setup_from_options\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_setup\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_bpython_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v0_10_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v0_11_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ipython_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test__get_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_and_explicit_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_tweens_only\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_no_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_all_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_none_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_some_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match_multiview_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview_no_view_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_no_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multi_view_nested\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found_url_starts_without_slash\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route_with_route_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::Test_main::test_it\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_dotted_names\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_introspectables\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_dotted_names\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_no_overrides\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_None\nFAILED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_abspath\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec_existing_translation_dirs\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_multiple_specs\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_multiple_specs_multiple_calls\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_no_registry\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_conflict\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_with_dotted_name\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_with_python_callable\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_package_here_relative\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_template_renderer\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_template_renderer_no_callable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_function_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_function_returns_non_adaptable_dict\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_instance_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_default_method_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_nondefault_method_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::Test_view_description::test_without_text\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_display_headers\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_content_type_header_var\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_good_header_var\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_multiple_header_vars\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_get\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_post\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_path_doesnt_start_with_slash\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_two_args\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_with_query_string\nFAILED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_function_traversal\n======================== 36 failed, 736 passed in 4.07s ========================\n",
    "new_commit_res_stderr": "",
    "old_commit_res_code": 1,
    "old_commit_res_stdout": "============================= test session starts ==============================\nplatform linux -- Python 3.8.20, pytest-8.3.4, pluggy-1.5.0\nrootdir: /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef\ncollected 772 items\n\nr2e_tests/test_1.py ...........................F.....................    [  6%]\nr2e_tests/test_config/test_adapters.py .FF.........F..                   [  8%]\nr2e_tests/test_config/test_assets.py ...........FF.....................F [ 12%]\n....................                                                     [ 15%]\nr2e_tests/test_config/test_factories.py .............                    [ 17%]\nr2e_tests/test_config/test_i18n.py FFF.FF....                            [ 18%]\nr2e_tests/test_config/test_init.py ..................................... [ 23%]\nF..F....................F...........F................................... [ 32%]\nFF...................                                                    [ 35%]\nr2e_tests/test_config/test_rendering.py ....                             [ 35%]\nr2e_tests/test_config/test_routes.py ........................            [ 38%]\nr2e_tests/test_config/test_security.py .........                         [ 40%]\nr2e_tests/test_config/test_settings.py ......................            [ 42%]\nr2e_tests/test_config/test_testing.py ..........                         [ 44%]\nr2e_tests/test_config/test_tweens.py ..................................  [ 48%]\nr2e_tests/test_config/test_util.py .....................                 [ 51%]\nr2e_tests/test_config/test_views.py .......F............................ [ 55%]\n..........................................................FF............ [ 65%]\n........................................................................ [ 74%]\n.............FF.......F..F....F......................................... [ 83%]\n....................F                                                    [ 86%]\nr2e_tests/test_scripts/test_common.py .                                  [ 86%]\nr2e_tests/test_scripts/test_pcreate.py .........                         [ 87%]\nr2e_tests/test_scripts/test_prequest.py F.FFFFF.F.FF.                    [ 89%]\nr2e_tests/test_scripts/test_proutes.py .........                         [ 90%]\nr2e_tests/test_scripts/test_pserve.py ..........................         [ 94%]\nr2e_tests/test_scripts/test_pshell.py .................                  [ 96%]\nr2e_tests/test_scripts/test_ptweens.py .....                             [ 97%]\nr2e_tests/test_scripts/test_pviews.py ................F......            [100%]\n\n=================================== FAILURES ===================================\n________________ TestCompileRoute.test_custom_regex_with_colons ________________\n\nself = <r2e_tests.test_1.TestCompileRoute testMethod=test_custom_regex_with_colons>\n\n    def test_custom_regex_with_colons(self):\n>       matcher, generator = self._callFUT('foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}')\n\nr2e_tests/test_1.py:316: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \nr2e_tests/test_1.py:268: in _callFUT\n    return _compile_route(pattern)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nroute = '/foo/{baz}/biz/{buz:(?:[^/\\\\.]+)}.{bar}'\n\n    def _compile_route(route):\n        # This function really wants to consume Unicode patterns natively, but if\n        # someone passes us a bytestring, we allow it by converting it to Unicode\n        # using the ASCII decoding.  We decode it using ASCII because we don't\n        # want to accept bytestrings with high-order characters in them here as\n        # we have no idea what the encoding represents.\n        if route.__class__ is not text_type:\n            try:\n                route = text_(route, 'ascii')\n            except UnicodeDecodeError:\n                raise ValueError(\n                    'The pattern value passed to add_route must be '\n                    'either a Unicode string or a plain string without '\n                    'any non-ASCII characters (you provided %r).' % route)\n    \n        if old_route_re.search(route) and not route_re.search(route):\n            route = old_route_re.sub(update_pattern, route)\n    \n        if not route.startswith('/'):\n            route = '/' + route\n    \n        remainder = None\n        if star_at_end.search(route):\n            route, remainder = route.rsplit('*', 1)\n    \n        pat = route_re.split(route)\n    \n        # every element in \"pat\" will be Unicode (regardless of whether the\n        # route_re regex pattern is itself Unicode or str)\n        pat.reverse()\n        rpat = []\n        gen = []\n        prefix = pat.pop() # invar: always at least one element (route='/'+route)\n    \n        # We want to generate URL-encoded URLs, so we url-quote the prefix, being\n        # careful not to quote any embedded slashes.  We have to replace '%' with\n        # '%%' afterwards, as the strings that go into \"gen\" are used as string\n        # replacement targets.\n        gen.append(quote_path_segment(prefix, safe='/').replace('%', '%%')) # native\n        rpat.append(re.escape(prefix)) # unicode\n    \n        while pat:\n            name = pat.pop() # unicode\n            name = name[1:-1]\n            if ':' in name:\n>               name, reg = name.split(':')\nE               ValueError: too many values to unpack (expected 2)\n\npyramid/urldispatch.py:151: ValueError\n__ AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_dotted_names ___\n\nself = <r2e_tests.test_config.test_adapters.AdaptersConfiguratorMixinTests testMethod=test_add_resource_url_adapter_dotted_names>\n\n    def test_add_resource_url_adapter_dotted_names(self):\n        from pyramid.interfaces import IResourceURL\n        config = self._makeOne(autocommit=True)\n        config.add_resource_url_adapter(\n            'pyramid.tests.test_config.test_adapters.DummyResourceURL',\n            'pyramid.tests.test_config.test_adapters.DummyIface',\n            )\n        iface = DummyIface()\n>       adapter = config.registry.getMultiAdapter((iface, iface),\n                                                    IResourceURL)\n\nr2e_tests/test_config/test_adapters.py:165: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <Registry r2e_tests.test_config>\nobjects = (<r2e_tests.test_config.test_adapters.DummyIface object at 0x7d0d5c5885e0>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x7d0d5c5885e0>)\ninterface = <InterfaceClass pyramid.interfaces.IResourceURL>, name = ''\n\n    def getMultiAdapter(self, objects, interface, name=''):\n        adapter = self.adapters.queryMultiAdapter(objects, interface, name)\n        if adapter is None:\n>           raise ComponentLookupError(objects, interface, name)\nE           zope.interface.interfaces.ComponentLookupError: ((<r2e_tests.test_config.test_adapters.DummyIface object at 0x7d0d5c5885e0>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x7d0d5c5885e0>), <InterfaceClass pyramid.interfaces.IResourceURL>, '')\n\n.venv/lib/python3.8/site-packages/zope/interface/registry.py:379: ComponentLookupError\n_ AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_introspectables _\n\nself = <r2e_tests.test_config.test_adapters.AdaptersConfiguratorMixinTests testMethod=test_add_resource_url_adapter_introspectables>\n\n    def test_add_resource_url_adapter_introspectables(self):\n        config = self._makeOne()\n        config.add_resource_url_adapter(DummyResourceURL, DummyIface)\n        actions = config.action_state.actions\n        self.assertEqual(len(actions), 1)\n        intrs  = actions[0]['introspectables']\n        self.assertEqual(len(intrs), 1)\n        intr = intrs[0]\n        self.assertEqual(intr.type_name, 'resource url adapter')\n        self.assertEqual(intr.discriminator,\n                         ('resource url adapter', DummyIface))\n        self.assertEqual(intr.category_name, 'resource url adapters')\n>       self.assertEqual(\n            intr.title,\n            \"resource url adapter for resource iface \"\n            \"<class 'pyramid.tests.test_config.test_adapters.DummyIface'>\"\n            )\nE       AssertionError: \"reso[34 chars]e <class 'r2e_tests.test_config.test_adapters.DummyIface'>\" != \"reso[34 chars]e <class 'pyramid.tests.test_config.test_adapters.DummyIface'>\"\nE       - resource url adapter for resource iface <class 'r2e_tests.test_config.test_adapters.DummyIface'>\nE       ?                                                  ^^^\nE       + resource url adapter for resource iface <class 'pyramid.tests.test_config.test_adapters.DummyIface'>\nE       ?                                                 ++ ^^^^^\n\nr2e_tests/test_config/test_adapters.py:211: AssertionError\n________ AdaptersConfiguratorMixinTests.test_add_traverser_dotted_names ________\n\nself = <r2e_tests.test_config.test_adapters.AdaptersConfiguratorMixinTests testMethod=test_add_traverser_dotted_names>\n\n    def test_add_traverser_dotted_names(self):\n        from pyramid.interfaces import ITraverser\n        config = self._makeOne(autocommit=True)\n        config.add_traverser(\n            'pyramid.tests.test_config.test_adapters.DummyTraverser',\n            'pyramid.tests.test_config.test_adapters.DummyIface')\n        iface = DummyIface()\n>       traverser = config.registry.getAdapter(iface, ITraverser)\n\nr2e_tests/test_config/test_adapters.py:122: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <Registry r2e_tests.test_config>\nobject = <r2e_tests.test_config.test_adapters.DummyIface object at 0x7d0d5c51dfd0>\ninterface = <InterfaceClass pyramid.interfaces.ITraverser>, name = ''\n\n    def getAdapter(self, object, interface, name=''):\n        adapter = self.adapters.queryAdapter(object, interface, name)\n        if adapter is None:\n>           raise ComponentLookupError(object, interface, name)\nE           zope.interface.interfaces.ComponentLookupError: (<r2e_tests.test_config.test_adapters.DummyIface object at 0x7d0d5c51dfd0>, <InterfaceClass pyramid.interfaces.ITraverser>, '')\n\n.venv/lib/python3.8/site-packages/zope/interface/registry.py:368: ComponentLookupError\n_________ TestOverrideProvider.test_get_resource_filename_no_overrides _________\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_no_overrides>\n\n    def test_get_resource_filename_no_overrides(self):\n        import os\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]88f5c881847b812857aef/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]88f5c881847b812857aef/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:158: AssertionError\n____ TestOverrideProvider.test_get_resource_filename_override_returns_None _____\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_override_returns_None>\n\n    def test_get_resource_filename_override_returns_None(self):\n        overrides = DummyOverrides(None)\n        self._registerOverrides(overrides)\n        import os\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]88f5c881847b812857aef/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]88f5c881847b812857aef/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:212: AssertionError\n____________________ TestPackageOverrides.test_get_filename ____________________\n\nself = <r2e_tests.test_config.test_assets.TestPackageOverrides testMethod=test_get_filename>\n\n    def test_get_filename(self):\n        import os\n        overrides = [ DummyOverride(None), DummyOverride(\n            ('pyramid.tests.test_config', 'test_assets.py'))]\n        package = DummyPackage('package')\n        po = self._makeOne(package)\n        po.overrides= overrides\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, 'test_assets.py')\n>       self.assertEqual(po.get_filename('whatever'), expected)\nE       AssertionError: '/hom[73 chars]88f5c881847b812857aef/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]88f5c881847b812857aef/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:401: AssertionError\n_________ TestI18NConfiguratorMixin.test_add_translation_dirs_abspath __________\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_abspath>\n\n    def test_add_translation_dirs_abspath(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n>       config.add_translation_dirs(locale)\n\nr2e_tests/test_config/test_i18n.py:102: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/util.py:58: in wrapper\n    result = wrapped(self, *arg, **kw)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <pyramid.config.Configurator object at 0x7d0d5c49d9a0>\nspecs = ('/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale',)\nintrospectables = []\nspec = '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale'\npackage_name = None\n\n    @action_method\n    def add_translation_dirs(self, *specs):\n        \"\"\" Add one or more :term:`translation directory` paths to the\n        current configuration state.  The ``specs`` argument is a\n        sequence that may contain absolute directory paths\n        (e.g. ``/usr/share/locale``) or :term:`asset specification`\n        names naming a directory path (e.g. ``some.package:locale``)\n        or a combination of the two.\n    \n        Example:\n    \n        .. code-block:: python\n    \n           config.add_translation_dirs('/usr/share/locale',\n                                       'some.package:locale')\n    \n        Later calls to ``add_translation_dir`` insert directories into the\n        beginning of the list of translation directories created by earlier\n        calls.  This means that the same translation found in a directory\n        added later in the configuration process will be found before one\n        added earlier in the configuration process.  However, if multiple\n        specs are provided in a single call to ``add_translation_dirs``, the\n        directories will be inserted into the beginning of the directory list\n        in the order they're provided in the ``*specs`` list argument (items\n        earlier in the list trump ones later in the list).\n        \"\"\"\n        directories = []\n        introspectables = []\n    \n        for spec in specs[::-1]: # reversed\n            package_name, filename = self._split_spec(spec)\n            if package_name is None: # absolute filename\n                directory = filename\n            else:\n                __import__(package_name)\n                package = sys.modules[package_name]\n                directory = os.path.join(package_path(package), filename)\n    \n            if not os.path.isdir(os.path.realpath(directory)):\n>               raise ConfigurationError('\"%s\" is not a directory' %\n                                         directory)\nE               pyramid.exceptions.ConfigurationError: \"/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale\" is not a directory\n\npyramid/config/i18n.py:92: ConfigurationError\n________ TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec ________\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_asset_spec>\n\n    def test_add_translation_dirs_asset_spec(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale])\nE       AssertionError: Lists differ: ['/ho[70 chars]5ee488f5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale'] != ['/ho[70 chars]5ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]15ee488f5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]15ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale']\nE       ?                                                                                                       ^^^\n\nr2e_tests/test_config/test_i18n.py:57: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec_existing_translation_dirs _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_asset_spec_existing_translation_dirs>\n\n    def test_add_translation_dirs_asset_spec_existing_translation_dirs(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        directories = ['abc']\n        config.registry.registerUtility(directories, ITranslationDirectories)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale')\n        result = config.registry.getUtility(ITranslationDirectories)\n>       self.assertEqual(result, [locale, 'abc'])\nE       AssertionError: Lists differ: ['/ho[77 chars]5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale', 'abc'] != ['/ho[77 chars]5c881847b812857aef/r2e_tests/pkgs/localeapp/locale', 'abc']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]15ee488f5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]15ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale',\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale',\nE       ?                                                                                                       ^^^\nE       \nE          'abc']\n\nr2e_tests/test_config/test_i18n.py:67: AssertionError\n______ TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs ______\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_multiple_specs>\n\n    def test_add_translation_dirs_multiple_specs(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale',\n                                    'pyramid.tests.pkgs.localeapp:locale2')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale, locale2])\nE       AssertionError: Lists differ: ['/ho[91 chars]7aef/pyramid/tests/pkgs/localeapp/locale', '/h[130 chars]le2'] != ['/ho[91 chars]7aef/r2e_tests/pkgs/localeapp/locale', '/home/[122 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]15ee488f5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]15ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale'\nE       \nE       Diff is 1002 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_i18n.py:74: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs_multiple_calls _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_multiple_specs_multiple_calls>\n\n    def test_add_translation_dirs_multiple_specs_multiple_calls(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale',\n                                    'pyramid.tests.pkgs.localeapp:locale2')\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale3')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale3, locale, locale2])\nE       AssertionError: Lists differ: ['/ho[91 chars]7aef/pyramid/tests/pkgs/localeapp/locale3', '/[269 chars]le2'] != ['/ho[91 chars]7aef/r2e_tests/pkgs/localeapp/locale3', '/home[257 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]5ee488f5c881847b812857aef/pyramid/tests/pkgs/localeapp/locale3'\nE       '/hom[69 chars]5ee488f5c881847b812857aef/r2e_tests/pkgs/localeapp/locale3'\nE       \nE       Diff is 1504 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_i18n.py:83: AssertionError\n___________________ ConfiguratorTests.test_ctor_no_registry ____________________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_ctor_no_registry>\n\n    def test_ctor_no_registry(self):\n        import sys\n        from pyramid.interfaces import ISettings\n        from pyramid.config import Configurator\n        from pyramid.interfaces import IRendererFactory\n        config = Configurator()\n        this_pkg = sys.modules['pyramid.tests.test_config']\n        self.assertTrue(config.registry.getUtility(ISettings))\n>       self.assertEqual(config.package, this_pkg)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:68: AssertionError\n_________ ConfiguratorTests.test_ctor_noreg_debug_logger_None_default __________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_ctor_noreg_debug_logger_None_default>\n\n    def test_ctor_noreg_debug_logger_None_default(self):\n        from pyramid.interfaces import IDebugLogger\n        config = self._makeOne()\n        logger = config.registry.getUtility(IDebugLogger)\n>       self.assertEqual(logger.name, 'pyramid.tests.test_config')\nE       AssertionError: 'r2e_tests.test_config' != 'pyramid.tests.test_config'\nE       - r2e_tests.test_config\nE       ?  ^^^\nE       + pyramid.tests.test_config\nE       ? ++ ^^^^^\n\nr2e_tests/test_config/test_init.py:129: AssertionError\n_______________ ConfiguratorTests.test_scan_integration_conflict _______________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_scan_integration_conflict>\n\n    def test_scan_integration_conflict(self):\n        from pyramid.tests.test_config.pkgs import selfscan\n        from pyramid.config import Configurator\n        c = Configurator()\n        c.scan(selfscan)\n        c.scan(selfscan)\n        try:\n>           c.commit()\n\nr2e_tests/test_config/test_init.py:1014: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:594: in commit\n    self.action_state.execute_actions(introspector=self.introspector)\npyramid/config/__init__.py:1030: in execute_actions\n    for action in resolveConflicts(self.actions):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nactions = []\n\n    def resolveConflicts(actions):\n        \"\"\"Resolve conflicting actions\n    \n        Given an actions list, identify and try to resolve conflicting actions.\n        Actions conflict if they have the same non-None discriminator.\n        Conflicting actions can be resolved if the include path of one of\n        the actions is a prefix of the includepaths of the other\n        conflicting actions and is unequal to the include paths in the\n        other conflicting actions.\n        \"\"\"\n    \n        # organize actions by discriminators\n        unique = {}\n        output = []\n        for i, action in enumerate(actions):\n            if not isinstance(action, dict):\n                # old-style tuple action\n                action = expand_action(*action)\n    \n            # \"order\" is an integer grouping. Actions in a lower order will be\n            # executed before actions in a higher order.  Within an order,\n            # actions are executed sequentially based on original action ordering\n            # (\"i\").\n            order = action['order'] or 0\n            discriminator = action['discriminator']\n    \n            # \"ainfo\" is a tuple of (order, i, action) where \"order\" is a\n            # user-supplied grouping, \"i\" is an integer expressing the relative\n            # position of this action in the action list being resolved, and\n            # \"action\" is an action dictionary.  The purpose of an ainfo is to\n            # associate an \"order\" and an \"i\" with a particular action; \"order\"\n            # and \"i\" exist for sorting purposes after conflict resolution.\n            ainfo = (order, i, action)\n    \n            if discriminator is None:\n                # The discriminator is None, so this action can never conflict.\n                # We can add it directly to the result.\n                output.append(ainfo)\n                continue\n    \n            L = unique.setdefault(discriminator, [])\n            L.append(ainfo)\n    \n        # Check for conflicts\n        conflicts = {}\n    \n        for discriminator, ainfos in unique.items():\n    \n            # We use (includepath, order, i) as a sort key because we need to\n            # sort the actions by the paths so that the shortest path with a\n            # given prefix comes first.  The \"first\" action is the one with the\n            # shortest include path.  We break sorting ties using \"order\", then\n            # \"i\".\n            def bypath(ainfo):\n                path, order, i = ainfo[2]['includepath'], ainfo[0], ainfo[1]\n                return path, order, i\n    \n            ainfos.sort(key=bypath)\n            ainfo, rest = ainfos[0], ainfos[1:]\n            output.append(ainfo)\n            _, _, action = ainfo\n            basepath, baseinfo, discriminator = (action['includepath'],\n                                                 action['info'],\n                                                 action['discriminator'])\n    \n            for _, _, action in rest:\n                includepath = action['includepath']\n                # Test whether path is a prefix of opath\n                if (includepath[:len(basepath)] != basepath # not a prefix\n                    or includepath == basepath):\n                    L = conflicts.setdefault(discriminator, [baseinfo])\n                    L.append(action['info'])\n    \n        if conflicts:\n>           raise ConfigurationConflictError(conflicts)\nE           pyramid.exceptions.ConfigurationConflictError: Conflicting configuration actions\nE             For: ('view', None, '', None, <InterfaceClass pyramid.interfaces.IView>, None, None, None, None, None, False, None, None, None, None)\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/test_config/pkgs/selfscan/__init__.py:\nE                   def abc(request):\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/test_config/pkgs/selfscan/__init__.py:\nE                   def abc(request):\nE             For: ('view', None, 'two', None, <InterfaceClass pyramid.interfaces.IView>, None, None, None, None, None, False, None, None, None, None)\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/test_config/pkgs/selfscan/another.py:\nE                   def two(request):\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_0d97ad3693c96215ee488f5c881847b812857aef/pyramid/tests/test_config/pkgs/selfscan/another.py:\nE                   def two(request):\n\npyramid/config/__init__.py:1136: ConfigurationConflictError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_scan_integration_conflict>\n\n    def test_scan_integration_conflict(self):\n        from pyramid.tests.test_config.pkgs import selfscan\n        from pyramid.config import Configurator\n        c = Configurator()\n        c.scan(selfscan)\n        c.scan(selfscan)\n        try:\n            c.commit()\n        except ConfigurationConflictError as why:\n            def scanconflicts(e):\n                conflicts = e._conflicts.values()\n                for conflict in conflicts:\n                    for confinst in conflict:\n                        yield confinst.src\n            which = list(scanconflicts(why))\n            self.assertEqual(len(which), 4)\n>           self.assertTrue(\"@view_config(renderer='string')\" in which)\nE           AssertionError: False is not true\n\nr2e_tests/test_config/test_init.py:1023: AssertionError\n_______ ConfiguratorTests.test_setup_registry_debug_logger_None_default ________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_setup_registry_debug_logger_None_default>\n\n    def test_setup_registry_debug_logger_None_default(self):\n        from pyramid.registry import Registry\n        from pyramid.interfaces import IDebugLogger\n        reg = Registry()\n        config = self._makeOne(reg)\n        config.setup_registry()\n        logger = reg.getUtility(IDebugLogger)\n>       self.assertEqual(logger.name, 'pyramid.tests.test_config')\nE       AssertionError: 'r2e_tests.test_config' != 'pyramid.tests.test_config'\nE       - r2e_tests.test_config\nE       ?  ^^^\nE       + pyramid.tests.test_config\nE       ? ++ ^^^^^\n\nr2e_tests/test_config/test_init.py:415: AssertionError\n_________ TestConfigurator_add_directive.test_extend_with_dotted_name __________\n\nself = <r2e_tests.test_config.test_init.TestConfigurator_add_directive testMethod=test_extend_with_dotted_name>\n\n    def test_extend_with_dotted_name(self):\n        from pyramid.tests import test_config\n        config = self.config\n        config.add_directive(\n            'dummy_extend', 'pyramid.tests.test_config.dummy_extend')\n        self.assertTrue(hasattr(config, 'dummy_extend'))\n        config.dummy_extend('discrim')\n        after = config.action_state\n        action = after.actions[-1]\n        self.assertEqual(action['discriminator'], 'discrim')\n        self.assertEqual(action['callable'], None)\n>       self.assertEqual(action['args'], test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:1415: AssertionError\n_______ TestConfigurator_add_directive.test_extend_with_python_callable ________\n\nself = <r2e_tests.test_config.test_init.TestConfigurator_add_directive testMethod=test_extend_with_python_callable>\n\n    def test_extend_with_python_callable(self):\n        from pyramid.tests import test_config\n        config = self.config\n        config.add_directive(\n            'dummy_extend', dummy_extend)\n        self.assertTrue(hasattr(config, 'dummy_extend'))\n        config.dummy_extend('discrim')\n        after = config.action_state\n        action = after.actions[-1]\n        self.assertEqual(action['discriminator'], 'discrim')\n        self.assertEqual(action['callable'], None)\n>       self.assertEqual(action['args'], test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:1428: AssertionError\n____ TestViewsConfigurationMixin.test_add_static_view_package_here_relative ____\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_static_view_package_here_relative>\n\n    def test_add_static_view_package_here_relative(self):\n        from pyramid.interfaces import IStaticURLInfo\n        info = DummyStaticURLInfo()\n        config = self._makeOne(autocommit=True)\n        config.registry.registerUtility(info, IStaticURLInfo)\n        config.add_static_view('static', 'files')\n>       self.assertEqual(\n            info.added,\n            [(config, 'static', 'pyramid.tests.test_config:files', {})])\nE       AssertionError: Lists differ: [(<py[39 chars]d0d5c448220>, 'static', 'r2e_tests.test_config:files', {})] != [(<py[39 chars]d0d5c448220>, 'static', 'pyramid.tests.test_config:files', {})]\nE       \nE       First differing element 0:\nE       (<pyr[37 chars]7d0d5c448220>, 'static', 'r2e_tests.test_config:files', {})\nE       (<pyr[37 chars]7d0d5c448220>, 'static', 'pyramid.tests.test_config:files', {})\nE       \nE         [(<pyramid.config.Configurator object at 0x7d0d5c448220>,\nE           'static',\nE       -   'r2e_tests.test_config:files',\nE       ?     ^^^\nE       \nE       +   'pyramid.tests.test_config:files',\nE       ?    ++ ^^^^^\nE       \nE           {})]\n\nr2e_tests/test_config/test_views.py:1670: AssertionError\n_______ TestViewsConfigurationMixin.test_add_view_with_template_renderer _______\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_view_with_template_renderer>\n\n    def test_add_view_with_template_renderer(self):\n        from pyramid.tests import test_config\n        from pyramid.interfaces import ISettings\n        class view(object):\n            def __init__(self, context, request):\n                self.request = request\n                self.context = context\n    \n            def __call__(self):\n                return {'a':'1'}\n        config = self._makeOne(autocommit=True)\n        renderer = self._registerRenderer(config)\n        fixture = 'pyramid.tests.test_config:files/minimal.txt'\n        config.add_view(view=view, renderer=fixture)\n        wrapper = self._getViewCallable(config)\n        request = self._makeRequest(config)\n        result = wrapper(None, request)\n        self.assertEqual(result.body, b'Hello!')\n        settings = config.registry.queryUtility(ISettings)\n        result = renderer.info\n        self.assertEqual(result.registry, config.registry)\n        self.assertEqual(result.type, '.txt')\n>       self.assertEqual(result.package, test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_views.py:998: AssertionError\n_ TestViewsConfigurationMixin.test_add_view_with_template_renderer_no_callable _\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_view_with_template_renderer_no_callable>\n\n    def test_add_view_with_template_renderer_no_callable(self):\n        from pyramid.tests import test_config\n        from pyramid.interfaces import ISettings\n        config = self._makeOne(autocommit=True)\n        renderer = self._registerRenderer(config)\n        fixture = 'pyramid.tests.test_config:files/minimal.txt'\n        config.add_view(view=None, renderer=fixture)\n        wrapper = self._getViewCallable(config)\n        request = self._makeRequest(config)\n        result = wrapper(None, request)\n        self.assertEqual(result.body, b'Hello!')\n        settings = config.registry.queryUtility(ISettings)\n        result = renderer.info\n        self.assertEqual(result.registry, config.registry)\n        self.assertEqual(result.type, '.txt')\n>       self.assertEqual(result.package, test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_views.py:1038: AssertionError\n_____________ TestViewDeriver.test_function_returns_non_adaptable ______________\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable>\n\n    def test_function_returns_non_adaptable(self):\n        def view(request):\n            return None\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n>           result(None, None)\n\nr2e_tests/test_config/test_views.py:2310: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable function r2e_tests.test_config.test_views.view into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable>\n\n    def test_function_returns_non_adaptable(self):\n        def view(request):\n            return None\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n            result(None, None)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                'Could not convert return value of the view callable function '\n                'pyramid.tests.test_config.test_views.view into a response '\n                'object. The value returned was None. You may have forgotten '\n                'to return a value from the view callable.'\n                )\nE           AssertionError: 'Coul[52 chars]tion r2e_tests.test_config.test_views.view int[110 chars]ble.' != 'Coul[52 chars]tion pyramid.tests.test_config.test_views.view[114 chars]ble.'\nE           Diff is 663 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2312: AssertionError\n___________ TestViewDeriver.test_function_returns_non_adaptable_dict ___________\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable_dict>\n\n    def test_function_returns_non_adaptable_dict(self):\n        def view(request):\n            return {'a':1}\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n>           result(None, None)\n\nr2e_tests/test_config/test_views.py:2329: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable function r2e_tests.test_config.test_views.view into a response object. The value returned was {'a': 1}. You may have forgotten to define a renderer in the view configuration.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable_dict>\n\n    def test_function_returns_non_adaptable_dict(self):\n        def view(request):\n            return {'a':1}\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n            result(None, None)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                \"Could not convert return value of the view callable function \"\n                \"pyramid.tests.test_config.test_views.view into a response \"\n                \"object. The value returned was {'a': 1}. You may have \"\n                \"forgotten to define a renderer in the view configuration.\"\n                )\nE           AssertionError: \"Coul[52 chars]tion r2e_tests.test_config.test_views.view int[120 chars]ion.\" != \"Coul[52 chars]tion pyramid.tests.test_config.test_views.view[124 chars]ion.\"\nE           Diff is 683 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2331: AssertionError\n_____________ TestViewDeriver.test_instance_returns_non_adaptable ______________\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_instance_returns_non_adaptable>\n\n    def test_instance_returns_non_adaptable(self):\n        class AView(object):\n            def __call__(self, request):\n                return None\n        view = AView()\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n>           result(None, None)\n\nr2e_tests/test_config/test_views.py:2350: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable object <r2e_tests.test_config.test_views.TestViewDeriver.test_instance_returns_non_adaptable.<locals>.AView object at 0x7d0d5bb3a910> into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_instance_returns_non_adaptable>\n\n    def test_instance_returns_non_adaptable(self):\n        class AView(object):\n            def __call__(self, request):\n                return None\n        view = AView()\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n            result(None, None)\n        except ValueError as e:\n            msg = e.args[0]\n>           self.assertTrue(msg.startswith(\n                'Could not convert return value of the view callable object '\n                '<pyramid.tests.test_config.test_views.'))\nE           AssertionError: False is not true\n\nr2e_tests/test_config/test_views.py:2353: AssertionError\n____ TestViewDeriver.test_requestonly_default_method_returns_non_adaptable _____\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_default_method_returns_non_adaptable>\n\n    def test_requestonly_default_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def __call__(self):\n                return None\n        deriver = self._makeOne()\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n>           result(None, request)\n\nr2e_tests/test_config/test_views.py:2373: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x7d0d5bbe3e20>\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable method __call__ of class r2e_tests.test_config.test_views.AView into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_default_method_returns_non_adaptable>\n\n    def test_requestonly_default_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def __call__(self):\n                return None\n        deriver = self._makeOne()\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n            result(None, request)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                'Could not convert return value of the view callable '\n                'method __call__ of '\n                'class pyramid.tests.test_config.test_views.AView into a '\n                'response object. The value returned was None. You may have '\n                'forgotten to return a value from the view callable.'\n                )\nE           AssertionError: 'Coul[68 chars]lass r2e_tests.test_config.test_views.AView in[111 chars]ble.' != 'Coul[68 chars]lass pyramid.tests.test_config.test_views.AVie[115 chars]ble.'\nE           Diff is 649 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2375: AssertionError\n___ TestViewDeriver.test_requestonly_nondefault_method_returns_non_adaptable ___\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_nondefault_method_returns_non_adaptable>\n\n    def test_requestonly_nondefault_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def theviewmethod(self):\n                return None\n        deriver = self._makeOne(attr='theviewmethod')\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n>           result(None, request)\n\nr2e_tests/test_config/test_views.py:2397: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x7d0d5ba07bb0>\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable method theviewmethod of class r2e_tests.test_config.test_views.AView into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_nondefault_method_returns_non_adaptable>\n\n    def test_requestonly_nondefault_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def theviewmethod(self):\n                return None\n        deriver = self._makeOne(attr='theviewmethod')\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n            result(None, request)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                'Could not convert return value of the view callable '\n                'method theviewmethod of '\n                'class pyramid.tests.test_config.test_views.AView into a '\n                'response object. The value returned was None. You may have '\n                'forgotten to return a value from the view callable.'\n                )\nE           AssertionError: 'Coul[73 chars]lass r2e_tests.test_config.test_views.AView in[111 chars]ble.' != 'Coul[73 chars]lass pyramid.tests.test_config.test_views.AVie[115 chars]ble.'\nE           Diff is 669 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2399: AssertionError\n___________________ Test_view_description.test_without_text ____________________\n\nself = <r2e_tests.test_config.test_views.Test_view_description testMethod=test_without_text>\n\n    def test_without_text(self):\n        def view(): pass\n        result = self._callFUT(view)\n>       self.assertEqual(result,\n                         'function pyramid.tests.test_config.test_views.view')\nE       AssertionError: 'function r2e_tests.test_config.test_views.view' != 'function pyramid.tests.test_config.test_views.view'\nE       - function r2e_tests.test_config.test_views.view\nE       ?           ^^^\nE       + function pyramid.tests.test_config.test_views.view\nE       ?          ++ ^^^^^\n\nr2e_tests/test_config/test_views.py:3831: AssertionError\n_______________ TestPRequestCommand.test_command_display_headers _______________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_display_headers>\n\n    def test_command_display_headers(self):\n        command = self._makeOne(\n            ['', '--display-headers', 'development.ini', '/'])\n        command.run()\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(\n            self._out,\n            ['200 OK', 'Content-Type: text/html; charset=UTF-8', 'abc'])\nE       AssertionError: Lists differ: ['200 OK', b'abc'] != ['200 OK', 'Content-Type: text/html; charset=UTF-8', 'abc']\nE       \nE       First differing element 1:\nE       b'abc'\nE       'Content-Type: text/html; charset=UTF-8'\nE       \nE       Second list contains 1 additional elements.\nE       First extra element 2:\nE       'abc'\nE       \nE       - ['200 OK', b'abc']\nE       + ['200 OK', 'Content-Type: text/html; charset=UTF-8', 'abc']\n\nr2e_tests/test_scripts/test_prequest.py:131: AssertionError\n_________ TestPRequestCommand.test_command_has_content_type_header_var _________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_has_content_type_header_var>\n\n    def test_command_has_content_type_header_var(self):\n        command = self._makeOne(\n            ['', '--header=content-type:app/foo','development.ini', '/'])\n        command.run()\n        self.assertEqual(self._environ['CONTENT_TYPE'], 'app/foo')\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:77: AssertionError\n_____________ TestPRequestCommand.test_command_has_good_header_var _____________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_has_good_header_var>\n\n    def test_command_has_good_header_var(self):\n        command = self._makeOne(\n            ['', '--header=name:value','development.ini', '/'])\n        command.run()\n        self.assertEqual(self._environ['HTTP_NAME'], 'value')\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:67: AssertionError\n__________ TestPRequestCommand.test_command_has_multiple_header_vars ___________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_has_multiple_header_vars>\n\n    def test_command_has_multiple_header_vars(self):\n        command = self._makeOne(\n            ['',\n             '--header=name:value',\n             '--header=name2:value2',\n             'development.ini',\n             '/'])\n        command.run()\n        self.assertEqual(self._environ['HTTP_NAME'], 'value')\n        self.assertEqual(self._environ['HTTP_NAME2'], 'value2')\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:92: AssertionError\n_________________ TestPRequestCommand.test_command_method_get __________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_get>\n\n    def test_command_method_get(self):\n        command = self._makeOne(['', '--method=GET', 'development.ini', '/'])\n        command.run()\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:100: AssertionError\n_________________ TestPRequestCommand.test_command_method_post _________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_post>\n\n    def test_command_method_post(self):\n        from pyramid.compat import NativeIO\n        command = self._makeOne(['', '--method=POST', 'development.ini', '/'])\n        stdin = NativeIO()\n        command.stdin = stdin\n        command.run()\n        self.assertEqual(self._environ['CONTENT_LENGTH'], '-1')\n        self.assertEqual(self._environ['wsgi.input'], stdin)\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:113: AssertionError\n________ TestPRequestCommand.test_command_path_doesnt_start_with_slash _________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_path_doesnt_start_with_slash>\n\n    def test_command_path_doesnt_start_with_slash(self):\n        command = self._makeOne(['', 'development.ini', 'abc'])\n        command.run()\n        self.assertEqual(self._path_info, '/abc')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:48: AssertionError\n__________________ TestPRequestCommand.test_command_two_args ___________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_two_args>\n\n    def test_command_two_args(self):\n        command = self._makeOne(['', 'development.ini', '/'])\n        command.run()\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:40: AssertionError\n______________ TestPRequestCommand.test_command_with_query_string ______________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_with_query_string>\n\n    def test_command_with_query_string(self):\n        command = self._makeOne(['', 'development.ini', '/abc?a=1&b=2&c'])\n        command.run()\n        self.assertEqual(self._environ['QUERY_STRING'], 'a=1&b=2&c')\n        self.assertEqual(self._path_info, '/abc')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:122: AssertionError\n_____ TestPViewsCommand.test_views_command_single_view_function_traversal ______\n\nself = <r2e_tests.test_scripts.test_pviews.TestPViewsCommand testMethod=test_views_command_single_view_function_traversal>\n\n    def test_views_command_single_view_function_traversal(self):\n        from pyramid.registry import Registry\n        registry = Registry()\n        command = self._makeOne(registry=registry)\n        L = []\n        command.out = L.append\n        def view(): pass\n        view.__request_attrs__ = {'context': 'context', 'view_name': 'a'}\n        command._find_view = lambda arg1, arg2: view\n        command.args = ('/foo/bar/myapp.ini#myapp', '/a')\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(L[1], 'URL = /a')\n        self.assertEqual(L[3], '    context: context')\n        self.assertEqual(L[4], '    view name: a')\n>       self.assertEqual(L[8],\n                         '    pyramid.tests.test_scripts.test_pviews.view')\nE       AssertionError: '    r2e_tests.test_scripts.test_pviews.view' != '    pyramid.tests.test_scripts.test_pviews.view'\nE       -     r2e_tests.test_scripts.test_pviews.view\nE       ?      ^^^\nE       +     pyramid.tests.test_scripts.test_pviews.view\nE       ?     ++ ^^^^^\n\nr2e_tests/test_scripts/test_pviews.py:283: AssertionError\n==================================== PASSES ====================================\n=========================== short test summary info ============================\nPASSED r2e_tests/test_1.py::TestRoute::test_ctor\nPASSED r2e_tests/test_1.py::TestRoute::test_ctor_defaults\nPASSED r2e_tests/test_1.py::TestRoute::test_generate\nPASSED r2e_tests/test_1.py::TestRoute::test_match\nPASSED r2e_tests/test_1.py::TestRoute::test_provides_IRoute\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__custom_predicate_gets_info\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__no_path_info\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__pathinfo_cant_be_decoded\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_matches2\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_when_path_info_empty\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_when_path_info_notempty\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__route_fails_to_match_with_predicates\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__route_matches_with_predicates\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_cc_bug\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_connect_name_exists_removes_old\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_connect_static\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_connect_static_overridden\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_generate\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_get_route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_get_route_misses\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_get_routes\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_has_routes\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_no_route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_provides_IRoutesMapper\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_embedded_squigglies\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_embedded_squigglies2\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_embedded_squigglies3\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_docs_sample_generate\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_generate_with_mixedtype_values\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_generate_with_string_remainder_and_nonstring_replacement\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_generate_with_string_remainder_and_unicode_replacement\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_highorder_pattern_utf8\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_no_beginning_slash\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_no_star\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_pattern_generate_with_high_order_dynamic\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_pattern_with_high_order_literal\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_with_bracket_star\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_with_star\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_generator_functional_newstyle\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_generator_functional_notdynamic\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_generator_functional_oldstyle\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_matcher_functional_newstyle\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_matcher_functional_notdynamic\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_matcher_functional_oldstyle\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_object_event_subscriber\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_default_resource_iface_means_Interface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_nodefault_resource_iface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter_dottednames\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter_self\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_defaults\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_dottednames\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_iface_specified\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_default_iface_means_Interface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_introspectables\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_nondefault_iface\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test__override_already_registered\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test__override_not_yet_registered\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_file\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_file\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_samename\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_True\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_False\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_values\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_package_already_has_loader_of_different_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_package_already_has_loader_of_same_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_registers_loader_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_sets_loader\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_sets_local_state\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_stream\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_stream_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_string\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_string_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_has_resource\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_has_resource_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_directory\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_emptystring\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_file\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_false\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_true\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_listdir\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_listdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_search_path\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_multiple_request_properties\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_multiple_request_properties_conflict\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_subscriber\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_with_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_with_property\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_with_unnamed_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory_as_None\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_session_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_session_factory_dottedname\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_missing_dir\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_no_specs\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_registers_chameleon_translate\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_set_locale_negotiator\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_set_locale_negotiator_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__matches\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__matches_no_action_wrap\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__missing_when_directives_dont_exist\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__missing_when_directives_exist\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_has_listeners\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_notify\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_queryAdapterOrSelf\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_registerSelfAdapter\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_already_absolute\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_notastring\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_relative\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_autocommit_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_autocommit_with_introspectables_introspection_off\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_kw_is_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_kw_is_not_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_with_config_info\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_without_config_info\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_nonautocommit_with_introspectables_introspection_off\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_autocommit_no_conflicts\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin_with_request\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_resolved_with_include\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_resolved_with_two_includes_and_local\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_simple\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_with_two_includes\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_conflict_set_forbidden_view\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_conflict_set_notfound_view\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_alternate_renderers\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_authentication_policy\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_authorization_policy_only\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_default_permission\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_default_renderers\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_default_view_mapper\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_exceptionresponse_view_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_exceptionresponse_view_custom\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_httpexception_view_default\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_no_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_custom_settings\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_debug_logger_non_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_session_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_with_introspection\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_with_package_registry\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_with_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_end\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_hook_zca\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_dotted_name\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_missing_source_file\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_module_defaults_to_includeme\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_module_defaults_to_includeme_missing\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_nested_route_prefix\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_python_callable\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_route_prefix\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_introspector_decorator\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_make_wsgi_app\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_notstring_success\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_string_fail\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_string_success\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_dottedname_package\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_extra_kw\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_ignore\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_onerror\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_alternate_renderers\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authentication_policy\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authentication_policy_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authorization_policy_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authorization_policy_only\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_calls_fix_registry\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_custom_settings\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_name\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_non_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_default_permission\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_dottedname_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_explicit_notfound_trumps_iexceptionresponse\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_includes\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_includes_spaces\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_locale_negotiator\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_locale_negotiator_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_no_default_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_exceptionresponse_view\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_webob_iresponse_adapter\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_renderer_globals_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_renderer_globals_factory_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_request_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_request_factory_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_tweens\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_unhook_zca\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package_module\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package_package\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_for_\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_attr\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_context\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_exception\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_for\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_permission\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_permission_alias\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_renderer\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_renderer_alias\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_conflict_route_with_view\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_directive_persists_across_configurator_creations\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_action_method_successful\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_same_name_doesnt_conflict\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_simple\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_includepath\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_includepath_and_info\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_info\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_order\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_dicts\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_error\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_tuples\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_with_introspectable_no_callable\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_it\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_processSpec\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_conflict\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_success_dicts\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_success_tuples\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_with_actions_grouped_by_order\nPASSED r2e_tests/test_config/test_init.py::TestGlobalRegistriesIntegration::test_global_registries\nPASSED r2e_tests/test_config/test_init.py::TestGlobalRegistriesIntegration::test_global_registries_empty\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_add_renderer\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_add_renderer_dottedname_factory\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_set_renderer_globals_factory\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_set_renderer_globals_factory_dottedname\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_defaults\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_discriminator\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_path_no_pattern\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_pattern_with_path\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_attr\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_context\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_permission\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_renderer\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_accept\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_custom_predicates\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_factory\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_factory_dottedname\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_header\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_path_info\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_path_info_highorder\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_path_info_regex\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_pregenerator\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_request_method\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_request_param\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_route_prefix\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_static\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_xhr\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_get_routes_mapper_already_registered\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_get_routes_mapper_not_yet_registered\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_no_authz_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_no_authz_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_with_authz_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_with_authz_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_no_authn_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_no_authn_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_with_authn_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_with_authn_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_default_permission\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test__set_settings_as_None\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test__set_settings_as_dictwithvalues\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_add_settings_settings_already_registered\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_add_settings_settings_not_yet_registered\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_get_settings_nosettings\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_get_settings_withsettings\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_all\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_authorization\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_notfound\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_routematch\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_templates\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_default_locale_name\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_getattr_fail\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_getattr_raises_attribute_error\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_getattr_success\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_noargs\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_originals_kept\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_prevent_http_cache\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_all\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_assets\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_resources\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_templates\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer_explicitrenderer\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer_twice\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_defaults\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_dottedname\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_multiple\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_single\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_template\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_resources\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_securitypolicy\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_dottedname\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_instance\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_name_ingress\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_name_main\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_over_ingress\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_over_ingress_iterable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_under_main\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_under_main_iterable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_unsuitable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_conflict\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_distinct\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_over_nonstringoriter\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_under_nonstringoriter\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_underover\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test___call___explicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test___call___implicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_add_explicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_add_implicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_1\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_2\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_3\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_4\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_5\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_conflict_direct\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_conflict_indirect\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_and_under_partials\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_partial\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_partial_with_fallback\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_under_partial\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_under_partial_with_fallback\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_missing_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_multiple_matching_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_partial_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestCyclicDependencyError::test___str__\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_custom_predicates_can_affect_traversal\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_different_custom_predicates_with_same_hash\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_dict\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_dict_fails\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_string\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_string_fails\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_hashable\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_importance_and_number\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_importance_of_predicates\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_number_of_predicates\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_xhr_and_request_method_trump_only_containment\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_predicate_text_is_correct\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_request_method_ordering_hashes_same\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_request_method_sequence\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_traverse_has_remainder_already\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_traverse_matches\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_traverse_matches_with_highorder_chars\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test___str__\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_class_conforms\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_ctor\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_instance_conforms\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_append_slash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_absolute\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_here_no_utility_registered\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_package_relative\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instance\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instancemethod\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instancemethod_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_oldstyle_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_trumps_for\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_custom_more_preds_first_bests_fewer_preds_last\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_custom_predicate_bests_standard_predicate\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_default_phash_overrides_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_default_phash_overrides_no_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_default_phash_overrides_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_default_phash_overrides_no_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_existing_securedview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_multiview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_mulview_replaces_existing_view_with___accept__\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_same_phash_overrides_existing_single_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_with_accept_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exception_register_secured_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_for__as_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_for_as_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_for_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview___discriminator__\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_call_ordering\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_context_superclass_then_subclass\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_exception_superclass_then_subclass\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_existing_securedview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_existing_view_with___accept__\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_multiview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_register_secured_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_same_phash_overrides_existing_single_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_same_predicates\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_view_callable_None_no_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_view_callable_None_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_view_callable_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_accept_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_accept_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_accept_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_containment_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_containment_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_containment_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_decorator\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_default_permission_no_explicit_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_default_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_function_callable\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_function_callable_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_badregex\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_noval_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_noval_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_missing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_http_cache\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_mapper\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_name_unicode\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_no_default_permission_no_explicit_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_nonexistant_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_badregex\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_get_implies_head\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_conflict\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_noval_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_noval_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_val_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_val_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_and_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_as_noniface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_route_name_exception\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_config_and_view_defaults_conflicts\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_config_and_view_defaults_doesnt_conflict\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults_viewname_is_dottedname_kwarg\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults_viewname_is_dottedname_nonkwarg\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_xhr_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_xhr_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_wrapped_view_is_decorated\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_views_with_accept_multiview_replaces_existing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_function\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_with_default_renderer_no_explicit_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_with_default_renderer_with_explicit_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_set_view_mapper\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_set_view_mapper_dottedname\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_noargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_with_attr_false\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_with_attr_true\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_nocall\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_method_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_firstname_request_with_secondname\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_noargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_noargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_no_init\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_requestonly_newstyle_class_init_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_requestonly_newstyle_class_init_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_requestonly_newstyle_class_no_init\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_IException\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_IException_subinterface\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_exception_class\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_exception_instance\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call__\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call__intermediate_not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call__raise_not_found_isnt_interpreted_as_pred_mismatch\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call_permissive_has_call_permissive\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call_permissive_has_no_call_permissive\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call__not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call__with_accept_match\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call__with_accept_miss\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call_permissive__not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_add\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_add_with_phash\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_add_with_phash_override_accept\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_class_implements_ISecuredView\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views_best_match_returns_None\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views_no_self_accepts\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views_request_has_no_accept\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_instance_implements_ISecuredView\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_match_not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_match_predicate_fails\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_match_predicate_succeeds\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_multiple_with_functions_as_views\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_permitted\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_permitted_no_match_with__permitted__\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_permitted_no_views\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_function_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_function_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_context_and_request_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_requestonly_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_context_and_request_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_requestonly_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_cls_context_request_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_cls_requestonly_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_attr_wrapped_view_branching_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_attr_wrapped_view_branching_nondefault_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_class_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_class_without_attr\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_denied\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_denied2\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_overridden\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_permitted\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_permitted_no_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_prevent_http_cache_in_settings\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_bad_tuple\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_integer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_prevent_auto_set\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_timedelta\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_tuple\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_tuple_seconds_None\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_predicate_mismatch_view_has_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_predicate_mismatch_view_has_no_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function_with_renderer_request_has_view\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function_with_renderer_request_override\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_authn_policy_no_authz_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_authz_policy_no_authn_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_raises_forbidden_no_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_raises_forbidden_with_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_authn_policy_no_authz_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_authz_policy_no_authn_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_no_authpol\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_no_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_predicates_all\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_predicates_checker\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_predicates_notall\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_view_mapper_config_specified\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_view_mapper_default_mapper_specified\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_view_mapper_view_specified\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_wrapper_viewname\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_wrapper_viewname_notfound\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test__view_as_function_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_context_and_request_and_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_context_and_request_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_context_and_request_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_different\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_different_with_existing_original_view\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_same\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_view_is_None\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_already_exists\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_url_noendslash\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_url_withendslash\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_for_\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_permission\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_route_prefix\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_attr\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_context\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_for\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_permission\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_renderer\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_missing\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_quoting\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_registration_miss\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_registration_no_registry_on_request\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_route_url\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name1\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name2\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_quoted_remote\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_unquoted_local\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_verifyClass\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_verifyObject\nPASSED r2e_tests/test_config/test_views.py::Test_view_description::test_with_text\nPASSED r2e_tests/test_scripts/test_common.py::Test_logging_file_config::test_it\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_absolute_path\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_multiple_rendered\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_single_rendered\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_no_project_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_no_scaffold_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_show_scaffolds_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_show_scaffolds_none_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_unknown_scaffold_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_bad_config_header\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_not_enough_args\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_response_has_no_charset\nPASSED r2e_tests/test_scripts/test_prequest.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test__get_mapper\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_mapper\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_routes\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_with_no_slash_prefix\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_route_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_views_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered_with_factory\nPASSED r2e_tests/test_scripts/test_proutes.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_parse_vars_bad\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_parse_vars_good\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_record_pid_not_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_record_pid_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_current_pid_is_not_pid_in_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_current_pid_is_not_written_pid\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_not_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_stale_pid_write_exception\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_unlink_exception\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_no_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_not_a_number\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_no_args\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_stop_daemon_bad_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_stop_daemon_invalid_pid_in_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_stop_daemon_no_such_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_read_pidfile::test_read_pidfile\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_read_pidfile::test_read_pidfile_no_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_read_pidfile::test_read_pidfile_not_a_number\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_flush\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_open\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_write\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_writeline\nPASSED r2e_tests/test_scripts/test_pserve.py::Test__methodwrapper::test___call__fail\nPASSED r2e_tests/test_scripts/test_pserve.py::Test__methodwrapper::test___call__succeed\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_custom_section_override\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_bpython_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_check_variable_override_order\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_custom_items\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_default_shell_with_unknown_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython_v0_10\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython_v0_11\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_setup_from_options\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_setup\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_bpython_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v0_10_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v0_11_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ipython_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test__get_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_and_explicit_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_tweens_only\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_no_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_all_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_none_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_some_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match_multiview_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview_no_view_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_no_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multi_view_nested\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found_url_starts_without_slash\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route_with_route_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::Test_main::test_it\nFAILED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_colons\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_dotted_names\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_introspectables\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_dotted_names\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_no_overrides\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_None\nFAILED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_abspath\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec_existing_translation_dirs\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_multiple_specs\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_multiple_specs_multiple_calls\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_no_registry\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_conflict\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_with_dotted_name\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_with_python_callable\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_package_here_relative\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_template_renderer\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_template_renderer_no_callable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_function_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_function_returns_non_adaptable_dict\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_instance_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_default_method_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_nondefault_method_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::Test_view_description::test_without_text\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_display_headers\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_content_type_header_var\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_good_header_var\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_multiple_header_vars\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_get\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_post\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_path_doesnt_start_with_slash\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_two_args\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_with_query_string\nFAILED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_function_traversal\n======================== 37 failed, 735 passed in 3.37s ========================\n",
    "old_commit_res_stderr": ""
}
pyramid/tests/test_urldispatch.py pyramid/urldispatch.py
We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[ISSUE]
**Title:** Route compilation fails when regex contains colons

**Description:**
When defining a route with a regular expression that includes colons, the route compilation process fails. This issue arises because the pattern is split incorrectly, resulting in a `ValueError` due to too many values to unpack.

**Example Code:**
```python
from pyramid.urldispatch import _compile_route

pattern = 'foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}'
matcher, generator = _compile_route(pattern)
```

**Expected Behavior:**
The route should compile successfully, correctly parsing the route parameters, including the regular expression that contains colons.

**Actual Behavior:**
A `ValueError` is raised:
```
ValueError: too many values to unpack (expected 2)
```
[/ISSUE]
--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.

--- BEGIN FILE ---
```
### pyramid/urldispatch.py
import re
from zope.interface import implementer

from pyramid.interfaces import (
    IRoutesMapper,
    IRoute,
    )

from pyramid.compat import (
    PY3,
    native_,
    text_,
    text_type,
    string_types,
    binary_type,
    is_nonstr_iter,
    decode_path_info,
    )

from pyramid.exceptions import URLDecodeError

from pyramid.traversal import (
    quote_path_segment,
    split_path_info,
    )

_marker = object()

@implementer(IRoute)
class Route(object):
    def __init__(self, name, pattern, factory=None, predicates=(),
                 pregenerator=None):
        self.pattern = pattern
        self.path = pattern # indefinite b/w compat, not in interface
        self.match, self.generate = _compile_route(pattern)
        self.name = name
        self.factory = factory
        self.predicates = predicates
        self.pregenerator = pregenerator

@implementer(IRoutesMapper)
class RoutesMapper(object):
    def __init__(self):
        self.routelist = []
        self.routes = {}

    def has_routes(self):
        return bool(self.routelist)

    def get_routes(self):
        return self.routelist

    def get_route(self, name):
        return self.routes.get(name)

    def connect(self, name, pattern, factory=None, predicates=(),
                pregenerator=None, static=False):
        if name in self.routes:
            oldroute = self.routes[name]
            if oldroute in self.routelist:
                self.routelist.remove(oldroute)
        route = Route(name, pattern, factory, predicates, pregenerator)
        if not static:
            self.routelist.append(route)
        self.routes[name] = route
        return route

    def generate(self, name, kw):
        return self.routes[name].generate(kw)

    def __call__(self, request):
        environ = request.environ
        try:
            # empty if mounted under a path in mod_wsgi, for example
            path = decode_path_info(environ['PATH_INFO'] or '/')
        except KeyError:
            path = '/'
        except UnicodeDecodeError as e:
            raise URLDecodeError(e.encoding, e.object, e.start, e.end, e.reason)

        for route in self.routelist:
            match = route.match(path)
            if match is not None:
                preds = route.predicates
                info = {'match':match, 'route':route}
                if preds and not all((p(info, request) for p in preds)):
                    continue
                return info

        return {'route':None, 'match':None}

# stolen from bobo and modified
old_route_re = re.compile(r'(\:[_a-zA-Z]\w*)')
star_at_end = re.compile(r'\*\w*$')

# The tortuous nature of the regex named ``route_re`` below is due to the
# fact that we need to support at least one level of "inner" squigglies
# inside the expr of a {name:expr} pattern.  This regex used to be just
# (\{[a-zA-Z][^\}]*\}) but that choked when supplied with e.g. {foo:\d{4}}.
route_re = re.compile(r'(\{[_a-zA-Z][^{}]*(?:\{[^{}]*\}[^{}]*)*\})')

def update_pattern(matchobj):
    name = matchobj.group(0)
    return '{%s}' % name[1:]

def _compile_route(route):
    # This function really wants to consume Unicode patterns natively, but if
    # someone passes us a bytestring, we allow it by converting it to Unicode
    # using the ASCII decoding.  We decode it using ASCII because we don't
    # want to accept bytestrings with high-order characters in them here as
    # we have no idea what the encoding represents.
    if route.__class__ is not text_type:
        try:
            route = text_(route, 'ascii')
        except UnicodeDecodeError:
            raise ValueError(
                'The pattern value passed to add_route must be '
                'either a Unicode string or a plain string without '
                'any non-ASCII characters (you provided %r).' % route)

    if old_route_re.search(route) and not route_re.search(route):
        route = old_route_re.sub(update_pattern, route)

    if not route.startswith('/'):
        route = '/' + route

    remainder = None
    if star_at_end.search(route):
        route, remainder = route.rsplit('*', 1)

    pat = route_re.split(route)

    # every element in "pat" will be Unicode (regardless of whether the
    # route_re regex pattern is itself Unicode or str)
    pat.reverse()
    rpat = []
    gen = []
    prefix = pat.pop() # invar: always at least one element (route='/'+route)

    # We want to generate URL-encoded URLs, so we url-quote the prefix, being
    # careful not to quote any embedded slashes.  We have to replace '%' with
    # '%%' afterwards, as the strings that go into "gen" are used as string
    # replacement targets.
    gen.append(quote_path_segment(prefix, safe='/').replace('%', '%%')) # native
    rpat.append(re.escape(prefix)) # unicode

    while pat:
        name = pat.pop() # unicode
        name = name[1:-1]
        if ':' in name:
            name, reg = name.split(':')
        else:
            reg = '[^/]+'
        gen.append('%%(%s)s' % native_(name)) # native
        name = '(?P<%s>%s)' % (name, reg) # unicode
        rpat.append(name)
        s = pat.pop() # unicode
        if s:
            rpat.append(re.escape(s)) # unicode
            # We want to generate URL-encoded URLs, so we url-quote this
            # literal in the pattern, being careful not to quote the embedded
            # slashes.  We have to replace '%' with '%%' afterwards, as the
            # strings that go into "gen" are used as string replacement
            # targets.  What is appended to gen is a native string.
            gen.append(quote_path_segment(s, safe='/').replace('%', '%%'))

    if remainder:
        rpat.append('(?P<%s>.*?)' % remainder) # unicode
        gen.append('%%(%s)s' % native_(remainder)) # native

    pattern = ''.join(rpat) + '$' # unicode

    match = re.compile(pattern).match
    def matcher(path):
        # This function really wants to consume Unicode patterns natively,
        # but if someone passes us a bytestring, we allow it by converting it
        # to Unicode using the ASCII decoding.  We decode it using ASCII
        # because we don't want to accept bytestrings with high-order
        # characters in them here as we have no idea what the encoding
        # represents.
        if path.__class__ is not text_type:
            path = text_(path, 'ascii')
        m = match(path)
        if m is None:
            return None
        d = {}
        for k, v in m.groupdict().items():
            # k and v will be Unicode 2.6.4 and lower doesnt accept unicode
            # kwargs as **kw, so we explicitly cast the keys to native
            # strings in case someone wants to pass the result as **kw
            nk = native_(k, 'ascii')
            if k == remainder:
                d[nk] = split_path_info(v)
            else:
                d[nk] = v
        return d

    gen = ''.join(gen)
    def generator(dict):
        newdict = {}
        for k, v in dict.items():
            if PY3: # pragma: no cover
                if v.__class__ is binary_type:
                    # url_quote below needs a native string, not bytes on Py3
                    v = v.decode('utf-8')
            else:
                if v.__class__ is text_type:
                    # url_quote below needs bytes, not unicode on Py2
                    v = v.encode('utf-8')

            if k == remainder:
                # a stararg argument
                if is_nonstr_iter(v):
                    v = '/'.join([quote_path_segment(x) for x in v]) # native
                else:
                    if v.__class__ not in string_types:
                        v = str(v)
                    v = quote_path_segment(v, safe='/')
            else:
                if v.__class__ not in string_types:
                    v = str(v)
                # v may be bytes (py2) or native string (py3)
                v = quote_path_segment(v)

            # at this point, the value will be a native string
            newdict[k] = v

        result = gen % newdict # native string result
        return result

    return matcher, generator

```
--- END FILE ---

Please first localize the bug based on the issue statement, and then generate *SEARCH/REPLACE* edits to fix the issue.

Every *SEARCH/REPLACE* edit must use this format:
1. The file path
2. The start of search block: <<<<<<< SEARCH
3. A contiguous chunk of lines to search for in the existing source code
4. The dividing line: =======
5. The lines to replace into the source code
6. The end of the replace block: >>>>>>> REPLACE

Here is an example:

```python
### mathweb/flask/app.py
<<<<<<< SEARCH
from flask import Flask
=======
import math
from flask import Flask
>>>>>>> REPLACE
```
</solution>

Please note that the *SEARCH/REPLACE* edit REQUIRES PROPER INDENTATION. If you would like to add the line '        print(x)', you must fully write that out, with all those spaces before the code!
Wrap each *SEARCH/REPLACE* edit in a code block as shown in the example above. If you have multiple *SEARCH/REPLACE* edits, use a separate code block for each one.
[ISSUE]
**Title:** Route compilation fails when regex contains colons

**Description:**
When defining a route with a regular expression that includes colons, the route compilation process fails. This issue arises because the pattern is split incorrectly, resulting in a `ValueError` due to too many values to unpack.

**Example Code:**
```python
from pyramid.urldispatch import _compile_route

pattern = 'foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}'
matcher, generator = _compile_route(pattern)
```

**Expected Behavior:**
The route should compile successfully, correctly parsing the route parameters, including the regular expression that contains colons.

**Actual Behavior:**
A `ValueError` is raised:
```
ValueError: too many values to unpack (expected 2)
```
[/ISSUE]
{
    "TestRoute.test_ctor": "PASSED",
    "TestRoute.test_ctor_defaults": "PASSED",
    "TestRoute.test_generate": "PASSED",
    "TestRoute.test_match": "PASSED",
    "TestRoute.test_provides_IRoute": "PASSED",
    "RoutesMapperTests.test___call__custom_predicate_gets_info": "PASSED",
    "RoutesMapperTests.test___call__no_path_info": "PASSED",
    "RoutesMapperTests.test___call__pathinfo_cant_be_decoded": "PASSED",
    "RoutesMapperTests.test___call__root_route_matches": "PASSED",
    "RoutesMapperTests.test___call__root_route_matches2": "PASSED",
    "RoutesMapperTests.test___call__root_route_when_path_info_empty": "PASSED",
    "RoutesMapperTests.test___call__root_route_when_path_info_notempty": "PASSED",
    "RoutesMapperTests.test___call__route_fails_to_match_with_predicates": "PASSED",
    "RoutesMapperTests.test___call__route_matches": "PASSED",
    "RoutesMapperTests.test___call__route_matches_with_predicates": "PASSED",
    "RoutesMapperTests.test_cc_bug": "PASSED",
    "RoutesMapperTests.test_connect_name_exists_removes_old": "PASSED",
    "RoutesMapperTests.test_connect_static": "PASSED",
    "RoutesMapperTests.test_connect_static_overridden": "PASSED",
    "RoutesMapperTests.test_generate": "PASSED",
    "RoutesMapperTests.test_get_route_matches": "PASSED",
    "RoutesMapperTests.test_get_route_misses": "PASSED",
    "RoutesMapperTests.test_get_routes": "PASSED",
    "RoutesMapperTests.test_has_routes": "PASSED",
    "RoutesMapperTests.test_no_route_matches": "PASSED",
    "RoutesMapperTests.test_provides_IRoutesMapper": "PASSED",
    "TestCompileRoute.test_custom_regex": "PASSED",
    "TestCompileRoute.test_custom_regex_with_colons": "PASSED",
    "TestCompileRoute.test_custom_regex_with_embedded_squigglies": "PASSED",
    "TestCompileRoute.test_custom_regex_with_embedded_squigglies2": "PASSED",
    "TestCompileRoute.test_custom_regex_with_embedded_squigglies3": "PASSED",
    "TestCompileRoute.test_docs_sample_generate": "PASSED",
    "TestCompileRoute.test_generate_with_mixedtype_values": "PASSED",
    "TestCompileRoute.test_generate_with_string_remainder_and_nonstring_replacement": "PASSED",
    "TestCompileRoute.test_generate_with_string_remainder_and_unicode_replacement": "PASSED",
    "TestCompileRoute.test_highorder_pattern_utf8": "PASSED",
    "TestCompileRoute.test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle": "PASSED",
    "TestCompileRoute.test_no_beginning_slash": "PASSED",
    "TestCompileRoute.test_no_star": "PASSED",
    "TestCompileRoute.test_pattern_generate_with_high_order_dynamic": "PASSED",
    "TestCompileRoute.test_pattern_with_high_order_literal": "PASSED",
    "TestCompileRoute.test_with_bracket_star": "PASSED",
    "TestCompileRoute.test_with_star": "PASSED",
    "TestCompileRouteFunctional.test_generator_functional_newstyle": "PASSED",
    "TestCompileRouteFunctional.test_generator_functional_notdynamic": "PASSED",
    "TestCompileRouteFunctional.test_generator_functional_oldstyle": "PASSED",
    "TestCompileRouteFunctional.test_matcher_functional_newstyle": "PASSED",
    "TestCompileRouteFunctional.test_matcher_functional_notdynamic": "PASSED",
    "TestCompileRouteFunctional.test_matcher_functional_oldstyle": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_object_event_subscriber": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_resource_url_default_resource_iface_means_Interface": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_resource_url_nodefault_resource_iface": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_response_adapter": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_response_adapter_dottednames": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_response_adapter_self": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_defaults": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_dottednames": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_iface_specified": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_default_iface_means_Interface": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_introspectables": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_nondefault_iface": "PASSED",
    "TestAssetsConfiguratorMixin.test__override_already_registered": "PASSED",
    "TestAssetsConfiguratorMixin.test__override_not_yet_registered": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_directory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_file": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_package": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_directory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_file": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_package": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_package_with_directory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_package_with_package": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_samename": "PASSED",
    "TestOverrideProvider.test_get_resource_filename_override_returns_value": "PASSED",
    "TestOverrideProvider.test_get_resource_stream_no_overrides": "PASSED",
    "TestOverrideProvider.test_get_resource_stream_override_returns_None": "PASSED",
    "TestOverrideProvider.test_get_resource_stream_override_returns_value": "PASSED",
    "TestOverrideProvider.test_get_resource_string_no_overrides": "PASSED",
    "TestOverrideProvider.test_get_resource_string_override_returns_None": "PASSED",
    "TestOverrideProvider.test_get_resource_string_override_returns_value": "PASSED",
    "TestOverrideProvider.test_has_resource_no_overrides": "PASSED",
    "TestOverrideProvider.test_has_resource_override_returns_None": "PASSED",
    "TestOverrideProvider.test_has_resource_override_returns_True": "PASSED",
    "TestOverrideProvider.test_resource_isdir_no_overrides": "PASSED",
    "TestOverrideProvider.test_resource_isdir_override_returns_False": "PASSED",
    "TestOverrideProvider.test_resource_isdir_override_returns_None": "PASSED",
    "TestOverrideProvider.test_resource_listdir_no_overrides": "PASSED",
    "TestOverrideProvider.test_resource_listdir_override_returns_None": "PASSED",
    "TestOverrideProvider.test_resource_listdir_override_returns_values": "PASSED",
    "TestPackageOverrides.test_ctor_package_already_has_loader_of_different_type": "PASSED",
    "TestPackageOverrides.test_ctor_package_already_has_loader_of_same_type": "PASSED",
    "TestPackageOverrides.test_ctor_registers_loader_type": "PASSED",
    "TestPackageOverrides.test_ctor_sets_loader": "PASSED",
    "TestPackageOverrides.test_ctor_sets_local_state": "PASSED",
    "TestPackageOverrides.test_get_filename_file_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_get_stream": "PASSED",
    "TestPackageOverrides.test_get_stream_file_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_get_string": "PASSED",
    "TestPackageOverrides.test_get_string_file_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_has_resource": "PASSED",
    "TestPackageOverrides.test_has_resource_file_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_insert_directory": "PASSED",
    "TestPackageOverrides.test_insert_emptystring": "PASSED",
    "TestPackageOverrides.test_insert_file": "PASSED",
    "TestPackageOverrides.test_isdir_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_isdir_false": "PASSED",
    "TestPackageOverrides.test_isdir_true": "PASSED",
    "TestPackageOverrides.test_listdir": "PASSED",
    "TestPackageOverrides.test_listdir_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_search_path": "PASSED",
    "TestDirectoryOverride.test_it_match": "PASSED",
    "TestDirectoryOverride.test_it_no_match": "PASSED",
    "TestFileOverride.test_it_match": "PASSED",
    "TestFileOverride.test_it_no_match": "PASSED",
    "TestFactoriesMixin.test_set_multiple_request_properties": "PASSED",
    "TestFactoriesMixin.test_set_multiple_request_properties_conflict": "PASSED",
    "TestFactoriesMixin.test_set_request_factory": "PASSED",
    "TestFactoriesMixin.test_set_request_factory_dottedname": "PASSED",
    "TestFactoriesMixin.test_set_request_property_subscriber": "PASSED",
    "TestFactoriesMixin.test_set_request_property_with_callable": "PASSED",
    "TestFactoriesMixin.test_set_request_property_with_property": "PASSED",
    "TestFactoriesMixin.test_set_request_property_with_unnamed_callable": "PASSED",
    "TestFactoriesMixin.test_set_root_factory": "PASSED",
    "TestFactoriesMixin.test_set_root_factory_as_None": "PASSED",
    "TestFactoriesMixin.test_set_root_factory_dottedname": "PASSED",
    "TestFactoriesMixin.test_set_session_factory": "PASSED",
    "TestFactoriesMixin.test_set_session_factory_dottedname": "PASSED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_missing_dir": "PASSED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_no_specs": "PASSED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_registers_chameleon_translate": "PASSED",
    "TestI18NConfiguratorMixin.test_set_locale_negotiator": "PASSED",
    "TestI18NConfiguratorMixin.test_set_locale_negotiator_dottedname": "PASSED",
    "ConfiguratorTests.test___getattr__matches": "PASSED",
    "ConfiguratorTests.test___getattr__matches_no_action_wrap": "PASSED",
    "ConfiguratorTests.test___getattr__missing_when_directives_dont_exist": "PASSED",
    "ConfiguratorTests.test___getattr__missing_when_directives_exist": "PASSED",
    "ConfiguratorTests.test__fix_registry_has_listeners": "PASSED",
    "ConfiguratorTests.test__fix_registry_notify": "PASSED",
    "ConfiguratorTests.test__fix_registry_queryAdapterOrSelf": "PASSED",
    "ConfiguratorTests.test__fix_registry_registerSelfAdapter": "PASSED",
    "ConfiguratorTests.test_absolute_asset_spec_already_absolute": "PASSED",
    "ConfiguratorTests.test_absolute_asset_spec_notastring": "PASSED",
    "ConfiguratorTests.test_absolute_asset_spec_relative": "PASSED",
    "ConfiguratorTests.test_action_autocommit_with_introspectables": "PASSED",
    "ConfiguratorTests.test_action_autocommit_with_introspectables_introspection_off": "PASSED",
    "ConfiguratorTests.test_action_branching_kw_is_None": "PASSED",
    "ConfiguratorTests.test_action_branching_kw_is_not_None": "PASSED",
    "ConfiguratorTests.test_action_branching_nonautocommit_with_config_info": "PASSED",
    "ConfiguratorTests.test_action_branching_nonautocommit_with_introspectables": "PASSED",
    "ConfiguratorTests.test_action_branching_nonautocommit_without_config_info": "PASSED",
    "ConfiguratorTests.test_action_nonautocommit_with_introspectables_introspection_off": "PASSED",
    "ConfiguratorTests.test_autocommit_no_conflicts": "PASSED",
    "ConfiguratorTests.test_begin": "PASSED",
    "ConfiguratorTests.test_begin_with_request": "PASSED",
    "ConfiguratorTests.test_commit_conflict_resolved_with_include": "PASSED",
    "ConfiguratorTests.test_commit_conflict_resolved_with_two_includes_and_local": "PASSED",
    "ConfiguratorTests.test_commit_conflict_simple": "PASSED",
    "ConfiguratorTests.test_commit_conflict_with_two_includes": "PASSED",
    "ConfiguratorTests.test_conflict_set_forbidden_view": "PASSED",
    "ConfiguratorTests.test_conflict_set_notfound_view": "PASSED",
    "ConfiguratorTests.test_ctor_alternate_renderers": "PASSED",
    "ConfiguratorTests.test_ctor_authentication_policy": "PASSED",
    "ConfiguratorTests.test_ctor_authorization_policy_only": "PASSED",
    "ConfiguratorTests.test_ctor_default_permission": "PASSED",
    "ConfiguratorTests.test_ctor_default_renderers": "PASSED",
    "ConfiguratorTests.test_ctor_default_view_mapper": "PASSED",
    "ConfiguratorTests.test_ctor_exceptionresponse_view_None": "PASSED",
    "ConfiguratorTests.test_ctor_exceptionresponse_view_custom": "PASSED",
    "ConfiguratorTests.test_ctor_httpexception_view_default": "PASSED",
    "ConfiguratorTests.test_ctor_no_root_factory": "PASSED",
    "ConfiguratorTests.test_ctor_noreg_custom_settings": "PASSED",
    "ConfiguratorTests.test_ctor_noreg_debug_logger_non_None": "PASSED",
    "ConfiguratorTests.test_ctor_session_factory": "PASSED",
    "ConfiguratorTests.test_ctor_with_introspection": "PASSED",
    "ConfiguratorTests.test_ctor_with_package_registry": "PASSED",
    "ConfiguratorTests.test_ctor_with_root_factory": "PASSED",
    "ConfiguratorTests.test_end": "PASSED",
    "ConfiguratorTests.test_hook_zca": "PASSED",
    "ConfiguratorTests.test_include_with_dotted_name": "PASSED",
    "ConfiguratorTests.test_include_with_missing_source_file": "PASSED",
    "ConfiguratorTests.test_include_with_module_defaults_to_includeme": "PASSED",
    "ConfiguratorTests.test_include_with_module_defaults_to_includeme_missing": "PASSED",
    "ConfiguratorTests.test_include_with_nested_route_prefix": "PASSED",
    "ConfiguratorTests.test_include_with_python_callable": "PASSED",
    "ConfiguratorTests.test_include_with_route_prefix": "PASSED",
    "ConfiguratorTests.test_introspector_decorator": "PASSED",
    "ConfiguratorTests.test_make_wsgi_app": "PASSED",
    "ConfiguratorTests.test_maybe_dotted_notstring_success": "PASSED",
    "ConfiguratorTests.test_maybe_dotted_string_fail": "PASSED",
    "ConfiguratorTests.test_maybe_dotted_string_success": "PASSED",
    "ConfiguratorTests.test_scan_integration": "PASSED",
    "ConfiguratorTests.test_scan_integration_dottedname_package": "PASSED",
    "ConfiguratorTests.test_scan_integration_with_extra_kw": "PASSED",
    "ConfiguratorTests.test_scan_integration_with_ignore": "PASSED",
    "ConfiguratorTests.test_scan_integration_with_onerror": "PASSED",
    "ConfiguratorTests.test_setup_registry_alternate_renderers": "PASSED",
    "ConfiguratorTests.test_setup_registry_authentication_policy": "PASSED",
    "ConfiguratorTests.test_setup_registry_authentication_policy_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_authorization_policy_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_authorization_policy_only": "PASSED",
    "ConfiguratorTests.test_setup_registry_calls_fix_registry": "PASSED",
    "ConfiguratorTests.test_setup_registry_custom_settings": "PASSED",
    "ConfiguratorTests.test_setup_registry_debug_logger_name": "PASSED",
    "ConfiguratorTests.test_setup_registry_debug_logger_non_None": "PASSED",
    "ConfiguratorTests.test_setup_registry_default_permission": "PASSED",
    "ConfiguratorTests.test_setup_registry_dottedname_root_factory": "PASSED",
    "ConfiguratorTests.test_setup_registry_explicit_notfound_trumps_iexceptionresponse": "PASSED",
    "ConfiguratorTests.test_setup_registry_includes": "PASSED",
    "ConfiguratorTests.test_setup_registry_includes_spaces": "PASSED",
    "ConfiguratorTests.test_setup_registry_locale_negotiator": "PASSED",
    "ConfiguratorTests.test_setup_registry_locale_negotiator_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_no_default_root_factory": "PASSED",
    "ConfiguratorTests.test_setup_registry_registers_default_exceptionresponse_view": "PASSED",
    "ConfiguratorTests.test_setup_registry_registers_default_webob_iresponse_adapter": "PASSED",
    "ConfiguratorTests.test_setup_registry_renderer_globals_factory": "PASSED",
    "ConfiguratorTests.test_setup_registry_renderer_globals_factory_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_request_factory": "PASSED",
    "ConfiguratorTests.test_setup_registry_request_factory_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_tweens": "PASSED",
    "ConfiguratorTests.test_unhook_zca": "PASSED",
    "ConfiguratorTests.test_with_package": "PASSED",
    "ConfiguratorTests.test_with_package_module": "PASSED",
    "ConfiguratorTests.test_with_package_package": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_for_": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_attr": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_context": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_exception": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_for": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_permission": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_permission_alias": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_renderer": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_renderer_alias": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_conflict_route_with_view": "PASSED",
    "TestConfigurator_add_directive.test_directive_persists_across_configurator_creations": "PASSED",
    "TestConfigurator_add_directive.test_extend_action_method_successful": "PASSED",
    "TestConfigurator_add_directive.test_extend_same_name_doesnt_conflict": "PASSED",
    "TestActionState.test_action_simple": "PASSED",
    "TestActionState.test_action_with_includepath": "PASSED",
    "TestActionState.test_action_with_includepath_and_info": "PASSED",
    "TestActionState.test_action_with_info": "PASSED",
    "TestActionState.test_action_with_introspectables": "PASSED",
    "TestActionState.test_action_with_order": "PASSED",
    "TestActionState.test_execute_actions_dicts": "PASSED",
    "TestActionState.test_execute_actions_error": "PASSED",
    "TestActionState.test_execute_actions_tuples": "PASSED",
    "TestActionState.test_execute_actions_with_introspectable_no_callable": "PASSED",
    "TestActionState.test_execute_actions_with_introspectables": "PASSED",
    "TestActionState.test_it": "PASSED",
    "TestActionState.test_processSpec": "PASSED",
    "Test_resolveConflicts.test_it_conflict": "PASSED",
    "Test_resolveConflicts.test_it_success_dicts": "PASSED",
    "Test_resolveConflicts.test_it_success_tuples": "PASSED",
    "Test_resolveConflicts.test_it_with_actions_grouped_by_order": "PASSED",
    "TestGlobalRegistriesIntegration.test_global_registries": "PASSED",
    "TestGlobalRegistriesIntegration.test_global_registries_empty": "PASSED",
    "TestRenderingConfiguratorMixin.test_add_renderer": "PASSED",
    "TestRenderingConfiguratorMixin.test_add_renderer_dottedname_factory": "PASSED",
    "TestRenderingConfiguratorMixin.test_set_renderer_globals_factory": "PASSED",
    "TestRenderingConfiguratorMixin.test_set_renderer_globals_factory_dottedname": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_defaults": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_discriminator": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_no_path_no_pattern": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_no_pattern_with_path": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_no_view_with_view_attr": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_no_view_with_view_context": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_no_view_with_view_permission": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_no_view_with_view_renderer": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_accept": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_custom_predicates": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_factory": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_factory_dottedname": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_header": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_path_info": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_path_info_highorder": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_path_info_regex": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_pregenerator": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_request_method": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_request_param": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_route_prefix": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_static": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_xhr": "PASSED",
    "RoutesConfiguratorMixinTests.test_get_routes_mapper_already_registered": "PASSED",
    "RoutesConfiguratorMixinTests.test_get_routes_mapper_not_yet_registered": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authentication_policy_no_authz_policy": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authentication_policy_no_authz_policy_autocommit": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authentication_policy_with_authz_policy": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authentication_policy_with_authz_policy_autocommit": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authorization_policy_no_authn_policy": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authorization_policy_no_authn_policy_autocommit": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authorization_policy_with_authn_policy": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authorization_policy_with_authn_policy_autocommit": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_default_permission": "PASSED",
    "TestSettingsConfiguratorMixin.test__set_settings_as_None": "PASSED",
    "TestSettingsConfiguratorMixin.test__set_settings_as_dictwithvalues": "PASSED",
    "TestSettingsConfiguratorMixin.test_add_settings_settings_already_registered": "PASSED",
    "TestSettingsConfiguratorMixin.test_add_settings_settings_not_yet_registered": "PASSED",
    "TestSettingsConfiguratorMixin.test_get_settings_nosettings": "PASSED",
    "TestSettingsConfiguratorMixin.test_get_settings_withsettings": "PASSED",
    "TestSettings.test_debug_all": "PASSED",
    "TestSettings.test_debug_authorization": "PASSED",
    "TestSettings.test_debug_notfound": "PASSED",
    "TestSettings.test_debug_routematch": "PASSED",
    "TestSettings.test_debug_templates": "PASSED",
    "TestSettings.test_default_locale_name": "PASSED",
    "TestSettings.test_getattr_fail": "PASSED",
    "TestSettings.test_getattr_raises_attribute_error": "PASSED",
    "TestSettings.test_getattr_success": "PASSED",
    "TestSettings.test_noargs": "PASSED",
    "TestSettings.test_originals_kept": "PASSED",
    "TestSettings.test_prevent_http_cache": "PASSED",
    "TestSettings.test_reload_all": "PASSED",
    "TestSettings.test_reload_assets": "PASSED",
    "TestSettings.test_reload_resources": "PASSED",
    "TestSettings.test_reload_templates": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_renderer": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_renderer_explicitrenderer": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_renderer_twice": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_subscriber_defaults": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_subscriber_dottedname": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_subscriber_multiple": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_subscriber_single": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_template": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_resources": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_securitypolicy": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_dottedname": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_instance": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_name_ingress": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_name_main": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_over_ingress": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_over_ingress_iterable": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_under_main": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_under_main_iterable": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_unsuitable": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_conflict": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_names_distinct": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_names_with_over_nonstringoriter": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_names_with_under_nonstringoriter": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_names_with_underover": "PASSED",
    "TestTweens.test___call___explicit": "PASSED",
    "TestTweens.test___call___implicit": "PASSED",
    "TestTweens.test_add_explicit": "PASSED",
    "TestTweens.test_add_implicit": "PASSED",
    "TestTweens.test_implicit_ordering_1": "PASSED",
    "TestTweens.test_implicit_ordering_2": "PASSED",
    "TestTweens.test_implicit_ordering_3": "PASSED",
    "TestTweens.test_implicit_ordering_4": "PASSED",
    "TestTweens.test_implicit_ordering_5": "PASSED",
    "TestTweens.test_implicit_ordering_conflict_direct": "PASSED",
    "TestTweens.test_implicit_ordering_conflict_indirect": "PASSED",
    "TestTweens.test_implicit_ordering_missing_over_and_under_partials": "PASSED",
    "TestTweens.test_implicit_ordering_missing_over_partial": "PASSED",
    "TestTweens.test_implicit_ordering_missing_over_partial_with_fallback": "PASSED",
    "TestTweens.test_implicit_ordering_missing_under_partial": "PASSED",
    "TestTweens.test_implicit_ordering_missing_under_partial_with_fallback": "PASSED",
    "TestTweens.test_implicit_ordering_with_missing_fallbacks": "PASSED",
    "TestTweens.test_implicit_ordering_with_multiple_matching_fallbacks": "PASSED",
    "TestTweens.test_implicit_ordering_with_partial_fallbacks": "PASSED",
    "TestCyclicDependencyError.test___str__": "PASSED",
    "Test__make_predicates.test_custom_predicates_can_affect_traversal": "PASSED",
    "Test__make_predicates.test_different_custom_predicates_with_same_hash": "PASSED",
    "Test__make_predicates.test_match_param_from_dict": "PASSED",
    "Test__make_predicates.test_match_param_from_dict_fails": "PASSED",
    "Test__make_predicates.test_match_param_from_string": "PASSED",
    "Test__make_predicates.test_match_param_from_string_fails": "PASSED",
    "Test__make_predicates.test_match_param_hashable": "PASSED",
    "Test__make_predicates.test_ordering_importance_and_number": "PASSED",
    "Test__make_predicates.test_ordering_importance_of_predicates": "PASSED",
    "Test__make_predicates.test_ordering_number_of_predicates": "PASSED",
    "Test__make_predicates.test_ordering_xhr_and_request_method_trump_only_containment": "PASSED",
    "Test__make_predicates.test_predicate_text_is_correct": "PASSED",
    "Test__make_predicates.test_request_method_ordering_hashes_same": "PASSED",
    "Test__make_predicates.test_request_method_sequence": "PASSED",
    "Test__make_predicates.test_traverse_has_remainder_already": "PASSED",
    "Test__make_predicates.test_traverse_matches": "PASSED",
    "Test__make_predicates.test_traverse_matches_with_highorder_chars": "PASSED",
    "TestActionInfo.test___str__": "PASSED",
    "TestActionInfo.test_class_conforms": "PASSED",
    "TestActionInfo.test_ctor": "PASSED",
    "TestActionInfo.test_instance_conforms": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_with_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_append_slash": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_with_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_static_view_absolute": "PASSED",
    "TestViewsConfigurationMixin.test_add_static_view_here_no_utility_registered": "PASSED",
    "TestViewsConfigurationMixin.test_add_static_view_package_relative": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_instance": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_instance_requestonly": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_instancemethod": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_instancemethod_requestonly": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_oldstyle_class": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_oldstyle_class_requestonly": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_context_as_class": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_context_as_dottedname": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_context_as_iface": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_context_trumps_for": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_custom_more_preds_first_bests_fewer_preds_last": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_custom_predicate_bests_standard_predicate": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_default_phash_overrides_default_phash": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_default_phash_overrides_no_phash": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_default_phash_overrides_default_phash": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_default_phash_overrides_no_phash": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_multiview_replaces_existing_securedview": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_multiview_replaces_existing_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_multiview_replaces_multiview": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_mulview_replaces_existing_view_with___accept__": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_same_phash_overrides_existing_single_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_with_accept_multiview_replaces_existing_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exception_register_secured_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_for__as_dottedname": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_for_as_class": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_for_as_iface": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview___discriminator__": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview_call_ordering": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview_context_superclass_then_subclass": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview_exception_superclass_then_subclass": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview_replaces_existing_securedview": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview_replaces_existing_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview_replaces_existing_view_with___accept__": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview_replaces_multiview": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_register_secured_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_same_phash_overrides_existing_single_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_same_predicates": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_view_callable_None_no_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_view_callable_None_with_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_view_callable_dottedname": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_accept_match": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_accept_multiview_replaces_existing_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_accept_nomatch": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_containment_dottedname": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_containment_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_containment_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_custom_predicates_match": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_custom_predicates_nomatch": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_decorator": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_default_permission_no_explicit_permission": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_default_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_function_callable": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_function_callable_requestonly": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_badregex": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_noval_match": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_noval_nomatch": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_val_match": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_val_missing": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_val_nomatch": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_http_cache": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_mapper": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_name_unicode": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_no_default_permission_no_explicit_permission": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_nonexistant_route_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_path_info_badregex": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_path_info_match": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_path_info_nomatch": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_permission": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_get_implies_head": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_sequence_conflict": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_sequence_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_sequence_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_param_noval_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_param_noval_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_param_val_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_param_val_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_type": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_type_and_route_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_type_as_iface": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_type_as_noniface": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_route_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_route_name_exception": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_config_and_view_defaults_conflicts": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_config_and_view_defaults_doesnt_conflict": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_defaults": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_defaults_viewname_is_dottedname_kwarg": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_defaults_viewname_is_dottedname_nonkwarg": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_xhr_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_xhr_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_wrapped_view_is_decorated": "PASSED",
    "TestViewsConfigurationMixin.test_add_views_with_accept_multiview_replaces_existing": "PASSED",
    "TestViewsConfigurationMixin.test_derive_view_dottedname": "PASSED",
    "TestViewsConfigurationMixin.test_derive_view_function": "PASSED",
    "TestViewsConfigurationMixin.test_derive_view_with_default_renderer_no_explicit_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_derive_view_with_default_renderer_with_explicit_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_set_view_mapper": "PASSED",
    "TestViewsConfigurationMixin.test_set_view_mapper_dottedname": "PASSED",
    "Test_requestonly.test_function_defaultargs_firstname_not_request": "PASSED",
    "Test_requestonly.test_function_defaultargs_firstname_request": "PASSED",
    "Test_requestonly.test_function_noargs": "PASSED",
    "Test_requestonly.test_function_onearg_named_request": "PASSED",
    "Test_requestonly.test_function_onearg_named_somethingelse": "PASSED",
    "Test_requestonly.test_function_toomanyargs": "PASSED",
    "Test_requestonly.test_function_with_attr_false": "PASSED",
    "Test_requestonly.test_function_with_attr_true": "PASSED",
    "Test_requestonly.test_instance_defaultargs_firstname_not_request": "PASSED",
    "Test_requestonly.test_instance_defaultargs_firstname_request": "PASSED",
    "Test_requestonly.test_instance_defaultargs_onearg_named_request": "PASSED",
    "Test_requestonly.test_instance_defaultargs_onearg_named_somethingelse": "PASSED",
    "Test_requestonly.test_instance_nocall": "PASSED",
    "Test_requestonly.test_instance_toomanyargs": "PASSED",
    "Test_requestonly.test_method_onearg_named_request": "PASSED",
    "Test_requestonly.test_newstyle_class_init_defaultargs_firstname_not_request": "PASSED",
    "Test_requestonly.test_newstyle_class_init_defaultargs_firstname_request": "PASSED",
    "Test_requestonly.test_newstyle_class_init_firstname_request_with_secondname": "PASSED",
    "Test_requestonly.test_newstyle_class_init_noargs": "PASSED",
    "Test_requestonly.test_newstyle_class_init_onearg_named_somethingelse": "PASSED",
    "Test_requestonly.test_oldstyle_class_init_defaultargs_firstname_not_request": "PASSED",
    "Test_requestonly.test_oldstyle_class_init_defaultargs_firstname_request": "PASSED",
    "Test_requestonly.test_oldstyle_class_init_noargs": "PASSED",
    "Test_requestonly.test_oldstyle_class_init_onearg_named_request": "PASSED",
    "Test_requestonly.test_oldstyle_class_init_onearg_named_somethingelse": "PASSED",
    "Test_requestonly.test_oldstyle_class_init_toomanyargs": "PASSED",
    "Test_requestonly.test_oldstyle_class_no_init": "PASSED",
    "Test_requestonly.test_requestonly_newstyle_class_init_onearg_named_request": "PASSED",
    "Test_requestonly.test_requestonly_newstyle_class_init_toomanyargs": "PASSED",
    "Test_requestonly.test_requestonly_newstyle_class_no_init": "PASSED",
    "Test_isexception.test_is_IException": "PASSED",
    "Test_isexception.test_is_IException_subinterface": "PASSED",
    "Test_isexception.test_is_exception_class": "PASSED",
    "Test_isexception.test_is_exception_instance": "PASSED",
    "TestMultiView.test___call__": "PASSED",
    "TestMultiView.test___call__intermediate_not_found": "PASSED",
    "TestMultiView.test___call__raise_not_found_isnt_interpreted_as_pred_mismatch": "PASSED",
    "TestMultiView.test___call_permissive_has_call_permissive": "PASSED",
    "TestMultiView.test___call_permissive_has_no_call_permissive": "PASSED",
    "TestMultiView.test__call__not_found": "PASSED",
    "TestMultiView.test__call__with_accept_match": "PASSED",
    "TestMultiView.test__call__with_accept_miss": "PASSED",
    "TestMultiView.test__call_permissive__not_found": "PASSED",
    "TestMultiView.test_add": "PASSED",
    "TestMultiView.test_add_with_phash": "PASSED",
    "TestMultiView.test_add_with_phash_override_accept": "PASSED",
    "TestMultiView.test_class_implements_ISecuredView": "PASSED",
    "TestMultiView.test_get_views": "PASSED",
    "TestMultiView.test_get_views_best_match_returns_None": "PASSED",
    "TestMultiView.test_get_views_no_self_accepts": "PASSED",
    "TestMultiView.test_get_views_request_has_no_accept": "PASSED",
    "TestMultiView.test_instance_implements_ISecuredView": "PASSED",
    "TestMultiView.test_match_not_found": "PASSED",
    "TestMultiView.test_match_predicate_fails": "PASSED",
    "TestMultiView.test_match_predicate_succeeds": "PASSED",
    "TestMultiView.test_multiple_with_functions_as_views": "PASSED",
    "TestMultiView.test_permitted": "PASSED",
    "TestMultiView.test_permitted_no_match_with__permitted__": "PASSED",
    "TestMultiView.test_permitted_no_views": "PASSED",
    "TestViewDeriver.test_as_function_context_and_request": "PASSED",
    "TestViewDeriver.test_as_function_requestonly": "PASSED",
    "TestViewDeriver.test_as_instance_context_and_request": "PASSED",
    "TestViewDeriver.test_as_instance_context_and_request_attr_and_renderer": "PASSED",
    "TestViewDeriver.test_as_instance_requestonly": "PASSED",
    "TestViewDeriver.test_as_instance_requestonly_attr_and_renderer": "PASSED",
    "TestViewDeriver.test_as_newstyle_class_context_and_request": "PASSED",
    "TestViewDeriver.test_as_newstyle_class_context_and_request_attr_and_renderer": "PASSED",
    "TestViewDeriver.test_as_newstyle_class_requestonly": "PASSED",
    "TestViewDeriver.test_as_newstyle_class_requestonly_attr_and_renderer": "PASSED",
    "TestViewDeriver.test_as_oldstyle_class_context_and_request": "PASSED",
    "TestViewDeriver.test_as_oldstyle_class_requestonly": "PASSED",
    "TestViewDeriver.test_as_oldstyle_cls_context_request_attr_and_renderer": "PASSED",
    "TestViewDeriver.test_as_oldstyle_cls_requestonly_attr_and_renderer": "PASSED",
    "TestViewDeriver.test_attr_wrapped_view_branching_default_phash": "PASSED",
    "TestViewDeriver.test_attr_wrapped_view_branching_nondefault_phash": "PASSED",
    "TestViewDeriver.test_class_with_attr": "PASSED",
    "TestViewDeriver.test_class_without_attr": "PASSED",
    "TestViewDeriver.test_debug_auth_permission_authpol_denied": "PASSED",
    "TestViewDeriver.test_debug_auth_permission_authpol_denied2": "PASSED",
    "TestViewDeriver.test_debug_auth_permission_authpol_overridden": "PASSED",
    "TestViewDeriver.test_debug_auth_permission_authpol_permitted": "PASSED",
    "TestViewDeriver.test_debug_auth_permission_authpol_permitted_no_request": "PASSED",
    "TestViewDeriver.test_http_cached_prevent_http_cache_in_settings": "PASSED",
    "TestViewDeriver.test_http_cached_view_bad_tuple": "PASSED",
    "TestViewDeriver.test_http_cached_view_integer": "PASSED",
    "TestViewDeriver.test_http_cached_view_prevent_auto_set": "PASSED",
    "TestViewDeriver.test_http_cached_view_timedelta": "PASSED",
    "TestViewDeriver.test_http_cached_view_tuple": "PASSED",
    "TestViewDeriver.test_http_cached_view_tuple_seconds_None": "PASSED",
    "TestViewDeriver.test_predicate_mismatch_view_has_name": "PASSED",
    "TestViewDeriver.test_predicate_mismatch_view_has_no_name": "PASSED",
    "TestViewDeriver.test_requestonly_function": "PASSED",
    "TestViewDeriver.test_requestonly_function_with_renderer": "PASSED",
    "TestViewDeriver.test_requestonly_function_with_renderer_request_has_view": "PASSED",
    "TestViewDeriver.test_requestonly_function_with_renderer_request_override": "PASSED",
    "TestViewDeriver.test_secured_view_authn_policy_no_authz_policy": "PASSED",
    "TestViewDeriver.test_secured_view_authz_policy_no_authn_policy": "PASSED",
    "TestViewDeriver.test_secured_view_raises_forbidden_no_name": "PASSED",
    "TestViewDeriver.test_secured_view_raises_forbidden_with_name": "PASSED",
    "TestViewDeriver.test_with_debug_authorization_authn_policy_no_authz_policy": "PASSED",
    "TestViewDeriver.test_with_debug_authorization_authz_policy_no_authn_policy": "PASSED",
    "TestViewDeriver.test_with_debug_authorization_no_authpol": "PASSED",
    "TestViewDeriver.test_with_debug_authorization_no_permission": "PASSED",
    "TestViewDeriver.test_with_predicates_all": "PASSED",
    "TestViewDeriver.test_with_predicates_checker": "PASSED",
    "TestViewDeriver.test_with_predicates_notall": "PASSED",
    "TestViewDeriver.test_with_view_mapper_config_specified": "PASSED",
    "TestViewDeriver.test_with_view_mapper_default_mapper_specified": "PASSED",
    "TestViewDeriver.test_with_view_mapper_view_specified": "PASSED",
    "TestViewDeriver.test_with_wrapper_viewname": "PASSED",
    "TestViewDeriver.test_with_wrapper_viewname_notfound": "PASSED",
    "TestDefaultViewMapper.test__view_as_function_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_function_context_and_request": "PASSED",
    "TestDefaultViewMapper.test_view_as_function_requestonly": "PASSED",
    "TestDefaultViewMapper.test_view_as_function_requestonly_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_instance_context_and_request": "PASSED",
    "TestDefaultViewMapper.test_view_as_instance_context_and_request_and_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_instance_requestonly": "PASSED",
    "TestDefaultViewMapper.test_view_as_instance_requestonly_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_newstyle_class_context_and_request": "PASSED",
    "TestDefaultViewMapper.test_view_as_newstyle_class_context_and_request_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_newstyle_class_requestonly": "PASSED",
    "TestDefaultViewMapper.test_view_as_newstyle_class_requestonly_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_oldstyle_class_context_and_request": "PASSED",
    "TestDefaultViewMapper.test_view_as_oldstyle_class_context_and_request_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_oldstyle_class_requestonly": "PASSED",
    "TestDefaultViewMapper.test_view_as_oldstyle_class_requestonly_with_attr": "PASSED",
    "Test_preserve_view_attrs.test_it_different": "PASSED",
    "Test_preserve_view_attrs.test_it_different_with_existing_original_view": "PASSED",
    "Test_preserve_view_attrs.test_it_same": "PASSED",
    "Test_preserve_view_attrs.test_it_view_is_None": "PASSED",
    "TestStaticURLInfo.test_add_already_exists": "PASSED",
    "TestStaticURLInfo.test_add_url_noendslash": "PASSED",
    "TestStaticURLInfo.test_add_url_withendslash": "PASSED",
    "TestStaticURLInfo.test_add_viewname": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_for_": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_permission": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_renderer": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_route_prefix": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_view_attr": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_view_context": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_view_for": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_view_permission": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_view_renderer": "PASSED",
    "TestStaticURLInfo.test_generate_missing": "PASSED",
    "TestStaticURLInfo.test_generate_quoting": "PASSED",
    "TestStaticURLInfo.test_generate_registration_miss": "PASSED",
    "TestStaticURLInfo.test_generate_registration_no_registry_on_request": "PASSED",
    "TestStaticURLInfo.test_generate_route_url": "PASSED",
    "TestStaticURLInfo.test_generate_slash_in_name1": "PASSED",
    "TestStaticURLInfo.test_generate_slash_in_name2": "PASSED",
    "TestStaticURLInfo.test_generate_url_quoted_remote": "PASSED",
    "TestStaticURLInfo.test_generate_url_unquoted_local": "PASSED",
    "TestStaticURLInfo.test_verifyClass": "PASSED",
    "TestStaticURLInfo.test_verifyObject": "PASSED",
    "Test_view_description.test_with_text": "PASSED",
    "Test_logging_file_config.test_it": "PASSED",
    "TestPCreateCommand.test_known_scaffold_absolute_path": "PASSED",
    "TestPCreateCommand.test_known_scaffold_multiple_rendered": "PASSED",
    "TestPCreateCommand.test_known_scaffold_single_rendered": "PASSED",
    "TestPCreateCommand.test_no_project_name": "PASSED",
    "TestPCreateCommand.test_run_no_scaffold_name": "PASSED",
    "TestPCreateCommand.test_run_show_scaffolds_exist": "PASSED",
    "TestPCreateCommand.test_run_show_scaffolds_none_exist": "PASSED",
    "TestPCreateCommand.test_unknown_scaffold_name": "PASSED",
    "Test_main.test_it": "PASSED",
    "TestPRequestCommand.test_command_has_bad_config_header": "PASSED",
    "TestPRequestCommand.test_command_not_enough_args": "PASSED",
    "TestPRequestCommand.test_command_response_has_no_charset": "PASSED",
    "TestPRoutesCommand.test__get_mapper": "PASSED",
    "TestPRoutesCommand.test_no_mapper": "PASSED",
    "TestPRoutesCommand.test_no_routes": "PASSED",
    "TestPRoutesCommand.test_route_with_no_slash_prefix": "PASSED",
    "TestPRoutesCommand.test_single_route_no_route_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_no_views_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_one_view_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_one_view_registered_with_factory": "PASSED",
    "TestPServeCommand.test_parse_vars_bad": "PASSED",
    "TestPServeCommand.test_parse_vars_good": "PASSED",
    "TestPServeCommand.test_record_pid_not_verbose": "PASSED",
    "TestPServeCommand.test_record_pid_verbose": "PASSED",
    "TestPServeCommand.test_remove_pid_current_pid_is_not_pid_in_file": "PASSED",
    "TestPServeCommand.test_remove_pid_current_pid_is_not_written_pid": "PASSED",
    "TestPServeCommand.test_remove_pid_file_not_verbose": "PASSED",
    "TestPServeCommand.test_remove_pid_file_stale_pid_write_exception": "PASSED",
    "TestPServeCommand.test_remove_pid_file_unlink_exception": "PASSED",
    "TestPServeCommand.test_remove_pid_file_verbose": "PASSED",
    "TestPServeCommand.test_remove_pid_no_pid_file": "PASSED",
    "TestPServeCommand.test_remove_pid_not_a_number": "PASSED",
    "TestPServeCommand.test_run_no_args": "PASSED",
    "TestPServeCommand.test_run_stop_daemon_bad_pid_file": "PASSED",
    "TestPServeCommand.test_run_stop_daemon_invalid_pid_in_file": "PASSED",
    "TestPServeCommand.test_run_stop_daemon_no_such_pid_file": "PASSED",
    "Test_read_pidfile.test_read_pidfile": "PASSED",
    "Test_read_pidfile.test_read_pidfile_no_pid_file": "PASSED",
    "Test_read_pidfile.test_read_pidfile_not_a_number": "PASSED",
    "TestLazyWriter.test_flush": "PASSED",
    "TestLazyWriter.test_open": "PASSED",
    "TestLazyWriter.test_write": "PASSED",
    "TestLazyWriter.test_writeline": "PASSED",
    "Test__methodwrapper.test___call__fail": "PASSED",
    "Test__methodwrapper.test___call__succeed": "PASSED",
    "TestPShellCommand.test_command_custom_section_override": "PASSED",
    "TestPShellCommand.test_command_loads_bpython_shell": "PASSED",
    "TestPShellCommand.test_command_loads_check_variable_override_order": "PASSED",
    "TestPShellCommand.test_command_loads_custom_items": "PASSED",
    "TestPShellCommand.test_command_loads_default_shell": "PASSED",
    "TestPShellCommand.test_command_loads_default_shell_with_unknown_shell": "PASSED",
    "TestPShellCommand.test_command_loads_ipython_v0_10": "PASSED",
    "TestPShellCommand.test_command_loads_ipython_v0_11": "PASSED",
    "TestPShellCommand.test_command_loads_setup_from_options": "PASSED",
    "TestPShellCommand.test_command_setup": "PASSED",
    "TestPShellCommand.test_make_bpython_shell": "PASSED",
    "TestPShellCommand.test_make_default_shell": "PASSED",
    "TestPShellCommand.test_make_ipython_v0_10_shell": "PASSED",
    "TestPShellCommand.test_make_ipython_v0_11_shell": "PASSED",
    "TestPShellCommand.test_shell_ipython_ordering": "PASSED",
    "TestPShellCommand.test_shell_ordering": "PASSED",
    "TestPTweensCommand.test__get_tweens": "PASSED",
    "TestPTweensCommand.test_command_implicit_and_explicit_tweens": "PASSED",
    "TestPTweensCommand.test_command_implicit_tweens_only": "PASSED",
    "TestPTweensCommand.test_command_no_tweens": "PASSED",
    "TestPViewsCommand.test__find_multi_routes_all_match": "PASSED",
    "TestPViewsCommand.test__find_multi_routes_none_match": "PASSED",
    "TestPViewsCommand.test__find_multi_routes_some_match": "PASSED",
    "TestPViewsCommand.test__find_view_no_match": "PASSED",
    "TestPViewsCommand.test__find_view_no_match_multiview_registered": "PASSED",
    "TestPViewsCommand.test__find_view_route_multiview": "PASSED",
    "TestPViewsCommand.test__find_view_route_multiview_no_view_registered": "PASSED",
    "TestPViewsCommand.test__find_view_route_no_multiview": "PASSED",
    "TestPViewsCommand.test__find_view_traversal": "PASSED",
    "TestPViewsCommand.test__find_view_traversal_multiview": "PASSED",
    "TestPViewsCommand.test_views_command_multi_view_nested": "PASSED",
    "TestPViewsCommand.test_views_command_multiview": "PASSED",
    "TestPViewsCommand.test_views_command_multiview_with_permission": "PASSED",
    "TestPViewsCommand.test_views_command_multiview_with_predicates": "PASSED",
    "TestPViewsCommand.test_views_command_not_found": "PASSED",
    "TestPViewsCommand.test_views_command_not_found_url_starts_without_slash": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_route": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_route_with_route_predicates": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_traversal": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_traversal_with_permission": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_traversal_with_predicates": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_dotted_names": "FAILED",
    "AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_introspectables": "FAILED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_dotted_names": "FAILED",
    "TestOverrideProvider.test_get_resource_filename_no_overrides": "FAILED",
    "TestOverrideProvider.test_get_resource_filename_override_returns_None": "FAILED",
    "TestPackageOverrides.test_get_filename": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_abspath": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec_existing_translation_dirs": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs_multiple_calls": "FAILED",
    "ConfiguratorTests.test_ctor_no_registry": "FAILED",
    "ConfiguratorTests.test_ctor_noreg_debug_logger_None_default": "FAILED",
    "ConfiguratorTests.test_scan_integration_conflict": "FAILED",
    "ConfiguratorTests.test_setup_registry_debug_logger_None_default": "FAILED",
    "TestConfigurator_add_directive.test_extend_with_dotted_name": "FAILED",
    "TestConfigurator_add_directive.test_extend_with_python_callable": "FAILED",
    "TestViewsConfigurationMixin.test_add_static_view_package_here_relative": "FAILED",
    "TestViewsConfigurationMixin.test_add_view_with_template_renderer": "FAILED",
    "TestViewsConfigurationMixin.test_add_view_with_template_renderer_no_callable": "FAILED",
    "TestViewDeriver.test_function_returns_non_adaptable": "FAILED",
    "TestViewDeriver.test_function_returns_non_adaptable_dict": "FAILED",
    "TestViewDeriver.test_instance_returns_non_adaptable": "FAILED",
    "TestViewDeriver.test_requestonly_default_method_returns_non_adaptable": "FAILED",
    "TestViewDeriver.test_requestonly_nondefault_method_returns_non_adaptable": "FAILED",
    "Test_view_description.test_without_text": "FAILED",
    "TestPRequestCommand.test_command_display_headers": "FAILED",
    "TestPRequestCommand.test_command_has_content_type_header_var": "FAILED",
    "TestPRequestCommand.test_command_has_good_header_var": "FAILED",
    "TestPRequestCommand.test_command_has_multiple_header_vars": "FAILED",
    "TestPRequestCommand.test_command_method_get": "FAILED",
    "TestPRequestCommand.test_command_method_post": "FAILED",
    "TestPRequestCommand.test_command_path_doesnt_start_with_slash": "FAILED",
    "TestPRequestCommand.test_command_two_args": "FAILED",
    "TestPRequestCommand.test_command_with_query_string": "FAILED",
    "TestPViewsCommand.test_views_command_single_view_function_traversal": "FAILED"
}
diff --git a/pyramid/urldispatch.py b/pyramid/urldispatch.py
index cccff14ba..4182ea665 100644
--- a/pyramid/urldispatch.py
+++ b/pyramid/urldispatch.py
@@ -148,7 +148,9 @@ def _compile_route(route):
         name = pat.pop() # unicode
         name = name[1:-1]
         if ':' in name:
-            name, reg = name.split(':')
+            # reg may contain colons as well,
+            # so we must strictly split name into two parts
+            name, reg = name.split(':', 1)
         else:
             reg = '[^/]+'
         gen.append('%%(%s)s' % native_(name)) # native
 

{"pyramid/urldispatch.py": "import re\nfrom zope.interface import implementer\n\nfrom pyramid.interfaces import (\n    IRoutesMapper,\n    IRoute,\n    )\n\nfrom pyramid.compat import (\n    PY3,\n    native_,\n    text_,\n    text_type,\n    string_types,\n    binary_type,\n    is_nonstr_iter,\n    decode_path_info,\n    )\n\nfrom pyramid.exceptions import URLDecodeError\n\nfrom pyramid.traversal import (\n    quote_path_segment,\n    split_path_info,\n    )\n\n_marker = object()\n\n@implementer(IRoute)\nclass Route(object):\n    def __init__(self, name, pattern, factory=None, predicates=(),\n                 pregenerator=None):\n        self.pattern = pattern\n        self.path = pattern # indefinite b/w compat, not in interface\n        self.match, self.generate = _compile_route(pattern)\n        self.name = name\n        self.factory = factory\n        self.predicates = predicates\n        self.pregenerator = pregenerator\n\n@implementer(IRoutesMapper)\nclass RoutesMapper(object):\n    def __init__(self):\n        self.routelist = []\n        self.routes = {}\n\n    def has_routes(self):\n        return bool(self.routelist)\n\n    def get_routes(self):\n        return self.routelist\n\n    def get_route(self, name):\n        return self.routes.get(name)\n\n    def connect(self, name, pattern, factory=None, predicates=(),\n                pregenerator=None, static=False):\n        if name in self.routes:\n            oldroute = self.routes[name]\n            if oldroute in self.routelist:\n                self.routelist.remove(oldroute)\n        route = Route(name, pattern, factory, predicates, pregenerator)\n        if not static:\n            self.routelist.append(route)\n        self.routes[name] = route\n        return route\n\n    def generate(self, name, kw):\n        return self.routes[name].generate(kw)\n\n    def __call__(self, request):\n        environ = request.environ\n        try:\n            # empty if mounted under a path in mod_wsgi, for example\n            path = decode_path_info(environ['PATH_INFO'] or '/')\n        except KeyError:\n            path = '/'\n        except UnicodeDecodeError as e:\n            raise URLDecodeError(e.encoding, e.object, e.start, e.end, e.reason)\n\n        for route in self.routelist:\n            match = route.match(path)\n            if match is not None:\n                preds = route.predicates\n                info = {'match':match, 'route':route}\n                if preds and not all((p(info, request) for p in preds)):\n                    continue\n                return info\n\n        return {'route':None, 'match':None}\n\n# stolen from bobo and modified\nold_route_re = re.compile(r'(\\:[_a-zA-Z]\\w*)')\nstar_at_end = re.compile(r'\\*\\w*$')\n\n# The tortuous nature of the regex named ``route_re`` below is due to the\n# fact that we need to support at least one level of \"inner\" squigglies\n# inside the expr of a {name:expr} pattern.  This regex used to be just\n# (\\{[a-zA-Z][^\\}]*\\}) but that choked when supplied with e.g. {foo:\\d{4}}.\nroute_re = re.compile(r'(\\{[_a-zA-Z][^{}]*(?:\\{[^{}]*\\}[^{}]*)*\\})')\n\ndef update_pattern(matchobj):\n    name = matchobj.group(0)\n    return '{%s}' % name[1:]\n\ndef _compile_route(route):\n    # This function really wants to consume Unicode patterns natively, but if\n    # someone passes us a bytestring, we allow it by converting it to Unicode\n    # using the ASCII decoding.  We decode it using ASCII because we don't\n    # want to accept bytestrings with high-order characters in them here as\n    # we have no idea what the encoding represents.\n    if route.__class__ is not text_type:\n        try:\n            route = text_(route, 'ascii')\n        except UnicodeDecodeError:\n            raise ValueError(\n                'The pattern value passed to add_route must be '\n                'either a Unicode string or a plain string without '\n                'any non-ASCII characters (you provided %r).' % route)\n\n    if old_route_re.search(route) and not route_re.search(route):\n        route = old_route_re.sub(update_pattern, route)\n\n    if not route.startswith('/'):\n        route = '/' + route\n\n    remainder = None\n    if star_at_end.search(route):\n        route, remainder = route.rsplit('*', 1)\n\n    pat = route_re.split(route)\n\n    # every element in \"pat\" will be Unicode (regardless of whether the\n    # route_re regex pattern is itself Unicode or str)\n    pat.reverse()\n    rpat = []\n    gen = []\n    prefix = pat.pop() # invar: always at least one element (route='/'+route)\n\n    # We want to generate URL-encoded URLs, so we url-quote the prefix, being\n    # careful not to quote any embedded slashes.  We have to replace '%' with\n    # '%%' afterwards, as the strings that go into \"gen\" are used as string\n    # replacement targets.\n    gen.append(quote_path_segment(prefix, safe='/').replace('%', '%%')) # native\n    rpat.append(re.escape(prefix)) # unicode\n\n    while pat:\n        name = pat.pop() # unicode\n        name = name[1:-1]\n        if ':' in name:\n            name, reg = name.split(':')\n        else:\n            reg = '[^/]+'\n        gen.append('%%(%s)s' % native_(name)) # native\n        name = '(?P<%s>%s)' % (name, reg) # unicode\n        rpat.append(name)\n        s = pat.pop() # unicode\n        if s:\n            rpat.append(re.escape(s)) # unicode\n            # We want to generate URL-encoded URLs, so we url-quote this\n            # literal in the pattern, being careful not to quote the embedded\n            # slashes.  We have to replace '%' with '%%' afterwards, as the\n            # strings that go into \"gen\" are used as string replacement\n            # targets.  What is appended to gen is a native string.\n            gen.append(quote_path_segment(s, safe='/').replace('%', '%%'))\n\n    if remainder:\n        rpat.append('(?P<%s>.*?)' % remainder) # unicode\n        gen.append('%%(%s)s' % native_(remainder)) # native\n\n    pattern = ''.join(rpat) + '$' # unicode\n\n    match = re.compile(pattern).match\n    def matcher(path):\n        # This function really wants to consume Unicode patterns natively,\n        # but if someone passes us a bytestring, we allow it by converting it\n        # to Unicode using the ASCII decoding.  We decode it using ASCII\n        # because we don't want to accept bytestrings with high-order\n        # characters in them here as we have no idea what the encoding\n        # represents.\n        if path.__class__ is not text_type:\n            path = text_(path, 'ascii')\n        m = match(path)\n        if m is None:\n            return None\n        d = {}\n        for k, v in m.groupdict().items():\n            # k and v will be Unicode 2.6.4 and lower doesnt accept unicode\n            # kwargs as **kw, so we explicitly cast the keys to native\n            # strings in case someone wants to pass the result as **kw\n            nk = native_(k, 'ascii')\n            if k == remainder:\n                d[nk] = split_path_info(v)\n            else:\n                d[nk] = v\n        return d\n\n    gen = ''.join(gen)\n    def generator(dict):\n        newdict = {}\n        for k, v in dict.items():\n            if PY3: # pragma: no cover\n                if v.__class__ is binary_type:\n                    # url_quote below needs a native string, not bytes on Py3\n                    v = v.decode('utf-8')\n            else:\n                if v.__class__ is text_type:\n                    # url_quote below needs bytes, not unicode on Py2\n                    v = v.encode('utf-8')\n\n            if k == remainder:\n                # a stararg argument\n                if is_nonstr_iter(v):\n                    v = '/'.join([quote_path_segment(x) for x in v]) # native\n                else:\n                    if v.__class__ not in string_types:\n                        v = str(v)\n                    v = quote_path_segment(v, safe='/')\n            else:\n                if v.__class__ not in string_types:\n                    v = str(v)\n                # v may be bytes (py2) or native string (py3)\n                v = quote_path_segment(v)\n\n            # at this point, the value will be a native string\n            newdict[k] = v\n\n        result = gen % newdict # native string result\n        return result\n\n    return matcher, generator\n"}
A user will ask you to solve a task. You should first draft your thinking process (inner monologue). Then, generate the solution.

Your response format must follow the template below:
<think>
Your thoughts or/and draft, like working through an exercise on scratch paper. Be as casual and as long as you want until you are confident to generate a correct solution.
</think>
<solution>
Final solution presented to the user.
</solution>
system
We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[ISSUE]
**Title:** Route compilation fails when regex contains colons

**Description:**
When defining a route with a regular expression that includes colons, the route compilation process fails. This issue arises because the pattern is split incorrectly, resulting in a `ValueError` due to too many values to unpack.

**Example Code:**
```python
from pyramid.urldispatch import _compile_route

pattern = 'foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}'
matcher, generator = _compile_route(pattern)
```

**Expected Behavior:**
The route should compile successfully, correctly parsing the route parameters, including the regular expression that contains colons.

**Actual Behavior:**
A `ValueError` is raised:
```
ValueError: too many values to unpack (expected 2)
```
[/ISSUE]
--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.

--- BEGIN FILE ---
```
### pyramid/urldispatch.py
import re
from zope.interface import implementer

from pyramid.interfaces import (
    IRoutesMapper,
    IRoute,
    )

from pyramid.compat import (
    PY3,
    native_,
    text_,
    text_type,
    string_types,
    binary_type,
    is_nonstr_iter,
    decode_path_info,
    )

from pyramid.exceptions import URLDecodeError

from pyramid.traversal import (
    quote_path_segment,
    split_path_info,
    )

_marker = object()

@implementer(IRoute)
class Route(object):
    def __init__(self, name, pattern, factory=None, predicates=(),
                 pregenerator=None):
        self.pattern = pattern
        self.path = pattern # indefinite b/w compat, not in interface
        self.match, self.generate = _compile_route(pattern)
        self.name = name
        self.factory = factory
        self.predicates = predicates
        self.pregenerator = pregenerator

@implementer(IRoutesMapper)
class RoutesMapper(object):
    def __init__(self):
        self.routelist = []
        self.routes = {}

    def has_routes(self):
        return bool(self.routelist)

    def get_routes(self):
        return self.routelist

    def get_route(self, name):
        return self.routes.get(name)

    def connect(self, name, pattern, factory=None, predicates=(),
                pregenerator=None, static=False):
        if name in self.routes:
            oldroute = self.routes[name]
            if oldroute in self.routelist:
                self.routelist.remove(oldroute)
        route = Route(name, pattern, factory, predicates, pregenerator)
        if not static:
            self.routelist.append(route)
        self.routes[name] = route
        return route

    def generate(self, name, kw):
        return self.routes[name].generate(kw)

    def __call__(self, request):
        environ = request.environ
        try:
            # empty if mounted under a path in mod_wsgi, for example
            path = decode_path_info(environ['PATH_INFO'] or '/')
        except KeyError:
            path = '/'
        except UnicodeDecodeError as e:
            raise URLDecodeError(e.encoding, e.object, e.start, e.end, e.reason)

        for route in self.routelist:
            match = route.match(path)
            if match is not None:
                preds = route.predicates
                info = {'match':match, 'route':route}
                if preds and not all((p(info, request) for p in preds)):
                    continue
                return info

        return {'route':None, 'match':None}

# stolen from bobo and modified
old_route_re = re.compile(r'(\:[_a-zA-Z]\w*)')
star_at_end = re.compile(r'\*\w*$')

# The tortuous nature of the regex named ``route_re`` below is due to the
# fact that we need to support at least one level of "inner" squigglies
# inside the expr of a {name:expr} pattern.  This regex used to be just
# (\{[a-zA-Z][^\}]*\}) but that choked when supplied with e.g. {foo:\d{4}}.
route_re = re.compile(r'(\{[_a-zA-Z][^{}]*(?:\{[^{}]*\}[^{}]*)*\})')

def update_pattern(matchobj):
    name = matchobj.group(0)
    return '{%s}' % name[1:]

def _compile_route(route):
    # This function really wants to consume Unicode patterns natively, but if
    # someone passes us a bytestring, we allow it by converting it to Unicode
    # using the ASCII decoding.  We decode it using ASCII because we don't
    # want to accept bytestrings with high-order characters in them here as
    # we have no idea what the encoding represents.
    if route.__class__ is not text_type:
        try:
            route = text_(route, 'ascii')
        except UnicodeDecodeError:
            raise ValueError(
                'The pattern value passed to add_route must be '
                'either a Unicode string or a plain string without '
                'any non-ASCII characters (you provided %r).' % route)

    if old_route_re.search(route) and not route_re.search(route):
        route = old_route_re.sub(update_pattern, route)

    if not route.startswith('/'):
        route = '/' + route

    remainder = None
    if star_at_end.search(route):
        route, remainder = route.rsplit('*', 1)

    pat = route_re.split(route)

    # every element in "pat" will be Unicode (regardless of whether the
    # route_re regex pattern is itself Unicode or str)
    pat.reverse()
    rpat = []
    gen = []
    prefix = pat.pop() # invar: always at least one element (route='/'+route)

    # We want to generate URL-encoded URLs, so we url-quote the prefix, being
    # careful not to quote any embedded slashes.  We have to replace '%' with
    # '%%' afterwards, as the strings that go into "gen" are used as string
    # replacement targets.
    gen.append(quote_path_segment(prefix, safe='/').replace('%', '%%')) # native
    rpat.append(re.escape(prefix)) # unicode

    while pat:
        name = pat.pop() # unicode
        name = name[1:-1]
        if ':' in name:
            name, reg = name.split(':')
        else:
            reg = '[^/]+'
        gen.append('%%(%s)s' % native_(name)) # native
        name = '(?P<%s>%s)' % (name, reg) # unicode
        rpat.append(name)
        s = pat.pop() # unicode
        if s:
            rpat.append(re.escape(s)) # unicode
            # We want to generate URL-encoded URLs, so we url-quote this
            # literal in the pattern, being careful not to quote the embedded
            # slashes.  We have to replace '%' with '%%' afterwards, as the
            # strings that go into "gen" are used as string replacement
            # targets.  What is appended to gen is a native string.
            gen.append(quote_path_segment(s, safe='/').replace('%', '%%'))

    if remainder:
        rpat.append('(?P<%s>.*?)' % remainder) # unicode
        gen.append('%%(%s)s' % native_(remainder)) # native

    pattern = ''.join(rpat) + '$' # unicode

    match = re.compile(pattern).match
    def matcher(path):
        # This function really wants to consume Unicode patterns natively,
        # but if someone passes us a bytestring, we allow it by converting it
        # to Unicode using the ASCII decoding.  We decode it using ASCII
        # because we don't want to accept bytestrings with high-order
        # characters in them here as we have no idea what the encoding
        # represents.
        if path.__class__ is not text_type:
            path = text_(path, 'ascii')
        m = match(path)
        if m is None:
            return None
        d = {}
        for k, v in m.groupdict().items():
            # k and v will be Unicode 2.6.4 and lower doesnt accept unicode
            # kwargs as **kw, so we explicitly cast the keys to native
            # strings in case someone wants to pass the result as **kw
            nk = native_(k, 'ascii')
            if k == remainder:
                d[nk] = split_path_info(v)
            else:
                d[nk] = v
        return d

    gen = ''.join(gen)
    def generator(dict):
        newdict = {}
        for k, v in dict.items():
            if PY3: # pragma: no cover
                if v.__class__ is binary_type:
                    # url_quote below needs a native string, not bytes on Py3
                    v = v.decode('utf-8')
            else:
                if v.__class__ is text_type:
                    # url_quote below needs bytes, not unicode on Py2
                    v = v.encode('utf-8')

            if k == remainder:
                # a stararg argument
                if is_nonstr_iter(v):
                    v = '/'.join([quote_path_segment(x) for x in v]) # native
                else:
                    if v.__class__ not in string_types:
                        v = str(v)
                    v = quote_path_segment(v, safe='/')
            else:
                if v.__class__ not in string_types:
                    v = str(v)
                # v may be bytes (py2) or native string (py3)
                v = quote_path_segment(v)

            # at this point, the value will be a native string
            newdict[k] = v

        result = gen % newdict # native string result
        return result

    return matcher, generator

```
--- END FILE ---

Please first localize the bug based on the issue statement, and then generate *SEARCH/REPLACE* edits to fix the issue.

Every *SEARCH/REPLACE* edit must use this format:
1. The file path
2. The start of search block: <<<<<<< SEARCH
3. A contiguous chunk of lines to search for in the existing source code
4. The dividing line: =======
5. The lines to replace into the source code
6. The end of the replace block: >>>>>>> REPLACE

Here is an example:

```python
### mathweb/flask/app.py
<<<<<<< SEARCH
from flask import Flask
=======
import math
from flask import Flask
>>>>>>> REPLACE
```
</solution>

Please note that the *SEARCH/REPLACE* edit REQUIRES PROPER INDENTATION. If you would like to add the line '        print(x)', you must fully write that out, with all those spaces before the code!
Wrap each *SEARCH/REPLACE* edit in a code block as shown in the example above. If you have multiple *SEARCH/REPLACE* edits, use a separate code block for each one.
user