Skip to content

Commit

Permalink
- Make test suite pass on PyPy (Chameleon doesn't work).
Browse files Browse the repository at this point in the history
  • Loading branch information
mcdonc committed Nov 19, 2010
1 parent 47c9f88 commit 29b7aab
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 35 deletions.
2 changes: 2 additions & 0 deletions CHANGES.txt
Expand Up @@ -22,6 +22,8 @@ Features
- Make test suite pass on Jython (requires PasteScript trunk, presumably to
be 1.7.4).

- Make test suite pass on PyPy (Chameleon doesn't work).

Bug Fixes
---------

Expand Down
19 changes: 15 additions & 4 deletions pyramid/configuration.py
Expand Up @@ -45,8 +45,15 @@
from pyramid.interfaces import IView
from pyramid.interfaces import IViewClassifier

from pyramid import chameleon_text
from pyramid import chameleon_zpt
try:
from pyramid import chameleon_text
except TypeError: # pragma: no cover
chameleon_text = None # pypy
try:
from pyramid import chameleon_zpt
except TypeError: # pragma: no cover
chameleon_zpt = None # pypy

from pyramid import renderers
from pyramid.authorization import ACLAuthorizationPolicy
from pyramid.compat import all
Expand Down Expand Up @@ -83,14 +90,18 @@
DEFAULT_PHASH = md5().hexdigest()

DEFAULT_RENDERERS = (
('.pt', chameleon_zpt.renderer_factory),
('.txt', chameleon_text.renderer_factory),
('.mak', mako_renderer_factory),
('.mako', mako_renderer_factory),
('json', renderers.json_renderer_factory),
('string', renderers.string_renderer_factory),
)

if chameleon_text:
DEFAULT_RENDERERS += (('.pt', chameleon_zpt.renderer_factory),)
if chameleon_zpt:
DEFAULT_RENDERERS += (('.txt', chameleon_text.renderer_factory),)


class Configurator(object):
"""
A Configurator is used to configure a :app:`Pyramid`
Expand Down
7 changes: 7 additions & 0 deletions pyramid/testing.py
Expand Up @@ -741,9 +741,16 @@ def wrapper(*args, **kw):
for platform in platforms:
if skip_on.os_name.startswith(platform):
return
if platform == 'pypy' and skip_on.pypy: # pragma: no cover
return
return func(*args, **kw)
wrapper.__name__ = func.__name__
wrapper.__doc__ = func.__doc__
return wrapper
return decorator
skip_on.os_name = os.name # for testing
try: # pragma: no cover
import __pypy__
skip_on.pypy = True
except ImportError:
skip_on.pypy = False
30 changes: 16 additions & 14 deletions pyramid/tests/test_chameleon_text.py
Expand Up @@ -51,19 +51,21 @@ def _makeOne(self, *arg, **kw):
klass = self._getTargetClass()
return klass(*arg, **kw)

@skip_on('pypy')
def test_instance_implements_ITemplate(self):
from zope.interface.verify import verifyObject
from pyramid.interfaces import ITemplateRenderer
path = self._getTemplatePath('minimal.txt')
lookup = DummyLookup()
verifyObject(ITemplateRenderer, self._makeOne(path, lookup))

@skip_on('pypy')
def test_class_implements_ITemplate(self):
from zope.interface.verify import verifyClass
from pyramid.interfaces import ITemplateRenderer
verifyClass(ITemplateRenderer, self._getTargetClass())

@skip_on('java')
@skip_on('java', 'pypy')
def test_template_reified(self):
minimal = self._getTemplatePath('minimal.txt')
lookup = DummyLookup()
Expand All @@ -72,7 +74,7 @@ def test_template_reified(self):
template = instance.template
self.assertEqual(template, instance.__dict__['template'])

@skip_on('java')
@skip_on('java', 'pypy')
def test_template_with_ichameleon_translate(self):
minimal = self._getTemplatePath('minimal.txt')
lookup = DummyLookup()
Expand All @@ -81,7 +83,7 @@ def test_template_with_ichameleon_translate(self):
template = instance.template
self.assertEqual(template.translate, lookup.translate)

@skip_on('java')
@skip_on('java', 'pypy')
def test_template_with_debug_templates(self):
minimal = self._getTemplatePath('minimal.txt')
lookup = DummyLookup()
Expand All @@ -91,7 +93,7 @@ def test_template_with_debug_templates(self):
template = instance.template
self.assertEqual(template.debug, True)

@skip_on('java')
@skip_on('java', 'pypy')
def test_template_with_reload_templates(self):
minimal = self._getTemplatePath('minimal.txt')
lookup = DummyLookup()
Expand All @@ -101,7 +103,7 @@ def test_template_with_reload_templates(self):
template = instance.template
self.assertEqual(template.auto_reload, True)

@skip_on('java')
@skip_on('java', 'pypy')
def test_template_without_reload_templates(self):
minimal = self._getTemplatePath('minimal.txt')
lookup = DummyLookup()
Expand All @@ -111,7 +113,7 @@ def test_template_without_reload_templates(self):
template = instance.template
self.assertEqual(template.auto_reload, False)

@skip_on('java')
@skip_on('java', 'pypy')
def test_call(self):
minimal = self._getTemplatePath('minimal.txt')
lookup = DummyLookup()
Expand All @@ -120,14 +122,14 @@ def test_call(self):
self.failUnless(isinstance(result, str))
self.assertEqual(result, 'Hello.\n')

@skip_on('java')
@skip_on('java', 'pypy')
def test_call_with_nondict_value(self):
minimal = self._getTemplatePath('minimal.txt')
lookup = DummyLookup()
instance = self._makeOne(minimal, lookup)
self.assertRaises(ValueError, instance, None, {})

@skip_on('java')
@skip_on('java', 'pypy')
def test_call_nonminimal(self):
nonminimal = self._getTemplatePath('nonminimal.txt')
lookup = DummyLookup()
Expand All @@ -136,7 +138,7 @@ def test_call_nonminimal(self):
self.failUnless(isinstance(result, str))
self.assertEqual(result, 'Hello, Chris!\n')

@skip_on('java')
@skip_on('java', 'pypy')
def test_implementation(self):
minimal = self._getTemplatePath('minimal.txt')
lookup = DummyLookup()
Expand All @@ -150,7 +152,7 @@ def _callFUT(self, name, **kw):
from pyramid.chameleon_text import render_template
return render_template(name, **kw)

@skip_on('java')
@skip_on('java', 'pypy')
def test_it(self):
minimal = self._getTemplatePath('minimal.txt')
result = self._callFUT(minimal)
Expand All @@ -162,7 +164,7 @@ def _callFUT(self, name, **kw):
from pyramid.chameleon_text import render_template_to_response
return render_template_to_response(name, **kw)

@skip_on('java')
@skip_on('java', 'pypy')
def test_minimal(self):
minimal = self._getTemplatePath('minimal.txt')
result = self._callFUT(minimal)
Expand All @@ -172,7 +174,7 @@ def test_minimal(self):
self.assertEqual(result.status, '200 OK')
self.assertEqual(len(result.headerlist), 2)

@skip_on('java')
@skip_on('java', 'pypy')
def test_iresponsefactory_override(self):
from webob import Response
class Response2(Response):
Expand All @@ -188,7 +190,7 @@ def _callFUT(self, name):
from pyramid.chameleon_text import get_renderer
return get_renderer(name)

@skip_on('java')
@skip_on('java', 'pypy')
def test_it(self):
from pyramid.interfaces import IRendererFactory
class Dummy:
Expand All @@ -206,7 +208,7 @@ def _callFUT(self, name):
from pyramid.chameleon_text import get_template
return get_template(name)

@skip_on('java')
@skip_on('java', 'pypy')
def test_it(self):
from pyramid.interfaces import IRendererFactory
class Dummy:
Expand Down
30 changes: 16 additions & 14 deletions pyramid/tests/test_chameleon_zpt.py
Expand Up @@ -44,19 +44,21 @@ def _makeOne(self, *arg, **kw):
klass = self._getTargetClass()
return klass(*arg, **kw)

@skip_on('pypy')
def test_instance_implements_ITemplate(self):
from zope.interface.verify import verifyObject
from pyramid.interfaces import ITemplateRenderer
path = self._getTemplatePath('minimal.pt')
lookup = DummyLookup()
verifyObject(ITemplateRenderer, self._makeOne(path, lookup))

@skip_on('pypy')
def test_class_implements_ITemplate(self):
from zope.interface.verify import verifyClass
from pyramid.interfaces import ITemplateRenderer
verifyClass(ITemplateRenderer, self._getTargetClass())

@skip_on('java')
@skip_on('java', 'pypy')
def test_call(self):
minimal = self._getTemplatePath('minimal.pt')
lookup = DummyLookup()
Expand All @@ -66,7 +68,7 @@ def test_call(self):
self.assertEqual(result,
'<div xmlns="http://www.w3.org/1999/xhtml">\n</div>')

@skip_on('java')
@skip_on('java', 'pypy')
def test_template_reified(self):
minimal = self._getTemplatePath('minimal.pt')
lookup = DummyLookup()
Expand All @@ -75,7 +77,7 @@ def test_template_reified(self):
template = instance.template
self.assertEqual(template, instance.__dict__['template'])

@skip_on('java')
@skip_on('java', 'pypy')
def test_template_with_ichameleon_translate(self):
minimal = self._getTemplatePath('minimal.pt')
lookup = DummyLookup()
Expand All @@ -84,7 +86,7 @@ def test_template_with_ichameleon_translate(self):
template = instance.template
self.assertEqual(template.translate, lookup.translate)

@skip_on('java')
@skip_on('java', 'pypy')
def test_template_with_debug_templates(self):
minimal = self._getTemplatePath('minimal.pt')
lookup = DummyLookup()
Expand All @@ -94,7 +96,7 @@ def test_template_with_debug_templates(self):
template = instance.template
self.assertEqual(template.debug, True)

@skip_on('java')
@skip_on('java', 'pypy')
def test_template_without_debug_templates(self):
minimal = self._getTemplatePath('minimal.pt')
lookup = DummyLookup()
Expand All @@ -104,7 +106,7 @@ def test_template_without_debug_templates(self):
template = instance.template
self.assertEqual(template.debug, False)

@skip_on('java')
@skip_on('java', 'pypy')
def test_template_with_reload_templates(self):
minimal = self._getTemplatePath('minimal.pt')
lookup = DummyLookup()
Expand All @@ -114,7 +116,7 @@ def test_template_with_reload_templates(self):
template = instance.template
self.assertEqual(template.auto_reload, True)

@skip_on('java')
@skip_on('java', 'pypy')
def test_template_without_reload_templates(self):
minimal = self._getTemplatePath('minimal.pt')
lookup = DummyLookup()
Expand All @@ -124,14 +126,14 @@ def test_template_without_reload_templates(self):
template = instance.template
self.assertEqual(template.auto_reload, False)

@skip_on('java')
@skip_on('java', 'pypy')
def test_call_with_nondict_value(self):
minimal = self._getTemplatePath('minimal.pt')
lookup = DummyLookup()
instance = self._makeOne(minimal, lookup)
self.assertRaises(ValueError, instance, None, {})

@skip_on('java')
@skip_on('java', 'pypy')
def test_implementation(self):
minimal = self._getTemplatePath('minimal.pt')
lookup = DummyLookup()
Expand All @@ -147,7 +149,7 @@ def _callFUT(self, name, **kw):
from pyramid.chameleon_zpt import render_template
return render_template(name, **kw)

@skip_on('java')
@skip_on('java', 'pypy')
def test_it(self):
minimal = self._getTemplatePath('minimal.pt')
result = self._callFUT(minimal)
Expand All @@ -160,7 +162,7 @@ def _callFUT(self, name, **kw):
from pyramid.chameleon_zpt import render_template_to_response
return render_template_to_response(name, **kw)

@skip_on('java')
@skip_on('java', 'pypy')
def test_it(self):
minimal = self._getTemplatePath('minimal.pt')
result = self._callFUT(minimal)
Expand All @@ -171,7 +173,7 @@ def test_it(self):
self.assertEqual(result.status, '200 OK')
self.assertEqual(len(result.headerlist), 2)

@skip_on('java')
@skip_on('java', 'pypy')
def test_iresponsefactory_override(self):
from webob import Response
class Response2(Response):
Expand All @@ -187,7 +189,7 @@ def _callFUT(self, name):
from pyramid.chameleon_zpt import get_renderer
return get_renderer(name)

@skip_on('java')
@skip_on('java', 'pypy')
def test_it(self):
from pyramid.interfaces import IRendererFactory
class Dummy:
Expand All @@ -205,7 +207,7 @@ def _callFUT(self, name):
from pyramid.chameleon_zpt import get_template
return get_template(name)

@skip_on('java')
@skip_on('java', 'pypy')
def test_it(self):
from pyramid.interfaces import IRendererFactory
class Dummy:
Expand Down
10 changes: 8 additions & 2 deletions pyramid/tests/test_configuration.py
Expand Up @@ -2,6 +2,11 @@

from pyramid import testing

try:
import __pypy__
except:
__pypy__ = None

class ConfiguratorTests(unittest.TestCase):
def _makeOne(self, *arg, **kw):
from pyramid.configuration import Configurator
Expand Down Expand Up @@ -90,8 +95,9 @@ def test_ctor_no_registry(self):
self.assertEqual(config.package, this_pkg)
self.failUnless(config.registry.getUtility(IRendererFactory, 'json'))
self.failUnless(config.registry.getUtility(IRendererFactory, 'string'))
self.failUnless(config.registry.getUtility(IRendererFactory, '.pt'))
self.failUnless(config.registry.getUtility(IRendererFactory, '.txt'))
if not __pypy__:
self.failUnless(config.registry.getUtility(IRendererFactory, '.pt'))
self.failUnless(config.registry.getUtility(IRendererFactory,'.txt'))
self.failUnless(config.registry.getUtility(IRendererFactory, '.mak'))
self.failUnless(config.registry.getUtility(IRendererFactory, '.mako'))

Expand Down
2 changes: 1 addition & 1 deletion pyramid/tests/test_renderers.py
Expand Up @@ -138,7 +138,7 @@ def test_spec_notyetregistered(self):
result = self._callFUT(info, factory)
self.failUnless(result is renderer)
path = os.path.abspath(__file__).split('$')[0] # jython
if path.endswith('.pyc'):
if path.endswith('.pyc'): # pragma: no cover
path = path[:-1]
self.failUnless(factory.path.startswith(path))
self.assertEqual(factory.kw, {})
Expand Down

0 comments on commit 29b7aab

Please sign in to comment.