diff options
Diffstat (limited to 'uitest/src/com/vaadin/tests/components/ui/UIAccessTest.java')
-rw-r--r-- | uitest/src/com/vaadin/tests/components/ui/UIAccessTest.java | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/uitest/src/com/vaadin/tests/components/ui/UIAccessTest.java b/uitest/src/com/vaadin/tests/components/ui/UIAccessTest.java new file mode 100644 index 0000000000..9db2c2f0d3 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/ui/UIAccessTest.java @@ -0,0 +1,204 @@ +/* + * 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.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 { + @Test + public void testThreadLocals() { + setPush(true); + openTestURL(); + getCurrentInstanceWhenPushingButton().click(); + waitUntil(ExpectedConditions.textToBePresentInElement( + vaadinLocatorById("Log_row_0"), "1.")); + Assert.assertEquals("0. Current UI matches in beforeResponse? true", + vaadinElementById("Log_row_1").getText()); + Assert.assertEquals( + "1. Current session matches in beforeResponse? true", + vaadinElementById("Log_row_0").getText()); + + } + + @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]"); + } +}
\ No newline at end of file |