Viewing file: test_formless.py (14.83 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# Copyright (c) 2004 Divmod. # See LICENSE for details.
import os
from nevow.testutil import TestCase
import formless from formless import process as flpr
def process(typed, value): return flpr(typed, [value])
class Typed(TestCase): def testString(self): s = formless.String() self.assertEquals(process(s, ''), None) self.assertEquals(process(s, "Fooo"), "Fooo") self.assertEquals(process(s, "This is a string"), "This is a string") self.assertEquals(process(s, 'C\xc3\xa9sar'), 'C\xc3\xa9sar')
s = formless.String(unicode=True) self.assertEquals(process(s, 'C\xc3\xa9sar'), u'C\u00e9sar')
s = formless.String(required=True) self.assertRaises(formless.InputError, process, s, "") s = formless.String(required=False) self.assertEquals(process(s, "Bar"), "Bar") self.assertEquals(process(s, ""), None) s = formless.String() self.assertEquals(process(s, ' abc '), ' abc ') s = formless.String(strip=True, required=True) self.assertEquals(process(s, ' abc '), 'abc') self.assertEquals(process(s, '\t abc \t \n '), 'abc') self.assertRaises(formless.InputError, process, s, ' ') s = formless.String(required=False, strip=True) self.assertEquals(process(s, ' abc '), 'abc') self.assertEquals(process(s, ' '), None) def testText(self): s = formless.Text() self.assertEquals(process(s, ""), None) self.assertEquals(process(s, "Fooo"), "Fooo") self.assertEquals(process(s, "This is a string"), "This is a string") self.assertEquals(process(s, 'C\xc3\xa9sar'), 'C\xc3\xa9sar')
s = formless.Text(unicode=True) self.assertEquals(process(s, 'C\xc3\xa9sar'), u'C\u00e9sar')
s = formless.Text(required=True) self.assertRaises(formless.InputError, process, s, "") s = formless.Text(required=False) self.assertEquals(process(s, "Bar"), "Bar") self.assertEquals(process(s, ""), None) s = formless.Text() self.assertEquals(process(s, ' abc '), ' abc ') s = formless.Text(strip=True, required=True) self.assertEquals(process(s, ' abc '), 'abc') self.assertRaises(formless.InputError, process, s, ' ') s = formless.Text(required=False, strip=True) self.assertEquals(process(s, ' abc '), 'abc') self.assertEquals(process(s, ' '), None) def testPassword(self):
def process(pw, val, val2=None): if val2 is None: val2 = val return flpr( formless.Property('password', pw), {'password': [val], 'password____2': [val2]})['password']
s = formless.Password() self.assertEquals(process(s, "Fooo"), "Fooo") self.assertEquals(process(s, "This is a string"), "This is a string") self.assertEquals(process(s, "This is a string"), "This is a string") self.assertEquals(process(s, 'C\xc3\xa9sar'), 'C\xc3\xa9sar')
s = formless.Password(unicode=True) self.assertEquals(process(s, 'C\xc3\xa9sar'), u'C\u00e9sar')
s = formless.Password(required=True) self.assertRaises(formless.ValidateError, process, s, "") s = formless.Password(required=False) self.assertEquals(process(s, "Bar"), "Bar") self.assertEquals(process(s, ""), None) s = formless.Password() self.assertEquals(process(s, ' abc '), ' abc ') s = formless.Password(strip=True, required=True) self.assertEquals(process(s, ' abc '), 'abc') self.assertRaises(formless.ValidateError, process, s, ' ') s = formless.Password(required=False, strip=True) self.assertEquals(process(s, ' abc '), 'abc') self.assertEquals(process(s, ' '), None) def testPasswordEntry(self): s = formless.PasswordEntry() self.assertEquals(process(s, ''), None) self.assertEquals(process(s, 'abc'), 'abc') self.assertEquals(process(s, ' blah blah blah '), ' blah blah blah ') self.assertEquals(process(s, 'C\xc3\xa9sar'), 'C\xc3\xa9sar')
s = formless.PasswordEntry(unicode=True) self.assertEquals(process(s, 'C\xc3\xa9sar'), u'C\u00e9sar')
s = formless.PasswordEntry(strip=True) self.assertEquals(process(s, ''), None) self.assertEquals(process(s, 'abc'), 'abc') self.assertEquals(process(s, ' blah blah blah '), 'blah blah blah')
s = formless.PasswordEntry(strip=True, required=True) self.assertRaises(formless.InputError, process, s, '') self.assertRaises(formless.InputError, process, s, ' ') self.assertEquals(process(s, 'abc'), 'abc') self.assertEquals(process(s, ' blah blah blah '), 'blah blah blah') def testInteger(self): i = formless.Integer(required=True) self.assertEquals(process(i, "0"), 0) self.assertEquals(process(i, "3409823098"), 3409823098) self.assertRaises(formless.InputError, process, i, "") self.assertRaises(formless.InputError, process, i, "a string") self.assertRaises(formless.InputError, process, i, "1.5") i = formless.Integer(required=False) self.assertEquals(process(i, "1234567"), 1234567) self.assertEquals(process(i, ""), None) def testReal(self): i = formless.Real(required=True) self.assertApproximates(process(i, "0.0"), 0.0, 1e-10) self.assertApproximates(process(i, "34098.23098"), 34098.23098, 1e-10) self.assertRaises(formless.InputError, process, i, "") self.assertRaises(formless.InputError, process, i, "a string") self.assertRaises(formless.InputError, process, i, "1.5j")
i = formless.Real(required=False) self.assertApproximates(process(i, "1234.567"), 1234.567, 1e-10) self.assertEquals(process(i, ""), None)
def testBoolean(self): b = formless.Boolean(required=True) self.assertRaises(formless.InputError, process, b, "zoom") self.assertRaises(formless.InputError, process, b, True) self.assertRaises(formless.InputError, process, b, 54) self.assertRaises(formless.InputError, process, b, "") self.assertEquals(process(b, "True"), True) self.assertEquals(process(b, "False"), False)
b = formless.Boolean(required=False) self.assertRaises(formless.InputError, process, b, "zoom") self.assertEquals(process(b, ""), None) self.assertEquals(process(b, "True"), True) self.assertEquals(process(b, "False"), False) def testFixedDigitInteger(self): d = formless.FixedDigitInteger(3, required=True) self.assertEquals(process(d, "123"), 123) self.assertEquals(process(d, "567"), 567) self.assertRaises(formless.InputError, process, d, "12") self.assertRaises(formless.InputError, process, d, "1234") self.assertRaises(formless.InputError, process, d, "012") self.assertRaises(formless.InputError, process, d, "foo") self.assertRaises(formless.InputError, process, d, " ") self.assertRaises(formless.InputError, process, d, "")
d = formless.FixedDigitInteger(3, required=False) self.assertEquals(process(d, "123"), 123) self.assertRaises(formless.InputError, process, d, "foo") self.assertEquals(process(d, ""), None)
def testDirectory(self): p1 = self.mktemp() os.mkdir(p1) p2 = self.mktemp() d = formless.Directory(required=True) self.assertEquals(process(d, p1), p1) self.assertRaises(formless.InputError, process, d, p2) self.assertRaises(formless.InputError, process, d, "") d = formless.Directory(required=False) self.assertEquals(process(d, p1), p1) self.assertRaises(formless.InputError, process, d, p2) self.assertEquals(process(d, ""), None)
class Annotation(TestCase): def testTypedInterfaceProperties(self): class Other(formless.TypedInterface): pass _indirectOther = lambda: Other # XXX work around Python issue1569356 class Test(formless.TypedInterface): foo = formless.String() bar = formless.Text() baz = formless.Integer() quux = formless.Object(interface=_indirectOther())
self.assertEquals(Test.__properties__, Test.__spec__)
bfoo, bbar, bbaz, quux = Test.__properties__
self.assertEquals(bfoo.name, 'foo') self.assertEquals(bbar.name, 'bar') self.assertEquals(bbaz.name, 'baz')
self.assertEquals(bfoo.typedValue.__class__, formless.String) self.assertEquals(bbar.typedValue.__class__, formless.Text) self.assertEquals(bbaz.typedValue.__class__, formless.Integer) self.assertEquals(quux.typedValue.__class__, formless.Object)
self.assertEquals(quux.typedValue.iface, Other)
def testTypedInterfaceMethods(self): class IFoo(formless.TypedInterface): pass
_indirectIFoo = lambda: IFoo # XXX work around Python issue1569356 class Test2(formless.TypedInterface): def foo(foobar=formless.String()): """This is a description of foo""" pass foo = formless.autocallable(foo)
def bar(barbaz=formless.Integer(label="The Baz")): ## this has no docstring, make sure it doesn't fail return formless.String() bar = formless.autocallable(bar, someAttribute="Hello")
def baz(bazfoo=formless.Boolean(label="The Foo", description="The foo to baz.")): """The Label
The description""" IFoo = _indirectIFoo() return IFoo baz = formless.autocallable(baz)
self.assertEquals(Test2.__methods__, Test2.__spec__)
bfoo, bbar, bbaz = Test2.__methods__
self.assertEquals(bfoo.name, 'foo') self.assertEquals(bbar.name, 'bar') self.assertEquals(bbar.getAttribute('someAttribute'), "Hello") self.assertEquals(bbaz.name, 'baz')
self.assertEquals(bfoo.label, 'Foo') self.assertEquals(bfoo.description, 'This is a description of foo')
self.assertEquals(bbar.label, 'Bar') self.assertEquals(bbar.description, '')
self.assertEquals(bbaz.label, 'The Label') self.assertEquals(bbaz.description, 'The description')
def getArgTypes(mbinding): return [x.typedValue.__class__ for x in mbinding.arguments]
self.assertEquals(getArgTypes(bfoo), [formless.String]) self.assertEquals(bfoo.returnValue.iface, None)
self.assertEquals(getArgTypes(bbar), [formless.Integer]) self.assertEquals(bbar.returnValue.__class__, formless.String)
self.assertEquals(getArgTypes(bbaz), [formless.Boolean]) self.assertEquals(bbaz.returnValue.iface, IFoo)
def firstArg(mbinding): return mbinding.arguments[0]
self.assertEquals(firstArg(bfoo).label, 'Foobar') self.assertEquals(firstArg(bfoo).description, '')
self.assertEquals(firstArg(bbar).label, 'The Baz') self.assertEquals(firstArg(bbar).description, '')
self.assertEquals(firstArg(bbaz).label, 'The Foo') self.assertEquals(firstArg(bbaz).description, 'The foo to baz.')
def testTypedInterfaceMethods_actionLabel(self): """When no label was given, docstring is given preference compared to action.""" class Test(formless.TypedInterface): def foo(foobar=formless.String()): """ Label for foo Description for foo """ pass foo = formless.autocallable(foo, action="Do something!")
self.assertEquals(Test.__methods__, Test.__spec__) (bfoo,) = Test.__methods__
self.assertEquals(bfoo.name, 'foo')
self.assertEquals(bfoo.label, 'Label for foo') self.assertEquals(bfoo.description, 'Description for foo')
def testTypedInterfaceMethods_explicitLabel(self): """When a label was given, it is given preference compared to docstring.""" class Test(formless.TypedInterface): def foo(foobar=formless.String()): """ Docstring label for foo Description for foo """ pass foo = formless.autocallable(foo, action="Do something!", label="Explicit label for foo", )
self.assertEquals(Test.__methods__, Test.__spec__) (bfoo,) = Test.__methods__
self.assertEquals(bfoo.name, 'foo')
self.assertEquals(bfoo.label, 'Explicit label for foo') self.assertEquals(bfoo.description, 'Description for foo')
def testTypedInterfaceMethods_deprecated(self): class Test(formless.TypedInterface): def noArgs(self): pass noArgs = formless.autocallable(noArgs)
def oneArg(self, someParam=formless.String()): pass oneArg = formless.autocallable(oneArg)
self.assertEquals(Test.__methods__, Test.__spec__) m_noArgs, m_oneArg = Test.__methods__
self.assertEquals(len(m_noArgs.arguments), 0) self.assertEquals(len(m_oneArg.arguments), 1)
def testTypedInterfaceMethods_nonAutocallable(self): class Test(formless.TypedInterface): def notAutocallable(arg1, arg2): pass
self.assertEquals(Test.__methods__, Test.__spec__) self.assertEquals(Test.__methods__, [])
class IListWithActions(formless.TypedInterface): def actionOne(theSubset = formless.List()): pass def actionTwo(theSubset = formless.List()): pass
theListOfStuff = formless.List(actions=[actionOne, actionTwo])
class TestListActions(TestCase): def test_listActionMetadata(self): ## IListWithActions only has one binding, a Property binding ## of theListOfStuff to a List with some actions. actions = IListWithActions.__spec__[0].typedValue.actions self.failUnless(reduce, (lambda x: x.name == 'actionOne', actions)) self.failUnless(reduce, (lambda x: x.name == 'actionTwo', actions))
class TestPropertyGroups(TestCase): def test_nestedTypedInterfaces(self): class Outer(formless.TypedInterface): aSimpleProperty = formless.Object()
class Inner(formless.TypedInterface): """Docstring This is a docstring. """ anInnerProperty = formless.Integer()
self.assertEquals(Outer.__spec__[1].typedValue.iface, Outer.Inner) inn = Outer.__spec__[1].typedValue.iface
|