[Zope-CVS] CVS: Products/Zelenium - CHANGES.txt:1.21 zuite.py:1.14

Tres Seaver tseaver at zope.com
Wed May 4 11:25:35 EDT 2005


Update of /cvs-repository/Products/Zelenium
In directory cvs.zope.org:/tmp/cvs-serv25919

Modified Files:
	CHANGES.txt zuite.py 
Log Message:
 - Fix recursive ZIPfile generation, including synthesized URLs; add tests.


=== Products/Zelenium/CHANGES.txt 1.20 => 1.21 ===
--- Products/Zelenium/CHANGES.txt:1.20	Wed May  4 09:39:27 2005
+++ Products/Zelenium/CHANGES.txt	Wed May  4 11:24:35 2005
@@ -1,5 +1,13 @@
 Zelenium Product Changelog
 
+  After Zelenium-0.5
+
+    - Further repaired recursive ZIPfile generation, including normalizing
+      URLs in generated HTML.
+
+    - Extended zuite unittests to test 'listTestCases' and
+      'manage_createSnapshot', as well as recursive ZIPfile generation.
+
   Zelenium-0.5 (2005/05/04)
 
     - CVS tag:  'Zelenium-0_5'


=== Products/Zelenium/zuite.py 1.13 => 1.14 ===
--- Products/Zelenium/zuite.py:1.13	Mon May  2 23:59:45 2005
+++ Products/Zelenium/zuite.py	Wed May  4 11:24:35 2005
@@ -238,19 +238,23 @@
     splash_html = PageTemplateFile( 'suiteSplash', _WWW_DIR )
 
     security.declareProtected( View, 'listTestCases' )
-    def listTestCases( self ):
+    def listTestCases( self, prefix=() ):
         """ Return a list of our contents which qualify as test cases.
         """
         result = []
         types = [ self.meta_type ]
         types.extend( self.test_case_metatypes )
-        for tcid, testcase in self.objectItems( types ):
-            if isinstance(testcase, self.__class__):
-                result.extend( testcase.listTestCases() )
+        for tcid, test_case in self.objectItems( types ):
+            if isinstance(test_case, self.__class__):
+                result.extend( test_case.listTestCases(
+                                        prefix=prefix + ( tcid, ) ) )
             else:
+                path = '/'.join( prefix + ( tcid, ) )
                 result.append( { 'id' : tcid
-                               , 'title' : testcase.title_or_id()
-                               , 'url' : testcase.absolute_url(1)
+                               , 'title' : test_case.title_or_id()
+                               , 'url' : path
+                               , 'path' : path
+                               , 'test_case' : test_case
                                } )
         return result
 
@@ -269,6 +273,119 @@
         raise KeyError, key
 
 
+    security.declarePrivate('_listProductInfo')
+    def _listProductInfo( self ):
+        """ Return a list of strings of form '%(name)s %(version)s'.
+
+        o Each line describes one product installed in the Control_Panel.
+        """
+        result = []
+        cp = self.getPhysicalRoot().Control_Panel
+        products = cp.Products.objectItems()
+        products.sort()
+
+        for product_name, product in products:
+            version = product.version or 'unreleased'
+            result.append( '%s %s' % ( product_name, version ) )
+
+        return result
+
+ 
+    security.declareProtected(ManageSeleniumTestCases, 'manage_zipfile')
+    manage_zipfile = PageTemplateFile( 'suiteZipFile', _WWW_DIR )
+
+    security.declareProtected(ManageSeleniumTestCases, 'getZipFileName')
+    def getZipFileName(self):
+        """ Generate a suitable name for the zip file.
+        """
+        now = _getNow()
+        now_str = now.ISO()[:10]
+        return '%s-%s.zip' % ( self.getId(), now_str )
+
+
+    security.declareProtected(ManageSeleniumTestCases, 'manage_getZipFile')
+    def manage_getZipFile(self, archive_name=None, RESPONSE=None):
+        """ Export the test suite as a zip file.
+        """
+        if archive_name is None or archive_name.strip() == '':
+            archive_name = self.getZipFileName()
+
+        bits = self._getZipFile()
+
+        if RESPONSE is None:
+            return bits
+
+        RESPONSE.setHeader('Content-type', 'application/zip')
+        RESPONSE.setHeader('Content-length', str( len( bits ) ) )
+        RESPONSE.setHeader('Content-disposition',
+                            'inline;filename=%s' % archive_name )
+        RESPONSE.write(bits)
+
+
+    security.declareProtected(ManageSeleniumTestCases, 'manage_createSnapshot')
+    def manage_createSnapshot(self, archive_name=None, RESPONSE=None):
+        """ Save the test suite as a zip file *in the zuite*.
+        """
+        if archive_name is None or archive_name.strip() == '':
+            archive_name = self.getZipFileName()
+
+        archive = File( archive_name, title='', file=self._getZipFile() )
+        self._setObject( archive_name, archive )
+
+        if RESPONSE is not None:
+            RESPONSE.redirect( '%s/manage_main?manage_tabs_message=%s'
+                              % ( self.absolute_url()
+                                , 'Snapshot+added'
+                                ) )
+
+
+    security.declarePrivate('_getFilename')
+    def _getFilename(self, name):
+        """ Convert 'name' to a suitable filename, if needed.
+        """
+        if '.' not in name:
+            return '%s.html' % name
+
+        return name
+
+
+    security.declarePrivate('_getZipFile')
+    def _getZipFile(self):
+        """ Generate a zip file containing both tests and scaffolding.
+        """
+        stream = StringIO.StringIO()
+        archive = zipfile.ZipFile( stream, 'w' )
+
+        archive.writestr( 'index.html'
+                        , self.index_html( suite_name='testSuite.html' ) )
+
+        test_cases = self.listTestCases()
+
+        # ensure suffixes
+        for info in test_cases:
+            info[ 'path' ] = self._getFilename( info[ 'path' ] )
+            info[ 'url' ] = self._getFilename( info[ 'url' ] )
+
+        archive.writestr( 'testSuite.html'
+                        , self.test_suite_html( test_cases=test_cases ) )
+
+        for k, v in _SUPPORT_FILES.items():
+            archive.writestr( k, v.manage_FTPget() )
+
+        for info in test_cases:
+            test_case = info[ 'test_case' ]
+
+            if getattr( test_case, '__call__', None ) is not None:
+                body = test_case()  # XXX: DTML?
+            else:
+                body = test_case.manage_FTPget()
+
+            archive.writestr( info[ 'path' ]
+                            , body
+                            )
+        archive.close()
+        return stream.getvalue()
+
     security.declarePublic('postResults')
     def postResults(self, REQUEST):
         """ Record the results of a test run.
@@ -394,132 +511,6 @@
                                    , unquote( rfg( test_id ) )
                                    , 'text/html'
                                    ) )
-
-
-    security.declarePrivate('_listProductInfo')
-    def _listProductInfo( self ):
-        """ Return a list of strings of form '%(name)s %(version)s'.
-
-        o Each line describes one product installed in the Control_Panel.
-        """
-        result = []
-        cp = self.getPhysicalRoot().Control_Panel
-        products = cp.Products.objectItems()
-        products.sort()
-
-        for product_name, product in products:
-            version = product.version or 'unreleased'
-            result.append( '%s %s' % ( product_name, version ) )
-
-        return result
-
- 
-    security.declareProtected(ManageSeleniumTestCases, 'manage_zipfile')
-    manage_zipfile = PageTemplateFile( 'suiteZipFile', _WWW_DIR )
-
-    security.declareProtected(ManageSeleniumTestCases, 'getZipFileName')
-    def getZipFileName(self):
-        """ Generate a suitable name for the zip file.
-        """
-        now = _getNow()
-        now_str = now.ISO()[:10]
-        return '%s-%s.zip' % ( self.getId(), now_str )
-
-
-    security.declareProtected(ManageSeleniumTestCases, 'manage_getZipFile')
-    def manage_getZipFile(self, archive_name=None, RESPONSE=None):
-        """ Export the test suite as a zip file.
-        """
-        if archive_name is None or archive_name.strip() == '':
-            archive_name = self.getZipFileName()
-
-        bits = self._getZipFile()
-
-        if RESPONSE is None:
-            return bits
-
-        RESPONSE.setHeader('Content-type', 'application/zip')
-        RESPONSE.setHeader('Content-length', str( len( bits ) ) )
-        RESPONSE.setHeader('Content-disposition',
-                            'inline;filename=%s' % archive_name )
-        RESPONSE.write(bits)
-
-
-    security.declareProtected(ManageSeleniumTestCases, 'manage_createSnapshot')
-    def manage_createSnapshot(self, archive_name=None, RESPONSE=None):
-        """ Save the test suite as a zip file *in the zuite*.
-        """
-        if archive_name is None or archive_name.strip() == '':
-            archive_name = self.getZipFileName()
-
-        archive = File( archive_name, title='', file=self._getZipFile() )
-        self._setObject( archive_name, archive )
-
-        if RESPONSE is not None:
-            RESPONSE.redirect( '%s/manage_main?manage_tabs_message=%s'
-                              % ( self.absolute_url()
-                                , 'Snapshot+added'
-                                ) )
-
-
-    security.declarePrivate('_getFilename')
-    def _getFilename(self, name):
-        """ Convert 'name' to a suitable filename, if needed.
-        """
-        if '.' not in name:
-            return '%s.html' % name
-
-        return name
-
-
-    security.declarePrivate('_getZipFile')
-    def _getZipFile(self):
-        """ Generate a zip file containing both tests and scaffolding.
-        """
-        stream = StringIO.StringIO()
-        archive = zipfile.ZipFile( stream, 'w' )
-
-        self._getZipFile_recurse( archive )
-
-        for k, v in _SUPPORT_FILES.items():
-            archive.writestr( k, v.manage_FTPget() )
-
-        archive.close()
-        return stream.getvalue()
-
-
-    security.declarePrivate('_getZipFile_recurse')
-    def _getZipFile_recurse(self, archive, prefix=''):
-        """ Recursively add files to the archive.
-        """
-        archive.writestr( 'index.html'
-                        , self.index_html( suite_name='testSuite.html' ) )
-
-        test_cases = []
-
-        for ( k, v ) in self.objectItems( self.test_case_metatypes ):
-            id =  self._getFilename( k )
-            path = prefix and '%s/%s' % ( prefix, id ) or id
-
-            test_cases.append( { 'id' :  id
-                               , 'title' : v.title_or_id()
-                               , 'url' : path
-                               , 'path' : path
-                               , 'data' : v.manage_FTPget()
-                               } )
-
-        archive.writestr( 'testSuite.html'
-                        , self.test_suite_html( test_cases=test_cases ) )
-
-        for test_case in test_cases:
-            archive.writestr( test_case[ 'path' ]
-                            , test_case[ 'data' ] )
-
-        for subsuite_id, subsuite in self.objectItems( self.meta_type ):
-            subsuite._getZipFile_recurse( archive
-                                        , prefix='%s/%s' % ( prefix 
-                                                           , subsuite_id )
-                                        )
 
 InitializeClass(Zuite)
 



More information about the Zope-CVS mailing list