123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- /*
- * 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.abstractcomponent;
-
- import static org.junit.Assert.assertTrue;
-
- import java.io.ByteArrayInputStream;
- import java.io.File;
- import java.nio.charset.StandardCharsets;
- import java.util.Locale;
-
- import org.jsoup.nodes.Attributes;
- import org.jsoup.nodes.Element;
- import org.jsoup.parser.Tag;
- import org.junit.Before;
- import org.junit.Test;
-
- import com.vaadin.server.ErrorMessage.ErrorLevel;
- import com.vaadin.shared.ui.ContentMode;
- import com.vaadin.server.ExternalResource;
- import com.vaadin.server.FileResource;
- import com.vaadin.server.Responsive;
- import com.vaadin.server.ThemeResource;
- import com.vaadin.server.UserError;
- import com.vaadin.tests.design.DeclarativeTestBase;
- import com.vaadin.ui.AbstractComponent;
- import com.vaadin.ui.Button;
- import com.vaadin.ui.HorizontalSplitPanel;
- import com.vaadin.ui.Label;
- import com.vaadin.ui.Panel;
- import com.vaadin.ui.declarative.Design;
- import com.vaadin.ui.declarative.DesignContext;
-
- /**
- * Test cases for reading and writing the properties of AbstractComponent.
- *
- * @since
- * @author Vaadin Ltd
- */
- public class AbstractComponentDeclarativeTest
- extends DeclarativeTestBase<AbstractComponent> {
-
- private AbstractComponent component;
-
- @Before
- public void setUp() {
- Label l = new Label();
- l.setContentMode(ContentMode.HTML);
- component = l;
- }
-
- @Test
- public void testEmptyDesign() {
- String design = "<vaadin-label>";
- testRead(design, component);
- testWrite(design, component);
- }
-
- @Test
- public void testProperties() {
- String design = "<vaadin-label id=\"testId\" primary-style-name=\"test-style\" "
- + "caption=\"test-caption\" locale=\"fi_FI\" description=\"test-description\" "
- + "error=\"<div>test-error</div>\" />";
- component.setId("testId");
- component.setPrimaryStyleName("test-style");
- component.setCaption("test-caption");
- component.setLocale(new Locale("fi", "FI"));
- component.setDescription("test-description");
- component.setComponentError(new UserError("<div>test-error</div>",
- com.vaadin.server.AbstractErrorMessage.ContentMode.HTML,
- ErrorLevel.ERROR));
- testRead(design, component);
- testWrite(design, component);
- }
-
- @Test
- public void testReadImmediate() {
- // Additional tests for the immediate property, including
- // explicit immediate values
- String[] design = { "<vaadin-label/>",
- "<vaadin-label immediate=\"false\"/>",
- "<vaadin-label immediate=\"true\"/>",
- "<vaadin-label immediate />" };
- Boolean[] explicitImmediate = { null, Boolean.FALSE, Boolean.TRUE,
- Boolean.TRUE };
- boolean[] immediate = { true, false, true, true };
- for (String design1 : design) {
- component = (AbstractComponent) Design
- .read(new ByteArrayInputStream(
- design1.getBytes(StandardCharsets.UTF_8)));
- }
- }
-
- @Test
- public void testExternalIcon() {
- String design = "<vaadin-label icon=\"http://example.com/example.gif\"/>";
- component.setIcon(
- new ExternalResource("http://example.com/example.gif"));
- testRead(design, component);
- testWrite(design, component);
- }
-
- @Test
- public void testThemeIcon() {
- String design = "<vaadin-label icon=\"theme://example.gif\"/>";
- component.setIcon(new ThemeResource("example.gif"));
- testRead(design, component);
- testWrite(design, component);
- }
-
- @Test
- public void testFileResourceIcon() {
- String design = "<vaadin-label icon=\"img/example.gif\"/>";
- component.setIcon(new FileResource(new File("img/example.gif")));
- testRead(design, component);
- testWrite(design, component);
- }
-
- @Test
- public void testWidthAndHeight() {
- String design = "<vaadin-label width=\"70%\" height=\"12px\"/>";
- component.setWidth("70%");
- component.setHeight("12px");
- testRead(design, component);
- testWrite(design, component);
- }
-
- @Test
- public void testSizeFull() {
- String design = "<vaadin-label size-full />";
- component.setSizeFull();
- testRead(design, component);
- testWrite(design, component);
- }
-
- @Test
- public void testSizeAuto() {
- component = new Panel();
- String design = "<vaadin-panel size-auto />";
- component.setSizeUndefined();
- testRead(design, component);
- testWrite(design, component);
- }
-
- @Test
- public void testHeightFull() {
- String design = "<vaadin-label height-full width=\"20px\"/>";
- component.setHeight("100%");
- component.setWidth("20px");
- testRead(design, component);
- testWrite(design, component);
- }
-
- @Test
- public void testHeightAuto() {
- String design = "<vaadin-horizontal-split-panel height-auto width=\"20px\" >";
- // we need to have default height of 100% -> use split panel
- AbstractComponent component = new HorizontalSplitPanel();
- component.setHeight(null);
- component.setWidth("20px");
- testRead(design, component);
- testWrite(design, component);
- }
-
- @Test
- public void testWidthFull() {
- String design = "<vaadin-button width-full height=\"20px\">Foo</vaadin-button>";
- AbstractComponent component = new Button();
- component.setCaptionAsHtml(true);
- component.setCaption("Foo");
- component.setHeight("20px");
- component.setWidth("100%");
- testRead(design, component);
- testWrite(design, component);
- }
-
- @Test
- public void testWidthAuto() {
- component = new Panel();
- String design = "<vaadin-panel height=\"20px\"/ width-auto />";
- component.setCaptionAsHtml(false);
- component.setHeight("20px");
- component.setWidth(null);
- testRead(design, component);
- testWrite(design, component);
- }
-
- @Test
- public void testResponsive() {
- String design = "<vaadin-label responsive />";
- Responsive.makeResponsive(component);
- testRead(design, component);
- testWrite(design, component);
- }
-
- @Test
- public void testResponsiveFalse() {
- String design = "<vaadin-label responsive =\"false\"/>";
- // Only test read as the attribute responsive=false would not be written
- testRead(design, component);
- }
-
- @Test
- public void testReadAlreadyResponsive() {
- AbstractComponent component = new Label();
- Responsive.makeResponsive(component);
- Element design = createDesign(true);
- component.readDesign(design, new DesignContext());
- assertEquals("Component should have only one extension", 1,
- component.getExtensions().size());
- }
-
- @Test
- public void testUnknownProperties() {
- String design = "<vaadin-label foo=\"bar\"/>";
-
- DesignContext context = readAndReturnContext(design);
- Label label = (Label) context.getRootComponent();
- assertTrue("Custom attribute was preserved in custom attributes",
- context.getCustomAttributes(label).containsKey("foo"));
-
- testWrite(label, design, context);
- }
-
- private Element createDesign(boolean responsive) {
- Attributes attributes = new Attributes();
- attributes.put("responsive", responsive);
- Element node = new Element(Tag.valueOf("vaadin-label"), "", attributes);
- return node;
- }
-
- }
|