blob: ca2be1752bb366bc632f6c4f06def0d76b8d93ee [file] [log] [blame]
/*
* Copyright 2015 Google LLC
*
* 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.auto.value.client;
import com.google.auto.value.AutoValue;
import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
import com.google.gwt.core.client.GWT;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
public class GwtSerializerTest extends GWTTestCase {
@RemoteServiceRelativePath("test")
public interface TestService extends RemoteService {
Simple echo(Simple simple);
SimpleWithBuilder echo(SimpleWithBuilder simple);
Nested echo(Nested nested);
NestedWithBuilder echo(NestedWithBuilder nested);
Generics<Simple> echo(Generics<Simple> generics);
GenericsWithBuilder<SimpleWithBuilder> echo(GenericsWithBuilder<SimpleWithBuilder> generics);
}
interface TestServiceAsync {
void echo(Simple simple, AsyncCallback<Simple> callback);
void echo(SimpleWithBuilder simple, AsyncCallback<SimpleWithBuilder> callback);
void echo(Nested nested, AsyncCallback<Nested> callback);
void echo(NestedWithBuilder nested, AsyncCallback<NestedWithBuilder> callback);
void echo(Generics<Simple> generics, AsyncCallback<Generics<Simple>> callback);
void echo(
GenericsWithBuilder<SimpleWithBuilder> generics,
AsyncCallback<GenericsWithBuilder<SimpleWithBuilder>> callback);
}
class AssertEqualsCallback<T> implements AsyncCallback<T> {
private final T expected;
AssertEqualsCallback(T expected) {
this.expected = expected;
}
@Override
public void onSuccess(T actual) {
assertEquals(expected, actual);
finishTest();
}
@Override
public void onFailure(Throwable caught) {
fail();
}
}
@GwtIncompatible("RemoteServiceServlet")
@SuppressWarnings("serial")
public static class TestServiceImpl extends RemoteServiceServlet implements TestService {
@Override
public Simple echo(Simple simple) {
return Simple.create(simple.message());
}
@Override
public SimpleWithBuilder echo(SimpleWithBuilder simple) {
return SimpleWithBuilder.builder().message(simple.message()).build();
}
@Override
public Nested echo(Nested nested) {
return Nested.create(nested.message(), echo(nested.simple()));
}
@Override
public NestedWithBuilder echo(NestedWithBuilder nested) {
return NestedWithBuilder.builder()
.message(nested.message())
.simple(echo(nested.simple()))
.build();
}
@Override
public Generics<Simple> echo(Generics<Simple> generics) {
return Generics.create(echo(generics.simple()));
}
@Override
public GenericsWithBuilder<SimpleWithBuilder> echo(
GenericsWithBuilder<SimpleWithBuilder> generics) {
return GenericsWithBuilder.<SimpleWithBuilder>builder()
.simple(echo(generics.simple()))
.build();
}
}
@AutoValue
@GwtCompatible(serializable = true)
abstract static class Simple {
public abstract String message();
public static Simple create(String message) {
return new AutoValue_GwtSerializerTest_Simple(message);
}
}
@AutoValue
@GwtCompatible(serializable = true)
abstract static class SimpleWithBuilder {
public abstract String message();
public static Builder builder() {
return new AutoValue_GwtSerializerTest_SimpleWithBuilder.Builder();
}
@AutoValue.Builder
public interface Builder {
Builder message(String message);
SimpleWithBuilder build();
}
}
@AutoValue
@GwtCompatible(serializable = true)
abstract static class Nested {
public abstract String message();
public abstract Simple simple();
public static Nested create(String message, Simple simple) {
return new AutoValue_GwtSerializerTest_Nested(message, simple);
}
}
@AutoValue
@GwtCompatible(serializable = true)
abstract static class NestedWithBuilder {
public abstract String message();
public abstract SimpleWithBuilder simple();
public static Builder builder() {
return new AutoValue_GwtSerializerTest_NestedWithBuilder.Builder();
}
@AutoValue.Builder
public interface Builder {
Builder message(String message);
Builder simple(SimpleWithBuilder simple);
NestedWithBuilder build();
}
}
@AutoValue
@GwtCompatible(serializable = true)
abstract static class Generics<T> {
public abstract T simple();
public static <T> Generics<T> create(T simple) {
return new AutoValue_GwtSerializerTest_Generics<T>(simple);
}
}
@AutoValue
@GwtCompatible(serializable = true)
abstract static class GenericsWithBuilder<T> {
public abstract T simple();
public static <T> Builder<T> builder() {
return new AutoValue_GwtSerializerTest_GenericsWithBuilder.Builder<T>();
}
@AutoValue.Builder
public interface Builder<T> {
Builder<T> simple(T simple);
GenericsWithBuilder<T> build();
}
}
private TestServiceAsync testService;
@Override
public String getModuleName() {
return "com.google.auto.value.GwtSerializerSuite";
}
@Override
public void gwtSetUp() {
testService = GWT.create(TestService.class);
}
public void testSimple() {
delayTestFinish(2000);
Simple simple = Simple.create("able");
testService.echo(simple, new AssertEqualsCallback<Simple>(simple));
}
public void testSimpleWithBuilder() {
delayTestFinish(2000);
SimpleWithBuilder simple = SimpleWithBuilder.builder().message("able").build();
testService.echo(simple, new AssertEqualsCallback<SimpleWithBuilder>(simple));
}
public void testNested() {
delayTestFinish(2000);
Nested nested = Nested.create("able", Simple.create("baker"));
testService.echo(nested, new AssertEqualsCallback<Nested>(nested));
}
public void testNestedWithBuilder() {
delayTestFinish(2000);
NestedWithBuilder nested =
NestedWithBuilder.builder()
.message("able")
.simple(SimpleWithBuilder.builder().message("baker").build())
.build();
testService.echo(nested, new AssertEqualsCallback<NestedWithBuilder>(nested));
}
public void testGenerics() {
delayTestFinish(2000);
Generics<Simple> generics = Generics.create(Simple.create("able"));
testService.echo(generics, new AssertEqualsCallback<Generics<Simple>>(generics));
}
public void testGenericsWithBuilder() {
delayTestFinish(2000);
GenericsWithBuilder<SimpleWithBuilder> generics =
GenericsWithBuilder.<SimpleWithBuilder>builder()
.simple(SimpleWithBuilder.builder().message("able").build())
.build();
testService.echo(
generics, new AssertEqualsCallback<GenericsWithBuilder<SimpleWithBuilder>>(generics));
}
}