]> source.dussan.org Git - vaadin-framework.git/commitdiff
Correctly set ListSelect style names
authorArtur <artur@vaadin.com>
Thu, 13 Apr 2017 07:52:19 +0000 (10:52 +0300)
committerTeemu Suo-Anttila <tsuoanttila@users.noreply.github.com>
Mon, 8 May 2017 11:46:35 +0000 (14:46 +0300)
Fixes #8901

client/src/main/java/com/vaadin/client/ui/VListSelect.java
shared/src/main/java/com/vaadin/shared/ui/listselect/ListSelectState.java
uitest/src/main/java/com/vaadin/tests/components/listselect/ListSelectStyleNames.java [new file with mode: 0644]
uitest/src/test/java/com/vaadin/tests/components/listselect/ListSelectStyleNamesTest.java [new file with mode: 0644]

index 9ce897de0ec3ac7418fea7868cf25b07c8e87ddf..b00a9513f1ff36aaf0a65e6a053d1016f1814c90 100644 (file)
@@ -30,6 +30,7 @@ import com.vaadin.client.FastStringSet;
 import com.vaadin.client.Focusable;
 import com.vaadin.client.connectors.AbstractMultiSelectConnector.MultiSelectWidget;
 import com.vaadin.shared.Registration;
+import com.vaadin.shared.ui.listselect.ListSelectState;
 
 import elemental.json.JsonObject;
 
@@ -57,6 +58,7 @@ public class VListSelect extends Composite
      */
     public VListSelect() {
         container = new FlowPanel();
+
         initWidget(container);
 
         select = new ListBox();
@@ -71,6 +73,13 @@ public class VListSelect extends Composite
         container.add(select);
 
         updateEnabledState();
+        setStylePrimaryName(ListSelectState.PRIMARY_STYLENAME);
+    }
+
+    @Override
+    public void setStylePrimaryName(String style) {
+        super.setStylePrimaryName(style);
+        select.setStyleName(style + "-select");
     }
 
     /**
@@ -104,24 +113,6 @@ public class VListSelect extends Composite
         return (Registration) () -> selectionChangeListeners.remove(listener);
     }
 
-    @Override
-    public void setStyleName(String style) {
-        super.setStyleName(style);
-        updateStyleNames();
-    }
-
-    @Override
-    public void setStylePrimaryName(String style) {
-        super.setStylePrimaryName(style);
-        updateStyleNames();
-    }
-
-    /** Update the style names for container & select. */
-    protected void updateStyleNames() {
-        container.setStyleName(getStylePrimaryName());
-        select.setStyleName(getStylePrimaryName() + "-select");
-    }
-
     @Override
     public void setItems(List<JsonObject> items) {
         selectedItemKeys = FastStringSet.create();
@@ -163,7 +154,7 @@ public class VListSelect extends Composite
         return selectedItemKeys;
     }
 
-    private void selectionEvent(Object source){
+    private void selectionEvent(Object source) {
         if (source == select) {
             // selection can change by adding and at the same time removing
             // previous keys, or by just adding (e.g. when modifier keys are
index a749786ae31da10876bb3e390318f44a754addff..aae8f428da5e0230e4e435f1c285a7fe3c48b527 100644 (file)
@@ -25,8 +25,9 @@ import com.vaadin.shared.ui.abstractmultiselect.AbstractMultiSelectState;
  * @since 8.0
  */
 public class ListSelectState extends AbstractMultiSelectState {
+    public static final String PRIMARY_STYLENAME = "v-select";
     {
-        primaryStyleName = "v-select";
+        primaryStyleName = PRIMARY_STYLENAME;
     }
     @DelegateToWidget
     public int rows;
diff --git a/uitest/src/main/java/com/vaadin/tests/components/listselect/ListSelectStyleNames.java b/uitest/src/main/java/com/vaadin/tests/components/listselect/ListSelectStyleNames.java
new file mode 100644 (file)
index 0000000..9e9ee78
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2000-2016 Vaadin Ltd.
+ *
+ * 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.vaadin.tests.components.listselect;
+
+import com.vaadin.annotations.Widgetset;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUIWithLog;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.ListSelect;
+import com.vaadin.ui.NativeSelect;
+
+@Widgetset("com.vaadin.DefaultWidgetSet")
+public class ListSelectStyleNames extends AbstractTestUIWithLog {
+
+    @Override
+    protected void setup(VaadinRequest request) {
+        ListSelect<String> testselect = new ListSelect<>();
+        testselect.setItems("abc", "def", "ghi");
+        testselect.addStyleName("custominitial");
+        addComponent(testselect);
+
+        NativeSelect<String> nativeSelect = new NativeSelect<>();
+        nativeSelect.setItems("abc", "def", "ghi");
+        nativeSelect.addStyleName("custominitial");
+        addComponent(nativeSelect);
+
+        Button button = new Button("Add style 'new'", e -> {
+            testselect.addStyleName("new");
+            nativeSelect.addStyleName("new");
+        });
+        button.setId("add");
+        addComponent(button);
+
+        button = new Button("Change primary style to 'newprimary'", e -> {
+            testselect.setPrimaryStyleName("newprimary");
+            nativeSelect.setPrimaryStyleName("newprimary");
+        });
+        button.setId("changeprimary");
+        addComponent(button);
+    }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/listselect/ListSelectStyleNamesTest.java b/uitest/src/test/java/com/vaadin/tests/components/listselect/ListSelectStyleNamesTest.java
new file mode 100644 (file)
index 0000000..7e032ba
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2000-2016 Vaadin Ltd.
+ *
+ * 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.vaadin.tests.components.listselect;
+
+import java.util.Arrays;
+import java.util.HashSet;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.By;
+
+import com.vaadin.testbench.TestBenchElement;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.ListSelectElement;
+import com.vaadin.testbench.elements.NativeSelectElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class ListSelectStyleNamesTest extends SingleBrowserTest {
+
+    private NativeSelectElement nativeSelect;
+    private TestBenchElement nativeSelectSelect;
+    private ListSelectElement listSelect;
+    private TestBenchElement listSelectSelect;
+
+    @Override
+    public void setup() throws Exception {
+        super.setup();
+        openTestURL();
+        nativeSelect = $(NativeSelectElement.class).first();
+        nativeSelectSelect = (TestBenchElement) nativeSelect
+                .findElement(By.xpath("select"));
+
+        listSelect = $(ListSelectElement.class).first();
+        listSelectSelect = (TestBenchElement) listSelect
+                .findElement(By.xpath("select"));
+
+    }
+
+    @Test
+    public void correctInitialStyleNames() {
+        assertStyleNames(nativeSelect, "v-select", "v-widget", "custominitial",
+                "v-select-custominitial");
+        assertStyleNames(nativeSelectSelect, "v-select-select");
+        assertStyleNames(listSelect, "v-select", "v-widget", "custominitial",
+                "v-select-custominitial");
+        assertStyleNames(listSelectSelect, "v-select-select");
+    }
+
+    @Test
+    public void addStyleName() {
+        $(ButtonElement.class).id("add").click();
+        assertStyleNames(nativeSelect, "v-select", "v-widget", "custominitial",
+                "v-select-custominitial", "new", "v-select-new");
+        assertStyleNames(nativeSelectSelect, "v-select-select");
+        assertStyleNames(listSelect, "v-select", "v-widget", "custominitial",
+                "v-select-custominitial", "new", "v-select-new");
+        assertStyleNames(listSelectSelect, "v-select-select");
+    }
+
+    @Test
+    public void changePrimaryStyleName() {
+        $(ButtonElement.class).id("add").click();
+        $(ButtonElement.class).id("changeprimary").click();
+        assertStyleNames(nativeSelect, "newprimary", "v-widget",
+                "custominitial", "newprimary-custominitial", "new",
+                "newprimary-new");
+        assertStyleNames(nativeSelectSelect, "newprimary");
+        assertStyleNames(listSelect, "newprimary", "v-widget", "custominitial",
+                "newprimary-custominitial", "new", "newprimary-new");
+        assertStyleNames(listSelectSelect, "newprimary-select");
+
+    }
+
+    private void assertStyleNames(TestBenchElement element,
+            String... styleNames) {
+        Assert.assertEquals(new HashSet<>(Arrays.asList(styleNames)),
+                element.getClassNames());
+    }
+}