/* * 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.gwt.place.shared; import com.google.gwt.event.shared.EventBus; import com.google.gwt.event.shared.SimpleEventBus; import junit.framework.TestCase; import java.util.logging.Logger; /** * Eponymous test class. */ public class PlaceControllerTest extends TestCase { private final class Canceler implements PlaceChangeRequestEvent.Handler { Place calledWith = null; String warning = "Stop fool!"; public void onPlaceChangeRequest(PlaceChangeRequestEvent event) { calledWith = event.getNewPlace(); event.setWarning(warning); } } private static class MyPlace extends Place { } private class SimpleHandler implements PlaceChangeEvent.Handler { MyPlace calledWith = null; public void onPlaceChange(PlaceChangeEvent event) { calledWith = (MyPlace) event.getNewPlace(); } } private Logger deadLogger = new Logger("shut up", null) { }; private EventBus eventBus = new SimpleEventBus(); private MockPlaceControllerDelegate delegate = new MockPlaceControllerDelegate(); private PlaceController placeController = new PlaceController( eventBus, delegate) { @Override Logger log() { return deadLogger; } }; public void testConfirmCancelOnUserNav() { SimpleHandler handler = new SimpleHandler(); eventBus.addHandler(PlaceChangeEvent.TYPE, handler); Canceler canceler = new Canceler(); eventBus.addHandler(PlaceChangeRequestEvent.TYPE, canceler); MyPlace place = new MyPlace(); placeController.goTo(place); assertNull(handler.calledWith); assertEquals(place, canceler.calledWith); assertEquals(canceler.warning, delegate.message); delegate.confirm = true; placeController.goTo(place); assertEquals(place, canceler.calledWith); } public void testConfirmCancelOnWindowClose() { SimpleHandler handler = new SimpleHandler(); eventBus.addHandler(PlaceChangeEvent.TYPE, handler); Canceler canceler = new Canceler(); eventBus.addHandler(PlaceChangeRequestEvent.TYPE, canceler); assertNull(handler.calledWith); assertNull(delegate.message); delegate.close(); assertEquals(canceler.warning, delegate.message); assertNull(handler.calledWith); } public void testSimple() { SimpleHandler handler = new SimpleHandler(); eventBus.addHandler(PlaceChangeEvent.TYPE, handler); MyPlace place1 = new MyPlace(); MyPlace place2 = new MyPlace(); placeController.goTo(place1); assertEquals(place1, handler.calledWith); placeController.goTo(place2); assertEquals(place2, handler.calledWith); } }