| /* |
| * Copyright 2014 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.shared; |
| |
| import com.google.gwt.core.client.GWT; |
| import com.google.gwt.junit.client.GWTTestCase; |
| import com.google.web.bindery.event.shared.SimpleEventBus; |
| |
| /** |
| * Tests advanced usage of RequestFactory where a ServiceLayerDecorator |
| * provides a service method at runtime, skipping interface validation at |
| * compile-time. |
| */ |
| public class MethodProvidedByServiceLayerTest extends GWTTestCase { |
| |
| /** The factory under test. */ |
| public interface Factory extends RequestFactory { |
| Context context(); |
| } |
| |
| /** |
| * RequestContext whose actual server-side methods will be provided |
| * dynamically at runtime by a ServiceLayerDecorator. |
| * <p> |
| * Note: the {@link SkipInterfaceValidation} is put on each method to test |
| * that it's actually looked up at that location (it was searched on the |
| * RequestContext only at some point). |
| */ |
| @Service(ServiceImpl.class) |
| public interface Context extends RequestContext { |
| @SkipInterfaceValidation |
| Request<String> missingDomainMethod(String string); |
| |
| // mapped to SimpleFoo#echo(SimpleFoo) |
| @SkipInterfaceValidation |
| Request<Proxy> missingDomainType(Proxy proxy); |
| |
| // mapped to SimpleFoo#persistAndReturnSelf |
| @SkipInterfaceValidation |
| InstanceRequest<Proxy, Proxy> missingDomainTypeInstanceMethod(); |
| } |
| |
| /** Proxy for an inexistent domain class; mapped at runtime to SimpleFoo. */ |
| @SkipInterfaceValidation |
| @ProxyForName("does.not.exist") |
| public interface Proxy extends EntityProxy { |
| } |
| |
| /** |
| * Dummy service for interface validation. |
| * <p> |
| * All actual service methods are provided at runtime by |
| * MethodProvidedByServiceLayerJreTest.Decorator. |
| */ |
| public static class ServiceImpl { |
| } |
| |
| private static final int TEST_DELAY = 5000; |
| |
| private Factory factory; |
| |
| @Override |
| public String getModuleName() { |
| return "com.google.web.bindery.requestfactory.gwt.RequestFactorySuite"; |
| } |
| |
| protected Factory createFactory() { |
| Factory toReturn = GWT.create(Factory.class); |
| toReturn.initialize(new SimpleEventBus()); |
| return toReturn; |
| } |
| |
| public void testMissingDomainMethod() { |
| delayTestFinish(TEST_DELAY); |
| Context ctx = context(); |
| ctx.missingDomainMethod("foo").fire(new Receiver<String>() { |
| @Override |
| public void onSuccess(String response) { |
| assertEquals("foo", response); |
| finishTest(); |
| } |
| }); |
| } |
| |
| public void testMissingDomainType() { |
| delayTestFinish(TEST_DELAY); |
| Context ctx = context(); |
| final Proxy proxy = ctx.create(Proxy.class); |
| ctx.missingDomainType(proxy).fire(new Receiver<Proxy>() { |
| @Override |
| public void onSuccess(Proxy response) { |
| // we only check that the call succeeds |
| finishTest(); |
| } |
| }); |
| } |
| |
| public void testMissingDomainTypeInstanceMethod() { |
| delayTestFinish(TEST_DELAY); |
| Context ctx = context(); |
| final Proxy proxy = ctx.create(Proxy.class); |
| ctx.missingDomainTypeInstanceMethod().using(proxy).fire(new Receiver<Proxy>() { |
| @Override |
| public void onSuccess(Proxy response) { |
| // we only check that the call succeeds |
| finishTest(); |
| } |
| }); |
| } |
| |
| @Override |
| protected void gwtSetUp() { |
| factory = createFactory(); |
| } |
| |
| private Context context() { |
| return factory.context(); |
| } |
| } |