public void onSuiteTreeStarted(String suiteName, String locationHint) { }
public void onSuiteTreeEnded(String suiteName) { }
+ public void onBuildTreeEnded() { }
// progress events
});
}
+ private final List<Runnable> myBuildTreeRunnables = new ArrayList<Runnable>();
+
@Override
public void onSuiteTreeNodeAdded(final String testName, final String locationHint) {
myTreeBuildBeforeStart = true;
- addToInvokeLater(new Runnable() {
+ myBuildTreeRunnables.add(new Runnable() {
@Override
public void run() {
final SMTestProxy testProxy = new SMTestProxy(testName, false, locationHint);
@Override
public void onSuiteTreeStarted(final String suiteName, final String locationHint) {
myTreeBuildBeforeStart = true;
- addToInvokeLater(new Runnable() {
+ myBuildTreeRunnables.add(new Runnable() {
@Override
public void run() {
final SMTestProxy parentSuite = getCurrentSuite();
@Override
public void onSuiteTreeEnded(final String suiteName) {
- addToInvokeLater(new Runnable() {
+ myBuildTreeRunnables.add(new Runnable() {
@Override
public void run() {
mySuitesStack.popSuite(suiteName);
}
});
+
+ if (myBuildTreeRunnables.size() > 100) {
+ final ArrayList<Runnable> runnables = new ArrayList<Runnable>(myBuildTreeRunnables);
+ myBuildTreeRunnables.clear();
+ processTreeBuildEvents(runnables);
+ }
+ }
+
+ @Override
+ public void onBuildTreeEnded() {
+ processTreeBuildEvents(myBuildTreeRunnables);
+ }
+
+ private void processTreeBuildEvents(final List<Runnable> runnables) {
+ addToInvokeLater(new Runnable() {
+ @Override
+ public void run() {
+ for (Runnable runnable : runnables) {
+ runnable.run();
+ }
+ runnables.clear();
+ }
+ });
}
@Override
processor.onSuiteTreeEnded(suiteName);
}
}
+
+ private void fireOnBuildTreeEnded() {
+ final GeneralTestEventsProcessor processor = myProcessor;
+ if (processor != null) {
+ processor.onBuildTreeEnded();
+ }
+ }
private void fireOnTestOutput(@NotNull TestOutputEvent testOutputEvent) {
// local variable is used to prevent concurrent modification
@NonNls private static final String SUITE_TREE_STARTED = "suiteTreeStarted";
@NonNls private static final String SUITE_TREE_ENDED = "suiteTreeEnded";
@NonNls private static final String SUITE_TREE_NODE = "suiteTreeNode";
+ @NonNls private static final String BUILD_TREE_ENDED_NODE = "treeEnded";
@NonNls private static final String ROOT_PRESENTATION = "rootName";
@NonNls private static final String ATTR_KEY_STATUS = "status";
else if (SUITE_TREE_NODE.equals(name)) {
fireOnSuiteTreeNodeAdded(msg.getAttributes().get("name"), msg.getAttributes().get(ATTR_KEY_LOCATION_URL));
}
+ else if (BUILD_TREE_ENDED_NODE.equals(name)) {
+ fireOnBuildTreeEnded();
+ }
else if (ROOT_PRESENTATION.equals(name)) {
final Map<String, String> attributes = msg.getAttributes();
fireRootPresentationAdded(attributes.get("name"), attributes.get("comment"), attributes.get("location"));
public void sendTree(Description description) {
myRootName = JUnit4ReflectionUtil.getClassName((Description)description);
sendTree(description, null, new ArrayList());
+ myPrintStream.println("##teamcity[treeEnded]");
}
private static String getShortName(String fqName) {