/*
* 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.server.component.button;
import org.jsoup.nodes.Element;
import org.jsoup.parser.Tag;
import org.junit.Assert;
import org.junit.Test;
import com.vaadin.event.ShortcutAction.KeyCode;
import com.vaadin.event.ShortcutAction.ModifierKey;
import com.vaadin.tests.design.DeclarativeTestBase;
import com.vaadin.ui.Button;
import com.vaadin.ui.NativeButton;
import com.vaadin.ui.declarative.DesignContext;
/**
* Tests declarative support for implementations of {@link Button} and
* {@link NativeButton}.
*
* @since 7.4
* @author Vaadin Ltd
*/
public class ButtonDeclarativeTest extends DeclarativeTestBase<Button> {
@Test
public void testEmptyPlainText() {
String design = "<vaadin-button plain-text></vaadin-button>";
testButtonAndNativeButton(design, false, "");
}
@Test
public void testPlainTextCaption() {
String design = "<vaadin-button plain-text>Click</vaadin-button>";
testButtonAndNativeButton(design, false, "Click");
}
@Test
public void testEmptyHtml() {
String design = "<vaadin-button />";
testButtonAndNativeButton(design, true, "");
}
@Test
public void testHtmlCaption() {
String design = "<vaadin-button><b>Click</b></vaadin-button>";
testButtonAndNativeButton(design, true, "<b>Click</b>");
}
@Test
public void testWithCaptionAttribute() {
// The caption attribute should be ignored
String design = "<vaadin-button caption=Caption>Click</vaadin-button>";
String expectedWritten = "<vaadin-button>Click</vaadin-button>";
testButtonAndNativeButton(design, true, "Click", expectedWritten);
}
@Test
public void testWithOnlyCaptionAttribute() {
String design = "<vaadin-button caption=Click/>";
String expectedWritten = "<vaadin-button/>";
testButtonAndNativeButton(design, true, "", expectedWritten);
}
@Test
public void testHtmlEntitiesInCaption() {
String designPlainText = "<vaadin-button plain-text=\"true\">> One</vaadin-button>";
String expectedCaptionPlainText = "> One";
Button read = read(designPlainText);
Assert.assertEquals(expectedCaptionPlainText, read.getCaption());
designPlainText = designPlainText.replace("vaadin-button",
"vaadin-native-button");
Button nativeButton = read(designPlainText);
Assert.assertEquals(expectedCaptionPlainText,
nativeButton.getCaption());
String designHtml = "<vaadin-button>> One</vaadin-button>";
String expectedCaptionHtml = "> One";
read = read(designHtml);
Assert.assertEquals(expectedCaptionHtml, read.getCaption());
designHtml = designHtml.replace("vaadin-button",
"vaadin-native-button");
nativeButton = read(designHtml);
Assert.assertEquals(expectedCaptionHtml, nativeButton.getCaption());
read = new Button("& Test");
read.setCaptionAsHtml(true);
Element root = new Element(Tag.valueOf("vaadin-button"), "");
read.writeDesign(root, new DesignContext());
assertEquals("& Test", root.html());
read.setCaptionAsHtml(false);
root = new Element(Tag.valueOf("vaadin-button"), "");
read.writeDesign(root, new DesignContext());
assertEquals("& Test", root.html());
}
public void testButtonAndNativeButton(String design, boolean html,
String caption) {
testButtonAndNativeButton(design, html, caption, design);
}
public void testButtonAndNativeButton(String design, boolean html,
String caption, String expectedWritten) {
// Test Button
Button b = new Button();
b.setCaptionAsHtml(html);
b.setCaption(caption);
testRead(expectedWritten, b);
testWrite(expectedWritten, b);
// Test NativeButton
design = design.replace("vaadin-button", "vaadin-native-button");
expectedWritten = expectedWritten.replace("vaadin-button",
"vaadin-native-button");
NativeButton nb = new NativeButton();
nb.setCaptionAsHtml(html);
nb.setCaption(caption);
testRead(expectedWritten, nb);
testWrite(expectedWritten, nb);
}
@Test
public void testAttributes() {
String design = "<vaadin-button tabindex=3 plain-text icon-alt=OK "
+ "click-shortcut=shift-ctrl-o></vaadin-button>";
Button b = new Button("");
b.setTabIndex(3);
b.setIconAlternateText("OK");
b.setClickShortcut(KeyCode.O, ModifierKey.CTRL, ModifierKey.SHIFT);
testRead(design, b);
testWrite(design, b);
}
}