blob: aea2587556ba31e5fc5cb51ba4f5ab98fe7192a4 [file] [log] [blame]
/*
* Copyright 2008 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.user.client.rpc.TestSetFactory.SerializableDoublyLinkedNode;
import com.google.gwt.user.client.rpc.TestSetFactory.SerializableGraphWithCFS;
import com.google.gwt.user.client.rpc.TestSetFactory.SerializablePrivateNoArg;
import com.google.gwt.user.client.rpc.TestSetFactory.SerializableWithTwoArrays;
import com.google.gwt.user.client.rpc.impl.AbstractSerializationStream;
/**
* TODO: document me.
*/
public class ObjectGraphTest extends RpcTestBase {
public void testAcyclicGraph() {
ObjectGraphTestServiceAsync service = getServiceAsync();
delayTestFinishForRpc();
service.echo_AcyclicGraph(TestSetFactory.createAcyclicGraph(),
new AsyncCallback() {
public void onFailure(Throwable caught) {
TestSetValidator.rethrowException(caught);
}
public void onSuccess(Object result) {
assertNotNull(result);
assertTrue(TestSetValidator.isValidAcyclicGraph((SerializableDoublyLinkedNode) result));
finishTest();
}
});
}
public void testComplexCyclicGraph() {
ObjectGraphTestServiceAsync service = getServiceAsync();
delayTestFinishForRpc();
service.echo_ComplexCyclicGraph(TestSetFactory.createComplexCyclicGraph(),
new AsyncCallback() {
public void onFailure(Throwable caught) {
TestSetValidator.rethrowException(caught);
}
public void onSuccess(Object result) {
assertNotNull(result);
assertTrue(TestSetValidator.isValidComplexCyclicGraph((SerializableDoublyLinkedNode) result));
finishTest();
}
});
}
public void testComplexCyclicGraphWithCFS() {
ObjectGraphTestServiceAsync service = getServiceAsync();
delayTestFinishForRpc();
service.echo_ComplexCyclicGraphWithCFS(
TestSetFactory.createComplexCyclicGraphWithCFS(),
new AsyncCallback<SerializableGraphWithCFS>() {
public void onFailure(Throwable caught) {
TestSetValidator.rethrowException(caught);
}
public void onSuccess(SerializableGraphWithCFS result) {
assertNotNull(result);
assertTrue(TestSetValidator.isValidComplexCyclicGraphWithCFS(result));
finishTest();
}
});
}
public void testComplexCyclicGraph2() {
ObjectGraphTestServiceAsync service = getServiceAsync();
final SerializableDoublyLinkedNode node = TestSetFactory.createComplexCyclicGraph();
delayTestFinishForRpc();
service.echo_ComplexCyclicGraph(node, node, new AsyncCallback() {
public void onFailure(Throwable caught) {
TestSetValidator.rethrowException(caught);
}
public void onSuccess(Object result) {
assertNotNull(result);
assertTrue(TestSetValidator.isValidComplexCyclicGraph((SerializableDoublyLinkedNode) result));
finishTest();
}
});
}
public void testDoublyReferencedArray() {
ObjectGraphTestServiceAsync service = getServiceAsync();
final SerializableWithTwoArrays node = TestSetFactory.createDoublyReferencedArray();
delayTestFinishForRpc();
service.echo_SerializableWithTwoArrays(node, new AsyncCallback() {
public void onFailure(Throwable caught) {
TestSetValidator.rethrowException(caught);
}
public void onSuccess(Object result) {
assertNotNull(result);
assertTrue(TestSetValidator.isValid((SerializableWithTwoArrays) result));
finishTest();
}
});
}
public void testElision() throws SerializationException {
ObjectGraphTestServiceAsync async = getServiceAsync();
SerializationStreamWriter writer = ((SerializationStreamFactory) async).createStreamWriter();
AbstractSerializationStream stream = (AbstractSerializationStream) writer;
assertEquals("Missing flag", expectedObfuscationState(),
stream.hasFlags(AbstractSerializationStream.FLAG_ELIDE_TYPE_NAMES));
SerializableDoublyLinkedNode node = new SerializableDoublyLinkedNode();
writer.writeObject(node);
String s = writer.toString();
// Don't use class.getName() due to conflict with removal of type names
assertEquals("Checking for SerializableDoublyLinkedNode",
expectedObfuscationState(), !s.contains("SerializableDoublyLinkedNode"));
}
public void testPrivateNoArg() {
ObjectGraphTestServiceAsync service = getServiceAsync();
final SerializablePrivateNoArg node = TestSetFactory.createPrivateNoArg();
delayTestFinishForRpc();
service.echo_PrivateNoArg(node, new AsyncCallback() {
public void onFailure(Throwable caught) {
TestSetValidator.rethrowException(caught);
}
public void onSuccess(Object result) {
assertNotNull(result);
assertTrue(TestSetValidator.isValid((SerializablePrivateNoArg) result));
finishTest();
}
});
}
public void testTrivialCyclicGraph() {
ObjectGraphTestServiceAsync service = getServiceAsync();
delayTestFinishForRpc();
service.echo_TrivialCyclicGraph(TestSetFactory.createTrivialCyclicGraph(),
new AsyncCallback() {
public void onFailure(Throwable caught) {
TestSetValidator.rethrowException(caught);
}
public void onSuccess(Object result) {
assertNotNull(result);
assertTrue(TestSetValidator.isValidTrivialCyclicGraph((SerializableDoublyLinkedNode) result));
finishTest();
}
});
}
protected boolean expectedObfuscationState() {
return false;
}
private ObjectGraphTestServiceAsync getServiceAsync() {
if (objectGraphTestService == null) {
objectGraphTestService = (ObjectGraphTestServiceAsync) GWT.create(ObjectGraphTestService.class);
((ServiceDefTarget) objectGraphTestService).setServiceEntryPoint(GWT.getModuleBaseURL()
+ "objectgraphs");
}
return objectGraphTestService;
}
private ObjectGraphTestServiceAsync objectGraphTestService;
}