[Zope-Checkins] CVS: Zope/lib/python/ZPublisher/tests - testHTTPRequest.py:1.1.2.2
Martijn Pieters
mj@zope.com
Tue, 23 Jul 2002 15:37:30 -0400
Update of /cvs-repository/Zope/lib/python/ZPublisher/tests
In directory cvs.zope.org:/tmp/cvs-serv13516/ZPublisher/tests
Modified Files:
Tag: Zope-2_5-branch
testHTTPRequest.py
Log Message:
Added tests for HTTPRequest.processInputs.
=== Zope/lib/python/ZPublisher/tests/testHTTPRequest.py 1.1.2.1 => 1.1.2.2 ===
import unittest
+from urllib import quote_plus
class RecordTests( unittest.TestCase ):
@@ -11,9 +12,197 @@
d = eval( r )
self.assertEqual( d, record.__dict__ )
+
+class ProcessInputsTests(unittest.TestCase):
+ def _getHTTPRequest(self, env):
+ from ZPublisher.HTTPRequest import HTTPRequest
+ return HTTPRequest(None, env, None)
+
+ def _processInputs(self, inputs):
+ # Have the inputs processed, and return a HTTPRequest object holding the
+ # result.
+ # inputs is expected to be a list of (key, value) tuples, no CGI
+ # encoding is required.
+
+ query_string = []
+ add = query_string.append
+ for key, val in inputs:
+ add("%s=%s" % (quote_plus(key), quote_plus(val)))
+ query_string = '&'.join(query_string)
+
+ env = {'SERVER_NAME': 'testingharnas', 'SERVER_PORT': '80'}
+ env['QUERY_STRING'] = query_string
+ req = self._getHTTPRequest(env)
+ req.processInputs()
+ return req
+
+ def testNoMarshalling(self):
+ inputs = (
+ ('foo', 'bar'), ('spam', 'eggs'),
+ ('number', '1'),
+ ('spacey key', 'val'), ('key', 'spacey val'),
+ ('multi', '1'), ('multi', '2'))
+ req = self._processInputs(inputs)
+
+ formkeys = list(req.form.keys())
+ formkeys.sort()
+ self.assertEquals(formkeys, ['foo', 'key', 'multi', 'number',
+ 'spacey key', 'spam'])
+ self.assertEquals(req['number'], '1')
+ self.assertEquals(req['multi'], ['1', '2'])
+ self.assertEquals(req['spacey key'], 'val')
+ self.assertEquals(req['key'], 'spacey val')
+
+ def testSimpleMarshalling(self):
+ from DateTime import DateTime
+
+ inputs = (
+ ('num:int', '42'), ('fract:float', '4.2'), ('bign:long', '45'),
+ ('words:string', 'Some words'), ('2tokens:tokens', 'one two'),
+ ('aday:date', '2002/07/23'),
+ ('accountedfor:required', 'yes'),
+ ('multiline:lines', 'one\ntwo'),
+ ('morewords:text', 'one\ntwo\n'))
+ req = self._processInputs(inputs)
+
+ formkeys = list(req.form.keys())
+ formkeys.sort()
+ self.assertEquals(formkeys, ['2tokens', 'accountedfor', 'aday', 'bign',
+ 'fract', 'morewords', 'multiline', 'num', 'words'])
+
+ self.assertEquals(req['2tokens'], ['one', 'two'])
+ self.assertEquals(req['accountedfor'], 'yes')
+ self.assertEquals(req['aday'], DateTime('2002/07/23'))
+ self.assertEquals(req['bign'], 45L)
+ self.assertEquals(req['fract'], 4.2)
+ self.assertEquals(req['morewords'], 'one\ntwo\n')
+ self.assertEquals(req['multiline'], ['one', 'two'])
+ self.assertEquals(req['num'], 42)
+ self.assertEquals(req['words'], 'Some words')
+
+ def testSimpleContainers(self):
+ inputs = (
+ ('oneitem:list', 'one'),
+ ('alist:list', 'one'), ('alist:list', 'two'),
+ ('oneitemtuple:tuple', 'one'),
+ ('atuple:tuple', 'one'), ('atuple:tuple', 'two'),
+ ('onerec.foo:record', 'foo'), ('onerec.bar:record', 'bar'),
+ ('setrec.foo:records', 'foo'), ('setrec.bar:records', 'bar'),
+ ('setrec.foo:records', 'spam'), ('setrec.bar:records', 'eggs'))
+ req = self._processInputs(inputs)
+
+ formkeys = list(req.form.keys())
+ formkeys.sort()
+ self.assertEquals(formkeys, ['alist', 'atuple', 'oneitem',
+ 'oneitemtuple', 'onerec', 'setrec'])
+
+ self.assertEquals(req['oneitem'], ['one'])
+ self.assertEquals(req['oneitemtuple'], ('one',))
+ self.assertEquals(req['alist'], ['one', 'two'])
+ self.assertEquals(req['atuple'], ('one', 'two'))
+ self.assertEquals(req['onerec'].foo, 'foo')
+ self.assertEquals(req['onerec'].bar, 'bar')
+ self.assertEquals(len(req['setrec']), 2)
+ self.assertEquals(req['setrec'][0].foo, 'foo')
+ self.assertEquals(req['setrec'][0].bar, 'bar')
+ self.assertEquals(req['setrec'][1].foo, 'spam')
+ self.assertEquals(req['setrec'][1].bar, 'eggs')
+
+ def testMarshallIntoSequences(self):
+ inputs = (
+ ('ilist:int:list', '1'), ('ilist:int:list', '2'),
+ ('ilist:list:int', '3'),
+ ('ftuple:float:tuple', '1.0'), ('ftuple:float:tuple', '1.1'),
+ ('ftuple:tuple:float', '1.2'),
+ ('tlist:tokens:list', 'one two'), ('tlist:list:tokens', '3 4'))
+ req = self._processInputs(inputs)
+
+ formkeys = list(req.form.keys())
+ formkeys.sort()
+ self.assertEquals(formkeys, ['ftuple', 'ilist', 'tlist'])
+
+ self.assertEquals(req['ilist'], [1, 2, 3])
+ self.assertEquals(req['ftuple'], (1.0, 1.1, 1.2))
+ self.assertEquals(req['tlist'], [['one', 'two'], ['3', '4']])
+
+ def testRecordsWithSequences(self):
+ inputs = (
+ ('onerec.name:record', 'foo'),
+ ('onerec.tokens:tokens:record', 'one two'),
+ ('onerec.ints:int:record', '1'),
+ ('onerec.ints:int:record', '2'),
+
+ ('setrec.name:records', 'first'),
+ ('setrec.ilist:list:int:records', '1'),
+ ('setrec.ilist:list:int:records', '2'),
+ ('setrec.ituple:tuple:int:records', '1'),
+ ('setrec.ituple:tuple:int:records', '2'),
+ ('setrec.name:records', 'second'),
+ ('setrec.ilist:list:int:records', '1'),
+ ('setrec.ilist:list:int:records', '2'),
+ ('setrec.ituple:tuple:int:records', '1'),
+ ('setrec.ituple:tuple:int:records', '2'))
+ req = self._processInputs(inputs)
+
+ formkeys = list(req.form.keys())
+ formkeys.sort()
+ self.assertEquals(formkeys, ['onerec', 'setrec'])
+
+ self.assertEquals(req['onerec'].name, 'foo')
+ self.assertEquals(req['onerec'].tokens, ['one', 'two'])
+ # Implicit sequences and records don't mix.
+ self.assertEquals(req['onerec'].ints, 2)
+
+ self.assertEquals(len(req['setrec']), 2)
+ self.assertEquals(req['setrec'][0].name, 'first')
+ self.assertEquals(req['setrec'][1].name, 'second')
+
+ for i in range(2):
+ self.assertEquals(req['setrec'][i].ilist, [1, 2])
+ self.assertEquals(req['setrec'][i].ituple, (1, 2))
+
+ def testDefaults(self):
+ inputs = (
+ ('foo:default:int', '5'),
+
+ ('alist:int:default', '3'),
+ ('alist:int:default', '4'),
+ ('alist:int:default', '5'),
+ ('alist:int', '1'),
+ ('alist:int', '2'),
+
+ ('bar.spam:record:default', 'eggs'),
+ ('bar.foo:record:default', 'foo'),
+ ('bar.foo:record', 'baz'),
+
+ ('setrec.spam:records:default', 'eggs'),
+ ('setrec.foo:records:default', 'foo'),
+ ('setrec.foo:records', 'baz'),
+ ('setrec.foo:records', 'ham'),
+ )
+ req = self._processInputs(inputs)
+
+ formkeys = list(req.form.keys())
+ formkeys.sort()
+ self.assertEquals(formkeys, ['alist', 'bar', 'foo', 'setrec'])
+
+ self.assertEquals(req['alist'], [1, 2, 3, 4, 5])
+
+ self.assertEquals(req['foo'], 5)
+ self.assertEquals(req['bar'].spam, 'eggs')
+ self.assertEquals(req['bar'].foo, 'baz')
+
+ self.assertEquals(len(req['setrec']), 2)
+ self.assertEquals(req['setrec'][0].spam, 'eggs')
+ self.assertEquals(req['setrec'][0].foo, 'baz')
+ self.assertEquals(req['setrec'][1].spam, 'eggs')
+ self.assertEquals(req['setrec'][1].foo, 'ham')
+
+
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(RecordTests, 'test'))
+ suite.addTest(unittest.makeSuite(ProcessInputsTests, 'test'))
return suite
if __name__ == '__main__':