Viewing file: testformless.py (3.05 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
from twisted.internet import defer
from formless import annotate, webform
from nevow import rend, loaders, tags, livetest, url, livepage
"""WWWWizard functionality! """
test_suite = [ ('visit', '/formpost/', ''), ('value', 'foo-foo', '5'), ('post', 'foo', {'foo-foo': 'asdf'}), ('assert', livetest.xpath('//form[@id="foo"]//div[@class="freeform-form-error"]'), "'asdf' is not an integer."), ## Check to make sure we repopulate the user's input with the erronious input ('value', 'foo-foo', 'asdf'), ('post', 'foo', {'foo-foo': '10'}), ('value', 'foo-foo', '10'), ]
test_suite += [ ('visit', '/formpost2/', ''), ('post', 'bar', {'bar-baz': '5', 'bar-slam': '5', 'bar-ham': 'efgh', 'bar-custom': '1'}), ## XXX TODO: Can't post a radio button, so there is "None" below ('assert', livetest.xpath('//h3'), "You called bar! 5 5 efgh None {'stuff': 1234, 'name': 'One'}") ]
test_suite += [ ('visit', '/testformless', ''), ('post', 'name', {'name-name': 'Fred'}), ('post', 'quest', {'quest-quest': 'Find the Grail'}), ('post', 'speed', {'speed-speed': '123'}), ('assert', 'body', "Thanks for taking our survey! You said: 'Fred' 'Find the Grail' 123")]
class NameWizard(rend.Page): docFactory = loaders.stan(tags.html[tags.h1["What is your name"], webform.renderForms()])
def bind_name(self, ctx): return [('name', annotate.String())]
def name(self, name): return QuestWizard(name)
class QuestWizard(rend.Page): docFactory = loaders.stan(tags.html[tags.h1["What is your quest"], webform.renderForms()])
def bind_quest(self, ctx): return [('quest', annotate.Choice(['Find the Grail', 'Get laid', 'Earn twenty bucks', 'Destroy the sun']))]
def quest(self, quest): return FinalWizard((self.original, quest))
class FinalWizard(rend.Page): docFactory = loaders.stan(tags.html[tags.h1["What is the airspeed velocity of an unladen swallow"], webform.renderForms()])
def bind_speed(self, ctx): return [('speed', annotate.Integer())]
def speed(self, speed): return rend.Page( docFactory=loaders.stan( tags.html[ tags.body(id='body')[ "Thanks for taking our survey! You said: %r %r %r" % ( self.original[0], self.original[1], speed)]]))
def checkLocation(client): d = defer.Deferred() def gotResult(ctx, location): from urlparse import urlparse if urlparse(location)[2] == '/': d.callback(None) else: d.errback(None) client.send(client.transient(gotResult, livepage.js.testFrameNode.contentDocument.location)) return d
test_suite += [ ('visit', '/formless_redirector', ''), ('post', 'goHome', {}), ('call', checkLocation, ())]
class Redirector(rend.Page): docFactory = loaders.stan(tags.html[tags.body[webform.renderForms()]])
def bind_goHome(self, ctx): return []
def goHome(self): return url.root
formless_tests = livetest.Tester(test_suite)
|