@Override public void goTo(final PlaceRequest place, final PanelDefinition panel) { goTo(place, panel, Commands.DO_NOTHING); }
@Override public void forceCloseAllPlaces() { closeAllPlaces(true); }
@Override public void closePlace(final PlaceRequest placeToClose, final Command doAfterClose) { if (placeToClose == null) { return; } closePlace(placeToClose, false, doAfterClose); }
private void verifyPlaceNotClosed(final PlaceRequest place, final WorkbenchScreenActivity screenActivity) { verify(workbenchPartBeforeCloseEvent, never()).fire(refEq(new BeforeClosePlaceEvent(place, true, true))); verify(workbenchPartCloseEvent, never()).fire(refEq(new ClosePlaceEvent(place))); verify(screenActivity, never()).onClose(); verify(screenActivity, never()).onShutdown(); verify(activityManager, never()).destroyActivity(screenActivity); verify(panelManager, never()).removePartForPlace(place); assertEquals(PlaceStatus.OPEN, placeManager.getStatus(place)); assertNotNull(placeManager.getActivity(place)); assertTrue(placeManager.getActivePlaceRequests().contains(place)); }
@Test public void testClosingActivityInCustomPanel() throws Exception { HasWidgets any = any(HasWidgets.class); CustomPanelDefinitionImpl customPanelDef = new CustomPanelDefinitionImpl( UnanchoredStaticWorkbenchPanelPresenter.class.getName(), any); when(panelManager.addCustomPanel(any, eq(UnanchoredStaticWorkbenchPanelPresenter.class.getName()))) .thenReturn(customPanelDef); PlaceRequest emeraldCityPlace = new DefaultPlaceRequest("emerald_city"); createWorkbenchScreenActivity(emeraldCityPlace); HasWidgets customContainer = mock(HasWidgets.class); placeManager.goTo(emeraldCityPlace, customContainer); placeManager.closePlace(emeraldCityPlace); assertTrue(customPanelDef.getParts().isEmpty()); verify(panelManager).removeWorkbenchPanel(customPanelDef); }
@Test public void testPopupCancelsClose() throws Exception { final PlaceRequest popupPlace = new DefaultPlaceRequest("Somewhere"); final AbstractPopupActivity popupActivity = mock(AbstractPopupActivity.class); when(popupActivity.onMayClose()).thenReturn(false); when(popupActivity.isType(ActivityResourceType.POPUP.name())).thenReturn(true); when(activityManager.getActivities(popupPlace)).thenReturn(singleton((Activity) popupActivity)); placeManager.goTo(popupPlace); placeManager.closePlace(popupPlace); verify(popupActivity, never()).onClose(); assertEquals(PlaceStatus.OPEN, placeManager.getStatus(popupPlace)); }
@Test public void testNormalCloseExistingScreenActivity() throws Exception { when(kansasActivity.onMayClose()).thenReturn(true); when(kansasActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.closePlace(kansas); verify(workbenchPartBeforeCloseEvent).fire(refEq(new BeforeClosePlaceEvent(kansas, false, true))); verify(workbenchPartCloseEvent).fire(refEq(new ClosePlaceEvent(kansas))); verify(kansasActivity).onMayClose(); verify(kansasActivity).onClose(); verify(kansasActivity, never()).onShutdown(); verify(activityManager).destroyActivity(kansasActivity); verify(panelManager).removePartForPlace(kansas); assertEquals(PlaceStatus.CLOSE, placeManager.getStatus(kansas)); assertNull(placeManager.getActivity(kansas)); assertFalse(placeManager.getActivePlaceRequests().contains(kansas)); }
@Test public void testLaunchingPopupThatIsAlreadyOpen() throws Exception { final PlaceRequest popupPlace = new DefaultPlaceRequest("Somewhere"); final AbstractPopupActivity popupActivity = mock(AbstractPopupActivity.class); when(activityManager.getActivities(popupPlace)).thenReturn(singleton((Activity) popupActivity)); when(popupActivity.isType(ActivityResourceType.POPUP.name())).thenReturn(true); placeManager.goTo(popupPlace); placeManager.goTo(popupPlace); verify(popupActivity, never()).onStartup(any(PlaceRequest.class)); verify(popupActivity, times(1)).onOpen(); assertEquals(PlaceStatus.OPEN, placeManager.getStatus(popupPlace)); }
/** * Tests the basics of launching a perspective. We call it "empty" because this perspective doesn't have any panels * or parts in its definition. */ @Test public void testLaunchingEmptyPerspective() throws Exception { PerspectiveActivity ozPerspectiveActivity = mock(PerspectiveActivity.class); PlaceRequest ozPerspectivePlace = new DefaultPlaceRequest("oz_perspective"); PerspectiveDefinition ozPerspectiveDef = new PerspectiveDefinitionImpl(); when(activityManager.getActivities(ozPerspectivePlace)) .thenReturn(singleton((Activity) ozPerspectiveActivity)); when(ozPerspectiveActivity.getDefaultPerspectiveLayout()).thenReturn(ozPerspectiveDef); when(ozPerspectiveActivity.getPlace()).thenReturn(ozPerspectivePlace); when(ozPerspectiveActivity.isType(ActivityResourceType.PERSPECTIVE.name())).thenReturn(true); placeManager.goTo(ozPerspectivePlace); // verify perspective changed to oz verify(perspectiveManager).savePerspectiveState(any(Command.class)); verify(perspectiveManager).switchToPerspective(any(PlaceRequest.class), eq(ozPerspectiveActivity), any(ParameterizedCommand.class)); verify(ozPerspectiveActivity).onOpen(); assertEquals(PlaceStatus.OPEN, placeManager.getStatus(ozPerspectivePlace)); assertTrue(placeManager.getActivePlaceRequests().contains(ozPerspectivePlace)); assertEquals(ozPerspectiveActivity, placeManager.getActivity(ozPerspectivePlace)); verify(workbenchLayout).onResize(); }
when(splashScreenActivity.isType(ActivityResourceType.SPLASH.name())).thenReturn(true); placeManager.goTo(perspectivePlace); inOrder.verify(newSplashScreenActiveEvent).fire(any(NewSplashScreenActiveEvent.class)); assertTrue(placeManager.getActiveSplashScreens().contains(splashScreenActivity)); verify(perspectiveActivity).onOpen(); assertEquals(PlaceStatus.OPEN, placeManager.getStatus(perspectivePlace)); assertSame(perspectiveActivity, placeManager.getActivity(perspectivePlace));
return; final ResolvedRequest resolved = resolveActivity(place); if (workbenchActivity.getOwningPlace() != null && getStatus(workbenchActivity.getOwningPlace()) == PlaceStatus.CLOSE) { goTo(workbenchActivity.getOwningPlace(), null, new Command() { return; launchWorkbenchActivityAtPosition(resolved.getPlaceRequest(), workbenchActivity, workbenchActivity.getDefaultPosition(), doWhenFinished.execute(); } else if (activity.isType(ActivityResourceType.POPUP.name())) { launchPopupActivity(resolved.getPlaceRequest(), (PopupActivity) activity); doWhenFinished.execute(); } else if (activity.isType(ActivityResourceType.PERSPECTIVE.name())) { launchPerspectiveActivity(place, doWhenFinished, (PerspectiveActivity) activity); goTo(resolved.getPlaceRequest(), panel, doWhenFinished);
@Test public void testClosingAllPlacesIncludesCustomPanelsInsideHTMLElements() throws Exception { HTMLElement any = any(HTMLElement.class); CustomPanelDefinitionImpl customPanelDef = new CustomPanelDefinitionImpl( UnanchoredStaticWorkbenchPanelPresenter.class.getName(), any); when(panelManager.addCustomPanel(any, eq(UnanchoredStaticWorkbenchPanelPresenter.class.getName()))) .thenReturn(customPanelDef); PlaceRequest emeraldCityPlace = new DefaultPlaceRequest("emerald_city"); createWorkbenchScreenActivity(emeraldCityPlace); HTMLElement customContainer = mock(HTMLElement.class); placeManager.goTo(emeraldCityPlace, customContainer); placeManager.closeAllPlaces(); assertTrue(customPanelDef.getParts().isEmpty()); verify(panelManager).removeWorkbenchPanel(customPanelDef); }
@Test public void testForceCloseExistingScreenActivity() throws Exception { when(kansasActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.forceClosePlace(kansas); verify(workbenchPartBeforeCloseEvent).fire(refEq(new BeforeClosePlaceEvent(kansas, true, true))); verify(workbenchPartCloseEvent).fire(refEq(new ClosePlaceEvent(kansas))); verify(kansasActivity, never()).onMayClose(); verify(kansasActivity).onClose(); verify(kansasActivity, never()).onShutdown(); verify(activityManager).destroyActivity(kansasActivity); verify(panelManager).removePartForPlace(kansas); assertEquals(PlaceStatus.CLOSE, placeManager.getStatus(kansas)); assertNull(placeManager.getActivity(kansas)); assertFalse(placeManager.getActivePlaceRequests().contains(kansas)); }
@Test public void testProperSplashScreenShutdownOnPartClose() throws Exception { PlaceRequest oz = new DefaultPlaceRequest("oz"); WorkbenchScreenActivity ozActivity = mock(WorkbenchScreenActivity.class); when(activityManager.getActivities(oz)).thenReturn(singleton((Activity) ozActivity)); final SplashScreenActivity lollipopGuildActivity = mock(SplashScreenActivity.class); when(lollipopGuildActivity.isType(ActivityResourceType.SPLASH.name())).thenReturn(true); when(activityManager.getSplashScreenInterceptor(oz)).thenReturn(lollipopGuildActivity); when(ozActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.goTo(oz, (PanelDefinition) null); placeManager.closePlace(oz); assertTrue(placeManager.getActiveSplashScreens().isEmpty()); verify(lollipopGuildActivity).closeIfOpen(); // splash screens are Application Scoped, but we still "destroy" them (activity manager will call their onShutdown) verify(activityManager).destroyActivity(lollipopGuildActivity); }
@Test public void testCloseAllPlacesOrNothingSucceeds() throws Exception { PlaceRequest emeraldCityPlace = new DefaultPlaceRequest("emerald_city"); WorkbenchScreenActivity emeraldCityActivity = createWorkbenchScreenActivity(emeraldCityPlace); placeManager.goTo(emeraldCityPlace); when(kansasActivity.onMayClose()).thenReturn(true); when(kansasActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.closeAllPlacesOrNothing(); verifyPlaceClosed(kansas, kansasActivity); verifyPlaceClosed(emeraldCityPlace, emeraldCityActivity); }
part); final IsWidget titleDecoration = maybeWrapExternalWidget(activity, () -> activity.getTitleDecorationElement(), () -> activity.getTitleDecoration()); final IsWidget widget = maybeWrapExternalWidget(activity, () -> activity.getWidgetElement(), () -> activity.getWidget()); toInteger(panel.getWidthAsInt()), toInteger(panel.getHeightAsInt())); addSplashScreenFor(place); getPlaceHistoryHandler().registerOpen(activity, place); } catch (Exception ex) { LifecyclePhase.OPEN, ex); closePlace(place);
@Test public void testAddOnCloseCallbacks() { final Command onCloseCallback1 = mock(Command.class); final Command onCloseCallback2 = mock(Command.class); final DefaultPlaceRequest myPlace = new DefaultPlaceRequest("my-place"); placeManager.registerOnCloseCallback(myPlace, onCloseCallback1); final List<Command> onCloseCallbacks1 = placeManager.getOnCloseCallbacks(myPlace); assertEquals(1, onCloseCallbacks1.size()); assertSame(onCloseCallback1, onCloseCallbacks1.get(0)); placeManager.registerOnCloseCallback(myPlace, onCloseCallback2); final List<Command> onCloseCallbacks2 = placeManager.getOnCloseCallbacks(myPlace); assertEquals(2, onCloseCallbacks2.size()); assertSame(onCloseCallback1, onCloseCallbacks2.get(0)); assertSame(onCloseCallback2, onCloseCallbacks2.get(1)); final DefaultPlaceRequest myOtherPlace = new DefaultPlaceRequest("my-other-place"); final List<Command> onCloseCallbacks3 = placeManager.getOnCloseCallbacks(myOtherPlace); assertNull(onCloseCallbacks3); }
@Test public void testAddOnOpenCallbacks() { final Command onOpenCallback1 = mock(Command.class); final Command onOpenCallback2 = mock(Command.class); final DefaultPlaceRequest myPlace = new DefaultPlaceRequest("my-place"); placeManager.registerOnOpenCallback(myPlace, onOpenCallback1); final List<Command> onOpenCallbacks1 = placeManager.getOnOpenCallbacks(myPlace); assertEquals(1, onOpenCallbacks1.size()); assertSame(onOpenCallback1, onOpenCallbacks1.get(0)); placeManager.registerOnOpenCallback(myPlace, onOpenCallback2); final List<Command> onOpenCallbacks2 = placeManager.getOnOpenCallbacks(myPlace); assertEquals(2, onOpenCallbacks2.size()); assertSame(onOpenCallback1, onOpenCallbacks2.get(0)); assertSame(onOpenCallback2, onOpenCallbacks2.get(1)); final DefaultPlaceRequest myOtherPlace = new DefaultPlaceRequest("my-other-place"); final List<Command> onOpenCallbacks3 = placeManager.getOnOpenCallbacks(myOtherPlace); assertNull(onOpenCallbacks3); }
@Test public void testPlaceManagerGetsInitializedToADefaultPlace() throws Exception { placeManager.initPlaceHistoryHandler(); verify(placeHistoryHandler).initialize(any(PlaceManager.class), any(EventBus.class), any(PlaceRequest.class)); }