/* * Copyright 2009 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.user.client.rpc; import com.google.gwt.core.client.GWT; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestException; /** * Tests run-time serialization errors for GWT RPC. */ public class RunTimeSerializationErrorsTest extends RpcTestBase { public static MixedSerializableEchoServiceAsync getService() { MixedSerializableEchoServiceAsync service = GWT.create(MixedSerializableEchoService.class); ((ServiceDefTarget) service).setServiceEntryPoint(GWT.getModuleBaseURL() + "echo"); return service; } public void testBadSerialization1() { delayTestFinishForRpc(); getService().echoVoid(new MixedSerializable.NonSerializableSub(), new AsyncCallback<MixedSerializable>() { public void onFailure(Throwable caught) { finishTest(); } public void onSuccess(MixedSerializable result) { fail("RPC request should have failed"); } }); } public void testBadSerialization2() { final boolean[] callbackFired = new boolean[] {false}; Request req = getService().echoRequest( new MixedSerializable.NonSerializableSub(), new AsyncCallback<MixedSerializable>() { public void onFailure(Throwable caught) { callbackFired[0] = true; } public void onSuccess(MixedSerializable result) { fail("RPC request should have failed"); } }); assertTrue(callbackFired[0]); // should have happened synchronously assertFalse(req.isPending()); req.cancel(); } public void testBadSerialization3() throws RequestException { final boolean[] callbackFired = new boolean[] {false}; RequestBuilder rb = getService().echoRequestBuilder( new MixedSerializable.NonSerializableSub(), new AsyncCallback<MixedSerializable>() { public void onFailure(Throwable caught) { assertFalse("callback fired twice", callbackFired[0]); callbackFired[0] = true; } public void onSuccess(MixedSerializable result) { fail("RPC request should have failed"); } }); assertFalse(callbackFired[0]); // should fail when send() is called rb.send(); assertTrue(callbackFired[0]); // should have happened now } public void testGoodSerialization1() { delayTestFinishForRpc(); getService().echoVoid(new MixedSerializable.SerializableSub(), new AsyncCallback<MixedSerializable>() { public void onFailure(Throwable caught) { fail(caught.toString()); } public void onSuccess(MixedSerializable result) { finishTest(); } }); } public void testGoodSerialization2() { delayTestFinishForRpc(); getService().echoRequest(new MixedSerializable.SerializableSub(), new AsyncCallback<MixedSerializable>() { public void onFailure(Throwable caught) { fail(caught.toString()); } public void onSuccess(MixedSerializable result) { finishTest(); } }); } public void testGoodSerialization3() { delayTestFinishForRpc(); getService().echoVoid(new MixedSerializable.SerializableSub(), new AsyncCallback<MixedSerializable>() { public void onFailure(Throwable caught) { fail(caught.toString()); } public void onSuccess(MixedSerializable result) { finishTest(); } }); } }