Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeo Ufimtsev2017-02-09 19:28:20 +0000
committerLeo Ufimtsev2017-02-09 19:28:20 +0000
commite1dc8c976b8851c06b235d33cde7571a1b20d20c (patch)
treeb53c1b7c5ae84a6eb5282f05abd1d73ab427b8cc
parent3093d674b8061b6409faf92945b6b597e58d72c3 (diff)
downloadeclipse.platform.swt-e1dc8c976b8851c06b235d33cde7571a1b20d20c.tar.gz
eclipse.platform.swt-e1dc8c976b8851c06b235d33cde7571a1b20d20c.tar.xz
eclipse.platform.swt-e1dc8c976b8851c06b235d33cde7571a1b20d20c.zip
Bug 511797: [Browser jUnit] adding LocationListener tests
Current tests don't actually test if locationListener is triggered by an event. This commit adds the necessary tests. (On webkit2, 'changed' is not fired. This test picks up on that) Change-Id: I6df0dacf121c9ec7dcfdcb820d982f8fb457e26c Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=511797 Signed-off-by: Leo Ufimtsev <lufimtse@redhat.com>
-rw-r--r--tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java87
1 files changed, 87 insertions, 0 deletions
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java
index 205616ff11..ec92ca3b7c 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java
@@ -21,6 +21,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicIntegerArray;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.atomic.AtomicReferenceArray;
+import java.util.function.Supplier;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
@@ -204,6 +205,77 @@ public void test_LocationListener_addAndRemove() {
}
@Test
+public void test_LocationListener_changing() {
+ AtomicBoolean changingFired = new AtomicBoolean(false);
+ browser.addLocationListener(new LocationAdapter() {
+ @Override
+ public void changing(LocationEvent event) {
+ changingFired.set(true);
+ }
+ });
+ shell.open();
+ browser.setText("Hello world");
+ boolean passed = waitForPassCondition(() -> changingFired.get());
+ assertTrue("LocationListener.changing() event was never fixed", passed);
+}
+@Test
+public void test_LocationListener_changed() {
+ AtomicBoolean changedFired = new AtomicBoolean(false);
+ browser.addLocationListener(new LocationAdapter() {
+ @Override
+ public void changed(LocationEvent event) {
+ changedFired.set(true);
+ }
+ });
+ shell.open();
+ browser.setText("Hello world");
+ boolean passed = waitForPassCondition(() -> changedFired.get());
+ assertTrue("LocationListener.changing() event was never fixed", passed);
+}
+@Test
+public void test_LocationListener_changingAndOnlyThenChanged() {
+ // Test proper order of events.
+ // Check that 'changed' is only fired after 'changing' has fired at least once.
+ AtomicBoolean changingFired = new AtomicBoolean(false);
+ AtomicBoolean changedFired = new AtomicBoolean(false);
+ AtomicBoolean changedFiredTooEarly = new AtomicBoolean(false);
+ AtomicBoolean finished = new AtomicBoolean(false);
+
+ browser.addLocationListener(new LocationListener() {
+ @Override
+ public void changing(LocationEvent event) { // Multiple changing events can occur during a load.
+ changingFired.set(true);
+ }
+ @Override
+ public void changed(LocationEvent event) {
+ if (!changingFired.get())
+ changedFiredTooEarly.set(true);
+
+ changedFired.set(true);
+ finished.set(true);
+ }
+ });
+ shell.open();
+ browser.setText("Hello world");
+ waitForPassCondition(() -> finished.get());
+
+ if (finished.get() && changingFired.get() && changedFired.get() && !changedFiredTooEarly.get()) {
+ return; // pass
+ } else if (!finished.get()) {
+ fail("Test timed out. 'changed()' never fired");
+ } else {
+ if (changedFiredTooEarly.get())
+ fail("changed() was fired before changing(). Wrong signal order");
+ else if (!changingFired.get())
+ fail("changing() was never fired");
+ else {
+ fail("LocationListener test failed. changing():" + changingFired.get()
+ + " changed():" + changedFired.get() + " changedFiredTooEarly:" + changedFiredTooEarly.get());
+ }
+ }
+}
+
+@Test
public void test_OpenWindowListener_closeShell() {
Display display = Display.getCurrent();
Shell shell = new Shell(display);
@@ -1448,6 +1520,21 @@ public void test_BrowserFunction_callback_afterPageReload() {
/* custom */
+/**
+ * Wait for passTest to return true. Timeout otherwise.
+ * @param passTest a Supplier lambda that returns true if pass condition is true. False otherwise.
+ * @return true if test passes, false on timeout.
+ */
+private boolean waitForPassCondition(Supplier<Boolean> passTest) {
+ for (int i = 0; i < (loopMultipier * secondsToWaitTillFail); i++) { // Wait up to seconds before declaring test as failed.
+ runLoopTimer(waitMS);
+ if (passTest.get()) {
+ return true;
+ }
+ }
+ return false;
+}
+
void runLoopTimer(final int milliseconds) {
final boolean[] exit = {false};
new Thread() {

Back to the top