[Zope-Checkins] CVS: Zope/lib/python/OFS/tests - test.gif:1.2
testFileAndImage.py:1.2
Chris McDonough
chrism at plope.com
Mon Mar 29 12:48:50 EST 2004
Update of /cvs-repository/Zope/lib/python/OFS/tests
In directory cvs.zope.org:/tmp/cvs-serv22020
Added Files:
test.gif testFileAndImage.py
Log Message:
Add tests for file/image objects.
=== Zope/lib/python/OFS/tests/test.gif 1.1 => 1.2 ===
<Binary-ish file>
=== Zope/lib/python/OFS/tests/testFileAndImage.py 1.1 => 1.2 ===
--- /dev/null Mon Mar 29 12:48:50 2004
+++ Zope/lib/python/OFS/tests/testFileAndImage.py Mon Mar 29 12:48:50 2004
@@ -0,0 +1,245 @@
+import os, sys
+import unittest
+import time
+from cStringIO import StringIO
+
+from OFS.Application import Application
+from OFS.SimpleItem import SimpleItem
+from OFS.Cache import ZCM_MANAGERS
+from OFS.Image import Pdata
+from ZPublisher.HTTPRequest import HTTPRequest
+from ZPublisher.HTTPResponse import HTTPResponse
+from App.Common import rfc1123_date
+from Testing.makerequest import makerequest
+from zExceptions import Redirect
+
+try:
+ here = os.path.dirname(os.path.abspath(__file__))
+except:
+ here = os.path.dirname(os.path.abspath(sys.argv[0]))
+
+imagedata = os.path.join(here, 'test.gif')
+filedata = os.path.join(here, 'test.gif')
+
+def makeConnection():
+ import ZODB
+ from ZODB.DemoStorage import DemoStorage
+
+ s = DemoStorage(quota=(1<<20))
+ return ZODB.DB( s ).open()
+
+
+def aputrequest(file, content_type):
+ resp = HTTPResponse(stdout=sys.stdout)
+ environ = {}
+ environ['SERVER_NAME']='foo'
+ environ['SERVER_PORT']='80'
+ environ['REQUEST_METHOD'] = 'PUT'
+ environ['CONTENT_TYPE'] = content_type
+ req = HTTPRequest(stdin=file, environ=environ, response=resp)
+ return req
+
+class DummyCache:
+ def __init__(self):
+ self.clear()
+
+ def ZCache_set(self, ob, data, view_name='', keywords=None,
+ mtime_func=None):
+ self.set = (ob, data)
+
+ def ZCache_get(self, ob, data, view_name='', keywords=None,
+ mtime_func=None):
+ self.get = ob
+ if self.si:
+ return si
+
+ def ZCache_invalidate(self, ob):
+ self.invalidated = ob
+
+ def clear(self):
+ self.set=None
+ self.get=None
+ self.invalidated = None
+ self.si = None
+
+ def setStreamIterator(self, si):
+ self.si = si
+
+
+ADummyCache=DummyCache()
+
+class DummyCacheManager(SimpleItem):
+ def ZCacheManager_getCache(self):
+ return ADummyCache
+
+class FileTests(unittest.TestCase):
+ data = open(filedata, 'rb').read()
+ content_type = 'application/octet-stream'
+ factory = 'manage_addFile'
+ def setUp( self ):
+
+ self.connection = makeConnection()
+ try:
+ r = self.connection.root()
+ a = Application()
+ r['Application'] = a
+ self.root = a
+ responseOut = self.responseOut = StringIO()
+ self.app = makerequest( self.root, stdout=responseOut )
+ self.app.dcm = DummyCacheManager()
+ factory = getattr(self.app, self.factory)
+ factory('file',
+ file=self.data, content_type=self.content_type)
+ self.app.file.ZCacheable_setManagerId('dcm')
+ self.app.file.ZCacheable_setEnabled(enabled=1)
+ setattr(self.app, ZCM_MANAGERS, ('dcm',))
+ # Hack, we need a _p_mtime for the file, so we make sure that it
+ # has one.
+ get_transaction().commit()
+ except:
+ self.connection.close()
+ raise
+ get_transaction().begin()
+ self.file = getattr( self.app, 'file' )
+
+ def tearDown( self ):
+ del self.file
+ get_transaction().abort()
+ self.connection.close()
+ del self.app
+ del self.responseOut
+ del self.root
+ del self.connection
+ ADummyCache.clear()
+
+ def testViewImageOrFile(self):
+ self.assertRaises(Redirect, self.file.view_image_or_file, 'foo')
+
+ def testUpdateData(self):
+ self.file.update_data('foo')
+ self.assertEqual(self.file.size, 3)
+ self.assertEqual(self.file.data, 'foo')
+ self.failUnless(ADummyCache.invalidated)
+ self.failUnless(ADummyCache.set)
+
+ def testReadData(self):
+ s = "a" * (2 << 16)
+ f = StringIO(s)
+ data, size = self.file._read_data(f)
+ self.failUnless(isinstance(data, Pdata))
+ self.assertEqual(str(data), s)
+ self.assertEqual(len(s), len(str(data)))
+ self.assertEqual(len(s), size)
+
+ def testManageEditWithFileData(self):
+ self.file.manage_edit('foobar', 'text/plain', filedata='ASD')
+ self.assertEqual(self.file.title, 'foobar')
+ self.assertEqual(self.file.content_type, 'text/plain')
+ self.failUnless(ADummyCache.invalidated)
+ self.failUnless(ADummyCache.set)
+
+ def testManageEditWithoutFileData(self):
+ self.file.manage_edit('foobar', 'text/plain')
+ self.assertEqual(self.file.title, 'foobar')
+ self.assertEqual(self.file.content_type, 'text/plain')
+ self.failUnless(ADummyCache.invalidated)
+
+ def testManageUpload(self):
+ f = StringIO('jammyjohnson')
+ self.file.manage_upload(f)
+ self.assertEqual(self.file.data, 'jammyjohnson')
+ self.assertEqual(self.file.content_type, 'application/octet-stream')
+
+ def testIfModSince(self):
+ now = time.time()
+ e = {'SERVER_NAME':'foo', 'SERVER_PORT':'80', 'REQUEST_METHOD':'GET'}
+
+ # not modified since
+ t_notmod = rfc1123_date(now)
+ e['HTTP_IF_MODIFIED_SINCE'] = t_notmod
+ out = StringIO()
+ resp = HTTPResponse(stdout=out)
+ req = HTTPRequest(sys.stdin, e, resp)
+ data = self.file.index_html(req,resp)
+ self.assertEqual(resp.getStatus(), 304)
+ self.assertEqual(data, '')
+
+ # modified since
+ t_mod = rfc1123_date(now - 100)
+ e['HTTP_IF_MODIFIED_SINCE'] = t_mod
+ out = StringIO()
+ resp = HTTPResponse(stdout=out)
+ req = HTTPRequest(sys.stdin, e, resp)
+ data = self.file.index_html(req,resp)
+ self.assertEqual(resp.getStatus(), 200)
+ self.assertEqual(data, str(self.file.data))
+
+ def testPUT(self):
+ s = '# some python\n'
+
+ # with content type
+ data = StringIO(s)
+ req = aputrequest(data, 'text/x-python')
+ req.processInputs()
+ self.file.PUT(req, req.RESPONSE)
+
+ self.assertEqual(self.file.content_type, 'text/x-python')
+ self.assertEqual(str(self.file.data), s)
+
+ # without content type
+ data.seek(0)
+ req = aputrequest(data, '')
+ req.processInputs()
+ self.file.PUT(req, req.RESPONSE)
+
+ self.assertEqual(self.file.content_type, 'text/x-python')
+ self.assertEqual(str(self.file.data), s)
+
+ def testIndexHtmlWithPdata(self):
+ self.file.manage_upload('a' * (2 << 16)) # 128K
+ self.file.index_html(self.app.REQUEST, self.app.REQUEST.RESPONSE)
+ self.assert_(self.app.REQUEST.RESPONSE._wrote)
+
+ def testIndexHtmlWithString(self):
+ self.file.manage_upload('a' * 100) # 100 bytes
+ self.file.index_html(self.app.REQUEST, self.app.REQUEST.RESPONSE)
+ self.assert_(not self.app.REQUEST.RESPONSE._wrote)
+
+ def testStr(self):
+ self.assertEqual(str(self.file), self.data)
+
+class ImageTests(FileTests):
+ data = open(filedata, 'rb').read()
+ content_type = 'image/gif'
+ factory = 'manage_addImage'
+
+ def testUpdateData(self):
+ self.file.update_data(self.data)
+ self.assertEqual(self.file.size, len(self.data))
+ self.assertEqual(self.file.data, self.data)
+ self.assertEqual(self.file.width, 16)
+ self.assertEqual(self.file.height, 16)
+ self.failUnless(ADummyCache.invalidated)
+ self.failUnless(ADummyCache.set)
+
+ def testStr(self):
+ self.assertEqual(str(self.file),
+ ('<img src="http://foo/file" alt="" title="" height="16" width="16" '
+ 'border="0" />'))
+
+ def testTag(self):
+ self.assertEqual(self.file.tag(),
+ ('<img src="http://foo/file" alt="" title="" height="16" width="16" '
+ 'border="0" />'))
+
+ def testViewImageOrFile(self):
+ pass # dtml method,screw it
+
+def test_suite():
+ suite = unittest.TestSuite()
+ suite.addTest( unittest.makeSuite( FileTests ) )
+ suite.addTest( unittest.makeSuite( ImageTests ))
+ return suite
+
+if __name__ == "__main__":
+ unittest.main()
More information about the Zope-Checkins
mailing list