use of com.googlecode.gwt.test.exceptions.GwtTestException in project gwt-test-utils by gwt-test-utils.
the class GwtRpcInvocationHandler method invoke.
@SuppressWarnings("unchecked")
public Object invoke(Object proxy, Method method, Object[] args) {
Object[] subArgs = new Object[args.length - 1];
for (int i = 0; i < args.length - 1; i++) {
subArgs[i] = args[i];
}
final AsyncCallback<Object> callback = (AsyncCallback<Object>) args[args.length - 1];
final Method m = methodTable.get(method);
Command asyncCallbackCommand;
if (m == null) {
logger.error("Method not found " + method);
// error 500 async call
asyncCallbackCommand = new Command() {
public void execute() {
callback.onFailure(new StatusCodeException(500, "No method found"));
}
};
} else {
try {
logger.debug("Invoking " + m + " on " + target.getClass().getName());
List<RemoteServiceExecutionHandler> handlers = GwtConfig.get().getModuleRunner().getRemoteServiceExecutionHandlers();
// notify
for (RemoteServiceExecutionHandler handler : handlers) {
handler.beforeRpcRequestSerialization(m, subArgs);
}
// Serialize objects
Object[] serializedArgs = new Object[subArgs.length];
for (int i = 0; i < subArgs.length; i++) {
try {
serializedArgs[i] = serializerHander.serializeUnserialize(subArgs[i]);
} catch (Exception e) {
throw new GwtTestRpcException("Error while serializing argument " + i + " of type " + subArgs[i].getClass().getName() + " in method " + method.getDeclaringClass().getSimpleName() + "." + method.getName() + "(..)", e);
}
}
// notify
for (RemoteServiceExecutionHandler handler : handlers) {
handler.beforeRpcRequestSerialization(m, serializedArgs);
}
AbstractRemoteServiceServletPatcher.currentCalledMethod = m;
// notify
for (RemoteServiceExecutionHandler handler : handlers) {
handler.beforeRpcMethodExecution(m, serializedArgs);
}
Object resultObject = m.invoke(target, serializedArgs);
// notify
for (RemoteServiceExecutionHandler handler : handlers) {
handler.afterRpcMethodExecution(m, resultObject);
}
Object returnObject;
try {
// notify
for (RemoteServiceExecutionHandler handler : handlers) {
handler.beforeRpcResponseSerialization(m, resultObject);
}
returnObject = serializerHander.serializeUnserialize(resultObject);
// notify
for (RemoteServiceExecutionHandler handler : handlers) {
handler.afterRpcResponseSerialization(m, returnObject);
}
} catch (Exception e) {
throw new GwtTestRpcException("Error while serializing object of type " + resultObject.getClass().getName() + " which was returned from RPC Service " + method.getDeclaringClass().getSimpleName() + "." + method.getName() + "(..)", e);
}
final Object o = returnObject;
// success async call
asyncCallbackCommand = new Command() {
public void execute() {
logger.debug("Result of " + m.getName() + " : " + o);
callback.onSuccess(o);
}
};
} catch (final InvocationTargetException e) {
if (GwtTestException.class.isInstance(e.getCause())) {
throw (GwtTestException) e.getCause();
}
asyncCallbackCommand = new Command() {
public void execute() {
logger.info("Exception when invoking service throw to handler " + e.getMessage());
exceptionHandler.handle(e.getCause(), callback);
}
};
} catch (final IllegalAccessException e) {
asyncCallbackCommand = new Command() {
public void execute() {
logger.error("GWT RPC exception : " + e.toString(), e);
callback.onFailure(new StatusCodeException(500, e.toString()));
}
};
} catch (final IllegalArgumentException e) {
asyncCallbackCommand = new Command() {
public void execute() {
logger.error("GWT RPC exception : " + e.toString(), e);
callback.onFailure(new StatusCodeException(500, e.toString()));
}
};
}
}
// delegate the execution to the Browser simulator
BrowserSimulatorImpl.get().recordAsyncCall(asyncCallbackCommand);
// async callback always return void
return null;
}
use of com.googlecode.gwt.test.exceptions.GwtTestException in project gwt-test-utils by gwt-test-utils.
the class UiBinderParser method createUiComponent.
/**
* Parse the .ui.xml file to fill the corresponding objects.
*
* @param rootComponentClass the root component's class that UiBinder has to instanciated.
* @param uiBinderClass the UiBinder subinterface which is used
* @param owner The owner of the UiBinder template, with {@link UiField} fields.
*/
<T> T createUiComponent(Class<UiBinder<?, ?>> uiBinderClass, Object owner) {
@SuppressWarnings("unchecked") Class<T> rootComponentClass = (Class<T>) getRootElementClass(uiBinderClass);
InputStream uiXmlStream = getUiXmlFile(owner.getClass(), uiBinderClass);
if (uiXmlStream == null) {
throw new GwtTestUiBinderException("Cannot find the .ui.xml file corresponding to '" + owner.getClass().getName() + "'");
}
UiXmlContentHandler<T> contentHandler = new UiXmlContentHandler<T>(rootComponentClass, owner);
XMLReader saxReader = XmlUtils.newXMLReader();
try {
saxReader.setContentHandler(contentHandler);
saxReader.parse(new InputSource(uiXmlStream));
} catch (Exception e) {
if (GwtTestException.class.isInstance(e)) {
throw (GwtTestException) e;
} else {
throw new GwtTestUiBinderException("Error while parsing '" + owner.getClass().getSimpleName() + ".ui.xml'", e);
}
} finally {
try {
uiXmlStream.close();
} catch (IOException e) {
// do nothing
}
}
return contentHandler.getRootComponent();
}
use of com.googlecode.gwt.test.exceptions.GwtTestException in project gwt-test-utils by gwt-test-utils.
the class GwtMockitoAnnotations method processInjectMocks.
private static void processInjectMocks(GwtTestWithMockito testInstance) {
GwtMockitoUtils.getMockFields(testInstance.getClass(), InjectMocks.class).forEach(injectMocksField -> {
try {
GwtReflectionUtils.makeAccessible(injectMocksField);
Object injectMocks = injectMocksField.get(testInstance);
testInstance.getAllMocksByType().forEach((key, value) -> GwtReflectionUtils.getFields(injectMocks.getClass()).stream().filter(field -> field.getType().isAssignableFrom(key)).forEach(field -> {
try {
GwtReflectionUtils.makeAccessible(field);
Object mock = field.get(injectMocks);
if (mock == null) {
field.set(injectMocks, value);
}
} catch (IllegalAccessException e) {
// should never append
throw new GwtTestException("", e);
}
}));
} catch (IllegalAccessException e) {
// should never append
throw new GwtTestException("", e);
}
});
}
use of com.googlecode.gwt.test.exceptions.GwtTestException in project gwt-test-utils by gwt-test-utils.
the class JSONParserPatcher method evaluate.
@PatchMethod
static JSONValue evaluate(String json, boolean strict) {
JsonParser jp = null;
try {
JsonFactory f = new JsonFactory();
if (!strict) {
f.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
f.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
f.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
f.configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true);
f.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
f.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
f.configure(JsonParser.Feature.ALLOW_NUMERIC_LEADING_ZEROS, true);
}
jp = f.createJsonParser(json);
JsonToken token = jp.nextToken();
if (JsonToken.START_ARRAY == token) {
JSONArray jsonArray = extractJSONArray(json, null, jp);
return jsonArray;
} else {
JSONObject jsonObject = extractJSONObject(json, jp);
return jsonObject;
}
} catch (Exception e) {
if (e instanceof GwtTestException) {
throw (GwtTestException) e;
}
throw new GwtTestJSONException("Error while parsing JSON string '" + json + "'", e);
} finally {
if (jp != null) {
try {
// ensure resources get cleaned up timely and properly
jp.close();
} catch (IOException e) {
// should never happen
}
}
}
}
use of com.googlecode.gwt.test.exceptions.GwtTestException in project gwt-test-utils by gwt-test-utils.
the class GwtTestWithEasyMock method beforeGwtTestWithEasyMock.
@Before
public void beforeGwtTestWithEasyMock() {
mockedClasses.forEach(clazz -> getMockManager().registerMock(clazz, createMock(clazz)));
try {
for (Field f : mockFields) {
Object mock = getMockManager().getMock(f.getType());
GwtReflectionUtils.makeAccessible(f);
f.set(this, mock);
}
} catch (Exception e) {
if (GwtTestException.class.isInstance(e)) {
throw (GwtTestException) e;
} else {
throw new ReflectionException("Error during gwt-test-utils @Mock creation", e);
}
}
}
Aggregations