diff options
author | Henri Sara <henri.sara@itmill.com> | 2011-07-27 08:15:35 +0000 |
---|---|---|
committer | Henri Sara <henri.sara@itmill.com> | 2011-07-27 08:15:35 +0000 |
commit | ca96dca574f2412c760b0b70a72b3166e9f813fc (patch) | |
tree | b2ff4a57d3fef72eb6bb56d0d1b52eb415a3a5f1 | |
parent | 4adc69a6e80b2320952b7658171ca170bfaa251f (diff) | |
download | vaadin-framework-ca96dca574f2412c760b0b70a72b3166e9f813fc.tar.gz vaadin-framework-ca96dca574f2412c760b0b70a72b3166e9f813fc.zip |
Merged changes to 6.7
svn changeset:19972/svn branch:6.7
16 files changed, 300 insertions, 99 deletions
diff --git a/WebContent/VAADIN/themes/reindeer/table/table.css b/WebContent/VAADIN/themes/reindeer/table/table.css index 8ac40ba116..156c1c3e50 100644 --- a/WebContent/VAADIN/themes/reindeer/table/table.css +++ b/WebContent/VAADIN/themes/reindeer/table/table.css @@ -24,6 +24,19 @@ line-height: normal; } +.v-ie6 .v-table-header-wrap, +.v-ie6 .v-table-footer-wrap, +.v-ie6 .v-table-column-selector{ + /* Fixes IE6 overflow bug #7314 which causes Table headers to overflow and cover the column selector. */ + position:relative; +} + +.v-ie6 .v-table.v-disabled, +.v-ie7 .v-table.v-disabled{ + /* Fixes ie issue #7324 where disabled shim does not cover table body */ + position:relative; +} + .v-table-footer-wrap, .white .v-table-footer-wrap { text-transform: none; @@ -40,6 +53,7 @@ padding-right: 7px; } + .v-table-header, .v-table-footer, .v-table-footer table { diff --git a/WebContent/VAADIN/themes/sampler/icons/sampleicons/75-MenuBarCheckableItems.gif b/WebContent/VAADIN/themes/sampler/icons/sampleicons/75-MenuBarCheckableItems.gif Binary files differnew file mode 100644 index 0000000000..f59714cc62 --- /dev/null +++ b/WebContent/VAADIN/themes/sampler/icons/sampleicons/75-MenuBarCheckableItems.gif diff --git a/build/build.xml b/build/build.xml index d6bdfa6dd1..3197f15c56 100644 --- a/build/build.xml +++ b/build/build.xml @@ -30,16 +30,20 @@ <target name="package-test" depends="clean-result, nightly-init, package-init, init, build, docs, internal-package-zip, nightly-publish"> </target> + <!-- Locations of Ant task JARs - build properties not yet read at this point --> + <property name="ant.task.jar.antcontrib" value="build/lib/ant-contrib-1.0b3.jar" /> + <property name="ant.task.jar.maven" value="build/lib/maven-ant-tasks-2.0.10.jar" /> + <!-- ant contrib required for flow control (for loop, if, property override) --> <!-- Note that we have to use a namespace to avoid clash when running sub-ant. --> <taskdef uri="antlib:net.sf.antcontrib" resource="net/sf/antcontrib/antlib.xml"> <classpath> - <pathelement location="build/lib/ant-contrib-1.0b3.jar" /> + <pathelement location="${ant.task.jar.antcontrib}" /> </classpath> </taskdef> <!-- ant contrib for Maven integration --> - <path id="maven-ant-tasks.classpath" path="build/lib/maven-ant-tasks-2.0.10.jar" /> + <path id="maven-ant-tasks.classpath" path="${ant.task.jar.maven}" /> <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="antlib:org.apache.maven.artifact.ant" classpathref="maven-ant-tasks.classpath" /> @@ -626,7 +630,9 @@ <target name="remove-widgetset-gwt-tmp"> <echo>Removing widgetset temp files</echo> - <delete dir="${output-dir}/WebContent/VAADIN/widgetsets/.gwt-tmp" includeemptydirs="true"/> + <delete dir="${widgetsets-output-dir}/.gwt-tmp" includeemptydirs="true"/> + <!-- This is generated by GWT 2.3+ for rpcPolicyManifest and symbolMaps, cannot disable --> + <delete dir="${widgetsets-output-dir}/WEB-INF" includeemptydirs="true" failonerror="false" /> </target> <!-- Note: Probably not needed any longer as all sources need to be compiled. --> @@ -993,7 +999,7 @@ <!-- ================================================================== --> <!-- Main target for the custom build. --> - <target name="custom-build" depends="clean-result, custom-build-init, nightly-init, package-init, init, compile-server-side, compile-client-side, vaadin.jar, vaadin-sources.jar"> + <target name="custom-build" depends="clean-result, custom-build-init, nightly-init, package-init, init, build"> </target> @@ -1011,7 +1017,7 @@ <property file="${build.properties.file}" /> <property name="version" value="${vaadin.version}"/> <property name="version.full" value="${version}.custom-${build.date.compact}"/> - <property name="compile.only.default-widgetset" value="1"/> + <!-- <property name="compile.only.default-widgetset" value="1"/> --> </then> <!-- Otherwise version and snapshot.repository.url come from target "init" --> </antcontrib:if> @@ -1245,6 +1251,8 @@ <fail unless="com.vaadin.testbench.deployment.url" message="The 'com.vaadin.testbench.deployment.url' property must be defined."/> <fail unless="com.vaadin.testbench.lib.dir" message="The 'com.vaadin.testbench.lib.dir' property must be defined."/> + <property name="com.vaadin.testbench.screenshot.block.error" value="0.025"/> + <property name="com.vaadin.testbench.debug" value="false"/> <property name="package.name" value="${base-name}"/> <!-- Only Linux tests allowed. TODO: Generalize this. --> @@ -1257,9 +1265,8 @@ <!-- "tests" classes after unpacking the package. --> <property name="output-dir" value="${output-dir}"/> - <!-- Convert some tests to run multiple times if failed. --> - <property name="create.retry.tests" value="1"/> - <property name="retries" value="3"/> + <!-- Convert tests to run multiple times if failed. --> + <property name="retries" value="2"/> <property name="package.filename" value="${package.filename}"/> <property name="testing.testarea" value="/tmp/testarea"/> @@ -1268,6 +1275,8 @@ <property name="com.vaadin.testbench.tester.host" value="${com.vaadin.testbench.tester.host}"/> <property name="com.vaadin.testbench.deployment.url" value="${com.vaadin.testbench.deployment.url}"/> <property name="com.vaadin.testbench.lib.dir" value="${com.vaadin.testbench.lib.dir}"/> + <property name="com.vaadin.testbench.debug" value="${com.vaadin.testbench.debug}"/> + <property name="com.vaadin.testbench.screenshot.block.error" value="${com.vaadin.testbench.screenshot.block.error}"/> </ant> </target> diff --git a/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java b/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java index 4b6194b79b..6787b36022 100644 --- a/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java +++ b/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java @@ -223,7 +223,6 @@ public class ApplicationConfiguration implements EntryPoint { } } - deferredWidgetLoadLoop.scheduleRepeating(100); } /** @@ -257,6 +256,7 @@ public class ApplicationConfiguration implements EntryPoint { runningApplications.add(a); return true; } else { + deferredWidgetLoader = new DeferredWidgetLoader(); return false; } } @@ -361,6 +361,8 @@ public class ApplicationConfiguration implements EntryPoint { cmd.execute(); } callbacks.clear(); + } else if(widgetsLoading == 0 && deferredWidgetLoader != null) { + deferredWidgetLoader.trigger(); } } @@ -368,22 +370,44 @@ public class ApplicationConfiguration implements EntryPoint { /* * This loop loads widget implementation that should be loaded deferred. */ - private static final Timer deferredWidgetLoadLoop = new Timer() { + static class DeferredWidgetLoader extends Timer { private static final int FREE_LIMIT = 4; + private static final int FREE_CHECK_TIMEOUT = 100; int communicationFree = 0; int nextWidgetIndex = 0; + private boolean pending; + + public DeferredWidgetLoader() { + schedule(5000); + } + + public void trigger() { + if(!pending) { + schedule(FREE_CHECK_TIMEOUT); + } + } + + @Override + public void schedule(int delayMillis) { + super.schedule(delayMillis); + pending = true; + } @Override public void run() { + pending = false; if (!isBusy()) { Class<? extends Paintable> nextType = getNextType(); if (nextType == null) { // ensured that all widgets are loaded - cancel(); + deferredWidgetLoader = null; } else { + communicationFree = 0; widgetSet.loadImplementation(nextType); } + } else { + schedule(FREE_CHECK_TIMEOUT); } } @@ -400,21 +424,23 @@ public class ApplicationConfiguration implements EntryPoint { private boolean isBusy() { if (widgetsLoading > 0) { communicationFree = 0; - return false; + return true; } for (ApplicationConnection app : runningApplications) { if (app.hasActiveRequest()) { // if an UIDL request or widget loading is active, mark as // busy communicationFree = 0; - return false; + return true; } } communicationFree++; return communicationFree < FREE_LIMIT; } - }; - + } + + private static DeferredWidgetLoader deferredWidgetLoader; + public void onModuleLoad() { // Enable IE6 Background image caching diff --git a/src/com/vaadin/terminal/gwt/client/CSSRule.java b/src/com/vaadin/terminal/gwt/client/CSSRule.java index 5c7758e0dd..97604d242e 100644 --- a/src/com/vaadin/terminal/gwt/client/CSSRule.java +++ b/src/com/vaadin/terminal/gwt/client/CSSRule.java @@ -72,7 +72,7 @@ public class CSSRule { var j = theRules.length; for(var i=0; i<j; i++) { var r = theRules[i]; - if(r.type == 1 || sheet.imports) { + if(r.type == 1 || sheet.imports) { var selectors = r.selectorText.toLowerCase().split(","); var n = selectors.length; for(var m=0; m<n; m++) { diff --git a/src/com/vaadin/terminal/gwt/client/VDebugConsole.java b/src/com/vaadin/terminal/gwt/client/VDebugConsole.java index ec172f67f8..5d7c0be437 100755 --- a/src/com/vaadin/terminal/gwt/client/VDebugConsole.java +++ b/src/com/vaadin/terminal/gwt/client/VDebugConsole.java @@ -56,7 +56,7 @@ import com.vaadin.terminal.gwt.client.ui.VOverlay; * This implementation can be overridden with GWT deferred binding. * */ -public final class VDebugConsole extends VOverlay implements Console { +public class VDebugConsole extends VOverlay implements Console { private static final String POS_COOKIE_NAME = "VDebugConsolePos"; @@ -287,11 +287,7 @@ public final class VDebugConsole extends VOverlay implements Console { protected void remoteLog(String msg) { msgQueue.add(msg); - if (msg.length() > 4) { - doSend.execute(); - } else { - sendToRemoteLog.trigger(); - } + sendToRemoteLog.trigger(); } /** diff --git a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java index 1226c5ae79..8f8958d365 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java @@ -807,6 +807,18 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler, enabled = !uidl.hasAttribute("disabled"); + if (BrowserInfo.get().isIE8() && !enabled) { + /* + * The disabled shim will not cover the table body if it is + * relative in IE8. See #7324 + */ + scrollBodyPanel.getElement().getStyle() + .setPosition(Position.STATIC); + } else if (BrowserInfo.get().isIE8()) { + scrollBodyPanel.getElement().getStyle() + .setPosition(Position.RELATIVE); + } + this.client = client; paintableId = uidl.getStringAttribute("id"); immediate = uidl.getBooleanAttribute("immediate"); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTree.java b/src/com/vaadin/terminal/gwt/client/ui/VTree.java index ef08e81e10..eb8a2e63c5 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VTree.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VTree.java @@ -511,9 +511,27 @@ public class VTree extends FocusElementPanel implements Paintable, * Sends the selection to the server */ private void sendSelectionToServer() { - client.updateVariable(paintableId, "selected", selectedIds - .toArray(new String[selectedIds.size()]), immediate); - selectionHasChanged = false; + Command command = new Command() { + public void execute() { + client.updateVariable(paintableId, "selected", + selectedIds.toArray(new String[selectedIds.size()]), + immediate); + selectionHasChanged = false; + } + }; + + /* + * Delaying the sending of the selection in webkit to ensure the + * selection is always sent when the tree has focus and after click + * events have been processed. This is due to the focusing + * implementation in FocusImplSafari which uses timeouts when focusing + * and blurring. + */ + if (BrowserInfo.get().isWebkit()) { + Scheduler.get().scheduleDeferred(command); + } else { + command.execute(); + } } /** diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java index a3f1c59846..7ad790e25e 100644 --- a/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java +++ b/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.TreeSet; @@ -244,10 +245,16 @@ public class WidgetMapGenerator extends Generator { boolean first = true; ArrayList<Class<? extends Paintable>> lazyLoadedWidgets = new ArrayList<Class<? extends Paintable>>(); + + HashSet<Class<? extends com.vaadin.terminal.gwt.client.Paintable>> widgetsWithInstantiator = new HashSet<Class<? extends com.vaadin.terminal.gwt.client.Paintable>>(); + for (Class<? extends Paintable> class1 : paintablesHavingWidgetAnnotation) { ClientWidget annotation = class1.getAnnotation(ClientWidget.class); Class<? extends com.vaadin.terminal.gwt.client.Paintable> clientClass = annotation .value(); + if(widgetsWithInstantiator.contains(clientClass)) { + continue; + } if (clientClass == VView.class) { // VView's are not instantiated by widgetset continue; @@ -288,6 +295,7 @@ public class WidgetMapGenerator extends Generator { sourceWriter.print(");"); } sourceWriter.print("}"); + widgetsWithInstantiator.add(clientClass); } sourceWriter.println("}"); diff --git a/src/com/vaadin/ui/AbstractTextField.java b/src/com/vaadin/ui/AbstractTextField.java index 622b8d18d9..4ed76d367b 100644 --- a/src/com/vaadin/ui/AbstractTextField.java +++ b/src/com/vaadin/ui/AbstractTextField.java @@ -1,4 +1,4 @@ -/* +/* @ITMillApache2LicenseForJavaFiles@ */ @@ -123,20 +123,7 @@ public abstract class AbstractTextField extends AbstractField implements throw new IllegalStateException( "Null values are not allowed if the null-representation is null"); } - - if (requestRepaintInTextChangeEvent && !valueChangeInTextChangeEvent) { - /* - * If the repaint occurred in a text change event then we do not - * want to send back the old value since it will just overwrite the - * typed value so we send the last known value instead which is - * updated by the text change event. - */ - target.addVariable(this, "text", lastKnownTextContent); - } else { - target.addVariable(this, "text", value); - } - requestRepaintInTextChangeEvent = false; - valueChangeInTextChangeEvent = false; + target.addVariable(this, "text", value); if (selectionPosition != -1) { target.addAttribute("selpos", selectionPosition); @@ -184,22 +171,6 @@ public abstract class AbstractTextField extends AbstractField implements } } - /** - * Flag for monitoring if a repaint gets requested in a text change event - */ - private boolean requestRepaintInTextChangeEvent = false; - - @Override - public void requestRepaint() { - if (textChangeEventPending) { - /* - * Textchange event listener triggered this repaint - */ - requestRepaintInTextChangeEvent = true; - } - super.requestRepaint(); - } - @Override public void changeVariables(Object source, Map<String, Object> variables) { changingVariables = true; @@ -467,26 +438,13 @@ public abstract class AbstractTextField extends AbstractField implements private void firePendingTextChangeEvent() { if (textChangeEventPending) { - fireEvent(new TextChangeEventImpl(this)); textChangeEventPending = false; + fireEvent(new TextChangeEventImpl(this)); } } - /** - * Flag for monitoring if the value got changed in a TextChangeEvent - * listener - */ - protected boolean valueChangeInTextChangeEvent = false; - @Override protected void setInternalValue(Object newValue) { - if (textChangeEventPending) { - /* - * Value changed in a TextChangeEvent listener - */ - valueChangeInTextChangeEvent = true; - } - if (changingVariables && !textChangeEventPending) { /* * Fire a "simulated" text change event before value change event if diff --git a/tests/integration_tests.xml b/tests/integration_tests.xml index 9caea35270..b183a317a3 100644 --- a/tests/integration_tests.xml +++ b/tests/integration_tests.xml @@ -53,6 +53,7 @@ <property name="browsers" value="${test_browsers}" />
<property name="testfiles" value="${testfiles}" />
<property name="test-output-dir" value="../build/integration-test-output" />
+ <property name="retries" value="0" />
<fileset dir="." includes="test.xml" />
</subant>
diff --git a/tests/src/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.html b/tests/src/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.html new file mode 100644 index 0000000000..8795ad12dc --- /dev/null +++ b/tests/src/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.html @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head profile="http://selenium-ide.openqa.org/profiles/test-case"> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<link rel="selenium.base" href="" /> +<title>New Test</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">New Test</td></tr> +</thead><tbody> +<tr> + <td>open</td> + <td>/run/com.vaadin.tests.components.formlayout.TableInFormLayoutCausesScrolling?restartApplication</td> + <td></td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsformlayoutTableInFormLayoutCausesScrolling::/VFormLayout[0]/VFormLayout$VFormLayoutTable[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td> + <td>12,13</td> +</tr> +<tr> + <td>screenCapture</td> + <td></td> + <td>should-be-scrolled-up</td> +</tr> + +</tbody></table> +</body> +</html> diff --git a/tests/src/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.java b/tests/src/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.java new file mode 100644 index 0000000000..157772f8cd --- /dev/null +++ b/tests/src/com/vaadin/tests/components/formlayout/TableInFormLayoutCausesScrolling.java @@ -0,0 +1,45 @@ +package com.vaadin.tests.components.formlayout;
+
+import com.vaadin.tests.components.AbstractTestCase;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Window;
+
+public class TableInFormLayoutCausesScrolling extends AbstractTestCase {
+
+ @Override
+ public void init() {
+ // Window Initialization.
+ final Window window = new Window("Main Window");
+ setMainWindow(window);
+
+ // FormLayout creation
+ final FormLayout fl = new FormLayout();
+ window.setContent(fl);
+
+ // Add 20 TextField
+ for (int i = 20; i-- > 0;) {
+ fl.addComponent(new TextField());
+ }
+
+ // Add 1 selectable table with some items
+ final Table table = new Table();
+ table.setSelectable(true);
+ table.addContainerProperty("item", String.class, "");
+ for (int i = 50; i-- > 0;) {
+ table.addItem(new String[] { "item" + i }, i);
+ }
+ window.addComponent(table);
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Clicking in the Table should not cause the page to scroll";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 7309;
+ }
+}
\ No newline at end of file diff --git a/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.html b/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.html new file mode 100644 index 0000000000..f0d837d97a --- /dev/null +++ b/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.html @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head profile="http://selenium-ide.openqa.org/profiles/test-case"> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<link rel="selenium.base" href="http://artur.virtuallypreinstalled.com/" /> +<title>New Test</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">New Test</td></tr> +</thead><tbody> +<tr> + <td>open</td> + <td>/run/com.vaadin.tests.components.orderedlayout.VerticalLayoutWidthCalculation?restartApplication</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>vaadin=runcomvaadintestscomponentsorderedlayoutVerticalLayoutWidthCalculation::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>vaadin=runcomvaadintestscomponentsorderedlayoutVerticalLayoutWidthCalculation::/VWindow[0]/FocusableScrollPanel[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td> + <td></td> +</tr> +<tr> + <td>screenCapture</td> + <td></td> + <td>window-sized-to-one-textfield</td> +</tr> +</tbody></table> +</body> +</html> diff --git a/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.java b/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.java new file mode 100644 index 0000000000..f59b940353 --- /dev/null +++ b/tests/src/com/vaadin/tests/components/orderedlayout/VerticalLayoutWidthCalculation.java @@ -0,0 +1,63 @@ +package com.vaadin.tests.components.orderedlayout; + +import com.vaadin.tests.components.AbstractTestCase; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.TextField; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Window; + +public class VerticalLayoutWidthCalculation extends AbstractTestCase { + @Override + public void init() { + final Window mainWindow = new Window("Vaadintest Application"); + mainWindow.addWindow(createSubWindow()); + setMainWindow(mainWindow); + + } + + private Window createSubWindow() { + HorizontalLayout hl = new HorizontalLayout(); + + VerticalLayout vlTF1 = new VerticalLayout(); + vlTF1.setSizeUndefined(); + final TextField tf1 = new TextField("Text1"); + tf1.setSizeUndefined(); + vlTF1.addComponent(tf1); + hl.addComponent(vlTF1); + + VerticalLayout vlTF2 = new VerticalLayout(); + vlTF2.setSizeUndefined(); + final TextField tf2 = new TextField("Text2"); + tf2.setVisible(false); + tf2.setSizeUndefined(); + vlTF2.addComponent(tf2); + hl.addComponent(vlTF2); + + Window wnd = new Window("Test"); + wnd.getContent().setSizeUndefined(); + wnd.addComponent(hl); + Button btn = new Button("Show/hide"); + btn.addListener(new Button.ClickListener() { + + public void buttonClick(ClickEvent event) { + tf2.setVisible(!tf2.isVisible()); + } + }); + wnd.addComponent(btn); + + return wnd; + } + + @Override + protected String getDescription() { + return "The second TextField is initially invisible. Make it visible and then hide it again. You should end up with the same result as initially."; + } + + @Override + protected Integer getTicketNumber() { + return 7260; + } + +} diff --git a/tests/test.xml b/tests/test.xml index 512db895a9..7f6331ec8e 100644 --- a/tests/test.xml +++ b/tests/test.xml @@ -5,11 +5,14 @@ <!-- Configuration --> <!-- ================================================================== --> <!-- Browsers to use for testing --> - <property name="browsers-windows" value="winxp-ie6,winxp-ie7,winxp-ie8,win7-ie9,winxp-firefox36,winxp-firefox4,winxp-safari4,winxp-safari5,winxp-googlechrome-stable,winxp-opera1060,winxp-opera11" /> + <property name="browsers-windows" value="winxp-ie6,winxp-ie7,winxp-ie8,win7-ie9,winxp-firefox36,winxp-firefox4,winxp-firefox5,winxp-safari4,winxp-safari5,winxp-googlechrome-stable,winxp-opera1060,winxp-opera11" /> <property name="browsers-linux" value="linux-firefox3,linux-opera10,linux-googlechrome8" /> <property name="browsers-mac" value="osx-firefox3,osx-opera10,osx-googlechrome8,osx-safari4,osx-safari5" /> <property name="browsers" value="${browsers-windows}" /> + + <!-- Number of times to retry a test if it fails --> + <property name="retries" value="2" /> <!-- Screen shot base directory --> <fail unless="com.vaadin.testbench.screenshot.directory" message="The 'com.vaadin.testbench.screenshot.directory' property must be defined." /> @@ -20,6 +23,9 @@ <!-- Host running Testbench Hub --> <property name="com.vaadin.testbench.tester.host" value="testbench-hub.intra.itmill.com" /> + <property name="com.vaadin.testbench.screenshot.block.error" value="0.025"/> + <property name="com.vaadin.testbench.debug" value="false"/> + <!-- Temporary output directory, created and removed by this script --> <!-- <property name="test-output-dir" value="../build/test-output" /> --> <fail unless="test-output-dir" message="The 'test-output-dir' property must be defined." /> @@ -43,16 +49,12 @@ <exclude name="tests/integration-testscripts/**" /> </fileset> - <!-- fileset containing tests to retry --> - <fileset dir=".." id="html-retry-files-ie6"> - <include name="tests/**/SubWindows**.html" /> - </fileset> - <!-- This target converts HTML tests files to java junit tests. One test file for each browser is created. --> <target name="create-tests" depends="remove-temp-testclasses" if="server.start.succeeded"> <pathconvert pathsep=" " property="testfiles" refid="html-test-files" /> <java classname="com.vaadin.testbench.util.TestConverter" classpathref="classpath" fork="true"> + <sysproperty key="com.vaadin.testbench.test.retries" value="${retries}" /> <jvmarg value="-Duser.language=en"/> <jvmarg value="-Duser.country=US"/> <arg value="${test-output-dir}" /> @@ -62,30 +64,8 @@ </target> - <target name="create-retry-tests" if="create.retry.tests"> - <antcall target="convert-retry-test"> - <param name="browser" value="winxp-ie6" /> - <param name="testfile-name" value="html-retry-files-ie6" /> - </antcall> - </target> - - <!-- Target converts test files so that the whole test can be re run 'retries' times --> - <target name="convert-retry-test" if="retries"> - <pathconvert pathsep=" " property="testfile" refid="${testfile-name}" /> - - <java classname="com.vaadin.testbench.util.TestConverter" classpathref="classpath"> - <sysproperty key="com.vaadin.testbench.test.retries" value="${retries}" /> - <jvmarg value="-Duser.language=en"/> - <jvmarg value="-Duser.country=US"/> - <arg value="${test-output-dir}" /> - <arg value="${browser}" /> - <arg line="${testfile}" /> - </java> - - </target> - <!-- This target complies the generated java junit tests. --> - <target name="compile-tests" depends="create-tests, create-retry-tests"> + <target name="compile-tests" depends="create-tests"> <mkdir dir="${class-dir}" /> <javac srcdir="${test-output-dir}" destdir="${class-dir}" debug="on" fork="yes" failonerror="false" encoding="UTF8"> <classpath> @@ -183,6 +163,9 @@ <jvmarg value="-Dcom.vaadin.testbench.screenshot.directory=${com.vaadin.testbench.screenshot.directory}" /> <!-- Resolution for screenshots --> <jvmarg value="-Dcom.vaadin.testbench.screenshot.resolution=${com.vaadin.testbench.screenshot.resolution}" /> + <jvmarg value="-Dcom.vaadin.testbench.debug=${com.vaadin.testbench.debug}" /> + <jvmarg value="-Dcom.vaadin.testbench.screenshot.block.error=${com.vaadin.testbench.screenshot.block.error}" /> + <jvmarg value="-Djava.awt.headless=true" /> |