*/
package com.vaadin.tests.push;
+import com.vaadin.annotations.Push;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUIWithLog;
import com.vaadin.ui.Button;
+@Push
public class PushFromInit extends AbstractTestUIWithLog {
+ public static final String LOG_DURING_INIT = "Logged from access run before init ends";
+ public static final String LOG_AFTER_INIT = "Logged from background thread run after init has finished";
+
@Override
protected void setup(VaadinRequest request) {
- new Thread() {
- @Override
- public void run() {
- access(new Runnable() {
- @Override
- public void run() {
- log("Logged from background thread started in init");
- }
- });
- }
- }.start();
log("Logged in init");
+ Thread t = new Thread(new RunBeforeInitEnds());
+ t.start();
+ try {
+ t.join();
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ new Thread(new RunAfterInit()).start();
addComponent(new Button("Sync"));
}
+ class RunBeforeInitEnds implements Runnable {
+ @Override
+ public void run() {
+ access(new Runnable() {
+ @Override
+ public void run() {
+ log(LOG_DURING_INIT);
+ }
+ });
+ }
+ }
+
+ class RunAfterInit implements Runnable {
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ access(new Runnable() {
+ @Override
+ public void run() {
+ log(LOG_AFTER_INIT);
+ }
+ });
+ }
+ }
+
@Override
protected String getTestDescription() {
return "Pusing something to a newly created UI should not cause race conditions";
*/
package com.vaadin.tests.push;
-import org.junit.Assert;
import org.junit.Test;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.support.ui.ExpectedCondition;
import com.vaadin.tests.tb3.MultiBrowserTest;
public void testPushFromInit() {
openTestURL();
- for (int second = 0;; second++) {
- if (second >= 30) {
- Assert.fail("timeout");
+ waitUntil(new ExpectedCondition<Boolean>() {
+ @Override
+ public Boolean apply(WebDriver input) {
+ return ("3. " + PushFromInit.LOG_AFTER_INIT)
+ .equals(getLogRow(0));
}
- try {
- if ("1. Logged in init".equals(vaadinElementById(
- "Log_row_1").getText())) {
- break;
- }
- } catch (Exception e) {
- }
- try {
- Thread.sleep(200);
- } catch (InterruptedException e) {
- }
- }
-
- Assert.assertEquals(
- "2. Logged from background thread started in init",
- vaadinElementById("Log_row_0").getText());
+ });
}
}
\ No newline at end of file