junit: speed up start - send objects first; do not send through err and out

This commit is contained in:
anna
2010-12-10 21:48:58 +03:00
parent a4bee57790
commit fe30364a51
10 changed files with 55 additions and 49 deletions
@@ -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";