From a677cc2dcdda439707e75dd0a271d9cd427f5af4 Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Tue, 21 Jan 2014 14:39:08 +0400 Subject: [PATCH] mark root node as terminated if some nodes aren't final --- ...neralIdBasedToSMTRunnerEventsConvertor.java | 18 ++++++++++++++++-- .../testframework/sm/runner/SMTestProxy.java | 7 +++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/GeneralIdBasedToSMTRunnerEventsConvertor.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/GeneralIdBasedToSMTRunnerEventsConvertor.java index 3a34a15e52e4..b156cda33c2a 100644 --- a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/GeneralIdBasedToSMTRunnerEventsConvertor.java +++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/GeneralIdBasedToSMTRunnerEventsConvertor.java @@ -94,9 +94,10 @@ public class GeneralIdBasedToSMTRunnerEventsConvertor extends GeneralTestEventsP // We don't know whether process was destroyed by user // or it finished after all tests have been run - // Lets assume, if at finish all suites except root suite are passed + // Lets assume, if at finish all nodes except root suite have final state (passed, failed or ignored), // then all is ok otherwise process was terminated by user - if (myRunningTestNodes.isEmpty()) { + boolean completeTree = isTreeComplete(); + if (completeTree) { myTestsRootProxy.setFinished(); } else { logProblem("Unexpected running nodes: " + myRunningTestNodes); @@ -110,6 +111,19 @@ public class GeneralIdBasedToSMTRunnerEventsConvertor extends GeneralTestEventsP }); } + private boolean isTreeComplete() { + if (!myRunningTestNodes.isEmpty()) { + return false; + } + List children = myTestsRootProxy.getChildren(); + for (SMTestProxy child : children) { + if (!child.isFinal() || child.wasTerminated()) { + return false; + } + } + return true; + } + @Override public void setPrinterProvider(@NotNull TestProxyPrinterProvider printerProvider) { myTestProxyPrinterProvider = printerProvider; diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/SMTestProxy.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/SMTestProxy.java index 009a3c251838..632be05a09b5 100644 --- a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/SMTestProxy.java +++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/SMTestProxy.java @@ -143,6 +143,13 @@ public class SMTestProxy extends AbstractTestProxy { return false; } + /** + * @return true if the state is final (PASSED, FAILED, IGNORED, TERMINATED) + */ + public boolean isFinal() { + return myState.isFinal(); + } + private void setStacktraceIfNotSet(@Nullable String stacktrace) { if (myStacktrace == null) myStacktrace = stacktrace; }