/* * Copyright 2015 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.views.pfly.tab; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; import org.gwtbootstrap3.client.GwtBootstrap3EntryPoint; import org.jboss.errai.enterprise.client.cdi.AbstractErraiCDITest; import org.uberfire.client.views.pfly.mock.CountingTabShowHandler; import org.uberfire.client.views.pfly.mock.CountingTabShownHandler; public class TabPanelWithDropdownsTest extends AbstractErraiCDITest { private TabPanelWithDropdowns tabPanel; @Override public String getModuleName() { return "org.uberfire.client.views.pfly.PatternFlyTabTests"; } @Override protected void gwtSetUp() throws Exception { super.gwtSetUp(); tabPanel = new TabPanelWithDropdowns(); tabPanel.init(); new GwtBootstrap3EntryPoint().onModuleLoad(); } public void testAddTabByTitleAndContent() throws Exception { Label content = new Label("First tab's content"); TabPanelEntry item = tabPanel.addItem("First Tab", content); assertNotNull(item.getTabWidget()); assertNotNull(item.getContents()); assertEquals(item.getTitle(), "First Tab"); // the content should be attached assertNotNull(content.getParent()); } public void testShowTab() throws Exception { RootPanel.get().add(tabPanel); TabPanelEntry item1 = tabPanel.addItem("First Tab", new Label("First tab's content")); TabPanelEntry item2 = tabPanel.addItem("Second Tab", new Label("Second tab's content")); item2.showTab(); item1.showTab(); assertTrue(item1.getContentPane().isActive()); assertTrue(item1.getTabWidget().isActive()); assertEquals(item1, tabPanel.getActiveTab()); assertFalse(item2.getContentPane().isActive()); assertFalse(item2.getTabWidget().isActive()); } public void testRemoveActiveTab() throws Exception { RootPanel.get().add(tabPanel); TabPanelEntry item1 = tabPanel.addItem("First Tab", new Label("First tab's content")); TabPanelEntry item2 = tabPanel.addItem("Second Tab", new Label("Second tab's content")); item2.showTab(); item1.showTab(); tabPanel.remove(item1); // must not upset the active state when removing an item (UberTabPanel.updateDisplayedTabs relies on this) assertTrue(item1.getTabWidget().isActive()); // but the tab panel itself should no longer consider the removed item as active assertNull(tabPanel.getActiveTab()); // checking that the content _pane_ was removed, and the content itself is still parented to the content pane. // this rule could be changed if the tab panel would always reconnect the tab item's content to its content pane // when adding an entry back to the panel. Feel free to change this if necessary/convenient. assertEquals(item1.getContentPane(), item1.getContents().getParent()); assertNull(item1.getContentPane().getParent()); assertFalse(item2.getContentPane().isActive()); assertFalse(item2.getTabWidget().isActive()); } public void testRebroadcastShowEvents() throws Exception { RootPanel.get().add(tabPanel); CountingTabShowHandler showHandler = new CountingTabShowHandler(); CountingTabShownHandler shownHandler = new CountingTabShownHandler(); tabPanel.addShowHandler(showHandler); tabPanel.addShownHandler(shownHandler); // this test leaves it intentionally ambiguous if the show[n] events come from adding the tab or from showing it later TabPanelEntry item1 = tabPanel.addItem("First Tab", new Label("First tab's content")); assertNull(tabPanel.getActiveTab()); item1.showTab(); assertNotNull(tabPanel.getActiveTab()); assertEquals(1, showHandler.getEventCount()); assertEquals(1, shownHandler.getEventCount()); } }