diff options
| author | Leo Ufimtsev | 2017-02-09 19:28:20 +0000 |
|---|---|---|
| committer | Leo Ufimtsev | 2017-02-09 19:28:20 +0000 |
| commit | e1dc8c976b8851c06b235d33cde7571a1b20d20c (patch) | |
| tree | b53c1b7c5ae84a6eb5282f05abd1d73ab427b8cc | |
| parent | 3093d674b8061b6409faf92945b6b597e58d72c3 (diff) | |
| download | eclipse.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.java | 87 |
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() { |
