]> source.dussan.org Git - vaadin-framework.git/commitdiff
Use alternate icon text for NativeButton (#12780)
authorArtur Signell <artur@vaadin.com>
Mon, 14 Oct 2013 19:02:28 +0000 (22:02 +0300)
committerVaadin Code Review <review@vaadin.com>
Fri, 18 Oct 2013 12:48:40 +0000 (12:48 +0000)
Change-Id: I1390a3f5914977895c4111d44844c7be8ed46a61

client/src/com/vaadin/client/ui/nativebutton/NativeButtonConnector.java
uitest/src/com/vaadin/tests/components/nativebutton/NativeButtonIconAndText.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/nativebutton/NativeButtonIconAndTextTest.java [new file with mode: 0644]

index 11a76b483bcfb51b070e39e039a60228232ada85..2253397b16c83f680207846dcbc613a06fb4941d 100644 (file)
@@ -94,7 +94,7 @@ public class NativeButtonConnector extends AbstractComponentConnector implements
                         getWidget().icon.getElement(),
                         getWidget().captionElement);
             }
-            getWidget().icon.setUri(getIcon());
+            getWidget().icon.setUri(getIcon(), getState().iconAltText);
         } else {
             if (getWidget().icon != null) {
                 getWidget().getElement().removeChild(
diff --git a/uitest/src/com/vaadin/tests/components/nativebutton/NativeButtonIconAndText.java b/uitest/src/com/vaadin/tests/components/nativebutton/NativeButtonIconAndText.java
new file mode 100644 (file)
index 0000000..fdeed31
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2000-2013 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.nativebutton;
+
+import com.vaadin.server.ThemeResource;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.NativeButton;
+
+public class NativeButtonIconAndText extends AbstractTestUI implements
+        ClickListener {
+
+    static final String UPDATED_ALTERNATE_TEXT = "Now has alternate text";
+    static final String INITIAL_ALTERNATE_TEXT = "Initial alternate text";
+    static final String BUTTON_TEXT = "buttonText";
+    static final String BUTTON_TEXT_ICON = "buttonTextIcon";
+    static final String BUTTON_TEXT_ICON_ALT = "buttonTextIconAlt";
+    static final String NATIVE_BUTTON_TEXT = "nativeButtonText";
+    static final String NATIVE_BUTTON_TEXT_ICON = "nativeButtonTextIcon";
+    static final String NATIVE_BUTTON_TEXT_ICON_ALT = "nativeButtonTextIconAlt";
+
+    @Override
+    protected void setup(VaadinRequest request) {
+        Button buttonText = new Button("Only text");
+
+        Button buttonTextIcon = new Button("Text icon");
+        buttonTextIcon.setIcon(new ThemeResource("../runo/icons/64/ok.png"));
+
+        Button buttonTextIconAlt = new Button("Text icon alt");
+        buttonTextIconAlt.setIcon(new ThemeResource(
+                "../runo/icons/64/cancel.png"));
+        buttonTextIconAlt.setIconAlternateText(INITIAL_ALTERNATE_TEXT);
+
+        buttonText.addClickListener(this);
+        buttonTextIcon.addClickListener(this);
+        buttonTextIconAlt.addClickListener(this);
+
+        buttonText.setId(BUTTON_TEXT);
+        buttonTextIcon.setId(BUTTON_TEXT_ICON);
+        buttonTextIconAlt.setId(BUTTON_TEXT_ICON_ALT);
+
+        addComponent(buttonText);
+        addComponent(buttonTextIcon);
+        addComponent(buttonTextIconAlt);
+
+        NativeButton nativeButtonText = new NativeButton("Only text");
+
+        NativeButton nativeButtonTextIcon = new NativeButton("Text icon");
+        nativeButtonTextIcon.setIcon(new ThemeResource(
+                "../runo/icons/64/ok.png"));
+
+        NativeButton nativeButtonTextIconAlt = new NativeButton("Text icon alt");
+        nativeButtonTextIconAlt.setIcon(new ThemeResource(
+                "../runo/icons/64/cancel.png"));
+        nativeButtonTextIconAlt.setIconAlternateText(INITIAL_ALTERNATE_TEXT);
+
+        nativeButtonText.addClickListener(this);
+        nativeButtonTextIcon.addClickListener(this);
+        nativeButtonTextIconAlt.addClickListener(this);
+
+        nativeButtonText.setId(NATIVE_BUTTON_TEXT);
+        nativeButtonTextIcon.setId(NATIVE_BUTTON_TEXT_ICON);
+        nativeButtonTextIconAlt.setId(NATIVE_BUTTON_TEXT_ICON_ALT);
+
+        addComponent(nativeButtonText);
+        addComponent(nativeButtonTextIcon);
+        addComponent(nativeButtonTextIconAlt);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.vaadin.tests.components.AbstractTestUI#getTestDescription()
+     */
+    @Override
+    protected String getTestDescription() {
+        return "Click the buttons to toggle icon alternate text";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.vaadin.tests.components.AbstractTestUI#getTicketNumber()
+     */
+    @Override
+    protected Integer getTicketNumber() {
+        return 12780;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.vaadin.ui.Button.ClickListener#buttonClick(com.vaadin.ui.Button.
+     * ClickEvent)
+     */
+    @Override
+    public void buttonClick(ClickEvent event) {
+        Button b = event.getButton();
+        String was = b.getIconAlternateText();
+        if (was == null || was.isEmpty()) {
+            b.setIconAlternateText(UPDATED_ALTERNATE_TEXT);
+        } else {
+            b.setIconAlternateText(null);
+        }
+
+    }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/nativebutton/NativeButtonIconAndTextTest.java b/uitest/src/com/vaadin/tests/components/nativebutton/NativeButtonIconAndTextTest.java
new file mode 100644 (file)
index 0000000..2cb294d
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2000-2013 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.nativebutton;
+
+import static com.vaadin.tests.components.nativebutton.NativeButtonIconAndText.BUTTON_TEXT;
+import static com.vaadin.tests.components.nativebutton.NativeButtonIconAndText.BUTTON_TEXT_ICON;
+import static com.vaadin.tests.components.nativebutton.NativeButtonIconAndText.BUTTON_TEXT_ICON_ALT;
+import static com.vaadin.tests.components.nativebutton.NativeButtonIconAndText.INITIAL_ALTERNATE_TEXT;
+import static com.vaadin.tests.components.nativebutton.NativeButtonIconAndText.NATIVE_BUTTON_TEXT;
+import static com.vaadin.tests.components.nativebutton.NativeButtonIconAndText.NATIVE_BUTTON_TEXT_ICON;
+import static com.vaadin.tests.components.nativebutton.NativeButtonIconAndText.NATIVE_BUTTON_TEXT_ICON_ALT;
+import static com.vaadin.tests.components.nativebutton.NativeButtonIconAndText.UPDATED_ALTERNATE_TEXT;
+
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class NativeButtonIconAndTextTest extends MultiBrowserTest {
+
+    @Test
+    public void testNativeButtonIconAltText() {
+        openTestURL();
+        assertAltText(BUTTON_TEXT, "");
+        assertAltText(BUTTON_TEXT_ICON, "");
+        assertAltText(BUTTON_TEXT_ICON_ALT, INITIAL_ALTERNATE_TEXT);
+        assertAltText(NATIVE_BUTTON_TEXT, "");
+        assertAltText(NATIVE_BUTTON_TEXT_ICON, "");
+        assertAltText(NATIVE_BUTTON_TEXT_ICON_ALT, INITIAL_ALTERNATE_TEXT);
+
+        clickElements(BUTTON_TEXT, BUTTON_TEXT_ICON, BUTTON_TEXT_ICON_ALT,
+                NATIVE_BUTTON_TEXT, NATIVE_BUTTON_TEXT_ICON,
+                NATIVE_BUTTON_TEXT_ICON_ALT);
+
+        // Button without icon - should not get alt text
+        assertAltText(BUTTON_TEXT, "");
+        assertAltText(BUTTON_TEXT_ICON, UPDATED_ALTERNATE_TEXT);
+        assertAltText(BUTTON_TEXT_ICON_ALT, "");
+        // Button without icon - should not get alt text
+        assertAltText(NATIVE_BUTTON_TEXT, "");
+        assertAltText(NATIVE_BUTTON_TEXT_ICON, UPDATED_ALTERNATE_TEXT);
+        assertAltText(NATIVE_BUTTON_TEXT_ICON_ALT, "");
+
+    }
+
+    private void clickElements(String... ids) {
+        for (String id : ids) {
+            vaadinElementById(id).click();
+        }
+    }
+
+    /**
+     * If the button identified by 'buttonId' has an icon, asserts that the
+     * alternate text of the icon matches 'expected'. "" and null are considered
+     * equivalent.
+     * 
+     * @param buttonId
+     *            the id of the button who possibly contains an icon
+     * @param expected
+     *            the expected alternate text, cannot be null
+     */
+    private void assertAltText(String buttonId, String expected) {
+        WebElement button = vaadinElementById(buttonId);
+        List<WebElement> imgList = button.findElements(By.xpath(".//img"));
+        if (imgList.isEmpty()) {
+            return;
+        }
+        WebElement img = imgList.get(0);
+        String alt = img.getAttribute("alt");
+        if (alt == null) {
+            alt = "";
+        }
+
+        Assert.assertEquals(expected, alt);
+
+    }
+}