void () { fireOnBeforeTestingFinished(myTestsRootProxy); // has been already invoked! // 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 // then all is ok otherwise process was terminated by user if (myIsTestingFinished) { // has been already invoked! return; } myIsTestingFinished = true; // 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 // then all is ok otherwise process was terminated by user if (!isTreeComplete(myRunningTestsFullNameToProxy.keySet(), myTestsRootProxy)) { myTestsRootProxy.setTerminated(); myRunningTestsFullNameToProxy.clear(); } mySuitesStack.clear(); myTestsRootProxy.setFinished(); myCurrentChildren.clear(); //fire events fireOnTestingFinished(myTestsRootProxy); super.onFinishTesting(); }