/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.test.remote;
import gw.test.TestMetadata;
import gw.xml.simple.SimpleXmlNode;
import junit.framework.*;
import java.util.*;
import gw.util.GosuStringUtil;
import gw.util.StreamUtil;
import gw.test.TestExecutionManager;
public class RemoteTestClassWrapper extends TestSuite {
private String _typeName;
private int _numTestMethods;
public RemoteTestClassWrapper(TestExecutionManager executionManager, String typeName, String... methodNames) {
_typeName = typeName;
_numTestMethods = 0;
Set<String> filteredMethods = (methodNames == null ? null : new HashSet<String>(Arrays.asList(methodNames)));
SimpleXmlNode testClassInfo = extractMethodsRemotely(executionManager, typeName);
for (SimpleXmlNode methodInfo : testClassInfo.getChildren()) {
String methodName = methodInfo.getAttributes().get("name");
if (filteredMethods == null || filteredMethods.contains(methodName)) {
_numTestMethods++;
RemoteTestClass remoteTestClass = new RemoteTestClass(typeName, methodName, getNumTestMethods(), executionManager);
List<TestMetadata> testMetadata = new ArrayList<TestMetadata>();
for (SimpleXmlNode metadataNode : methodInfo.getChildren()) {
testMetadata.add(TestMetadata.deserializeXml(metadataNode));
}
remoteTestClass.addMetadata(testMetadata);
addTest(remoteTestClass);
}
}
}
@Override
public String getName() {
return _typeName;
}
public int getNumTestMethods() {
return _numTestMethods;
}
public static SimpleXmlNode extractMethodsRemotely(TestExecutionManager executionManager, String typeName) {
byte[] response = RemoteTestClass.makeRemoteRequest(((ForwardingTestEnvironment) executionManager.getEnvironment()).getRemoteURL(), typeName.replace('.', '/') + "/testInfo");
String responseString = StreamUtil.toString(response);
return SimpleXmlNode.parse(responseString);
}
}