/* * 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; }