merge
This commit is contained in:
		
						commit
						bfe9779b37
					
				| 
						 | 
					@ -173,7 +173,6 @@ class CaptureManager:
 | 
				
			||||||
        if funcarg_outerr is not None:
 | 
					        if funcarg_outerr is not None:
 | 
				
			||||||
            outerr = (outerr[0] + funcarg_outerr[0],
 | 
					            outerr = (outerr[0] + funcarg_outerr[0],
 | 
				
			||||||
                      outerr[1] + funcarg_outerr[1])
 | 
					                      outerr[1] + funcarg_outerr[1])
 | 
				
			||||||
        if not rep.passed:
 | 
					 | 
				
			||||||
        addouterr(rep, outerr)
 | 
					        addouterr(rep, outerr)
 | 
				
			||||||
        if not rep.passed or rep.when == "teardown":
 | 
					        if not rep.passed or rep.when == "teardown":
 | 
				
			||||||
            outerr = ('', '')
 | 
					            outerr = ('', '')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -107,11 +107,20 @@ class LogXML(object):
 | 
				
			||||||
            time=getattr(report, 'duration', 0)
 | 
					            time=getattr(report, 'duration', 0)
 | 
				
			||||||
        ))
 | 
					        ))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _write_captured_output(self, report):
 | 
				
			||||||
 | 
					        sec = dict(report.sections)
 | 
				
			||||||
 | 
					        for name in ('out', 'err'):
 | 
				
			||||||
 | 
					            content = sec.get("Captured std%s" % name)
 | 
				
			||||||
 | 
					            if content:
 | 
				
			||||||
 | 
					                tag = getattr(Junit, 'system-'+name)
 | 
				
			||||||
 | 
					                self.append(tag(bin_xml_escape(content)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def append(self, obj):
 | 
					    def append(self, obj):
 | 
				
			||||||
        self.tests[-1].append(obj)
 | 
					        self.tests[-1].append(obj)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def append_pass(self, report):
 | 
					    def append_pass(self, report):
 | 
				
			||||||
        self.passed += 1
 | 
					        self.passed += 1
 | 
				
			||||||
 | 
					        self._write_captured_output(report)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def append_failure(self, report):
 | 
					    def append_failure(self, report):
 | 
				
			||||||
        #msg = str(report.longrepr.reprtraceback.extraline)
 | 
					        #msg = str(report.longrepr.reprtraceback.extraline)
 | 
				
			||||||
| 
						 | 
					@ -120,16 +129,11 @@ class LogXML(object):
 | 
				
			||||||
                Junit.skipped(message="xfail-marked test passes unexpectedly"))
 | 
					                Junit.skipped(message="xfail-marked test passes unexpectedly"))
 | 
				
			||||||
            self.skipped += 1
 | 
					            self.skipped += 1
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            sec = dict(report.sections)
 | 
					 | 
				
			||||||
            fail = Junit.failure(message="test failure")
 | 
					            fail = Junit.failure(message="test failure")
 | 
				
			||||||
            fail.append(str(report.longrepr))
 | 
					            fail.append(str(report.longrepr))
 | 
				
			||||||
            self.append(fail)
 | 
					            self.append(fail)
 | 
				
			||||||
            for name in ('out', 'err'):
 | 
					 | 
				
			||||||
                content = sec.get("Captured std%s" % name)
 | 
					 | 
				
			||||||
                if content:
 | 
					 | 
				
			||||||
                    tag = getattr(Junit, 'system-'+name)
 | 
					 | 
				
			||||||
                    self.append(tag(bin_xml_escape(content)))
 | 
					 | 
				
			||||||
            self.failed += 1
 | 
					            self.failed += 1
 | 
				
			||||||
 | 
					        self._write_captured_output(report)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def append_collect_failure(self, report):
 | 
					    def append_collect_failure(self, report):
 | 
				
			||||||
        #msg = str(report.longrepr.reprtraceback.extraline)
 | 
					        #msg = str(report.longrepr.reprtraceback.extraline)
 | 
				
			||||||
| 
						 | 
					@ -162,6 +166,7 @@ class LogXML(object):
 | 
				
			||||||
                              message=skipreason
 | 
					                              message=skipreason
 | 
				
			||||||
                ))
 | 
					                ))
 | 
				
			||||||
        self.skipped += 1
 | 
					        self.skipped += 1
 | 
				
			||||||
 | 
					        self._write_captured_output(report)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def pytest_runtest_logreport(self, report):
 | 
					    def pytest_runtest_logreport(self, report):
 | 
				
			||||||
        if report.passed:
 | 
					        if report.passed:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -70,16 +70,21 @@ class PdbInvoke:
 | 
				
			||||||
        tw.sep(">", "traceback")
 | 
					        tw.sep(">", "traceback")
 | 
				
			||||||
        rep.toterminal(tw)
 | 
					        rep.toterminal(tw)
 | 
				
			||||||
        tw.sep(">", "entering PDB")
 | 
					        tw.sep(">", "entering PDB")
 | 
				
			||||||
        # A doctest.UnexpectedException is not useful for post_mortem.
 | 
					
 | 
				
			||||||
        # Use the underlying exception instead:
 | 
					        tb = self._postmortem_traceback(call.excinfo)
 | 
				
			||||||
        if isinstance(call.excinfo.value, py.std.doctest.UnexpectedException):
 | 
					 | 
				
			||||||
            tb = call.excinfo.value.exc_info[2]
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            tb = call.excinfo._excinfo[2]
 | 
					 | 
				
			||||||
        post_mortem(tb)
 | 
					        post_mortem(tb)
 | 
				
			||||||
        rep._pdbshown = True
 | 
					        rep._pdbshown = True
 | 
				
			||||||
        return rep
 | 
					        return rep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @staticmethod
 | 
				
			||||||
 | 
					    def _postmortem_traceback(excinfo):
 | 
				
			||||||
 | 
					        # A doctest.UnexpectedException is not useful for post_mortem.
 | 
				
			||||||
 | 
					        # Use the underlying exception instead:
 | 
				
			||||||
 | 
					        if isinstance(excinfo.value, py.std.doctest.UnexpectedException):
 | 
				
			||||||
 | 
					            return excinfo.value.exc_info[2]
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            return excinfo._excinfo[2]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def post_mortem(t):
 | 
					def post_mortem(t):
 | 
				
			||||||
    pdb = py.std.pdb
 | 
					    pdb = py.std.pdb
 | 
				
			||||||
    class Pdb(pdb.Pdb):
 | 
					    class Pdb(pdb.Pdb):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -282,13 +282,35 @@ class TestPython:
 | 
				
			||||||
        if not sys.platform.startswith("java"):
 | 
					        if not sys.platform.startswith("java"):
 | 
				
			||||||
            assert "hx" in fnode.toxml()
 | 
					            assert "hx" in fnode.toxml()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_pass_captures_stdout(self, testdir):
 | 
				
			||||||
 | 
					        testdir.makepyfile("""
 | 
				
			||||||
 | 
					            def test_pass():
 | 
				
			||||||
 | 
					                print('hello-stdout')
 | 
				
			||||||
 | 
					        """)
 | 
				
			||||||
 | 
					        result, dom = runandparse(testdir)
 | 
				
			||||||
 | 
					        node = dom.getElementsByTagName("testsuite")[0]
 | 
				
			||||||
 | 
					        pnode = node.getElementsByTagName("testcase")[0]
 | 
				
			||||||
 | 
					        systemout = pnode.getElementsByTagName("system-out")[0]
 | 
				
			||||||
 | 
					        assert "hello-stdout" in systemout.toxml()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_pass_captures_stderr(self, testdir):
 | 
				
			||||||
 | 
					        testdir.makepyfile("""
 | 
				
			||||||
 | 
					            import sys
 | 
				
			||||||
 | 
					            def test_pass():
 | 
				
			||||||
 | 
					                sys.stderr.write('hello-stderr')
 | 
				
			||||||
 | 
					        """)
 | 
				
			||||||
 | 
					        result, dom = runandparse(testdir)
 | 
				
			||||||
 | 
					        node = dom.getElementsByTagName("testsuite")[0]
 | 
				
			||||||
 | 
					        pnode = node.getElementsByTagName("testcase")[0]
 | 
				
			||||||
 | 
					        systemout = pnode.getElementsByTagName("system-err")[0]
 | 
				
			||||||
 | 
					        assert "hello-stderr" in systemout.toxml()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_mangle_testnames():
 | 
					def test_mangle_testnames():
 | 
				
			||||||
    from _pytest.junitxml import mangle_testnames
 | 
					    from _pytest.junitxml import mangle_testnames
 | 
				
			||||||
    names = ["a/pything.py", "Class", "()", "method"]
 | 
					    names = ["a/pything.py", "Class", "()", "method"]
 | 
				
			||||||
    newnames = mangle_testnames(names)
 | 
					    newnames = mangle_testnames(names)
 | 
				
			||||||
    assert newnames == ["a.pything", "Class", "method"]
 | 
					    assert newnames == ["a.pything", "Class", "method"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
def test_dont_configure_on_slaves(tmpdir):
 | 
					def test_dont_configure_on_slaves(tmpdir):
 | 
				
			||||||
    gotten = []
 | 
					    gotten = []
 | 
				
			||||||
    class FakeConfig:
 | 
					    class FakeConfig:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue