From 587d1501a7fb204c53bc025d055c05be344d9f50 Mon Sep 17 00:00:00 2001 From: Jeremy Thurgood Date: Wed, 27 Mar 2013 17:34:58 +0200 Subject: [PATCH] Avoid collecting duplicate failures when using --looponfail. --- testing/test_looponfail.py | 18 ++++++++++++++++++ xdist/looponfail.py | 6 +++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/testing/test_looponfail.py b/testing/test_looponfail.py index 1c6df5a..863b4be 100644 --- a/testing/test_looponfail.py +++ b/testing/test_looponfail.py @@ -206,6 +206,24 @@ class TestLooponFailing: remotecontrol.loop_once() assert len(remotecontrol.failures) == 1 + def test_looponfail_multiple_errors(self, testdir, monkeypatch): + modcol = testdir.getmodulecol(""" + def test_one(): + assert 0 + """) + remotecontrol = RemoteControl(modcol.config) + orig_runsession = remotecontrol.runsession + + def runsession_dups(): + # twisted.trial test cases may report multiple errors. + failures, reports, collection_failed = orig_runsession() + print failures + return failures * 2, reports, collection_failed + + monkeypatch.setattr(remotecontrol, 'runsession', runsession_dups) + remotecontrol.loop_once() + assert len(remotecontrol.failures) == 1 + class TestFunctional: def test_fail_to_ok(self, testdir): diff --git a/xdist/looponfail.py b/xdist/looponfail.py index 4f4907f..8987040 100644 --- a/xdist/looponfail.py +++ b/xdist/looponfail.py @@ -89,7 +89,11 @@ class RemoteControl(object): if collection_failed: reports = ["Collection failed, keeping previous failure set"] else: - self.failures = failures + uniq_failures = [] + for failure in failures: + if failure not in uniq_failures: + uniq_failures.append(failure) + self.failures = uniq_failures def repr_pytest_looponfailinfo(failreports, rootdirs): tr = py.io.TerminalWriter()