[Erp5-report] r38638 jm - /erp5/trunk/products/ERP5Type/tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Sat Sep 25 17:48:18 CEST 2010


Author: jm
Date: Sat Sep 25 17:48:17 2010
New Revision: 38638

URL: http://svn.erp5.org?rev=38638&view=rev
Log:
ERP5TypeTestCase: cleanup

- remove 'current_app' global variable
- clean initialization of self.app and self.portal

Modified:
    erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py
    erp5/trunk/products/ERP5Type/tests/ProcessingNodeTestCase.py

Modified: erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py?rev=38638&r1=38637&r2=38638&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py [utf8] Sat Sep 25 17:48:17 2010
@@ -26,7 +26,6 @@ from warnings import warn
 from ZTUtils import make_query
 
 # XXX make sure that get_request works.
-current_app = None
 import Products.ERP5Type.Utils
 from Products.ERP5Type import Globals
 
@@ -34,23 +33,24 @@ from Products.ERP5Type import Globals
 original_get_request = Globals.get_request
 convertToUpperCase = Products.ERP5Type.Utils.convertToUpperCase
 
+from Testing.ZopeTestCase.connections import registry
+def get_context():
+  if registry:
+    return registry._conns[-1]
+
 def get_request():
   request = original_get_request()
   if request is not None:
     return request
+  current_app = get_context()
   if current_app is not None:
     return current_app.REQUEST
-  else:
-    return None
 
 Products.ERP5Type.Utils.get_request = get_request
 Globals.get_request = get_request
 
-
 try:
   import itools.zope
-  def get_context():
-    return current_app
   itools.zope.get_context = get_context
 except ImportError:
   pass
@@ -315,10 +315,15 @@ class ERP5TypeTestCase(ProcessingNodeTes
 
     def getPortal(self):
       """Returns the portal object, i.e. the "fixture root".
+
+      It also does some initialization, as if the portal was accessed for the
+      first time for the current request.
+      For performance reason, this should be used in only 3 places:
+      'setUpERP5Site', 'tic' and 'PortalTestCase._portal'
       """
       portal = self.app[self.getPortalName()]
-      # FIXME: Try not to run this call below so often by moving it somewhere
-      # where it is called exactly once per test.
+      # Make sure skins are correctly set-up (it's not implicitly set up
+      # by Acquisition on Zope 2.12 as it is on 2.8)
       portal.setupCurrentSkin(portal.REQUEST)
       self.REQUEST = portal.REQUEST
       setSite(portal)
@@ -525,9 +530,6 @@ class ERP5TypeTestCase(ProcessingNodeTes
                          erp5_catalog_storage=erp5_catalog_storage, 
                          use_dummy_mail_host=use_dummy_mail_host)
       PortalTestCase.setUp(self)
-      global current_app
-      current_app = self.app
-      self._updateConnectionStrings()
 
     def afterSetUp(self):
       '''Called after setUp() has completed. This is
@@ -551,15 +553,11 @@ class ERP5TypeTestCase(ProcessingNodeTes
     def _updateConnectionStrings(self):
       """Update connection strings with values passed by the testRunner
       """
-      global current_app
-      if current_app is not None:
-        self.app = current_app
-      portal = self.getPortal()
       # update connection strings
       for connection_string_name, connection_string in\
                                     _getConnectionStringDict().items():
         connection_name = connection_string_name.replace('_string', '')
-        getattr(portal, connection_name).edit('', connection_string)
+        getattr(self.portal, connection_name).edit('', connection_string)
 
     def _setUpDummyMailHost(self):
       """Replace Original Mail Host by Dummy Mail Host.
@@ -833,7 +831,6 @@ class ERP5TypeTestCase(ProcessingNodeTes
 
     def setUpERP5Site(self,
                      business_template_list=(),
-                     app=None,
                      quiet=0,
                      light_install=1,
                      create_activities=1,
@@ -852,17 +849,12 @@ class ERP5TypeTestCase(ProcessingNodeTes
         raise SetupSiteError(
             'Installation of %s already failed, giving up' % portal_name)
       try:
-        if app is None:
-          app = ZopeTestCase.app()
-        # this app will be closed after setUp, but keep an reference anyway, to
-        # make it's REQUEST available during setup
-        global current_app
-        current_app = app
+        self.app = app = self._app()
         app.test_portal_name = portal_name
 
         global setup_done
-        if not (hasattr(aq_base(app), portal_name) and
-                 setup_done.get(tuple(business_template_list))):
+        portal = app._getOb(portal_name, None)
+        if portal is None or not setup_done.get(tuple(business_template_list)):
           setup_done[tuple(business_template_list)] = 1
           business_template_list = \
             self._getBTPathAndIdList(business_template_list)
@@ -882,7 +874,6 @@ class ERP5TypeTestCase(ProcessingNodeTes
               setattr(app, 'isIndexable', 0)
               reindex = 0
 
-            portal = getattr(app, portal_name, None)
             if portal is None:
               if not quiet:
                 ZopeTestCase._print('Adding %s ERP5 Site ... ' % portal_name)
@@ -903,19 +894,12 @@ class ERP5TypeTestCase(ProcessingNodeTes
                                        reindex=reindex,
                                        create_activities=create_activities,
                                        **extra_constructor_kw )
-              portal = app[portal_name]
 
               if not quiet:
                 ZopeTestCase._print('done (%.3fs)\n' % (time.time() - _start))
               # Release locks
               transaction.commit()
-            self.portal = portal
-
-            setSite(portal)
-
-            # Make sure skins are correctly set-up (it's not implicitly set up
-            # by Acquisition on Zope 2.12 as it is on 2.8)
-            portal.setupCurrentSkin(portal.REQUEST)
+            self.portal = portal = self.getPortal()
 
             if len(setup_done) == 1: # make sure it is run only once
               try:
@@ -947,8 +931,6 @@ class ERP5TypeTestCase(ProcessingNodeTes
               if not quiet:
                 ZopeTestCase._print('Executing setUpOnce ... ')
                 start = time.time()
-              # setUpOnce method may use self.app and self.portal
-              self.app = app
               setup_once()
               if not quiet:
                 ZopeTestCase._print('done (%.3fs)\n' % (time.time() - start))
@@ -977,6 +959,7 @@ class ERP5TypeTestCase(ProcessingNodeTes
             raise
           else:
             transaction.commit()
+            del self.portal, self.app
             ZopeTestCase.close(app)
       except:
         f = StringIO()

Modified: erp5/trunk/products/ERP5Type/tests/ProcessingNodeTestCase.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/ProcessingNodeTestCase.py?rev=38638&r1=38637&r2=38638&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/ProcessingNodeTestCase.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/ProcessingNodeTestCase.py [utf8] Sat Sep 25 17:48:17 2010
@@ -131,6 +131,8 @@ class ProcessingNodeTestCase(backportUni
 
   def tic(self, verbose=0):
     """Execute pending activities"""
+    # Some tests like testDeferredStyle require that we use self.getPortal()
+    # instead of self.portal in order to setup current skin.
     portal_activities = self.getPortal().portal_activities
     if 1:
       if verbose:




More information about the Erp5-report mailing list