#!/usr/bin/env python3.0 import unittest import cgi from io import BytesIO, StringIO noFileASCII = 'nofileASCII.dat' noFileNonASCII = 'nofileNonASCII.dat' ASCIIFile = 'ASCII.dat' NonASCIIFile = 'UTF8.dat' BinaryFile = 'Binary.dat' def unifyNewlines(input): return input.replace('\r\n', '\n').replace('\r', '\n') class TestFieldStorage(unittest.TestCase): def setup(self, fn): fp = open(fn, encoding='latin-1') data = fp.read() contentType = data.split('\n')[0].split(': ')[1] env = dict(CONTENT_LENGTH=str(len(data)), CONTENT_TYPE=contentType, REQUEST_METHOD="POST") fp.seek(0) self.fp = fp return cgi.FieldStorage(fp=fp, environ=env) def tearDown(self): self.fp.close() def testNormalForm(self): fs = self.setup(noFileASCII) self.assert_('upkey' in fs.keys()) self.assertEquals(fs.getvalue('upkey'), 'Now is the time for all good men to come to the aide of their country.') self.assert_('submit' in fs.keys()) self.assertEquals(fs.getvalue('submit'), 'submit') def testNonASCIIForm(self): fs = self.setup(noFileNonASCII) self.assert_('upkey' in fs.keys()) self.assertEquals(fs.getvalue('upkey'), '\xd0\xa1\xd0\xb5\xd0\xb9\xd1\x87\xd0\xb0\xd1\x81 \xd0\xbd\xd0\xb0\xd1\x81\xd1\x82\xd0\xb0\xd0\xbb\xd0\xbe \xd0\xb2\xd1\x80\xd0\xb5\xd0\xbc\xd1\x8f \xd0\xb4\xd0\xbb\xd1\x8f \xd0\xb2\xd1\x81\xd0\xb5\xd1\x85 \xd1\x85\xd0\xbe\xd1\x80\xd0\xbe\xd1\x88\xd0\xb8\xd1\x85 \xd0\xbb\xd1\x8e\xd0\xb4\xd0\xb5\xd0\xb9 \xd0\xbf\xd1\x80\xd0\xb8\xd0\xb9\xd1\x82\xd0\xb8 \xd0\xba \xd0\xbf\xd0\xb0\xd0\xbc\xd1\x8f\xd1\x82\xd0\xbd\xd0\xbe\xd0\xb9 \xd1\x81\xd0\xb2\xd0\xbe\xd0\xb5\xd0\xb9 \xd1\x81\xd1\x82\xd1\x80\xd0\xb0\xd0\xbd\xd1\x8b.') self.assert_('submit' in fs.keys()) self.assertEquals(fs.getvalue('submit'), 'submit') def testASCIIFileUploadForm(self): fs = self.setup(ASCIIFile) self.assert_('upkey' in fs.keys()) self.assertEquals(fs.getvalue('upkey'), 'test upkey') self.assert_('submit' in fs.keys()) self.assertEquals(fs.getvalue('submit'), 'submit') self.assert_('upfile' in fs.keys()) self.assertEquals(fs['upfile'].filename, 'zenASCII.txt') self.assertEquals(unifyNewlines(fs.getvalue('upfile')), unifyNewlines(open('zenASCII.txt', 'rb').read())) def testNonASCIIFileUploadForm(self): fs = self.setup(NonASCIIFile) self.assert_('upkey' in fs.keys()) self.assertEquals(fs.getvalue('upkey'), 'test upkey') self.assert_('submit' in fs.keys()) self.assertEquals(fs.getvalue('submit'), 'submit') self.assert_('upfile' in fs.keys()) self.assertEquals(fs['upfile'].filename, 'zenUTF8-RU.txt') self.assertEquals(unifyNewlines(fs.getvalue('upfile')), unifyNewlines(open('zenUTF8-RU.txt', 'rb').read())) def testBinaryFileUploadForm(self): fs = self.setup(BinaryFile) self.assert_('upkey' in fs.keys()) self.assertEquals(fs.getvalue('upkey'), 'test upkey') self.assert_('submit' in fs.keys()) self.assertEquals(fs.getvalue('submit'), 'submit') self.assert_('upfile' in fs.keys()) self.assertEquals(fs['upfile'].filename, 'zenBinary.zip') self.assertEquals(fs.getvalue('upfile'), open('zenBinary.zip', 'rb').read()) if __name__ == "__main__": unittest.main()