| /* |
| * Copyright 2010 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 the use of Locator objects. |
| */ |
| public class LocatorTest extends GWTTestCase { |
| /** |
| * The locator being tested. |
| */ |
| public static class DomainLocator extends Locator<Domain, String> { |
| @Override |
| public Domain create(Class<? extends Domain> clazz) { |
| assertEquals(Domain.class, clazz); |
| return new Domain(); |
| } |
| |
| @Override |
| public Domain find(Class<? extends Domain> clazz, String id) { |
| assertEquals(ID, id); |
| return Domain.INSTANCE; |
| } |
| |
| @Override |
| public Class<Domain> getDomainType() { |
| return Domain.class; |
| } |
| |
| @Override |
| public String getId(Domain domainObject) { |
| return ID; |
| } |
| |
| @Override |
| public Class<String> getIdType() { |
| return String.class; |
| } |
| |
| @Override |
| public Object getVersion(Domain domainObject) { |
| return 0; |
| } |
| } |
| |
| /** |
| * The factory under test. |
| */ |
| protected interface Factory extends RequestFactory { |
| Context context(); |
| } |
| |
| @Service(ContextImpl.class) |
| interface Context extends RequestContext { |
| Request<DomainProxy> getDomain(); |
| } |
| |
| static class ContextImpl { |
| public static Domain getDomain() { |
| return Domain.INSTANCE; |
| } |
| } |
| |
| static class Domain { |
| static final Domain INSTANCE = new Domain(); |
| } |
| |
| @ProxyFor(value = Domain.class, locator = DomainLocator.class) |
| interface DomainProxy extends EntityProxy { |
| EntityProxyId<DomainProxy> stableId(); |
| }; |
| |
| private static final String ID = "DomainId"; |
| private static final int TEST_DELAY = 5000; |
| |
| private Factory factory; |
| |
| @Override |
| public String getModuleName() { |
| return "com.google.web.bindery.requestfactory.gwt.RequestFactorySuite"; |
| } |
| |
| public void testLocator() { |
| delayTestFinish(TEST_DELAY); |
| context().getDomain().fire(new Receiver<DomainProxy>() { |
| @Override |
| public void onSuccess(final DomainProxy response) { |
| factory.find(response.stableId()).fire(new Receiver<DomainProxy>() { |
| @Override |
| public void onSuccess(DomainProxy found) { |
| assertEquals(response.stableId(), found.stableId()); |
| finishTest(); |
| } |
| }); |
| } |
| }); |
| } |
| |
| protected Factory createFactory() { |
| Factory toReturn = GWT.create(Factory.class); |
| toReturn.initialize(new SimpleEventBus()); |
| return toReturn; |
| } |
| |
| @Override |
| protected void gwtSetUp() { |
| factory = createFactory(); |
| } |
| |
| private Context context() { |
| return factory.context(); |
| } |
| } |