File pyramid_simpleform-git-7004f60f.patch of Package python-pyramid_simpleform

Index: b/pyramid_simpleform/__init__.py
===================================================================
--- a/pyramid_simpleform/__init__.py
+++ b/pyramid_simpleform/__init__.py
@@ -2,7 +2,7 @@ from formencode import htmlfill
 from formencode import variabledecode
 from formencode import Invalid
 
-from pyramid.i18n import get_localizer
+from pyramid.i18n import get_localizer, TranslationStringFactory, TranslationString
 from pyramid.renderers import render
 
 class State(object):
@@ -35,11 +35,26 @@ class State(object):
     def get(self, k, default=None):
         return getattr(self, k, default)
 
+fe_tsf = TranslationStringFactory('FormEncode')
 
-class Form(object):
 
+def get_default_translate_fn(request):
+    pyramid_translate = get_localizer(request).translate
+
+    def translate(s):
+        if not isinstance(s, TranslationString):
+            s = fe_tsf(s)
+
+        return pyramid_translate(s)
+
+    return translate
+
+
+class Form(object):
 
     """
+    Legacy class for validating FormEncode schemas and validators.
+
     `request` : Pyramid request instance
 
     `schema`  : FormEncode Schema class or instance
@@ -91,16 +106,16 @@ class Form(object):
             self.state = self.default_state()
 
         if not hasattr(self.state, '_'):
-            self.state._ = get_localizer(self.request).translate
+            self.state._ = get_default_translate_fn(request)
 
         if defaults:
             self.data.update(defaults)
 
         if obj:
-            fields = self.schema.fields.keys() + self.validators.keys() 
+            fields = self.schema.fields.keys() + self.validators.keys()
             for f in fields:
                 if hasattr(obj, f):
-                    self.data[f] = getattr(obj, f) 
+                    self.data[f] = getattr(obj, f)
 
     def is_error(self, field):
         """
@@ -130,7 +145,7 @@ class Form(object):
             errors = [errors]
         return errors
 
-    def validate(self):
+    def validate(self, force_validate=False, params=None):
         """
         Runs validation and returns True/False whether form is 
         valid.
@@ -144,6 +159,10 @@ class Form(object):
 
         The errors and data values will be updated accordingly.
 
+        `force_validate`  : will run validation regardless of request method.
+
+        `params`          : dict or MultiDict of params. By default 
+        will use **request.POST** (if HTTP POST) or **request.params**.
         """
 
         assert self.schema or self.validators, \
@@ -152,14 +171,16 @@ class Form(object):
         if self.is_validated:
             return not(self.errors)
 
-        if self.method and self.method != self.request.method:
-            return False
-
-        if self.method == "POST":
-            params = self.request.POST
-        else:
-            params = self.request.params
-        
+        if not force_validate:
+            if self.method and self.method != self.request.method:
+                return False
+
+        if params is None:
+            if self.method == "POST":
+                params = self.request.POST
+            else:
+                params = self.request.params
+            
         if self.variable_decode:
             decoded = variabledecode.variable_decode(
                         params, self.dict_char, self.list_char)
Index: b/pyramid_simpleform/renderers.py
===================================================================
--- a/pyramid_simpleform/renderers.py
+++ b/pyramid_simpleform/renderers.py
@@ -2,114 +2,93 @@
 from webhelpers.html import tags
 from webhelpers.html.builder import HTML
 
-class FormRenderer(object):
-    """
-    A simple form helper. Uses WebHelpers to render individual
-    form widgets: see the WebHelpers library for more information
-    on individual widgets.
-    """
 
-    def __init__(self, form, csrf_field='_csrf'):
+class Renderer(object):
 
-        self.form = form
-        self.data = self.form.data
-        self.csrf_field = csrf_field
+    def __init__(self, data, errors, id_prefix=None):
+        self.data = data
+        self.errors = errors
+        self.id_prefix = id_prefix
 
-    def value(self, name, default=None):
-        return self.data.get(name, default)
+    def get_sequence(self, name, min_entries=0):
 
-    def begin(self, url=None, **attrs):
-        """
-        Creates the opening <form> tags.
+        data = self.value(name, [])
+        errors = self.errors.get(name, {})
 
-        By default URL will be current path.
-        """
-        url = url or self.form.request.path
-        multipart = attrs.pop('multipart', self.form.multipart)
-        return tags.form(url, multipart=multipart, **attrs)
-
-    def end(self):
-        """
-        Closes the form, i.e. outputs </form>.
-        """
-        return tags.end_form()
-    
-    def csrf(self, name=None):
-        """
-        Returns the CSRF hidden input. Creates new CSRF token
-        if none has been assigned yet.
+        return SequenceRenderer(name, data, errors, min_entries=min_entries)
 
-        The name of the hidden field is **_csrf** by default.
-        """
-        name = name or self.csrf_field
+    def get_mapping(self, name):
 
-        token = self.form.request.session.get_csrf_token()
-        if token is None:
-            token = self.form.request.session.new_csrf_token()
+        data = self.value(name, {})
+        errors = self.errors(name, [])
 
-        return self.hidden(name, value=token)
-
-    def csrf_token(self, name=None):
-        """
-        Convenience function. Returns CSRF hidden tag inside hidden DIV.
-        """
-        return HTML.tag("div", self.csrf(name), style="display:none;")
-
-    def hidden_tag(self, *names):
-        """
-        Convenience for printing all hidden fields in a form inside a 
-        hidden DIV. Will also render the CSRF hidden field.
-
-        :versionadded: 0.4
-        """
-        inputs = [self.hidden(name) for name in names]
-        inputs.append(self.csrf())
-        return HTML.tag("div", 
-                        tags.literal("".join(inputs)), 
-                        style="display:none;")
+        return MappingRenderer(name, data, errors)
 
     def text(self, name, value=None, id=None, **attrs):
         """
         Outputs text input.
         """
-        id = id or name
-        return tags.text(name, self.value(name, value), id, **attrs)
+        return tags.text(
+            name, 
+            self.value(name, value), 
+            self._get_id(id, name), 
+            **attrs
+        )
 
     def file(self, name, value=None, id=None, **attrs):
         """
         Outputs file input.
         """
-        id = id or name
-        return tags.file(name, self.value(name, value), id, **attrs)
+        return tags.file(
+            name, 
+            self.value(name, value), 
+            self._get_id(id, name), 
+            **attrs
+        )
 
     def hidden(self, name, value=None, id=None, **attrs):
         """
         Outputs hidden input.
         """
-        id = id or name
-        return tags.hidden(name, self.value(name, value), id, **attrs)
+        if value is None:
+            value = self.value(name)
+
+        return tags.hidden(
+            name, 
+            value, 
+            self._get_id(id, name), 
+            **attrs
+        )
 
     def radio(self, name, value=None, checked=False, label=None, **attrs):
         """
         Outputs radio input.
         """
-        checked = self.data.get(name) == value or checked
+        checked = self.value(name) == value or checked
         return tags.radio(name, value, checked, label, **attrs)
 
     def submit(self, name, value=None, id=None, **attrs):
         """
         Outputs submit button.
         """
-        id = id or name
-        return tags.submit(name, self.value(name, value), id, **attrs)
+        return tags.submit(
+            name, 
+            self.value(name, value), 
+            self._get_id(id, name), 
+            **attrs
+        )
 
     def select(self, name, options, selected_value=None, id=None, **attrs):
         """
         Outputs <select> element.
         """
-        id = id or name
-        return tags.select(name, self.value(name, selected_value), 
-                           options, id, **attrs)
+        return tags.select(
+            name, 
+            self.value(name, selected_value), 
+            options, 
+            self._get_id(id, name), 
+            **attrs
+        )
 
     def checkbox(self, name, value="1", checked=False, label=None, id=None, 
                  **attrs):
@@ -117,28 +96,41 @@ class FormRenderer(object):
         Outputs checkbox input.
         """
     
-        id = id or name
-        return tags.checkbox(name, value, self.value(name), label, id, **attrs)
+        return tags.checkbox(
+            name, 
+            value, 
+            self.value(name), 
+            label, 
+            self._get_id(id, name), 
+            **attrs
+        )
 
     def textarea(self, name, content="", id=None, **attrs):
         """
         Outputs <textarea> element.
         """
-        id = id or name
-        return tags.textarea(name, self.value(name, content), id, **attrs)
+
+        return tags.textarea(
+            name, 
+            self.value(name, content), 
+            self._get_id(id, name), 
+            **attrs
+        )
 
     def password(self, name, value=None, id=None, **attrs):
         """
         Outputs a password input.
         """
-        id = id or name
-        return tags.password(name, self.value(name, value), id, **attrs)
+        return tags.password(
+            name, self.value(name, value), 
+            self._get_id(id, name), 
+            **attrs)
 
     def is_error(self, name):
         """
         Shortcut for **self.form.is_error(name)**
         """
-        return self.form.is_error(name)
+        return name in self.errors
 
     def errors_for(self, name):
         """
@@ -150,7 +142,7 @@ class FormRenderer(object):
         """
         Shortcut for **self.form.all_errors()**
         """
-        return self.form.all_errors()
+        return self.errors.values()
 
     def errorlist(self, name=None, **attrs):
         """
@@ -186,7 +178,155 @@ class FormRenderer(object):
         `label` : if **None**, uses the capitalized field name.
         """
         if 'for_' not in attrs:
-            attrs['for_'] = name
+            for_ = name.lower()
+            if self.id_prefix:
+                for_ = self.id_prefix + for_
+            attrs['for_'] = for_
+            
         label = label or name.capitalize()
         return HTML.tag("label", label, **attrs)
 
+    def value(self, name, default=None):
+        return self.data.get(name, default)
+
+    def _get_id(self, id, name):
+        if id is None:
+            id = name
+            if self.id_prefix:
+                id = self.id_prefix + id
+        return id
+
+
+class FormRenderer(Renderer):
+    """
+    A simple form helper. Uses WebHelpers to render individual
+    form widgets: see the WebHelpers library for more information
+    on individual widgets.
+    """
+
+    def __init__(self, form, csrf_field='_csrf', id_prefix=None):
+
+        self.form = form
+        self.csrf_field = csrf_field
+
+        super(FormRenderer, self).__init__(
+            self.form.data, 
+            self.form.errors, 
+            id_prefix,
+        )
+
+
+    def begin(self, url=None, **attrs):
+        """
+        Creates the opening <form> tags.
+
+        By default URL will be current path.
+        """
+        url = url or self.form.request.path
+        multipart = attrs.pop('multipart', self.form.multipart)
+        return tags.form(url, multipart=multipart, **attrs)
+
+    def end(self):
+        """
+        Closes the form, i.e. outputs </form>.
+        """
+        return tags.end_form()
+    
+    def csrf(self, name=None):
+        """
+        Returns the CSRF hidden input. Creates new CSRF token
+        if none has been assigned yet.
+
+        The name of the hidden field is **_csrf** by default.
+        """
+        name = name or self.csrf_field
+
+        token = self.form.request.session.get_csrf_token()
+        if token is None:
+            token = self.form.request.session.new_csrf_token()
+
+        return self.hidden(name, value=token)
+
+    def csrf_token(self, name=None):
+        """
+        Convenience function. Returns CSRF hidden tag inside hidden DIV.
+        """
+        return HTML.tag("div", self.csrf(name), style="display:none;")
+
+    def hidden_tag(self, *names):
+        """
+        Convenience for printing all hidden fields in a form inside a 
+        hidden DIV. Will also render the CSRF hidden field.
+
+        :versionadded: 0.4
+        """
+        inputs = [self.hidden(name) for name in names]
+        inputs.append(self.csrf())
+        return HTML.tag("div", 
+                        tags.literal("".join(inputs)), 
+                        style="display:none;")
+
+
+class SequenceRenderer(Renderer):
+
+    def __init__(self, name, data, errors, id_prefix=None, min_entries=0):
+
+        self.name = name
+        
+        num_entries = min_entries - len(data)
+        if num_entries > 0:
+            for i in xrange(num_entries):
+                data.append({})
+
+        super(SequenceRenderer, self).__init__(
+            data,
+            errors,
+            id_prefix,
+        )
+
+    def begin(self):
+        return self.hidden('__start__', value='%s:sequence' % self.name, id='')
+
+    def end(self):
+        return self.hidden('__end__', value='%s:sequence' % self.name, id='')
+
+    def __iter__(self):
+        
+        # what kind of data we dealing with ?
+    
+        for i, d in enumerate(self.data):
+
+            if not isinstance(d, dict):
+                d = {self.name : d}
+
+            errors = [] # to be determined
+            id_prefix = "%d-" % i
+
+            yield MappingRenderer(self.name, d, errors, id_prefix=id_prefix) 
+
+
+class MappingRenderer(Renderer):
+
+    def __init__(self, name, data, errors, id_prefix=None):
+
+        self.name = name
+
+        super(MappingRenderer, self).__init__(
+            data,
+            errors,
+            id_prefix,
+        )
+
+    def begin(self, name=None):
+
+        name = name or self.name
+
+        return self.hidden('__start__', value='%s:mapping' % name, id='')
+
+    def end(self, name=None):
+
+        name = name or self.name
+
+        return self.hidden('__end__', value='%s:mapping' % name, id='')
+
+
Index: b/pyramid_simpleform/tests.py
===================================================================
--- a/pyramid_simpleform/tests.py
+++ b/pyramid_simpleform/tests.py
@@ -7,7 +7,7 @@ from pyramid import testing
 from pyramid.config import Configurator
 
 
-class SimpleSchema(Schema):
+class SimpleFESchema(Schema):
 
     name = validators.NotEmpty()
 
@@ -17,6 +17,7 @@ class SimpleObj(object):
     def __init__(self, name=None):
         self.name = name
 
+
 class TestState(unittest.TestCase):
 
     def test_state(self):
@@ -43,6 +44,12 @@ class TestState(unittest.TestCase):
         obj = State(foo="bar")
         self.assert_(obj['foo'] == 'bar')
 
+    def test_getitem_notfound(self):
+
+        from pyramid_simpleform import State
+        obj = State()
+        self.assertRaises(KeyError, obj.__getitem__, 'foo')
+
     def test_setitem(self):
 
         from pyramid_simpleform import State
@@ -59,16 +66,15 @@ class TestState(unittest.TestCase):
         self.assert_(obj.get('bar', 'foo') == 'foo')
 
 
-class TestForm(unittest.TestCase):
+class TestFormencodeForm(unittest.TestCase):
     
-
     def test_is_error(self):
         from pyramid_simpleform import Form
 
         request = testing.DummyRequest()
         request.method = "POST"
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
 
         self.assert_(not(form.validate()))
         self.assert_(form.is_validated)
@@ -81,7 +87,7 @@ class TestForm(unittest.TestCase):
         request = testing.DummyRequest()
         request.method = "POST"
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         form.errors = u"Name is missing"
         self.assert_(form.all_errors() == [u"Name is missing"])
 
@@ -92,7 +98,7 @@ class TestForm(unittest.TestCase):
         request = testing.DummyRequest()
         request.method = "POST"
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         form.errors = [u"Name is missing"]
         self.assert_(form.all_errors() == [u"Name is missing"])
 
@@ -103,12 +109,12 @@ class TestForm(unittest.TestCase):
         request = testing.DummyRequest()
         request.method = "POST"
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         form.errors = {"name" : [u"Name is missing"],
                        "value" : u"Value is missing"}
-        self.assert_(form.all_errors() == [
+        self.assert_(sorted(form.all_errors()) == sorted([
             u"Name is missing", 
-            u"Value is missing"])
+            u"Value is missing"]))
 
     def test_errors_for(self):
         from pyramid_simpleform import Form
@@ -116,7 +122,7 @@ class TestForm(unittest.TestCase):
         request = testing.DummyRequest()
         request.method = "POST"
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
 
         self.assert_(not(form.validate()))
         self.assert_(form.is_validated)
@@ -180,10 +186,21 @@ class TestForm(unittest.TestCase):
         request = testing.DummyRequest()
         request.method = "POST"
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
 
         self.assert_(not(form.validate()))
         self.assert_(form.is_validated)
+
+    def test_is_validated_with_specified_params(self):
+        from pyramid_simpleform import Form
+
+        request = testing.DummyRequest()
+        request.method = "POST"
+
+        form = Form(request, SimpleFESchema)
+        form.validate(params={'name' : 'foo'})
+        obj = form.bind(SimpleObj())
+        self.assert_(obj.name == 'foo')
  
     def test_bind(self):
         from pyramid_simpleform import Form
@@ -192,7 +209,7 @@ class TestForm(unittest.TestCase):
         request.method = "POST"
         request.POST['name'] = 'test'
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         form.validate()
         obj = form.bind(SimpleObj())
         self.assert_(obj.name == 'test')
@@ -208,10 +225,10 @@ class TestForm(unittest.TestCase):
         class SimpleObjWithPrivate(SimpleObj):
             _ignoreme = None
 
-        class SimpleSchemaWithPrivate(SimpleSchema):
+        class SimpleFESchemaWithPrivate(SimpleFESchema):
             _ignoreme = validators.String()
 
-        form = Form(request, SimpleSchemaWithPrivate)
+        form = Form(request, SimpleFESchemaWithPrivate)
         form.validate()
         obj = form.bind(SimpleObjWithPrivate())
         self.assert_(obj.name == 'test')
@@ -224,7 +241,7 @@ class TestForm(unittest.TestCase):
         request.method = "POST"
         request.POST['name'] = 'test'
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         self.assertRaises(RuntimeError, form.bind, SimpleObj())
  
     def test_bind_with_errors(self):
@@ -234,7 +251,7 @@ class TestForm(unittest.TestCase):
         request.method = "POST"
         request.POST['name'] = ''
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         self.assert_(not form.validate())
         self.assertRaises(RuntimeError, form.bind, SimpleObj())
 
@@ -245,7 +262,7 @@ class TestForm(unittest.TestCase):
         request.method = "POST"
         request.POST['name'] = 'test'
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         form.validate()
         obj = form.bind(SimpleObj(), exclude=["name"])
         self.assert_(obj.name == None)
@@ -257,7 +274,7 @@ class TestForm(unittest.TestCase):
         request.method = "POST"
         request.POST['name'] = 'test'
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         form.validate()
         obj = form.bind(SimpleObj(), include=['foo'])
         self.assert_(obj.name == None)
@@ -266,7 +283,7 @@ class TestForm(unittest.TestCase):
         from pyramid_simpleform import Form
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema, obj=SimpleObj(name='test'))
+        form = Form(request, SimpleFESchema, obj=SimpleObj(name='test'))
 
         self.assert_(form.data['name'] == 'test')
 
@@ -274,7 +291,7 @@ class TestForm(unittest.TestCase):
         from pyramid_simpleform import Form
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema, defaults={'name' : 'test'})
+        form = Form(request, SimpleFESchema, defaults={'name' : 'test'})
 
         self.assert_(form.data['name'] == 'test')
 
@@ -282,7 +299,7 @@ class TestForm(unittest.TestCase):
         from pyramid_simpleform import Form
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema, 
+        form = Form(request, SimpleFESchema, 
                     obj=SimpleObj(name='test1'),
                     defaults={'name' : 'test2'})
 
@@ -295,7 +312,7 @@ class TestForm(unittest.TestCase):
         request.POST['name'] = 'test'
         request.method = "POST"
         
-        form = Form(request, SimpleSchema,
+        form = Form(request, SimpleFESchema,
                     variable_decode=True)
 
         self.assert_(form.validate())
@@ -308,10 +325,34 @@ class TestForm(unittest.TestCase):
         request.method = "GET"
         request.GET['name'] = 'test'
 
-        form = Form(request, SimpleSchema, method="GET")
+        form = Form(request, SimpleFESchema, method="GET")
 
         self.assert_(form.validate())
         self.assert_(form.is_validated)
+
+    def test_validate_from_GET_if_on_POST(self):
+        from pyramid_simpleform import Form
+
+        request = testing.DummyRequest()
+        request.method = "GET"
+        request.GET['name'] = 'test'
+
+        form = Form(request, SimpleFESchema)
+
+        self.assert_(not form.validate())
+        self.assert_(not form.is_validated)
+
+
+    def test_force_validate(self):
+        from pyramid_simpleform import Form
+
+        request = testing.DummyRequest()
+        request.GET['name'] = 'test'
+
+        form = Form(request, SimpleFESchema)
+
+        self.assert_(form.validate(force_validate=True))
+        self.assert_(form.is_validated)
  
     def test_render_without_htmlfill(self):
 
@@ -327,14 +368,11 @@ class TestForm(unittest.TestCase):
         config = Configurator(settings=settings)
 
 
-        config.add_renderer('.html', 
-                            'pyramid.mako_templating.renderer_factory')
-
         request.registry = config.registry
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
 
-        result = form.render("test_form.html", htmlfill=False)
+        result = form.render("test_form.mako", htmlfill=False)
         self.assert_('<input type="text" name="name" size="20">' 
                      in result)
 
@@ -353,15 +391,12 @@ class TestForm(unittest.TestCase):
         config = Configurator(settings=settings)
 
 
-        config.add_renderer('.html', 
-                            'pyramid.mako_templating.renderer_factory')
-
         request.registry = config.registry
 
-        form = Form(request, SimpleSchema, defaults={'name' : 'foo'})
+        form = Form(request, SimpleFESchema, defaults={'name': 'foo'})
 
-        result = form.render("test_form.html", htmlfill=True)
-        self.assert_('<input type="text" name="name" size="20" value="foo">' 
+        result = form.render("test_form.mako", htmlfill=True)
+        self.assert_('<input type="text" name="name" size="20" value="foo">'
                      in result)
 
 
@@ -369,8 +404,8 @@ class TestForm(unittest.TestCase):
         from pyramid_simpleform import Form
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema, 
-                    defaults={"name" : "testing"})
+        form = Form(request, SimpleFESchema,
+                    defaults={"name": "testing"})
 
         html = """
         <form method="POST" action=".">
@@ -382,14 +417,14 @@ class TestForm(unittest.TestCase):
         self.assert_('value="testing"' in html)
 
 
-class TestFormRenderer(unittest.TestCase):
-    
+class TestFormencodeFormRenderer(unittest.TestCase):
+   
     def test_begin_form(self):
         from pyramid_simpleform import Form
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         renderer = FormRenderer(form)
 
         self.assert_(renderer.begin(url="/"),
@@ -400,33 +435,33 @@ class TestFormRenderer(unittest.TestCase
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         renderer = FormRenderer(form)
        
-        self.assert_(renderer.end() == "</form>")
+        self.assertEqual(renderer.end(), "</form>")
 
     def test_csrf(self):
         from pyramid_simpleform import Form
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         renderer = FormRenderer(form)
 
-        self.assert_(renderer.csrf() == \
-            '<input id="_csrf" name="_csrf" type="hidden" value="csrft" />')
+        self.assertEqual(renderer.csrf(),
+            '<input id="_csrf" name="_csrf" type="hidden" value="0123456789012345678901234567890123456789" />')
  
     def test_csrf_token(self):
         from pyramid_simpleform import Form
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         renderer = FormRenderer(form)
 
         self.assert_(renderer.csrf_token() == \
                 '<div style="display:none;"><input id="_csrf" name="_csrf" '
-                'type="hidden" value="csrft" /></div>')
+                'type="hidden" value="0123456789012345678901234567890123456789" /></div>')
 
     def test_hidden_tag_with_csrf_and_other_names(self):
         
@@ -434,13 +469,13 @@ class TestFormRenderer(unittest.TestCase
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema, defaults={'name':'foo'})
+        form = Form(request, SimpleFESchema, defaults={'name':'foo'})
         renderer = FormRenderer(form)
 
         self.assert_(renderer.hidden_tag('name') == \
             '<div style="display:none;"><input id="name" name="name" '
             'type="hidden" value="foo" /><input id="_csrf" name="_csrf" '
-            'type="hidden" value="csrft" /></div>')
+            'type="hidden" value="0123456789012345678901234567890123456789" /></div>')
 
     def test_hidden_tag_with_just_csrf(self):
         
@@ -448,23 +483,20 @@ class TestFormRenderer(unittest.TestCase
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         renderer = FormRenderer(form)
 
         self.assert_(renderer.hidden_tag() == \
                 '<div style="display:none;"><input id="_csrf" name="_csrf" '
-                'type="hidden" value="csrft" /></div>')
+                'type="hidden" value="0123456789012345678901234567890123456789" /></div>')
 
 
- 
- 
- 
     def test_text(self):
         from pyramid_simpleform import Form
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema, defaults={"name" : "Fred"})
+        form = Form(request, SimpleFESchema, defaults={"name" : "Fred"})
         renderer = FormRenderer(form)
 
         self.assert_(renderer.text("name") == \
@@ -475,7 +507,7 @@ class TestFormRenderer(unittest.TestCase
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema, defaults={"name" : "Fred"})
+        form = Form(request, SimpleFESchema, defaults={"name" : "Fred"})
         renderer = FormRenderer(form)
 
         self.assert_(renderer.textarea("name") == \
@@ -486,7 +518,7 @@ class TestFormRenderer(unittest.TestCase
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema, defaults={"name" : "Fred"})
+        form = Form(request, SimpleFESchema, defaults={"name" : "Fred"})
         renderer = FormRenderer(form)
 
         self.assert_(renderer.hidden("name") == \
@@ -497,7 +529,7 @@ class TestFormRenderer(unittest.TestCase
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema, defaults={"name" : "Fred"})
+        form = Form(request, SimpleFESchema, defaults={"name" : "Fred"})
         renderer = FormRenderer(form)
         
         options = [
@@ -521,7 +553,7 @@ class TestFormRenderer(unittest.TestCase
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         renderer = FormRenderer(form)
        
         self.assert_(renderer.file('file') == \
@@ -533,7 +565,7 @@ class TestFormRenderer(unittest.TestCase
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         renderer = FormRenderer(form)
        
         self.assert_(renderer.password('password') == \
@@ -546,7 +578,7 @@ class TestFormRenderer(unittest.TestCase
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema, defaults={"name" : 'Fred'})
+        form = Form(request, SimpleFESchema, defaults={"name" : 'Fred'})
         renderer = FormRenderer(form)
         
         self.assert_(renderer.radio("name", value="Fred") == \
@@ -563,7 +595,7 @@ class TestFormRenderer(unittest.TestCase
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         renderer = FormRenderer(form)
 
         self.assert_(renderer.submit("submit", "Submit") == \
@@ -574,7 +606,7 @@ class TestFormRenderer(unittest.TestCase
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema, defaults={"name" : True})
+        form = Form(request, SimpleFESchema, defaults={"name" : True})
         renderer = FormRenderer(form)
         
         self.assert_(renderer.checkbox("name") == \
@@ -588,7 +620,7 @@ class TestFormRenderer(unittest.TestCase
         request = testing.DummyRequest()
         request.method = "POST"
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
 
         self.assert_(not(form.validate()))
 
@@ -603,7 +635,7 @@ class TestFormRenderer(unittest.TestCase
         request = testing.DummyRequest()
         request.method = "POST"
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
 
         self.assert_(not(form.validate()))
         renderer = FormRenderer(form)
@@ -618,7 +650,7 @@ class TestFormRenderer(unittest.TestCase
         request = testing.DummyRequest()
         request.method = "POST"
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         form.validate()
 
         renderer = FormRenderer(form)
@@ -636,7 +668,7 @@ class TestFormRenderer(unittest.TestCase
         request.method = "POST"
         request.POST['name'] = 'test'
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         form.validate()
 
         renderer = FormRenderer(form)
@@ -652,17 +684,16 @@ class TestFormRenderer(unittest.TestCase
         request = testing.DummyRequest()
         request.method = "POST"
 
-        state = State(_=lambda s:s.upper())
+        state = State(_=lambda s: s.upper())
 
-        form = Form(request, SimpleSchema, state=state)
+        form = Form(request, SimpleFESchema, state=state)
         form.validate()
 
         renderer = FormRenderer(form)
 
-        self.assert_(renderer.errorlist('name') == \
+        self.assertEqual(renderer.errorlist('name'),
                      '<ul class="error"><li>MISSING VALUE</li></ul>')
  
- 
     def test_errorlist_with_field(self):
 
         from pyramid_simpleform import Form
@@ -671,21 +702,21 @@ class TestFormRenderer(unittest.TestCase
         request = testing.DummyRequest()
         request.method = "POST"
 
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         form.validate()
 
         renderer = FormRenderer(form)
 
-        self.assert_(renderer.errorlist('name') == \
+        self.assertEqual(renderer.errorlist('name'),
                      '<ul class="error"><li>Missing value</li></ul>')
- 
+
     def test_label(self):
 
         from pyramid_simpleform import Form
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         renderer = FormRenderer(form)
        
         self.assert_(renderer.label("name") == \
@@ -697,7 +728,7 @@ class TestFormRenderer(unittest.TestCase
         from pyramid_simpleform.renderers import FormRenderer
 
         request = testing.DummyRequest()
-        form = Form(request, SimpleSchema)
+        form = Form(request, SimpleFESchema)
         renderer = FormRenderer(form)
        
         self.assert_(renderer.label("name", "Your name") == \
Index: b/pyramid_simpleform/templates/test_form.mako
===================================================================
--- /dev/null
+++ b/pyramid_simpleform/templates/test_form.mako
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+	<meta charset="UTF-8">
+	<title></title>
+</head>
+<body>
+<form method="POST" action=".">
+    <input type="text" name="name" size="20">
+</form>
+</body>
+</html>
openSUSE Build Service is sponsored by