/* * Copyright 2012 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.web.bindery.requestfactory.gwt.client; import com.google.gwt.core.client.GWT; import com.google.gwt.junit.client.GWTTestCase; import com.google.web.bindery.event.shared.SimpleEventBus; import com.google.web.bindery.requestfactory.shared.ProxyFor; import com.google.web.bindery.requestfactory.shared.Receiver; import com.google.web.bindery.requestfactory.shared.Request; import com.google.web.bindery.requestfactory.shared.RequestContext; import com.google.web.bindery.requestfactory.shared.RequestFactory; import com.google.web.bindery.requestfactory.shared.Service; import com.google.web.bindery.requestfactory.shared.SkipInterfaceValidation; import com.google.web.bindery.requestfactory.shared.ValueProxy; /** * Tests RequestFactory when using proxies for interfaces. * @see http://code.google.com/p/google-web-toolkit/issues/detail?id=5762 */ @SkipInterfaceValidation public class ProxyForInterfacesTest extends GWTTestCase { /** * The Factory. */ protected interface Factory extends RequestFactory { Context ctx(); } static class C0 implements I1 { public String getName() { return "C0"; } } static class C1 implements I2 { public String getName() { return "C1"; } } static class C2 extends C1 { public String getName() { return "C2"; } } @Service(ContextImpl.class) interface Context extends RequestContext { Request<I1> getC0(); Request<I1> getC1_RetI1(); Request<I2> getC1_RetI2(); Request<I1> getC2_RetI1(); Request<I2> getC2_RetI2(); } static class ContextImpl { public static I1 getC0() { return new C0(); } public static I1 getC1_RetI1() { return new C1(); } public static I2 getC1_RetI2() { return new C1(); } public static I1 getC2_RetI1() { return new C2(); } public static I2 getC2_RetI2() { return new C2(); } } @ProxyFor(I1.class) interface I1 extends ValueProxy { String getName(); } @ProxyFor(I2.class) interface I2 extends I1, ValueProxy { } class ReceiverAssert<T extends I1> extends Receiver<T> { String name; public ReceiverAssert(String name) { this.name = name; } @Override public void onSuccess(T response) { assertEquals(name, response.getName()); } } private static final int TEST_DELAY = 5000; protected Factory factory; @Override public String getModuleName() { return "com.google.web.bindery.requestfactory.gwt.RequestFactorySuite"; } public void testProxyForInterfaces() { delayTestFinish(TEST_DELAY); Context ctx = factory.ctx(); ctx.getC0().to(new ReceiverAssert<I1>("C0")); ctx.getC1_RetI1().to(new ReceiverAssert<I1>("C1")); ctx.getC2_RetI1().to(new ReceiverAssert<I1>("C2")); ctx.getC1_RetI2().to(new ReceiverAssert<I2>("C1")); ctx.getC2_RetI2().to(new ReceiverAssert<I2>("C2")); ctx.fire(new Receiver<Void>() { public void onSuccess(Void response) { finishTest(); } }); } protected Factory createFactory() { Factory f = GWT.create(Factory.class); f.initialize(new SimpleEventBus()); return f; } @Override protected void gwtSetUp() throws Exception { factory = createFactory(); } }