[py-svn] r37263 - in py/branch/config/py/test: . rsession terminal testing

hpk at codespeak.net hpk at codespeak.net
Wed Jan 24 14:59:23 CET 2007


Author: hpk
Date: Wed Jan 24 14:59:20 2007
New Revision: 37263

Modified:
   py/branch/config/py/test/config.py
   py/branch/config/py/test/rsession/slave.py
   py/branch/config/py/test/terminal/remote.py
   py/branch/config/py/test/testing/test_config.py
Log:
* introduce config.initdirect() which should
  be the central place to perform initialization
  on remote nodes/sides. 

* fix --looponfailing (which works nicely now) 

* have Conftest() be an instance instead of 
  a class-variable (avoid global state) 

* more thoroughly use the "config.topdir" concept
  (which is not neccessarily the pkgdir.dirpath())

* on merge_repr don't write values to 
  global defaultconftest module (this
  gets tests failing that reuse defaultconftest
  module, but also we want to avoid global 
  state in general)
  


Modified: py/branch/config/py/test/config.py
==============================================================================
--- py/branch/config/py/test/config.py	(original)
+++ py/branch/config/py/test/config.py	Wed Jan 24 14:59:20 2007
@@ -56,13 +56,14 @@
     def initdirect(self, topdir, repr, coltrails=None):
         assert not self._initialized
         self._initialized = True
+        self.topdir = py.path.local(topdir)
         self.merge_repr(repr)
-        self.topdir = topdir
-        self.args = coltrails or []
+        self._coltrails = coltrails 
 
     def getcolitems(self):
         """ return initial collectors. """
-        return [self._getcollector(path) for path in self.args]
+        trails = getattr(self, '_coltrails', None)
+        return [self._getcollector(path) for path in (trails or self.args)]
 
     def _getcollector(self, path):
         if isinstance(path, tuple):
@@ -187,7 +188,11 @@
                 value = getattr(self.option, name)
                 checkmarshal(name, value)
                 cmdlineopts[name] = value
-        return conftestdict, cmdlineopts
+        l = []
+        for path in self.args:
+            path = py.path.local(path)
+            l.append(path.relto(self.topdir)) 
+        return l, conftestdict, cmdlineopts
 
     def merge_repr(self, repr): 
         """ merge in the conftest and cmdline option values
@@ -198,10 +203,13 @@
             stored on the default conftest module (last
             priority) and the cmdline options on self.option. 
         """
-        defaultconftest = self.conftest.getconftestmodules(None)[0]
-        conftestdict, cmdlineopts = repr
-        for name, val in conftestdict.items(): 
-            setattr(defaultconftest, name, val) 
+        class override:
+            def __init__(self, d):
+                self.__dict__.update(d)
+        args, conftestdict, cmdlineopts = repr
+        self.args = [self.topdir.join(x) for x in args]
+        self.conftest.setinitial(self.args)
+        self.conftest._path2confmods[None].append(override(conftestdict))
         for name, val in cmdlineopts.items(): 
             setattr(self.option, name, val) 
 

Modified: py/branch/config/py/test/rsession/slave.py
==============================================================================
--- py/branch/config/py/test/rsession/slave.py	(original)
+++ py/branch/config/py/test/rsession/slave.py	Wed Jan 24 14:59:20 2007
@@ -130,10 +130,10 @@
     config = py.test.config
     if config._initialized:
         config = config._reparse([basedir])
+        config.merge_repr(config_repr)
     else:
-        config.conftest.setinitial([basedir])
+        config.initdirect(basedir, config_repr)
         #config.conftest.lget('adddefaultoptions')()
-    config.merge_repr(config_repr)
     if not config.option.nomagic:
         py.magic.invoke(assertion=1)
     mod = __import__(pkgname)

Modified: py/branch/config/py/test/terminal/remote.py
==============================================================================
--- py/branch/config/py/test/terminal/remote.py	(original)
+++ py/branch/config/py/test/terminal/remote.py	Wed Jan 24 14:59:20 2007
@@ -99,7 +99,7 @@
         """, stdout=self.out, stderr=self.out) 
         print "MASTER: triggered slave terminal session ->"
         repr = self.config.make_repr(conftestnames=[])
-        channel.send((repr, [str(x) for x in self.config.args], failures))
+        channel.send((str(self.config.topdir), repr, failures))
         print "MASTER: send start info" 
         try:
             return channel.receive()
@@ -110,22 +110,16 @@
 def slaverun_TerminalSession(channel):
     """ we run this on the other side. """
     print "SLAVE: starting"
-    repr, args, failures = channel.receive()
+    topdir, repr, failures = channel.receive()
     print "SLAVE: received configuration" 
     config = py.test.config 
-    config.args = args 
-    config.conftest.setinitial(args)
-    config.merge_repr(repr)
+    config.initdirect(topdir, repr, failures)
     config.option.looponfailing = False 
     config.option.usepdb = False 
     config.option.executable = None
 
     session = config.initsession()
     session.shouldclose = channel.isclosed 
-    if failures: 
-        cols = getfailureitems(failures) 
-    else:
-        cols = args 
     print "SLAVE: starting session.main()"
     session.main()
     failures = session.getitemoutcomepairs(py.test.Item.Failed)

Modified: py/branch/config/py/test/testing/test_config.py
==============================================================================
--- py/branch/config/py/test/testing/test_config.py	(original)
+++ py/branch/config/py/test/testing/test_config.py	Wed Jan 24 14:59:20 2007
@@ -100,8 +100,8 @@
     assert gettopdir([c]) == a
     assert gettopdir([c, Z]) == tmp 
 
+
 def test_config_init_direct():
-    py.test.skip("XXX partially not implemented")
     tmp = py.test.ensuretemp("initdirect")
     tmp.ensure("__init__.py")
     tmp.ensure("conftest.py").write("x=1 ; y=2")
@@ -114,12 +114,10 @@
     for col1, col2 in zip(config.getcolitems(), config2.getcolitems()):
         assert col1.fspath == col2.fspath
     py.test.raises(AssertionError, "config2.initdirect(None, None)")
-    config3 = py.test.config._reparse([tmp.dirpath()])
-    col = config3._getcollector(hello)
-    # XXX write repr_colspecs(topdir, cols), 
-    #     and have it consumable by initdirect()
+    from py.__.test.config import Config
+    config3 = Config()
     config3.initdirect(topdir=tmp.dirpath(), repr=repr,
-        collectspecs=[col.listnames()])
+        coltrails=[(tmp.basename, (hello.basename,))])
     assert config3.getvalue('x') == 1
     assert config3.getvalue('y') == 2
     cols = config.getcolitems()
@@ -127,8 +125,7 @@
     col = cols[0]
     assert col.name == 'test_hello.py'
     assert col.parent.name == tmp.basename 
-    assert col.parent.parent.name == tmp.dirpath().basename 
-    assert col.parent.parent.parent is None
+    assert col.parent.parent is None 
 
 def test_config_make_and_merge_repr():
     tmp = py.test.ensuretemp("reprconfig1")



More information about the pytest-commit mailing list