Mercurial > p > roundup > code
diff test/test_cgi.py @ 5065:47ab150b7325
Allow multiple file uploads
If the html template specifies multiple="multiple" for a file upload
the user can attach multiple files and the form parser now handles this.
| author | Ralf Schlatterbeck <rsc@runtux.com> |
|---|---|
| date | Mon, 30 May 2016 17:23:35 +0200 |
| parents | 364c54991861 |
| children | e424987d294a |
line wrap: on
line diff
--- a/test/test_cgi.py Tue May 10 16:27:45 2016 +0200 +++ b/test/test_cgi.py Mon May 30 17:23:35 2016 +0200 @@ -25,6 +25,14 @@ self.content = content self.filename = filename +class FileList: + def __init__(self, name, *files): + self.name = name + self.files = files + def items (self): + for f in self.files: + yield (self.name, f) + def makeForm(args): form = cgi.FieldStorage() for k,v in args.items(): @@ -263,6 +271,33 @@ ({('file', None): {'content': 'foo', 'name': 'foo.txt', 'type': 'text/plain'}}, [])) + def testSingleFileUpload(self): + file = FileUpload('foo', 'foo.txt') + self.assertEqual(self.parseForm({'@file': file}, 'issue'), + ({('file', '-1'): {'content': 'foo', 'name': 'foo.txt', + 'type': 'text/plain'}, + ('issue', None): {}}, + [('issue', None, 'files', [('file', '-1')])])) + + def testMultipleFileUpload(self): + f1 = FileUpload('foo', 'foo.txt') + f2 = FileUpload('bar', 'bar.txt') + f3 = FileUpload('baz', 'baz.txt') + files = FileList('@file', f1, f2, f3) + + self.assertEqual(self.parseForm(files, 'issue'), + ({('file', '-1'): {'content': 'foo', 'name': 'foo.txt', + 'type': 'text/plain'}, + ('file', '-2'): {'content': 'bar', 'name': 'bar.txt', + 'type': 'text/plain'}, + ('file', '-3'): {'content': 'baz', 'name': 'baz.txt', + 'type': 'text/plain'}, + ('issue', None): {}}, + [ ('issue', None, 'files', [('file', '-1')]) + , ('issue', None, 'files', [('file', '-2')]) + , ('issue', None, 'files', [('file', '-3')]) + ])) + def testEditFileClassAttributes(self): self.assertEqual(self.parseForm({'name': 'foo.txt', 'type': 'application/octet-stream'},
