Bug 505591 - Add test cases for Browser.evaluate() to browser test suite
Adding test cases to test evaluate()'s ability to return arrays,
including mixed types. Also a little code tidy.
Change-Id: I8b9000e898fa63ea168f436acb2ed1515b53003a
Signed-off-by: Leo Ufimtsev <lufimtse@redhat.com>
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 39e2cd7..83a51cb 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
@@ -17,7 +17,9 @@
import java.util.Properties;
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 org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
@@ -781,16 +783,12 @@
browser.setText("<html><body>HelloWorld</body></html>");
shell.open();
- boolean passed = false;
- Boolean testbool = true;
for (int i = 0; i < (loopMultipier * secondsToWaitTillFail); i++) { // Wait up to seconds before declaring test as failed.
runLoopTimer(waitMS);
- if (testbool.equals(returnValue.get())) {
- passed = true;
- break;
+ if (returnValue.get()) {
+ return; // passed
}
}
- assertTrue(passed);
}
/**
@@ -817,15 +815,12 @@
browser.setText("<html><body>HelloWorld</body></html>");
shell.open();
- boolean passed = false;
for (int i = 0; i < (loopMultipier * secondsToWaitTillFail); i++) { // Wait up to seconds before declaring test as failed.
runLoopTimer(waitMS);
if (returnValue.get() == null) {
- passed = true;
- break;
+ return; // passed
}
}
- assertTrue(passed);
}
/**
@@ -899,19 +894,136 @@
browser.setText("<html><body>HelloWorld</body></html>");
shell.open();
- boolean passed = false;
for (int i = 0; i < (loopMultipier * secondsToWaitTillFail); i++) { // Wait up to seconds before declaring test as failed.
runLoopTimer(waitMS);
if (exception.get() != -1) {
if (exception.get() == SWT.ERROR_FAILED_EVALUATE) {
- passed = true;
+ return; // passed
} else {
System.err.println("test_evaluate_invalid_return_value - Invalid exception code");
}
break;
}
}
- assertTrue(passed);
+}
+
+/**
+ * Test the evaluate() api that returns an array of numbers. Functionality based on Snippet308.
+ * Only wait till success. Otherwise timeout after 3 seconds.
+ */
+@Test
+public void test_evaluate_array_numbers() {
+ // Small note:
+ // evaluate() returns 'Double' type. Java doesn't have AtomicDouble
+ // for convienience we simply convert double to int as we're dealing with integers anyway.
+ final AtomicIntegerArray atomicIntArray = new AtomicIntegerArray(3);
+ atomicIntArray.set(0, -1);
+ browser.addProgressListener(new ProgressListener() {
+ @Override
+ public void changed(ProgressEvent event) {
+ }
+ @Override
+ public void completed(ProgressEvent event) {
+ Object[] evalResult = (Object[]) browser.evaluate("return new Array(1,2,3)");
+ atomicIntArray.set(0, ((Double) evalResult[0]).intValue());
+ atomicIntArray.set(1, ((Double) evalResult[1]).intValue());
+ atomicIntArray.set(2, ((Double) evalResult[2]).intValue());
+ if (browser_debug)
+ System.out.println("Node value: "+ evalResult);
+ }
+ });
+
+ browser.setText("<html><body><p id='myid'>HelloWorld</p></body></html>");
+ shell.open();
+ for (int i = 0; i < (loopMultipier * secondsToWaitTillFail); i++) { // Wait up to seconds before declaring test as failed.
+ runLoopTimer(waitMS);
+ if (atomicIntArray.get(0) != -1) {
+ if (atomicIntArray.get(0) == 1 && atomicIntArray.get(1) == 2 && atomicIntArray.get(2) == 3) {
+ return; // passed
+ } else {
+ System.err.println("ERROR: test_evaluate_array_numbers, resulting numbers not as expected");
+ }
+ }
+ }
+}
+
+/**
+ * Test the evaluate() api that returns an array of strings. Functionality based on Snippet308.
+ * Only wait till success. Otherwise timeout after 3 seconds.
+ */
+@Test
+public void test_evaluate_array_strings () {
+ final AtomicReferenceArray<String> atomicStringArray = new AtomicReferenceArray<>(3);
+ atomicStringArray.set(0, "executing");
+ browser.addProgressListener(new ProgressListener() {
+ @Override
+ public void changed(ProgressEvent event) {
+ }
+ @Override
+ public void completed(ProgressEvent event) {
+ Object[] evalResult = (Object[]) browser.evaluate("return new Array(\"str1\", \"str2\", \"str3\")");
+ atomicStringArray.set(0, (String) evalResult[0]);
+ atomicStringArray.set(1, (String) evalResult[1]);
+ atomicStringArray.set(2, (String) evalResult[2]);
+ if (browser_debug)
+ System.out.println("Node value: "+ evalResult);
+ }
+ });
+
+ browser.setText("<html><body><p id='myid'>HelloWorld</p></body></html>");
+ shell.open();
+ for (int i = 0; i < (loopMultipier * secondsToWaitTillFail); i++) { // Wait up to seconds before declaring test as failed.
+ runLoopTimer(waitMS);
+ if (! "executing".equals(atomicStringArray.get(0))) {
+ if (atomicStringArray.get(0).equals("str1")
+ && atomicStringArray.get(1).equals("str2")
+ && atomicStringArray.get(2).equals("str3")) {
+ return; // passed
+ } else {
+ System.err.println("ERROR: test_evaluate_array_strings, resulting strings not as expected");
+ }
+ }
+ }
+}
+
+/**
+ * Test the evaluate() api that returns an array of mixed types. Functionality based on Snippet308.
+ * Only wait till success. Otherwise timeout after 3 seconds.
+ */
+@Test
+public void test_evaluate_array_mixedTypes () {
+ final AtomicReferenceArray<Object> atomicArray = new AtomicReferenceArray<>(3);
+ atomicArray.set(0, "executing");
+ browser.addProgressListener(new ProgressListener() {
+ @Override
+ public void changed(ProgressEvent event) {
+ }
+ @Override
+ public void completed(ProgressEvent event) {
+ Object[] evalResult = (Object[]) browser.evaluate("return new Array(\"str1\", 2, true)");
+ atomicArray.set(0, evalResult[0]);
+ atomicArray.set(1, evalResult[1]);
+ atomicArray.set(2, evalResult[2]);
+ if (browser_debug)
+ System.out.println("Node value: "+ evalResult);
+ }
+ });
+
+
+ browser.setText("<html><body><p id='myid'>HelloWorld</p></body></html>");
+ shell.open();
+ for (int i = 0; i < (loopMultipier * secondsToWaitTillFail); i++) { // Wait up to seconds before declaring test as failed.
+ runLoopTimer(waitMS);
+ if (! "executing".equals(atomicArray.get(0))) {
+ if (atomicArray.get(0).equals("str1")
+ && ((Double) atomicArray.get(1)) == 2
+ && ((Boolean) atomicArray.get(2))) {
+ return; //passed.
+ } else {
+ System.err.println("ERROR: test_evaluate_array_mixedTypes, resulting strings not as expected");
+ }
+ }
+ }
}
/* custom */