<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote">On Sun, Dec 30, 2012 at 6:48 AM, R. David Murray <span dir="ltr"><<a href="mailto:rdmurray@bitdance.com" target="_blank">rdmurray@bitdance.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Mon, 31 Dec 2012 00:38:47 +1000, Nick Coghlan <<a href="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</a>> wrote:<br>


> On Mon, Dec 31, 2012 at 12:19 AM, Eli Bendersky <<a href="mailto:eliben@gmail.com">eliben@gmail.com</a>> wrote:<br>
> > On Sun, Dec 30, 2012 at 5:54 AM, Stefan Krah <<a href="mailto:stefan@bytereef.org">stefan@bytereef.org</a>> wrote:<br>
> >><br>
> >> Eli Bendersky <<a href="mailto:eliben@gmail.com">eliben@gmail.com</a>> wrote:<br>
> >> > Yes, this is the solution currently used in test_xml_etree. However,<br>
> >> > once<br>
> >> > pickling tests are added things stop working. Pickle uses __import__ to<br>
> >> > import<br>
> >> > the module a class belongs to, bypassing all such trickery. So if<br>
> >> > test___all__<br>
> >> > got _elementtree into sys.modules, pickle's __import__ finds it even if<br>
> >> > all the<br>
> >> > tests in test_xml_etree manage to ignore it for the Python version<br>
> >> > because they<br>
> >> > use import_fresh_module.<br>
> >><br>
> >> I ran into the same problem for test_decimal. The only thing that appears<br>
> >> to work is to set sys.modules['decimal'] explicitly before calling<br>
> >> dumps()/loads(). See:<br>
> >><br>
> >>    PythonAPItests.test_pickle()<br>
> >>    ContextAPItests.test_pickle()<br>
> ><br>
> > Yes, this seems to have done the trick. Thanks for the suggestion.<br>
><br>
> It may be worth offering a context manager/decorator equivalent to<br>
> "import_fresh_module".<br>
<br>
</div>I suggested making import_fresh_module a context manager in the issue<br>
that Eli opened about test___all__.<br>
<div class="im"><br>
> > I'm still curious about the test-in-clean-env question though.<br>
><br>
> As Stefan noted, the main advantage we get is that sometimes the<br>
> failure to clean up properly is in the standard lib code rather than<br>
> the tests, and with complete isolation we'd be less likely to notice<br>
> the problem.<br>
><br>
> Once you combine that with the fact that rearchitecting regrtest to<br>
> work that way would be quite a bit of work, the motivation to make it<br>
> happen goes way down.<br>
><br>
> However, specifically spinning out the "import the world" tests like<br>
> test_pydoc and test___all__ to a separate process might be worth the<br>
> effort.<br>
<br>
</div>Adding something to regertest (or unittest?) so that certain nominated<br>
test modules are run in a subprocess has been discussed previously, but<br>
so far no one has stepped up to implement it :)  (I think this came up<br>
originally for test_site, but I don't remember for sure.)<br></blockquote><div><br></div><div style>test_subprocess and possibly a few others (things testing signal behavior, etc) already have some individual tests that do this.  its pretty easy.  subprocess.Popen of sys.executable typically with -E and the code either in a string via -c or else point at a second file or add an argument for main in the current file to detect.  making this simpler via something in test.support might make sense if there is a common need for it.</div>

<div style><br></div><div style>-gps</div></div></div></div>