
fitnesse.testsystems.slim.InProcessSlimClient Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fitnesse Show documentation
Show all versions of fitnesse Show documentation
The fully integrated standalone wiki, and acceptance testing framework.
package fitnesse.testsystems.slim;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import fitnesse.slim.SlimServer;
import fitnesse.slim.SlimStreamReader;
import fitnesse.slim.SlimVersion;
import fitnesse.slim.instructions.Instruction;
import fitnesse.slim.protocol.SlimDeserializer;
import fitnesse.slim.protocol.SlimListBuilder;
import fitnesse.slim.protocol.SlimSerializer;
import fitnesse.testsystems.ExecutionLogListener;
import fitnesse.util.MockSocket;
public class InProcessSlimClient implements SlimClient {
private final String testSystemName;
private final SlimServer slimServer;
private final ExecutionLogListener executionLogListener;
private MockSocket socket;
private PipedOutputStream clientOutput;
private Thread slimServerThread;
private SlimStreamReader reader;
private double slimServerVersion;
public InProcessSlimClient(String testSystemName, SlimServer slimServer, ExecutionLogListener executionLogListener) {
this.testSystemName = testSystemName;
this.slimServer = slimServer;
this.executionLogListener = executionLogListener;
}
@Override
public void start() throws IOException, SlimVersionMismatch {
commandStarted();
PipedInputStream socketInput = new PipedInputStream();
clientOutput = new PipedOutputStream(socketInput);
PipedInputStream clientInput = new PipedInputStream();
PipedOutputStream socketOutput = new PipedOutputStream(clientInput);
reader = new SlimStreamReader(clientInput);
socket = new MockSocket(socketInput, socketOutput);
// Start SlimServer in a separate thread
slimServerThread = new Thread(new Runnable() {
@Override public void run() {
try {
slimServer.serve(socket);
executionLogListener.exitCode(0);
} catch (Throwable t) { // NOSONAR
// This point is not reached since no errors bubble up this far
executionLogListener.exceptionOccurred(t);
}
}
});
slimServerThread.start();
connect();
}
private void commandStarted() {
executionLogListener.commandStarted(new ExecutionLogListener.ExecutionContext() {
@Override
public String getCommand() {
return "";
}
@Override
public String getTestSystemName() {
return testSystemName;
}
});
}
@Override
public Map invokeAndGetResponse(List statements) throws IOException {
if (statements.isEmpty())
return Collections.emptyMap();
String instructions = SlimSerializer.serialize(new SlimListBuilder(slimServerVersion).toList(statements));
SlimStreamReader.sendSlimMessage(clientOutput, instructions);
String results = reader.getSlimMessage();
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy