/* * 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.textarea; import com.vaadin.event.UIEvents; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractReindeerTestUI; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Component; import com.vaadin.ui.CssLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; /** * Ticket #14080 * * - The bug happen on push event.<br/> * - The changes in the DOM are css related.<br/> * - It seems like when the class attribute is set on push, the textarea revert * to the height defined by the rows attribute.<br/> * - The size is reseted on onStateChange where the size is set to the one from * the state. And it's because, when the user changes the text, at the next poll * the state will confirm the change of the text, but the width and height * didn't change in the state either client or server before the fix. * * @since * @author Vaadin Ltd */ public class TextAreaSizeResetted extends AbstractReindeerTestUI { public static final int TEXTAREAHEIGHT = 200; public static final int TEXTAREAWIDTH = 200; CssLayout layout = new CssLayout() { @Override protected String getCss(Component c) { if (c instanceof TextArea) { return "resize:both"; } return super.getCss(c); } }; @Override protected void setup(VaadinRequest request) { setPollInterval(500); // Short polling like 100ms jams up the TestBench // waitForVaadin -functionality. final Label pollIndicator = new Label(); pollIndicator.setId("pollIndicator"); final TextField textField = new TextField("height"); final TextArea textArea = new TextArea(); textArea.setHeight(TEXTAREAHEIGHT + "px"); textArea.setWidth(TEXTAREAWIDTH + "px"); textArea.setValue("This is a text."); Label serverHeight = new Label(); Label text = new Label(); textArea.addValueChangeListener( event -> text.setValue(event.getValue())); Button hbutton = new Button("check height", new ClickListener() { @Override public void buttonClick(ClickEvent event) { serverHeight.setValue(textArea.getHeight() + " "); } }); Button button = new Button("Change Height", new ClickListener() { @Override public void buttonClick(ClickEvent event) { textArea.setHeight(textField.getValue()); } }); addComponent(layout); layout.addComponent(textArea); layout.addComponent(textField); layout.addComponent(button); layout.addComponent(pollIndicator); layout.addComponent(hbutton); layout.addComponent(serverHeight); layout.addComponent(text); addPollListener(new UIEvents.PollListener() { @Override public void poll(UIEvents.PollEvent event) { pollIndicator .setValue(String.valueOf(System.currentTimeMillis())); } }); } @Override protected String getTestDescription() { return "TextArea width/height change when user resize it, change the text then a poll come."; } @Override protected Integer getTicketNumber() { return 14080; } }