mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
junit: speed up start - send objects first; do not send through err and out
This commit is contained in:
+20
-15
@@ -15,29 +15,42 @@
|
||||
*/
|
||||
package com.intellij.rt.execution.junit.segments;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Hashtable;
|
||||
|
||||
public abstract class OutputObjectRegistry {
|
||||
private final Hashtable myKnownKeys = new Hashtable();
|
||||
private int myLastIndex = 0;
|
||||
private PacketProcessor myMainTransport;
|
||||
private PacketProcessor myAuxilaryTransport;
|
||||
|
||||
public OutputObjectRegistry(PacketProcessor transport) {
|
||||
myMainTransport = transport;
|
||||
}
|
||||
|
||||
public OutputObjectRegistry(PacketProcessor mainTransport, PacketProcessor auxilaryTransport) {
|
||||
this(mainTransport);
|
||||
myAuxilaryTransport = auxilaryTransport;
|
||||
}
|
||||
|
||||
public String referenceTo(Object test) {
|
||||
if (myKnownKeys.containsKey(test))
|
||||
return (String) myKnownKeys.get(test);
|
||||
return sendObject(test);
|
||||
}
|
||||
|
||||
public String referenceTo(Object test, Collection packets) {
|
||||
if (myKnownKeys.containsKey(test))
|
||||
return (String) myKnownKeys.get(test);
|
||||
return sendObject(test, packets);
|
||||
}
|
||||
|
||||
private String sendObject(Object test, Collection packets) {
|
||||
String key = String.valueOf(myLastIndex++);
|
||||
myKnownKeys.put(test, key);
|
||||
final Packet packet = createPacket();
|
||||
packet.addString(PoolOfDelimiters.OBJECT_PREFIX).addReference(key);
|
||||
addStringRepresentation(test, packet);
|
||||
packet.addLong(getTestCont(test));
|
||||
packet.addString(PoolOfDelimiters.REFERENCE_END_STR);
|
||||
packets.add(packet);
|
||||
return key;
|
||||
}
|
||||
|
||||
public Packet createPacket() {
|
||||
return new Packet(myMainTransport, this);
|
||||
}
|
||||
@@ -48,21 +61,13 @@ public abstract class OutputObjectRegistry {
|
||||
Packet packet = createPacket().addString(PoolOfDelimiters.OBJECT_PREFIX).addReference(key);
|
||||
addStringRepresentation(test, packet);
|
||||
packet.addLong(getTestCont(test));
|
||||
sendViaAllTransports(packet);
|
||||
packet.send();
|
||||
return key;
|
||||
}
|
||||
|
||||
protected abstract int getTestCont(Object test);
|
||||
protected abstract void addStringRepresentation(Object test, Packet packet);
|
||||
|
||||
private void sendViaAllTransports(Packet packet) {
|
||||
packet.send();
|
||||
if (myAuxilaryTransport != null)
|
||||
packet.sendThrough(myAuxilaryTransport);
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected static void addTestClass(Packet packet, String className) {
|
||||
packet.
|
||||
addLimitedString(PoolOfTestTypes.TEST_CLASS).
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.intellij.rt.execution.junit.segments;
|
||||
import junit.runner.BaseTestRunner;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.Collection;
|
||||
import java.util.Vector;
|
||||
|
||||
public class Packet extends PacketWriter {
|
||||
@@ -36,6 +37,10 @@ public class Packet extends PacketWriter {
|
||||
return addReference(myRegistry.referenceTo(test));
|
||||
}
|
||||
|
||||
public Packet addObject(Object test, Collection packet) {
|
||||
return addReference(myRegistry.referenceTo(test, packet));
|
||||
}
|
||||
|
||||
public Packet addReference(String reference) {
|
||||
appendString(reference + PoolOfDelimiters.REFERENCE_END);
|
||||
return this;
|
||||
|
||||
@@ -20,6 +20,7 @@ package com.intellij.rt.execution.junit.segments;
|
||||
*/
|
||||
public interface PoolOfDelimiters {
|
||||
char REFERENCE_END = ':';
|
||||
String REFERENCE_END_STR = ":";
|
||||
char INTEGER_DELIMITER = ' ';
|
||||
|
||||
String OBJECT_PREFIX = "O";
|
||||
|
||||
@@ -62,8 +62,8 @@ public class JUnit3IdeaTestRunner extends TestRunner implements IdeaTestRunner {
|
||||
|
||||
public void setStreams(SegmentedOutputStream segmentedOut, SegmentedOutputStream segmentedErr) {
|
||||
setPrinter(new TimeSender());
|
||||
myRegistry = new JUnit3OutputObjectRegistry(segmentedOut, segmentedErr);
|
||||
myTestsListener = new TestResultsSender(myRegistry, segmentedErr);
|
||||
myRegistry = new JUnit3OutputObjectRegistry(segmentedOut);
|
||||
myTestsListener = new TestResultsSender(myRegistry);
|
||||
}
|
||||
|
||||
protected TestResult createTestResult() {
|
||||
|
||||
@@ -28,12 +28,8 @@ import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
public class JUnit3OutputObjectRegistry extends OutputObjectRegistry {
|
||||
public JUnit3OutputObjectRegistry(PacketProcessor mainTransport, PacketProcessor auxilaryTransport) {
|
||||
super(mainTransport, auxilaryTransport);
|
||||
}
|
||||
|
||||
public JUnit3OutputObjectRegistry(PacketProcessor out) {
|
||||
super(out);
|
||||
public JUnit3OutputObjectRegistry(PacketProcessor mainTransport) {
|
||||
super(mainTransport);
|
||||
}
|
||||
|
||||
protected int getTestCont(Object test) {
|
||||
|
||||
@@ -18,7 +18,6 @@ package com.intellij.junit3;
|
||||
import com.intellij.rt.execution.junit.*;
|
||||
import com.intellij.rt.execution.junit.segments.OutputObjectRegistry;
|
||||
import com.intellij.rt.execution.junit.segments.Packet;
|
||||
import com.intellij.rt.execution.junit.segments.PacketProcessor;
|
||||
import com.intellij.rt.execution.junit.states.PoolOfTestStates;
|
||||
import junit.framework.AssertionFailedError;
|
||||
import junit.framework.ComparisonFailure;
|
||||
@@ -27,13 +26,11 @@ import junit.framework.TestListener;
|
||||
|
||||
public class TestResultsSender implements TestListener {
|
||||
private final OutputObjectRegistry myRegistry;
|
||||
private final PacketProcessor myErr;
|
||||
private TestMeter myCurrentTestMeter;
|
||||
private Test myCurrentTest;
|
||||
|
||||
public TestResultsSender(OutputObjectRegistry packetFactory, PacketProcessor segmentedErr) {
|
||||
public TestResultsSender(OutputObjectRegistry packetFactory) {
|
||||
myRegistry = packetFactory;
|
||||
myErr = segmentedErr;
|
||||
}
|
||||
|
||||
public synchronized void addError(Test test, Throwable throwable) {
|
||||
@@ -93,7 +90,6 @@ public class TestResultsSender implements TestListener {
|
||||
|
||||
private void switchOutput(Packet switchPacket) {
|
||||
switchPacket.send();
|
||||
switchPacket.sendThrough(myErr);
|
||||
}
|
||||
|
||||
public synchronized void startTest(Test test) {
|
||||
|
||||
@@ -21,16 +21,15 @@ import com.intellij.rt.execution.junit.segments.Packet;
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
import java.util.Enumeration;
|
||||
import java.util.Vector;
|
||||
import java.util.*;
|
||||
|
||||
public class TreeSender {
|
||||
private static void sendNode(Test test, Packet packet) {
|
||||
private static void sendNode(Test test, Packet packet, Collection objects) {
|
||||
Vector testCases = getTestCasesOf(test);
|
||||
packet.addObject(test).addLong(testCases.size());
|
||||
packet.addObject(test, objects).addLong(testCases.size());
|
||||
for (int i = 0; i < testCases.size(); i++) {
|
||||
Test nextTest = (Test)testCases.get(i);
|
||||
sendNode(nextTest, packet);
|
||||
sendNode(nextTest, packet, objects);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +53,11 @@ public class TreeSender {
|
||||
public static void sendSuite(OutputObjectRegistry registry, Test suite) {
|
||||
Packet packet = registry.createPacket();
|
||||
packet.addString(PoolOfDelimiters.TREE_PREFIX);
|
||||
sendNode(suite, packet);
|
||||
Collection objects = new ArrayList();
|
||||
sendNode(suite, packet, objects);
|
||||
for (Iterator iterator = objects.iterator(); iterator.hasNext();) {
|
||||
((Packet)iterator.next()).send();
|
||||
}
|
||||
packet.addString("\n");
|
||||
packet.send();
|
||||
}
|
||||
|
||||
@@ -30,26 +30,29 @@ import org.junit.runner.manipulation.Filter;
|
||||
import org.junit.runner.notification.RunListener;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.*;
|
||||
|
||||
/** @noinspection UnusedDeclaration*/
|
||||
public class JUnit4IdeaTestRunner implements IdeaTestRunner {
|
||||
private RunListener myTestsListener;
|
||||
private OutputObjectRegistry myRegistry;
|
||||
|
||||
private static void sendNode(Description test, Packet packet) {
|
||||
private static void sendNode(Description test, Packet packet, Collection objectPackets) {
|
||||
final ArrayList children = test.getChildren();
|
||||
packet.addObject(test).addLong(children.size());
|
||||
packet.addObject(test, objectPackets).addLong(children.size());
|
||||
for (int i = 0; i < children.size(); i++) {
|
||||
sendNode((Description)children.get(i), packet);
|
||||
sendNode((Description)children.get(i), packet, objectPackets);
|
||||
}
|
||||
}
|
||||
|
||||
public static void sendTree(OutputObjectRegistry registry, Description suite) {
|
||||
public void sendTree(OutputObjectRegistry registry, Description suite) {
|
||||
Packet packet = registry.createPacket();
|
||||
packet.addString(PoolOfDelimiters.TREE_PREFIX);
|
||||
sendNode(suite, packet);
|
||||
Set objects = new HashSet();
|
||||
sendNode(suite, packet, objects);
|
||||
for (Iterator iterator = objects.iterator(); iterator.hasNext();) {
|
||||
((Packet)iterator.next()).send();
|
||||
}
|
||||
packet.addString("\n");
|
||||
packet.send();
|
||||
}
|
||||
@@ -150,8 +153,8 @@ public class JUnit4IdeaTestRunner implements IdeaTestRunner {
|
||||
|
||||
|
||||
public void setStreams(SegmentedOutputStream segmentedOut, SegmentedOutputStream segmentedErr) {
|
||||
myRegistry = new JUnit4OutputObjectRegistry(segmentedOut, segmentedErr);
|
||||
myTestsListener = new JUnit4TestResultsSender(myRegistry, segmentedErr);
|
||||
myRegistry = new JUnit4OutputObjectRegistry(segmentedOut);
|
||||
myTestsListener = new JUnit4TestResultsSender(myRegistry);
|
||||
}
|
||||
|
||||
private class TimeSender extends ResultPrinter {
|
||||
|
||||
@@ -27,8 +27,8 @@ import org.junit.runner.Description;
|
||||
|
||||
|
||||
public class JUnit4OutputObjectRegistry extends OutputObjectRegistry {
|
||||
public JUnit4OutputObjectRegistry(PacketProcessor mainTransport, PacketProcessor auxilaryTransport) {
|
||||
super(mainTransport, auxilaryTransport);
|
||||
public JUnit4OutputObjectRegistry(PacketProcessor mainTransport) {
|
||||
super(mainTransport);
|
||||
}
|
||||
|
||||
protected int getTestCont(Object test) {
|
||||
|
||||
@@ -35,13 +35,11 @@ import java.util.regex.Pattern;
|
||||
|
||||
public class JUnit4TestResultsSender extends RunListener {
|
||||
private final OutputObjectRegistry myRegistry;
|
||||
private final PacketProcessor myErr;
|
||||
private Map myCurrentTestMeters = new HashMap();
|
||||
private Set myCurrentTests = new HashSet();
|
||||
|
||||
public JUnit4TestResultsSender(OutputObjectRegistry packetFactory, PacketProcessor segmentedErr) {
|
||||
public JUnit4TestResultsSender(OutputObjectRegistry packetFactory) {
|
||||
myRegistry = packetFactory;
|
||||
myErr = segmentedErr;
|
||||
}
|
||||
|
||||
public synchronized void testFailure(Failure failure) throws Exception {
|
||||
@@ -139,7 +137,6 @@ public class JUnit4TestResultsSender extends RunListener {
|
||||
|
||||
private void switchOutput(Packet switchPacket) {
|
||||
switchPacket.send();
|
||||
switchPacket.sendThrough(myErr);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user