/* * * * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * * * 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 org.uberfire.client.workbench; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import com.google.common.collect.Maps; import com.google.gwt.dom.client.Style; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.ui.DockLayoutPanel; import com.google.gwt.user.client.ui.HeaderPanel; import com.google.gwt.user.client.ui.RequiresResize; import com.google.gwt.user.client.ui.SimpleLayoutPanel; import com.google.gwt.user.client.ui.Widget; import com.google.gwtmockito.GwtMockitoTestRunner; import com.google.gwtmockito.WithClassesToStub; import org.jboss.errai.common.client.dom.Div; import org.jboss.errai.common.client.dom.HTMLElement; import org.jboss.errai.common.client.ui.ElementWrapperWidget; import org.jboss.errai.ioc.client.container.SyncBeanManager; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.uberfire.client.workbench.docks.UberfireDocksContainer; import org.uberfire.client.workbench.widgets.dnd.WorkbenchDragAndDropManager; import org.uberfire.client.workbench.widgets.dnd.WorkbenchPickupDragController; import static org.mockito.Mockito.*; @RunWith(GwtMockitoTestRunner.class) @WithClassesToStub(DockLayoutPanel.class) public class WorkbenchLayoutImplTest { @Mock UberfireDocksContainer uberfireDocksContainer; @Mock WorkbenchPickupDragController dragController; private WorkbenchLayoutImpl workbenchLayout; private Widget widget; @Mock private SyncBeanManager iocManager; @Mock private HeaderPanel root; @Mock private Div headerPanel; @Mock private Div footerPanel; @Mock private WorkbenchDragAndDropManager dndManager; private Header header1; private Header header2; private Footer footer1; private Footer footer2; @Before public void setup() { workbenchLayout = new WorkbenchLayoutImpl(iocManager, root, dndManager, uberfireDocksContainer, dragController, headerPanel, footerPanel) { @Override ElementWrapperWidget<?> createWidgetFrom(HTMLElement h) { return mock(ElementWrapperWidget.class); } }; widget = mock(Widget.class, withSettings().extraInterfaces(RequiresResize.class)); final Element element = mock(Element.class); when(element.getStyle()).thenReturn(mock(Style.class)); when(widget.getElement()).thenReturn(element); header1 = mock(Header.class); header2 = mock(Header.class); footer1 = mock(Footer.class); footer2 = mock(Footer.class); } @Test public void testMaximize() { workbenchLayout.maximize(widget); verify(widget).addStyleName(WorkbenchLayoutImpl.UF_MAXIMIZED_PANEL); verify(((RequiresResize) widget), never()).onResize(); } @Test public void testExpandAnimation() { final WorkbenchLayoutImpl.ExpandAnimation expandAnimation = new WorkbenchLayoutImpl.ExpandAnimation(widget, Maps.<Widget, WorkbenchLayoutImpl.OriginalStyleInfo>newHashMap(), mock(SimpleLayoutPanel.class)); expandAnimation.onComplete(); verify(((RequiresResize) widget)).onResize(); } @Test public void testUnMaximize() { workbenchLayout.maximize(widget); workbenchLayout.unmaximize(widget); verify(widget).addStyleName(WorkbenchLayoutImpl.UF_MAXIMIZED_PANEL); verify(widget).removeStyleName(WorkbenchLayoutImpl.UF_MAXIMIZED_PANEL); verify(((RequiresResize) widget), never()).onResize(); } @Test public void testCollapseAnimation() { final HashMap<Widget, WorkbenchLayoutImpl.OriginalStyleInfo> maximizedWidgetOriginalStyles = Maps.newHashMap(); maximizedWidgetOriginalStyles.put(widget, new WorkbenchLayoutImpl.OriginalStyleInfo(widget)); final WorkbenchLayoutImpl.CollapseAnimation collapseAnimation = new WorkbenchLayoutImpl.CollapseAnimation( widget, maximizedWidgetOriginalStyles); collapseAnimation.onComplete(); verify(((RequiresResize) widget)).onResize(); } @Test public void setEmptyHeaderContentsTest() { Div headerPanel = workbenchLayout.getHeaderPanel(); workbenchLayout.setHeaderContents(new ArrayList<>()); verify(headerPanel, never()).appendChild(any()); verify(root, never()).setHeaderWidget(any()); } @Test public void setHeaderContentsTest() { Div headerPanel = workbenchLayout.getHeaderPanel(); List<Header> headers = Arrays.asList(header1, header2); workbenchLayout.setHeaderContents(headers); verify(headerPanel, times(2)).appendChild(any()); verify(root).setHeaderWidget(any()); } @Test public void setEmptyFooterContentsTest() { Div footerPanel = workbenchLayout.getFooterPanel(); workbenchLayout.setFooterContents(new ArrayList<>()); verify(footerPanel, never()).appendChild(any()); verify(root, never()).setFooterWidget(any()); } @Test public void setFooterContentsTest() { Div footerPanel = workbenchLayout.getFooterPanel(); List<Footer> footers = Arrays.asList(footer1, footer2); workbenchLayout.setFooterContents(footers); verify(footerPanel, times(2)).appendChild(any()); verify(root).setFooterWidget(any()); } }