/* * Copyright 2011 ArcBees 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.gwtplatform.mvp.client.gwt.mvp; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.junit.client.GWTTestCase; import com.gwtplatform.mvp.client.PopupViewCloseHandler; import com.gwtplatform.mvp.shared.proxy.PlaceRequest; import com.gwtplatform.mvp.shared.proxy.PlaceRequest.Builder; import junit.framework.TestCase; /** * Integration test for various components of GWTP's MVP module. */ public class MvpGwtTestInSuite extends GWTTestCase { GinjectorTestUtilGwt ginjector; MainPresenterTestUtilGwt presenter; @Override public String getModuleName() { return "com.gwtplatform.mvp.MvpGwtTest"; } @Override protected void gwtSetUp() throws Exception { super.gwtSetUp(); InstantiationCounterTestUtilGwt.resetCounter(); ginjector = GWT.create(GinjectorTestUtilGwt.class); presenter = ginjector.getMainPresenter().get(); } /** * Verifies that the ginjector is created only once. */ public void testShouldCreateOnlyOneGinjector() { ginjector.getPlaceManager().revealCurrentPlace(); assertEquals(1, InstantiationCounterTestUtilGwt.getCounter()); } public void testPopupViewCloseHandlerNotCalledWhenShown() { delayTestFinish(1000); runTest(() -> { PopupPresenterTestUtilGwt popupPresenter = ginjector.getPopupPresenter().get(); popupPresenter.asWidget().addAttachHandler(event -> { if (event.isAttached()) { finishTest(); } else { fail(); } }); ginjector.getPlaceManager().revealDefaultPlace(); final PopupViewCloseHandler closeHandler = TestCase::fail; Scheduler.get().scheduleDeferred(() -> presenter.showPopup(closeHandler)); }); } public void testPopupViewCloseHandlerIsCalledWhenHidden() { delayTestFinish(1000); runTest(() -> { PopupPresenterTestUtilGwt popupPresenter = ginjector.getPopupPresenter().get(); final PopupViewCloseHandler closeHandler = this::finishTest; popupPresenter.getView().setCloseHandler(closeHandler); popupPresenter.getView().hide(); }); } /** * Verify multiple name tokens. */ public void testMultipleTokens() { delayTestFinish(1000); ginjector.getPlaceManager().revealDefaultPlace(); runTest(() -> { assertTrue(ginjector.getMainPresenter().get().isVisible()); assertFalse(ginjector.getAdminPresenter().get().isVisible()); revealAdmin(); }); } private void revealAdmin() { PlaceRequest placeRequest = new Builder().nameToken("admin").build(); ginjector.getPlaceManager().revealPlace(placeRequest); runTest(() -> { assertFalse(ginjector.getMainPresenter().get().isVisible()); assertTrue(ginjector.getAdminPresenter().get().isVisible()); revealHomePlace(); }); } private void revealHomePlace() { PlaceRequest placeRequest = new Builder().nameToken("home").build(); ginjector.getPlaceManager().revealPlace(placeRequest); runTest(() -> { assertTrue(ginjector.getMainPresenter().get().isVisible()); assertFalse(ginjector.getAdminPresenter().get().isVisible()); revealSelfService(); }); } private void revealSelfService() { PlaceRequest placeRequest = new Builder().nameToken("selfService").build(); ginjector.getPlaceManager().revealPlace(placeRequest); runTest(() -> { assertFalse(ginjector.getMainPresenter().get().isVisible()); assertTrue(ginjector.getAdminPresenter().get().isVisible()); finishTest(); }); } private void runTest(ScheduledCommand test) { Scheduler.get().scheduleDeferred(test); } }