]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix replacing of currently selected Tab (#14252)
authorDmitrij Abolichin <dirolwhite@gmail.com>
Thu, 8 Oct 2015 22:21:44 +0000 (01:21 +0300)
committerVaadin Code Review <review@vaadin.com>
Tue, 20 Oct 2015 04:34:53 +0000 (04:34 +0000)
Change-Id: I49a86d2fceac233fdfd9e31d8ade519b9f8460b6

server/src/com/vaadin/ui/TabSheet.java
server/tests/src/com/vaadin/tests/server/component/tabsheet/TabSheetTest.java

index 592515c560a5889925a0646e669e432cb5d95d4e..66784aaa02dd31e2790247c1946588693582b4a3 100644 (file)
@@ -736,6 +736,9 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
         if (oldLocation == -1) {
             addComponent(newComponent);
         } else if (newLocation == -1) {
+            if (selected == oldComponent) {
+                setSelected(null);
+            }
             removeComponent(oldComponent);
             newTab = addTab(newComponent, oldLocation);
 
@@ -752,6 +755,9 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
 
             if (selectAfterInserting) {
                 setSelected(newComponent);
+                //SelectedTabChangeEvent should be fired here as selected Tab is changed.
+                //Other cases are handled implicitly by removeComponent() and addComponent()addTab()
+                fireSelectedTabChange();
             }
 
             // Tab associations are not changed, but metadata is swapped between
index 29f12fa4b6fc47a35d874c75ebc8106a05b8a79c..a45b2c558785fd180d7b841edd8f052e8cc76a4b 100644 (file)
@@ -12,6 +12,8 @@ import org.junit.Test;
 import com.vaadin.ui.Component;
 import com.vaadin.ui.Label;
 import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
+import com.vaadin.ui.TabSheet.SelectedTabChangeListener;
 import com.vaadin.ui.TabSheet.Tab;
 
 public class TabSheetTest {
@@ -221,4 +223,64 @@ public class TabSheetTest {
         assertEquals("description", tab1.getDescription());
         assertEquals(1, tabSheet.getTabPosition(tabSheet.getTab(lbl3)));
     }
+
+    @Test
+    public void testSelectedTabChangeEvent_whenComponentReplaced() {
+
+        // given
+        final class SelectedTabExpectedComponentListener
+                implements SelectedTabChangeListener {
+
+            private Component actualComponent;
+
+            @Override
+            public void selectedTabChange(SelectedTabChangeEvent event) {
+                actualComponent = event.getTabSheet().getSelectedTab();
+
+            }
+
+            public void assertActualComponentIs(Component expectedComponent) {
+                assertEquals(expectedComponent, actualComponent);
+                actualComponent = null;
+            }
+        }
+        TabSheet tabSheet = new TabSheet();
+        final Label lbl1 = new Label("aaa");
+        final Label lbl2 = new Label("bbb");
+        final Label lbl3 = new Label("ccc");
+        final Label lbl4 = new Label("ddd");
+        tabSheet.addComponent(lbl1);
+        tabSheet.addComponent(lbl2);
+        tabSheet.addComponent(lbl3);
+        tabSheet.setSelectedTab(lbl2);
+        SelectedTabExpectedComponentListener listener = new SelectedTabExpectedComponentListener();
+        tabSheet.addSelectedTabChangeListener(listener);
+
+        // when selected tab is replaced with new Component
+        tabSheet.replaceComponent(lbl2, lbl4);
+
+        // then
+        listener.assertActualComponentIs(lbl4);
+        assertEquals(lbl4, tabSheet.getSelectedTab());
+
+        // when not selected tab is replaced with new Component
+        tabSheet.replaceComponent(lbl1, lbl2);
+
+        // then
+        assertEquals(lbl4, tabSheet.getSelectedTab());
+
+        // when not selected tab is replaced with existing Component
+        tabSheet.replaceComponent(lbl2, lbl3);
+
+        // then
+        assertEquals(lbl4, tabSheet.getSelectedTab());
+
+        // when selected tab is replaced with existing Component (locations are
+        // just swapped)
+        tabSheet.replaceComponent(lbl4, lbl3);
+
+        // then
+        listener.assertActualComponentIs(lbl3);
+        assertEquals(lbl3, tabSheet.getSelectedTab());        
+    }
 }