From 377d49ee174a6e2fb47152e5dbf0aac2db1276f5 Mon Sep 17 00:00:00 2001 From: John Ahlroos Date: Tue, 8 Oct 2013 15:54:55 +0300 Subject: Allow configuring deployment port for TB3 tests Change-Id: Iee0827d1e65dcbc1fc6c71701b80f355285b6902 --- uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java | 9 ++++++++- uitest/src/com/vaadin/tests/tb3/PrivateTB3Configuration.java | 12 ++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'uitest/src/com') diff --git a/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java b/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java index 38c5b29bf9..1967891a7a 100644 --- a/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java +++ b/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java @@ -172,6 +172,13 @@ public abstract class AbstractTB3Test extends TestBenchTestCase { */ protected abstract String getDeploymentHostname(); + /** + * Used to determine what port the test is running on + * + * @return The port teh test is running on, by default 8888 + */ + protected abstract String getDeploymentPort(); + /** * Produces a collection of browsers to run the test on. This method is * executed by the test runner when determining how many test methods to @@ -562,7 +569,7 @@ public abstract class AbstractTB3Test extends TestBenchTestCase { * @return The base URL for the test. Does not include a trailing slash. */ protected String getBaseURL() { - return "http://" + getDeploymentHostname() + ":8888"; + return "http://" + getDeploymentHostname() + ":" + getDeploymentPort(); } /** diff --git a/uitest/src/com/vaadin/tests/tb3/PrivateTB3Configuration.java b/uitest/src/com/vaadin/tests/tb3/PrivateTB3Configuration.java index 3d7dead928..09615f0b2e 100644 --- a/uitest/src/com/vaadin/tests/tb3/PrivateTB3Configuration.java +++ b/uitest/src/com/vaadin/tests/tb3/PrivateTB3Configuration.java @@ -34,6 +34,7 @@ import java.util.Properties; */ public abstract class PrivateTB3Configuration extends ScreenshotTB3Test { private static final String HOSTNAME_PROPERTY = "com.vaadin.testbench.deployment.hostname"; + private static final String PORT_PROPERTY = "com.vaadin.testbench.deployment.port"; private final Properties properties = new Properties(); public PrivateTB3Configuration() { @@ -82,6 +83,17 @@ public abstract class PrivateTB3Configuration extends ScreenshotTB3Test { return hostName; } + @Override + protected String getDeploymentPort() { + String port = getProperty(PORT_PROPERTY); + + if (port == null || "".equals(port)) { + port = "8888"; + } + + return port; + } + /** * Tries to automatically determine the IP address of the machine the test * is running on. -- cgit v1.2.3 From 6779857911a4eeb2bbfe0720629b058facc40f4d Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Mon, 7 Oct 2013 20:34:23 +0300 Subject: Updatet servlet tests to follow the same *Test naming convention Change-Id: I3c718232364f5ca7cce7131fa7685e4a2b833120 --- WebContent/WEB-INF/web.xml | 2 +- WebContent/WEB-INF/web.xml.2.4 | 2 +- .../tests/integration/AbstractIntegrationTest.java | 53 ++++++++++++++++++ .../integration/AbstractIntegrationTestTB3.java | 53 ------------------ .../AbstractServletIntegrationTest.java | 63 ++++++++++++++++++++++ .../tests/integration/IntegrationTestRunner.java | 2 +- .../integration/IntegrationTestStreaming.java | 35 ------------ .../tests/integration/IntegrationTestUI.java | 52 ------------------ .../integration/IntegrationTestWebsocket.java | 49 ----------------- .../integration/ServletIntegrationStreamingUI.java | 30 +++++++++++ .../ServletIntegrationStreamingUITest.java | 21 ++++++++ .../integration/ServletIntegrationTestTB3.java | 63 ---------------------- .../tests/integration/ServletIntegrationUI.java | 48 +++++++++++++++++ .../integration/ServletIntegrationUITest.java | 20 +++++++ .../integration/ServletIntegrationWebsocketUI.java | 45 ++++++++++++++++ .../ServletIntegrationWebsocketUITest.java | 21 ++++++++ .../vaadin/tests/tb3/ServletIntegrationTests.java | 4 +- 17 files changed, 306 insertions(+), 257 deletions(-) create mode 100644 uitest/src/com/vaadin/tests/integration/AbstractIntegrationTest.java delete mode 100644 uitest/src/com/vaadin/tests/integration/AbstractIntegrationTestTB3.java create mode 100644 uitest/src/com/vaadin/tests/integration/AbstractServletIntegrationTest.java delete mode 100644 uitest/src/com/vaadin/tests/integration/IntegrationTestStreaming.java delete mode 100755 uitest/src/com/vaadin/tests/integration/IntegrationTestUI.java delete mode 100644 uitest/src/com/vaadin/tests/integration/IntegrationTestWebsocket.java create mode 100644 uitest/src/com/vaadin/tests/integration/ServletIntegrationStreamingUI.java create mode 100644 uitest/src/com/vaadin/tests/integration/ServletIntegrationStreamingUITest.java delete mode 100644 uitest/src/com/vaadin/tests/integration/ServletIntegrationTestTB3.java create mode 100755 uitest/src/com/vaadin/tests/integration/ServletIntegrationUI.java create mode 100644 uitest/src/com/vaadin/tests/integration/ServletIntegrationUITest.java create mode 100644 uitest/src/com/vaadin/tests/integration/ServletIntegrationWebsocketUI.java create mode 100644 uitest/src/com/vaadin/tests/integration/ServletIntegrationWebsocketUITest.java (limited to 'uitest/src/com') diff --git a/WebContent/WEB-INF/web.xml b/WebContent/WEB-INF/web.xml index b93e0670fc..8a917966a1 100644 --- a/WebContent/WEB-INF/web.xml +++ b/WebContent/WEB-INF/web.xml @@ -92,7 +92,7 @@ com.vaadin.server.VaadinServlet UI - com.vaadin.tests.integration.IntegrationTestUI + com.vaadin.tests.integration.ServletIntegrationUI true diff --git a/WebContent/WEB-INF/web.xml.2.4 b/WebContent/WEB-INF/web.xml.2.4 index bcc5f3a651..96144b8036 100644 --- a/WebContent/WEB-INF/web.xml.2.4 +++ b/WebContent/WEB-INF/web.xml.2.4 @@ -86,7 +86,7 @@ com.vaadin.server.VaadinServlet UI - com.vaadin.tests.integration.IntegrationTestUI + com.vaadin.tests.integration.ServletIntegrationUI diff --git a/uitest/src/com/vaadin/tests/integration/AbstractIntegrationTest.java b/uitest/src/com/vaadin/tests/integration/AbstractIntegrationTest.java new file mode 100644 index 0000000000..5f4ae41361 --- /dev/null +++ b/uitest/src/com/vaadin/tests/integration/AbstractIntegrationTest.java @@ -0,0 +1,53 @@ +/* + * 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.integration; + +import java.util.Collection; +import java.util.Collections; + +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized.Parameters; +import org.openqa.selenium.remote.DesiredCapabilities; + +import com.vaadin.tests.tb3.PrivateTB3Configuration; + +/** + * Base class for integration tests. Integration tests use the + * {@literal deployment.url} parameter to determine the base deployment url + * (http://hostname:123) + * + * @author Vaadin Ltd + */ +@RunWith(IntegrationTestRunner.class) +public abstract class AbstractIntegrationTest extends + PrivateTB3Configuration { + @Override + protected String getBaseURL() { + String deploymentUrl = System.getProperty("deployment.url"); + if (deploymentUrl == null || deploymentUrl.equals("")) { + throw new RuntimeException( + "Deployment url must be given as deployment.url"); + } + + return deploymentUrl; + } + + @Parameters + public static Collection getBrowsersForTest() { + return Collections.singleton(BrowserUtil.firefox(17)); + } + +} diff --git a/uitest/src/com/vaadin/tests/integration/AbstractIntegrationTestTB3.java b/uitest/src/com/vaadin/tests/integration/AbstractIntegrationTestTB3.java deleted file mode 100644 index e170450619..0000000000 --- a/uitest/src/com/vaadin/tests/integration/AbstractIntegrationTestTB3.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.integration; - -import java.util.Collection; -import java.util.Collections; - -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized.Parameters; -import org.openqa.selenium.remote.DesiredCapabilities; - -import com.vaadin.tests.tb3.PrivateTB3Configuration; - -/** - * Base class for integration tests. Integration tests use the - * {@literal deployment.url} parameter to determine the base deployment url - * (http://hostname:123) - * - * @author Vaadin Ltd - */ -@RunWith(IntegrationTestRunner.class) -public abstract class AbstractIntegrationTestTB3 extends - PrivateTB3Configuration { - @Override - protected String getBaseURL() { - String deploymentUrl = System.getProperty("deployment.url"); - if (deploymentUrl == null || deploymentUrl.equals("")) { - throw new RuntimeException( - "Deployment url must be given as deployment.url"); - } - - return deploymentUrl; - } - - @Parameters - public static Collection getBrowsersForTest() { - return Collections.singleton(BrowserUtil.firefox(17)); - } - -} diff --git a/uitest/src/com/vaadin/tests/integration/AbstractServletIntegrationTest.java b/uitest/src/com/vaadin/tests/integration/AbstractServletIntegrationTest.java new file mode 100644 index 0000000000..f736a126a5 --- /dev/null +++ b/uitest/src/com/vaadin/tests/integration/AbstractServletIntegrationTest.java @@ -0,0 +1,63 @@ +/* + * 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.integration; + +import java.io.IOException; + +import org.junit.Test; +import org.openqa.selenium.WebElement; + +/** + * Base class for servlet integration tests. Automatically prepends "/demo" to + * the deployment path + * + * @author Vaadin Ltd + */ +public abstract class AbstractServletIntegrationTest extends + AbstractIntegrationTest { + + @Test + public void runTest() throws IOException, AssertionError { + openTestURL(); + compareScreen("initial"); + + WebElement cell = vaadinElement(getTableCell(getTable(), 0, 1)); + testBenchElement(cell).click(51, 13); + + compareScreen("finland"); + } + + private String getTableCell(String tableLocator, int row, int col) { + return tableLocator + + "/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[" + + row + "]/domChild[" + col + "]/domChild[0]"; + } + + protected String getTable() { + return "/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]"; + } + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.tb3.AbstractTB3Test#getDeploymentPath() + */ + @Override + protected String getDeploymentPath() { + return "/demo" + super.getDeploymentPath(); + } + +} diff --git a/uitest/src/com/vaadin/tests/integration/IntegrationTestRunner.java b/uitest/src/com/vaadin/tests/integration/IntegrationTestRunner.java index 29ee4e6023..f5042b54b6 100644 --- a/uitest/src/com/vaadin/tests/integration/IntegrationTestRunner.java +++ b/uitest/src/com/vaadin/tests/integration/IntegrationTestRunner.java @@ -45,7 +45,7 @@ public class IntegrationTestRunner extends TB3Runner { */ @Override protected String testName(FrameworkMethod method) { - if (AbstractIntegrationTestTB3.class.isAssignableFrom(testClass)) { + if (AbstractIntegrationTest.class.isAssignableFrom(testClass)) { return System.getProperty("server-name"); } else { return super.testName(method); diff --git a/uitest/src/com/vaadin/tests/integration/IntegrationTestStreaming.java b/uitest/src/com/vaadin/tests/integration/IntegrationTestStreaming.java deleted file mode 100644 index 20ddac9dd1..0000000000 --- a/uitest/src/com/vaadin/tests/integration/IntegrationTestStreaming.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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.integration; - -import com.vaadin.annotations.Push; -import com.vaadin.shared.ui.ui.Transport; - -/** - * Server test which uses streaming - * - * @since 7.1 - * @author Vaadin Ltd - */ -@Push(transport = Transport.STREAMING) -public class IntegrationTestStreaming extends IntegrationTestUI { - - public static class IntegrationTestStreamingTB3 extends - ServletIntegrationTestTB3 { - // Uses the test method declared in the super class - } - -} diff --git a/uitest/src/com/vaadin/tests/integration/IntegrationTestUI.java b/uitest/src/com/vaadin/tests/integration/IntegrationTestUI.java deleted file mode 100755 index 3d0a338bba..0000000000 --- a/uitest/src/com/vaadin/tests/integration/IntegrationTestUI.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.vaadin.tests.integration; - -import com.vaadin.data.Item; -import com.vaadin.data.Property.ValueChangeEvent; -import com.vaadin.data.Property.ValueChangeListener; -import com.vaadin.server.ClassResource; -import com.vaadin.server.Resource; -import com.vaadin.server.VaadinRequest; -import com.vaadin.ui.Label; -import com.vaadin.ui.Table; -import com.vaadin.ui.UI; -import com.vaadin.ui.VerticalLayout; - -public class IntegrationTestUI extends UI { - - public class IntegrationTestXhrTB3 extends ServletIntegrationTestTB3 { - // Uses the test method declared in the super class - } - - @Override - protected void init(VaadinRequest request) { - VerticalLayout layout = new VerticalLayout(); - layout.setMargin(true); - setContent(layout); - - final Table table = new Table(); - table.addContainerProperty("icon", Resource.class, null); - table.setItemIconPropertyId("icon"); - table.addContainerProperty("country", String.class, null); - table.setRowHeaderMode(Table.RowHeaderMode.ICON_ONLY); - table.setImmediate(true); - table.setSelectable(true); - table.setVisibleColumns(new Object[] { "country" }); - layout.addComponent(table); - - Item item = table.addItem("FI"); - item.getItemProperty("icon").setValue(new ClassResource("fi.gif")); - item.getItemProperty("country").setValue("Finland"); - item = table.addItem("SE"); - item.getItemProperty("icon").setValue(new FlagSeResource()); - item.getItemProperty("country").setValue("Sweden"); - - final Label selectedLabel = new Label(); - table.addValueChangeListener(new ValueChangeListener() { - @Override - public void valueChange(ValueChangeEvent event) { - selectedLabel.setValue(String.valueOf(table.getValue())); - } - }); - layout.addComponent(selectedLabel); - } -} diff --git a/uitest/src/com/vaadin/tests/integration/IntegrationTestWebsocket.java b/uitest/src/com/vaadin/tests/integration/IntegrationTestWebsocket.java deleted file mode 100644 index eaa23de3cf..0000000000 --- a/uitest/src/com/vaadin/tests/integration/IntegrationTestWebsocket.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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.integration; - -import com.vaadin.annotations.Push; -import com.vaadin.server.VaadinRequest; -import com.vaadin.shared.ui.ui.Transport; - -/** - * Server test which uses websockets - * - * @since 7.1 - * @author Vaadin Ltd - */ -@Push(transport = Transport.WEBSOCKET) -public class IntegrationTestWebsocket extends IntegrationTestUI { - - public class IntegrationTestWebsocketTB3 extends ServletIntegrationTestTB3 { - // Uses the test method declared in the super class - } - - /* - * (non-Javadoc) - * - * @see - * com.vaadin.tests.integration.IntegrationTestUI#init(com.vaadin.server - * .VaadinRequest) - */ - @Override - protected void init(VaadinRequest request) { - super.init(request); - // Ensure no fallback is used - getPushConfiguration().setFallbackTransport(Transport.WEBSOCKET); - } - -} diff --git a/uitest/src/com/vaadin/tests/integration/ServletIntegrationStreamingUI.java b/uitest/src/com/vaadin/tests/integration/ServletIntegrationStreamingUI.java new file mode 100644 index 0000000000..0d92fb1bb8 --- /dev/null +++ b/uitest/src/com/vaadin/tests/integration/ServletIntegrationStreamingUI.java @@ -0,0 +1,30 @@ +/* + * 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.integration; + +import com.vaadin.annotations.Push; +import com.vaadin.shared.ui.ui.Transport; + +/** + * Server test which uses streaming + * + * @since 7.1 + * @author Vaadin Ltd + */ +@Push(transport = Transport.STREAMING) +public class ServletIntegrationStreamingUI extends ServletIntegrationUI { + +} diff --git a/uitest/src/com/vaadin/tests/integration/ServletIntegrationStreamingUITest.java b/uitest/src/com/vaadin/tests/integration/ServletIntegrationStreamingUITest.java new file mode 100644 index 0000000000..36a946bfa3 --- /dev/null +++ b/uitest/src/com/vaadin/tests/integration/ServletIntegrationStreamingUITest.java @@ -0,0 +1,21 @@ +/* + * 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.integration; + +public class ServletIntegrationStreamingUITest extends + AbstractServletIntegrationTest { + // Uses the test method declared in the super class +} \ No newline at end of file diff --git a/uitest/src/com/vaadin/tests/integration/ServletIntegrationTestTB3.java b/uitest/src/com/vaadin/tests/integration/ServletIntegrationTestTB3.java deleted file mode 100644 index 2a2f8ab3d1..0000000000 --- a/uitest/src/com/vaadin/tests/integration/ServletIntegrationTestTB3.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.integration; - -import java.io.IOException; - -import org.junit.Test; -import org.openqa.selenium.WebElement; - -/** - * Base class for servlet integration tests. Automatically prepends "/demo" to - * the deployment path - * - * @author Vaadin Ltd - */ -public abstract class ServletIntegrationTestTB3 extends - AbstractIntegrationTestTB3 { - - @Test - public void runTest() throws IOException, AssertionError { - openTestURL(); - compareScreen("initial"); - - WebElement cell = vaadinElement(getTableCell(getTable(), 0, 1)); - testBenchElement(cell).click(51, 13); - - compareScreen("finland"); - } - - private String getTableCell(String tableLocator, int row, int col) { - return tableLocator - + "/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[" - + row + "]/domChild[" + col + "]/domChild[0]"; - } - - protected String getTable() { - return "/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]"; - } - - /* - * (non-Javadoc) - * - * @see com.vaadin.tests.tb3.AbstractTB3Test#getDeploymentPath() - */ - @Override - protected String getDeploymentPath() { - return "/demo" + super.getDeploymentPath(); - } - -} diff --git a/uitest/src/com/vaadin/tests/integration/ServletIntegrationUI.java b/uitest/src/com/vaadin/tests/integration/ServletIntegrationUI.java new file mode 100755 index 0000000000..6aec2c8e2a --- /dev/null +++ b/uitest/src/com/vaadin/tests/integration/ServletIntegrationUI.java @@ -0,0 +1,48 @@ +package com.vaadin.tests.integration; + +import com.vaadin.data.Item; +import com.vaadin.data.Property.ValueChangeEvent; +import com.vaadin.data.Property.ValueChangeListener; +import com.vaadin.server.ClassResource; +import com.vaadin.server.Resource; +import com.vaadin.server.VaadinRequest; +import com.vaadin.ui.Label; +import com.vaadin.ui.Table; +import com.vaadin.ui.UI; +import com.vaadin.ui.VerticalLayout; + +public class ServletIntegrationUI extends UI { + + @Override + protected void init(VaadinRequest request) { + VerticalLayout layout = new VerticalLayout(); + layout.setMargin(true); + setContent(layout); + + final Table table = new Table(); + table.addContainerProperty("icon", Resource.class, null); + table.setItemIconPropertyId("icon"); + table.addContainerProperty("country", String.class, null); + table.setRowHeaderMode(Table.RowHeaderMode.ICON_ONLY); + table.setImmediate(true); + table.setSelectable(true); + table.setVisibleColumns(new Object[] { "country" }); + layout.addComponent(table); + + Item item = table.addItem("FI"); + item.getItemProperty("icon").setValue(new ClassResource("fi.gif")); + item.getItemProperty("country").setValue("Finland"); + item = table.addItem("SE"); + item.getItemProperty("icon").setValue(new FlagSeResource()); + item.getItemProperty("country").setValue("Sweden"); + + final Label selectedLabel = new Label(); + table.addValueChangeListener(new ValueChangeListener() { + @Override + public void valueChange(ValueChangeEvent event) { + selectedLabel.setValue(String.valueOf(table.getValue())); + } + }); + layout.addComponent(selectedLabel); + } +} diff --git a/uitest/src/com/vaadin/tests/integration/ServletIntegrationUITest.java b/uitest/src/com/vaadin/tests/integration/ServletIntegrationUITest.java new file mode 100644 index 0000000000..25ffdac4a2 --- /dev/null +++ b/uitest/src/com/vaadin/tests/integration/ServletIntegrationUITest.java @@ -0,0 +1,20 @@ +/* + * 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.integration; + +public class ServletIntegrationUITest extends AbstractServletIntegrationTest { + // Uses the test method declared in the super class +} \ No newline at end of file diff --git a/uitest/src/com/vaadin/tests/integration/ServletIntegrationWebsocketUI.java b/uitest/src/com/vaadin/tests/integration/ServletIntegrationWebsocketUI.java new file mode 100644 index 0000000000..905b80fd85 --- /dev/null +++ b/uitest/src/com/vaadin/tests/integration/ServletIntegrationWebsocketUI.java @@ -0,0 +1,45 @@ +/* + * 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.integration; + +import com.vaadin.annotations.Push; +import com.vaadin.server.VaadinRequest; +import com.vaadin.shared.ui.ui.Transport; + +/** + * Server test which uses websockets + * + * @since 7.1 + * @author Vaadin Ltd + */ +@Push(transport = Transport.WEBSOCKET) +public class ServletIntegrationWebsocketUI extends ServletIntegrationUI { + + /* + * (non-Javadoc) + * + * @see + * com.vaadin.tests.integration.IntegrationTestUI#init(com.vaadin.server + * .VaadinRequest) + */ + @Override + protected void init(VaadinRequest request) { + super.init(request); + // Ensure no fallback is used + getPushConfiguration().setFallbackTransport(Transport.WEBSOCKET); + } + +} diff --git a/uitest/src/com/vaadin/tests/integration/ServletIntegrationWebsocketUITest.java b/uitest/src/com/vaadin/tests/integration/ServletIntegrationWebsocketUITest.java new file mode 100644 index 0000000000..f2e7a6f2d0 --- /dev/null +++ b/uitest/src/com/vaadin/tests/integration/ServletIntegrationWebsocketUITest.java @@ -0,0 +1,21 @@ +/* + * 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.integration; + +public class ServletIntegrationWebsocketUITest extends + AbstractServletIntegrationTest { + // Uses the test method declared in the super class +} \ No newline at end of file diff --git a/uitest/src/com/vaadin/tests/tb3/ServletIntegrationTests.java b/uitest/src/com/vaadin/tests/tb3/ServletIntegrationTests.java index d2aa413749..c511b99e6e 100644 --- a/uitest/src/com/vaadin/tests/tb3/ServletIntegrationTests.java +++ b/uitest/src/com/vaadin/tests/tb3/ServletIntegrationTests.java @@ -19,7 +19,7 @@ package com.vaadin.tests.tb3; import org.junit.runner.RunWith; import org.junit.runners.model.InitializationError; -import com.vaadin.tests.integration.ServletIntegrationTestTB3; +import com.vaadin.tests.integration.AbstractServletIntegrationTest; import com.vaadin.tests.tb3.ServletIntegrationTests.ServletIntegrationTestSuite; @RunWith(ServletIntegrationTestSuite.class) @@ -28,7 +28,7 @@ public class ServletIntegrationTests { public static class ServletIntegrationTestSuite extends TB3TestSuite { public ServletIntegrationTestSuite(Class klass) throws InitializationError { - super(klass, ServletIntegrationTestTB3.class, + super(klass, AbstractServletIntegrationTest.class, "com.vaadin.tests.integration", new String[] {}); } } -- cgit v1.2.3 From e1c38bf70c9bb563dbe7771c8713a94fd9e99836 Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Fri, 27 Sep 2013 15:07:48 +0300 Subject: Avoid obsolete calendar panel renderings to avoid various NPEs. (#12504,#12667) Change-Id: Ie0a9a8d9913116520b766062ebabdb771a76d1b6 --- .../src/com/vaadin/client/ui/VCalendarPanel.java | 24 +++-- .../ui/datefield/PopupDateFieldConnector.java | 9 +- .../tests/components/datefield/DateFieldTest.java | 103 +++++++++++++++++++++ 3 files changed, 121 insertions(+), 15 deletions(-) (limited to 'uitest/src/com') diff --git a/client/src/com/vaadin/client/ui/VCalendarPanel.java b/client/src/com/vaadin/client/ui/VCalendarPanel.java index 1f40298760..58e0448b5f 100644 --- a/client/src/com/vaadin/client/ui/VCalendarPanel.java +++ b/client/src/com/vaadin/client/ui/VCalendarPanel.java @@ -2215,11 +2215,13 @@ public class VCalendarPanel extends FocusableFlexTable implements * - the allowed range's start date */ public void setRangeStart(Date rangeStart) { - this.rangeStart = rangeStart; - if (initialRenderDone) { - // Dynamic updates to the range needs to render the calendar to - // update the element stylenames - renderCalendar(); + if (this.rangeStart != rangeStart) { + this.rangeStart = rangeStart; + if (initialRenderDone) { + // Dynamic updates to the range needs to render the calendar to + // update the element stylenames + renderCalendar(); + } } } @@ -2232,11 +2234,13 @@ public class VCalendarPanel extends FocusableFlexTable implements * - the allowed range's end date */ public void setRangeEnd(Date rangeEnd) { - this.rangeEnd = rangeEnd; - if (initialRenderDone) { - // Dynamic updates to the range needs to render the calendar to - // update the element stylenames - renderCalendar(); + if (this.rangeEnd != rangeEnd) { + this.rangeEnd = rangeEnd; + if (initialRenderDone) { + // Dynamic updates to the range needs to render the calendar to + // update the element stylenames + renderCalendar(); + } } } } diff --git a/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java b/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java index 627478ebe5..f018caefa5 100644 --- a/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java +++ b/client/src/com/vaadin/client/ui/datefield/PopupDateFieldConnector.java @@ -77,9 +77,6 @@ public class PopupDateFieldConnector extends TextualDateConnector { String oldLocale = getWidget().getCurrentLocale(); - boolean lastReadOnlyState = getWidget().isReadonly(); - boolean lastEnabledState = getWidget().isEnabled(); - getWidget().parsable = uidl.getBooleanAttribute("parsable"); super.updateFromUIDL(uidl, client); @@ -92,7 +89,8 @@ public class PopupDateFieldConnector extends TextualDateConnector { .getCurrentResolution()) { getWidget().calendar.setResolution(getWidget() .getCurrentResolution()); - if (getWidget().calendar.getDate() != null) { + if (getWidget().calendar.getDate() != null + && getWidget().getCurrentDate() != null) { getWidget().calendar.setDate((Date) getWidget() .getCurrentDate().clone()); // force re-render when changing resolution only @@ -101,7 +99,7 @@ public class PopupDateFieldConnector extends TextualDateConnector { } // Force re-render of calendar if locale has changed (#12153) - if (getWidget().getCurrentLocale() != oldLocale) { + if (!getWidget().getCurrentLocale().equals(oldLocale)) { getWidget().calendar.renderCalendar(); } @@ -113,6 +111,7 @@ public class PopupDateFieldConnector extends TextualDateConnector { .setFocusChangeListener(new FocusChangeListener() { @Override public void focusChanged(Date date) { + getWidget().updateValue(date); getWidget().buildDate(); Date date2 = getWidget().calendar.getDate(); diff --git a/uitest/src/com/vaadin/tests/components/datefield/DateFieldTest.java b/uitest/src/com/vaadin/tests/components/datefield/DateFieldTest.java index d92199a214..2a61e79f32 100644 --- a/uitest/src/com/vaadin/tests/components/datefield/DateFieldTest.java +++ b/uitest/src/com/vaadin/tests/components/datefield/DateFieldTest.java @@ -7,8 +7,17 @@ import java.util.Date; import java.util.LinkedHashMap; import java.util.Locale; +import org.junit.Assert; +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.Dimension; +import org.openqa.selenium.NoSuchElementException; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.interactions.Actions; + import com.vaadin.shared.ui.datefield.Resolution; import com.vaadin.tests.components.abstractfield.AbstractFieldTest; +import com.vaadin.tests.tb3.MultiBrowserTest; import com.vaadin.ui.DateField; public class DateFieldTest extends AbstractFieldTest { @@ -140,4 +149,98 @@ public class DateFieldTest extends AbstractFieldTest { } }; + public static class Tb3DateFieldTests extends MultiBrowserTest { + + @Override + protected boolean isDebug() { + // run in debug to see js errors + return true; + } + + @Test + public void testMakingRequired() throws InterruptedException { + Thread.sleep(1000); + menu("Component"); + menuSub("State"); + menu("Required"); + assertNoErrorNotification(); + } + + private void assertNoErrorNotification() { + try { + getDriver().findElement( + By.xpath("//div[contains(@class, 'v-Notification') ]")); + Assert.fail("Error notification shown!"); + } catch (NoSuchElementException e) { + // As expected + } + } + + @Test + public void testValueAfterOpeningPopupInRequiredField() + throws InterruptedException { + Thread.sleep(1000); + menu("Component"); + menuSub("State"); + menu("Required"); + + menu("Component"); + menuSub("Features"); + menuSub("Resolution"); + menu("Month"); + + menu("Component"); + menuSub("Listeners"); + menu("Value change listener"); + + String inputtedValue = "2/12"; + getInput().sendKeys(inputtedValue); + + openPopup(); + closePopup(); + String actual = getInput().getAttribute("value"); + Assert.assertEquals(inputtedValue, actual); + assertNoErrorNotification(); + + } + + private void openPopup() throws InterruptedException { + Dimension size = getInput().getSize(); + new Actions(getDriver()).moveToElement(getInput(), 0, 0) + .moveByOffset(size.getWidth() + 5, size.getHeight() / 2) + .click(); + // This fails in Opera for some weird reason + // getDriver().findElement(By.className("v-datefield-button")).click(); + } + + private WebElement getInput() { + return getDriver().findElement(By.xpath("//input")); + } + + private void closePopup() { + getDriver().findElement(By.tagName("body")).click(); + } + + /** + * @since + * @param string + */ + private void menuSub(String string) { + getDriver().findElement( + By.xpath("//span[text() = '" + string + "']")).click(); + new Actions(getDriver()).moveByOffset(100, 0).build().perform(); + } + + /** + * @since + * @param string + */ + private void menu(String string) { + getDriver().findElement( + By.xpath("//span[text() = '" + string + "']")).click(); + + } + + } + } -- cgit v1.2.3 From 63f10ec8bbeb6faa5ff685bfe375b1d0decd39cd Mon Sep 17 00:00:00 2001 From: John Ahlroos Date: Wed, 9 Oct 2013 09:59:03 +0300 Subject: Fixed compilation error in TB3 test Change-Id: I62e246995879733393af3275778e9201cd970adb --- .../tests/components/datefield/DateFieldTest.java | 103 ------------------ .../components/datefield/DateFieldTestTest.java | 118 +++++++++++++++++++++ 2 files changed, 118 insertions(+), 103 deletions(-) create mode 100644 uitest/src/com/vaadin/tests/components/datefield/DateFieldTestTest.java (limited to 'uitest/src/com') diff --git a/uitest/src/com/vaadin/tests/components/datefield/DateFieldTest.java b/uitest/src/com/vaadin/tests/components/datefield/DateFieldTest.java index 2a61e79f32..d92199a214 100644 --- a/uitest/src/com/vaadin/tests/components/datefield/DateFieldTest.java +++ b/uitest/src/com/vaadin/tests/components/datefield/DateFieldTest.java @@ -7,17 +7,8 @@ import java.util.Date; import java.util.LinkedHashMap; import java.util.Locale; -import org.junit.Assert; -import org.junit.Test; -import org.openqa.selenium.By; -import org.openqa.selenium.Dimension; -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.interactions.Actions; - import com.vaadin.shared.ui.datefield.Resolution; import com.vaadin.tests.components.abstractfield.AbstractFieldTest; -import com.vaadin.tests.tb3.MultiBrowserTest; import com.vaadin.ui.DateField; public class DateFieldTest extends AbstractFieldTest { @@ -149,98 +140,4 @@ public class DateFieldTest extends AbstractFieldTest { } }; - public static class Tb3DateFieldTests extends MultiBrowserTest { - - @Override - protected boolean isDebug() { - // run in debug to see js errors - return true; - } - - @Test - public void testMakingRequired() throws InterruptedException { - Thread.sleep(1000); - menu("Component"); - menuSub("State"); - menu("Required"); - assertNoErrorNotification(); - } - - private void assertNoErrorNotification() { - try { - getDriver().findElement( - By.xpath("//div[contains(@class, 'v-Notification') ]")); - Assert.fail("Error notification shown!"); - } catch (NoSuchElementException e) { - // As expected - } - } - - @Test - public void testValueAfterOpeningPopupInRequiredField() - throws InterruptedException { - Thread.sleep(1000); - menu("Component"); - menuSub("State"); - menu("Required"); - - menu("Component"); - menuSub("Features"); - menuSub("Resolution"); - menu("Month"); - - menu("Component"); - menuSub("Listeners"); - menu("Value change listener"); - - String inputtedValue = "2/12"; - getInput().sendKeys(inputtedValue); - - openPopup(); - closePopup(); - String actual = getInput().getAttribute("value"); - Assert.assertEquals(inputtedValue, actual); - assertNoErrorNotification(); - - } - - private void openPopup() throws InterruptedException { - Dimension size = getInput().getSize(); - new Actions(getDriver()).moveToElement(getInput(), 0, 0) - .moveByOffset(size.getWidth() + 5, size.getHeight() / 2) - .click(); - // This fails in Opera for some weird reason - // getDriver().findElement(By.className("v-datefield-button")).click(); - } - - private WebElement getInput() { - return getDriver().findElement(By.xpath("//input")); - } - - private void closePopup() { - getDriver().findElement(By.tagName("body")).click(); - } - - /** - * @since - * @param string - */ - private void menuSub(String string) { - getDriver().findElement( - By.xpath("//span[text() = '" + string + "']")).click(); - new Actions(getDriver()).moveByOffset(100, 0).build().perform(); - } - - /** - * @since - * @param string - */ - private void menu(String string) { - getDriver().findElement( - By.xpath("//span[text() = '" + string + "']")).click(); - - } - - } - } diff --git a/uitest/src/com/vaadin/tests/components/datefield/DateFieldTestTest.java b/uitest/src/com/vaadin/tests/components/datefield/DateFieldTestTest.java new file mode 100644 index 0000000000..557201e803 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/datefield/DateFieldTestTest.java @@ -0,0 +1,118 @@ +/* + * 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.datefield; + +import org.junit.Assert; +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.Dimension; +import org.openqa.selenium.NoSuchElementException; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.interactions.Actions; + +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class DateFieldTestTest extends MultiBrowserTest { + + @Test + public void testMakingRequired() throws InterruptedException { + setDebug(true); + openTestURL(); + Thread.sleep(1000); + menu("Component"); + menuSub("State"); + menu("Required"); + assertNoErrorNotification(); + } + + private void assertNoErrorNotification() { + try { + getDriver().findElement( + By.xpath("//div[contains(@class, 'v-Notification') ]")); + Assert.fail("Error notification shown!"); + } catch (NoSuchElementException e) { + // As expected + } + } + + @Test + public void testValueAfterOpeningPopupInRequiredField() + throws InterruptedException { + setDebug(true); + openTestURL(); + Thread.sleep(1000); + menu("Component"); + menuSub("State"); + menu("Required"); + + menu("Component"); + menuSub("Features"); + menuSub("Resolution"); + menu("Month"); + + menu("Component"); + menuSub("Listeners"); + menu("Value change listener"); + + String inputtedValue = "2/12"; + getInput().sendKeys(inputtedValue); + + openPopup(); + closePopup(); + String actual = getInput().getAttribute("value"); + Assert.assertEquals(inputtedValue, actual); + assertNoErrorNotification(); + + } + + private void openPopup() throws InterruptedException { + Dimension size = getInput().getSize(); + new Actions(getDriver()).moveToElement(getInput(), 0, 0) + .moveByOffset(size.getWidth() + 5, size.getHeight() / 2) + .click(); + // This fails in Opera for some weird reason + // getDriver().findElement(By.className("v-datefield-button")).click(); + } + + private WebElement getInput() { + return getDriver().findElement(By.xpath("//input")); + } + + private void closePopup() { + getDriver().findElement(By.tagName("body")).click(); + } + + /** + * @since + * @param string + */ + private void menuSub(String string) { + getDriver().findElement( + By.xpath("//span[text() = '" + string + "']")).click(); + new Actions(getDriver()).moveByOffset(100, 0).build().perform(); + } + + /** + * @since + * @param string + */ + private void menu(String string) { + getDriver().findElement( + By.xpath("//span[text() = '" + string + "']")).click(); + + } + +} \ No newline at end of file -- cgit v1.2.3 From 3e593b0949b2b26fdc89b2aa5e8e93b006a513d0 Mon Sep 17 00:00:00 2001 From: John Ahlroos Date: Tue, 1 Oct 2013 16:55:39 +0300 Subject: Focus selected row in Table #12540 Change-Id: Ic920f9cb11840a456a7c49746317eaccde1e1406 --- client/src/com/vaadin/client/ui/VScrollTable.java | 11 ++ .../table/TableMoveFocusWithSelection.java | 125 +++++++++++++++++++++ .../table/TableMoveFocusWithSelectionTest.java | 75 +++++++++++++ 3 files changed, 211 insertions(+) create mode 100644 uitest/src/com/vaadin/tests/components/table/TableMoveFocusWithSelection.java create mode 100644 uitest/src/com/vaadin/tests/components/table/TableMoveFocusWithSelectionTest.java (limited to 'uitest/src/com') diff --git a/client/src/com/vaadin/client/ui/VScrollTable.java b/client/src/com/vaadin/client/ui/VScrollTable.java index 9cec59a5a2..104cbbd5b9 100644 --- a/client/src/com/vaadin/client/ui/VScrollTable.java +++ b/client/src/com/vaadin/client/ui/VScrollTable.java @@ -1072,6 +1072,17 @@ public class VScrollTable extends FlowPanel implements HasWidgets, } if (selected != row.isSelected()) { row.toggleSelection(); + + if (selected) { + if (focusedRow == null + || !selectedRowKeys.contains(focusedRow + .getKey())) { + // The focus is no longer on a selected row, + // move focus to first selected row + setRowFocus(row); + } + } + if (!isSingleSelectMode() && !selected) { // Update selection range in case a row is // unselected from the middle of a range - #8076 diff --git a/uitest/src/com/vaadin/tests/components/table/TableMoveFocusWithSelection.java b/uitest/src/com/vaadin/tests/components/table/TableMoveFocusWithSelection.java new file mode 100644 index 0000000000..20170efa13 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/TableMoveFocusWithSelection.java @@ -0,0 +1,125 @@ +/* + * 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.table; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import com.vaadin.event.LayoutEvents.LayoutClickEvent; +import com.vaadin.event.LayoutEvents.LayoutClickListener; +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.Table; +import com.vaadin.ui.VerticalLayout; + +public class TableMoveFocusWithSelection extends AbstractTestUI { + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#setup(com.vaadin.server. + * VaadinRequest) + */ + @Override + protected void setup(VaadinRequest request) { + final Table t = new Table(); + t.setImmediate(true); + t.setId("test-table"); + t.setSizeFull(); + t.setSelectable(true); + t.addContainerProperty("layout", VerticalLayout.class, null); + t.addContainerProperty("string", String.class, null); + + for (int i = 0; i < 100; i++) { + t.addItem(i); + final VerticalLayout l = new VerticalLayout(); + l.setId("row-" + i); + l.setHeight(20, Unit.PIXELS); + l.setData(i); + l.addLayoutClickListener(new LayoutClickListener() { + @Override + public void layoutClick(LayoutClickEvent event) { + if (t.isMultiSelect()) { + Set values = new HashSet( + (Set) t.getValue()); + values.add(l.getData()); + t.setValue(values); + } else { + t.setValue(l.getData()); + } + } + }); + t.getContainerProperty(i, "layout").setValue(l); + t.getContainerProperty(i, "string").setValue("Item #" + i); + } + addComponent(t); + + // Select mode + Button toggleSelectMode = new Button( + t.isMultiSelect() ? "Press to use single select" + : "Press to use multi select"); + toggleSelectMode.setId("toggle-mode"); + toggleSelectMode.addClickListener(new ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + t.setMultiSelect(!t.isMultiSelect()); + + event.getButton().setCaption( + t.isMultiSelect() ? "Press to use single select" + : "Press to use multi select"); + } + }); + + addComponent(toggleSelectMode); + + Button select5210 = new Button("Select row 5-10", + new Button.ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + t.setValue(Arrays.asList(5, 6, 7, 8, 9, 10)); + } + }); + select5210.setId("select-510"); + addComponent(select5210); + } + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#getTestDescription() + */ + @Override + protected String getTestDescription() { + return "Changing selection in single select mode should move focus"; + } + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#getTicketNumber() + */ + @Override + protected Integer getTicketNumber() { + return 12540; + } + +} diff --git a/uitest/src/com/vaadin/tests/components/table/TableMoveFocusWithSelectionTest.java b/uitest/src/com/vaadin/tests/components/table/TableMoveFocusWithSelectionTest.java new file mode 100644 index 0000000000..b38705eeb6 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/TableMoveFocusWithSelectionTest.java @@ -0,0 +1,75 @@ +/* + * 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.table; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.openqa.selenium.WebElement; + +import com.vaadin.testbench.By; +import com.vaadin.tests.tb3.MultiBrowserTest; + +/** + * Tests if table focus is moved correctly to the selected item + * + * @since + * @author Vaadin Ltd + */ +public class TableMoveFocusWithSelectionTest extends MultiBrowserTest { + + @Test + public void selectUnfocusedTableAndAssumeSelectionGetsFocus() { + + openTestURL(); + + // Click on row 5 + getDriver().findElement(By.id("row-5")).click(); + + // Ensure row 5 gets focused + WebElement row5TableRow = getDriver().findElement( + By.xpath("//div[@id='row-5']/../../..")); + String row5StyleName = row5TableRow.getAttribute("class"); + assertTrue(row5StyleName.contains("v-table-focus")); + } + + @Test + public void focusShouldStayOnUserSelectedRowIfSelectionChangesServerSide() { + + openTestURL(); + + // Select multiselect + getDriver().findElement(By.id("toggle-mode")).click(); + + // Click on row 7 + getDriver().findElement(By.id("row-7")).click(); + + // Select row 5-10 server side + getDriver().findElement(By.id("select-510")).click(); + + // Ensure row 7 is still focused + WebElement row7TableRow = getDriver().findElement( + By.xpath("//div[@id='row-7']/../../..")); + String row7StyleName = row7TableRow.getAttribute("class"); + assertTrue(row7StyleName.contains("v-table-focus")); + } + + @Override + protected Class getUIClass() { + // FIXME Remove when this is done automatically + return TableMoveFocusWithSelection.class; + } +} -- cgit v1.2.3 From 3c842b76ed6ecbf3cf92cb9a7cca3b72e326a2ed Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Wed, 9 Oct 2013 14:37:57 +0300 Subject: added small pause to make test pass Change-Id: I2e58a7444e5a2740f81409e6f248e0acedcead54 --- .../tests/components/datefield/DynamicallyChangeDateRange.html | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'uitest/src/com') diff --git a/uitest/src/com/vaadin/tests/components/datefield/DynamicallyChangeDateRange.html b/uitest/src/com/vaadin/tests/components/datefield/DynamicallyChangeDateRange.html index 77c610f211..75c19945b0 100644 --- a/uitest/src/com/vaadin/tests/components/datefield/DynamicallyChangeDateRange.html +++ b/uitest/src/com/vaadin/tests/components/datefield/DynamicallyChangeDateRange.html @@ -51,6 +51,11 @@ vaadin=runcomvaadintestscomponentsdatefieldDynamicallyChangeDateRange::/VVerticalLayout[0]/Slot[2]/VButton[0]/domChild[0]/domChild[0] + + pause + 300 + + mouseClick vaadin=runcomvaadintestscomponentsdatefieldDynamicallyChangeDateRange::/VVerticalLayout[0]/Slot[0]/VPopupCalendar[0]#popupButton @@ -86,6 +91,11 @@ vaadin=runcomvaadintestscomponentsdatefieldDynamicallyChangeDateRange::/VVerticalLayout[0]/Slot[1]/VButton[0]/domChild[0]/domChild[0] + + pause + 300 + + mouseClick vaadin=runcomvaadintestscomponentsdatefieldDynamicallyChangeDateRange::/VVerticalLayout[0]/Slot[0]/VPopupCalendar[0]#popupButton -- cgit v1.2.3 From 1b7e40de9435f2584fe6c7f1b7f69cc448c16cc8 Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Fri, 4 Oct 2013 15:41:06 +0300 Subject: Only fetch rows if there are some (#11189) IE hacks cause calls to onScroll in situations where the cache row fetch logic is not working correctly (causes JS exception). This change has an optimization to pass this logic if there are no rows available and this way fixes the JS exception as well. Change-Id: I3425f3d75cad8b65e605638343b167abf7b48067 --- client/src/com/vaadin/client/ui/VScrollTable.java | 5 ++ .../vaadin/tests/components/table/EmptyTable.java | 58 ++++++++++++++++++++++ .../tests/components/table/EmptyTableTest.java | 44 ++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 uitest/src/com/vaadin/tests/components/table/EmptyTable.java create mode 100644 uitest/src/com/vaadin/tests/components/table/EmptyTableTest.java (limited to 'uitest/src/com') diff --git a/client/src/com/vaadin/client/ui/VScrollTable.java b/client/src/com/vaadin/client/ui/VScrollTable.java index 104cbbd5b9..0304acd590 100644 --- a/client/src/com/vaadin/client/ui/VScrollTable.java +++ b/client/src/com/vaadin/client/ui/VScrollTable.java @@ -6913,6 +6913,11 @@ public class VScrollTable extends FlowPanel implements HasWidgets, // fix footers horizontal scrolling tFoot.setHorizontalScrollPosition(scrollLeft); + if (totalRows == 0) { + // No rows, no need to fetch new rows + return; + } + firstRowInViewPort = calcFirstRowInViewPort(); if (firstRowInViewPort > totalRows - pageLength) { firstRowInViewPort = totalRows - pageLength; diff --git a/uitest/src/com/vaadin/tests/components/table/EmptyTable.java b/uitest/src/com/vaadin/tests/components/table/EmptyTable.java new file mode 100644 index 0000000000..d6c30efa5a --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/EmptyTable.java @@ -0,0 +1,58 @@ +/* + * 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.table; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Table; + +public class EmptyTable extends AbstractTestUI { + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#setup(com.vaadin.server. + * VaadinRequest) + */ + @Override + protected void setup(VaadinRequest request) { + Table table = new Table("Table"); + table.addContainerProperty("testColumn", String.class, null); + table.setPageLength(0); // disable paging + addComponent(table); + } + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#getTestDescription() + */ + @Override + protected String getTestDescription() { + return "Empty Table should not cause JS exception"; + } + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#getTicketNumber() + */ + @Override + protected Integer getTicketNumber() { + return 11189; + } + +} diff --git a/uitest/src/com/vaadin/tests/components/table/EmptyTableTest.java b/uitest/src/com/vaadin/tests/components/table/EmptyTableTest.java new file mode 100644 index 0000000000..229dc23b9a --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/EmptyTableTest.java @@ -0,0 +1,44 @@ +/* + * 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.table; + +import org.junit.Assert; +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.NoSuchElementException; + +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class EmptyTableTest extends MultiBrowserTest { + + @Test + public void test() { + setDebug(true); + openTestURL(); + + ensureNoErrors(); + } + + private void ensureNoErrors() { + try { + getDriver().findElement(By.className("v-Notification")); + } catch (NoSuchElementException e) { + return; + } + Assert.fail("Error notification was shown!"); + } + +} \ No newline at end of file -- cgit v1.2.3 From 4cb304d8eb63ce0045a2742bd9c945af4f12aa66 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Fri, 27 Sep 2013 13:16:45 +0300 Subject: Converted broken test to TB3 Change-Id: Ic30db7584a65c944eb45c576e12b7671399d1965 --- .../vaadin/tests/components/ui/UIAccessTest.java | 163 +++++++++++++++++++- .../com/vaadin/tests/components/ui/UiAccess.html | 166 --------------------- 2 files changed, 161 insertions(+), 168 deletions(-) delete mode 100644 uitest/src/com/vaadin/tests/components/ui/UiAccess.html (limited to 'uitest/src/com') diff --git a/uitest/src/com/vaadin/tests/components/ui/UIAccessTest.java b/uitest/src/com/vaadin/tests/components/ui/UIAccessTest.java index 8d04ceae71..9db2c2f0d3 100644 --- a/uitest/src/com/vaadin/tests/components/ui/UIAccessTest.java +++ b/uitest/src/com/vaadin/tests/components/ui/UIAccessTest.java @@ -15,11 +15,16 @@ */ package com.vaadin.tests.components.ui; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import org.junit.Assert; import org.junit.Test; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedConditions; +import com.vaadin.testbench.By; import com.vaadin.tests.tb3.MultiBrowserTest; public class UIAccessTest extends MultiBrowserTest { @@ -30,8 +35,7 @@ public class UIAccessTest extends MultiBrowserTest { getCurrentInstanceWhenPushingButton().click(); waitUntil(ExpectedConditions.textToBePresentInElement( vaadinLocatorById("Log_row_0"), "1.")); - Assert.assertEquals( - "0. Current UI matches in beforeResponse? true", + Assert.assertEquals("0. Current UI matches in beforeResponse? true", vaadinElementById("Log_row_1").getText()); Assert.assertEquals( "1. Current session matches in beforeResponse? true", @@ -39,6 +43,161 @@ public class UIAccessTest extends MultiBrowserTest { } + @Test + public void testAccessMethod() throws Exception { + openTestURL(); + + vaadinElement( + "/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[0]/VButton[0]/domChild[0]/domChild[0]") + .click(); + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[0]/VButton[0]/domChild[0]/domChild[0]")) + .click(); + assertTrue(driver + .findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_2")) + .getText() + .matches( + "^0\\. Access from UI thread future is done[\\s\\S] false$")); + assertEquals( + "1. Access from UI thread is run", + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_1")) + .getText()); + assertTrue(driver + .findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_0")) + .getText() + .matches( + "^2\\. beforeClientResponse future is done[\\s\\S] true$")); + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[1]/VButton[0]/domChild[0]/domChild[0]")) + .click(); + assertEquals( + "0. Initial background message", + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_1")) + .getText()); + assertTrue(driver + .findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_0")) + .getText() + .matches("^1\\. Thread has current response[\\s\\S] false$")); + for (int second = 0;; second++) { + if (second >= 30) { + fail("timeout"); + } + try { + if ("0. Initial background message" + .equals(driver + .findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_2")) + .getText())) { + break; + } + } catch (Exception e) { + } + Thread.sleep(1000); + } + + assertTrue(driver + .findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_0")) + .getText() + .matches( + "^2\\. Thread got lock, inital future done[\\s\\S] true$")); + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[2]/VButton[0]/domChild[0]/domChild[0]")) + .click(); + assertEquals( + "0. Throwing exception in access", + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_2")) + .getText()); + assertTrue(driver + .findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_1")) + .getText().matches("^1\\. firstFuture is done[\\s\\S] true$")); + assertEquals( + "2. Got exception from firstFuture: java.lang.RuntimeException: Catch me if you can", + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_0")) + .getText()); + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[3]/VButton[0]/domChild[0]/domChild[0]")) + .click(); + assertEquals( + "0. future was cancled, should not start", + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_0")) + .getText()); + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[4]/VButton[0]/domChild[0]/domChild[0]")) + .click(); + assertEquals( + "0. Waiting for thread to start", + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_2")) + .getText()); + assertEquals( + "1. Thread started, waiting for interruption", + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_1")) + .getText()); + assertEquals( + "2. I was interrupted", + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_0")) + .getText()); + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[5]/VButton[0]/domChild[0]/domChild[0]")) + .click(); + assertTrue(driver + .findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_3")) + .getText() + .matches("^0\\. accessSynchronously has request[\\s\\S] true$")); + assertEquals( + "1. Test value in accessSynchronously: Set before accessSynchronosly", + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_2")) + .getText()); + assertTrue(driver + .findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_1")) + .getText() + .matches( + "^2\\. has request after accessSynchronously[\\s\\S] true$")); + assertEquals( + "3. Test value after accessSynchornously: Set in accessSynchronosly", + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_0")) + .getText()); + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[6]/VButton[0]/domChild[0]/domChild[0]")) + .click(); + assertTrue(driver + .findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_3")) + .getText().matches("^0\\. access has request[\\s\\S] false$")); + assertEquals( + "1. Test value in access: Set before access", + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_2")) + .getText()); + assertTrue(driver + .findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_1")) + .getText() + .matches("^2\\. has request after access[\\s\\S] true$")); + assertEquals( + "3. Test value after access: Set before run pending", + driver.findElement( + By.vaadin("runcomvaadintestscomponentsuiUIAccess::PID_SLog_row_0")) + .getText()); + + } + private WebElement getCurrentInstanceWhenPushingButton() { return vaadinElement("/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[7]/VButton[0]"); } diff --git a/uitest/src/com/vaadin/tests/components/ui/UiAccess.html b/uitest/src/com/vaadin/tests/components/ui/UiAccess.html deleted file mode 100644 index 613691623c..0000000000 --- a/uitest/src/com/vaadin/tests/components/ui/UiAccess.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - -New Test - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
New Test
open/run/com.vaadin.tests.components.ui.UiAccess?restartApplication
clickvaadin=runcomvaadintestscomponentsuiUiAccess::/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[0]/VButton[0]/domChild[0]/domChild[0]
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_2exact:0. Access from UI thread future is done? false
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_11. Access from UI thread is run
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_0exact:2. beforeClientResponse future is done? true
clickvaadin=runcomvaadintestscomponentsuiUiAccess::/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[1]/VButton[0]/domChild[0]/domChild[0]
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_10. Initial background message
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_0exact:1. Thread has current response? false
waitForTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_20. Initial background message
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_0exact:2. Thread got lock, inital future done? true
clickvaadin=runcomvaadintestscomponentsuiUiAccess::/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[2]/VButton[0]/domChild[0]/domChild[0]
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_20. Throwing exception in access
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_1exact:1. firstFuture is done? true
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_02. Got exception from firstFuture: java.lang.RuntimeException: Catch me if you can
clickvaadin=runcomvaadintestscomponentsuiUiAccess::/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[3]/VButton[0]/domChild[0]/domChild[0]
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_00. future was cancled, should not start
clickvaadin=runcomvaadintestscomponentsuiUiAccess::/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[4]/VButton[0]/domChild[0]/domChild[0]
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_20. Waiting for thread to start
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_11. Thread started, waiting for interruption
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_02. I was interrupted
clickvaadin=runcomvaadintestscomponentsuiUiAccess::/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[5]/VButton[0]/domChild[0]/domChild[0]
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_30. accessSynchronously has request? true
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_21. Test value in accessSynchronously: Set before accessSynchronosly
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_12. has request after accessSynchronously? true
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_03. Test value after accessSynchornously: Set in accessSynchronosly
clickvaadin=runcomvaadintestscomponentsuiUiAccess::/VVerticalLayout[0]/Slot[2]/VVerticalLayout[0]/Slot[6]/VButton[0]/domChild[0]/domChild[0]
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_30. access has request? false
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_21. Test value in access: Set before access
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_12. has request after access? true
assertTextvaadin=runcomvaadintestscomponentsuiUiAccess::PID_SLog_row_03. Test value after access: Set before run pending
- - -- cgit v1.2.3