Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorLeo Ufimtsev2016-12-21 15:04:05 +0000
committerAlexander Kurtakov2017-01-05 07:04:39 +0000
commitfce563cd43280bf026ef07c78f07f75f5c3c6216 (patch)
tree51ea2a0cf022484cb0447c1e51566096a83c5752 /tests
parent263b32c96e9d9e97f35ba333c9b3e6d958c30c07 (diff)
downloadeclipse.platform.swt-fce563cd43280bf026ef07c78f07f75f5c3c6216.tar.gz
eclipse.platform.swt-fce563cd43280bf026ef07c78f07f75f5c3c6216.tar.xz
eclipse.platform.swt-fce563cd43280bf026ef07c78f07f75f5c3c6216.zip
Bug 509411 - [Webkit 1] Crash during Test_*_Browser evaluate() tests (2)I20170105-0320
1) Skip newly added Browser.evaluate() tests (#505591) for webkit1 because webkit1 is not stable with these and hudson consistently crashes. Note: These tests do not fail on Cocoa/Win32 and Webkit2. 2) Added a few notes to few other tests that cause sporadic crashes on webkit1 due to use of context_iteration (that also don't occur on webkit2). See bug for details. 3) Also changing setup/teardown of legacy tests so that they don't run for tests that are skipped on hudson. #509658 4) Tidy/refactor Change-Id: I35a398ad56f36e7a618537cb6eca492c8ef7f1ac Signed-off-by: Leo Ufimtsev <lufimtse@redhat.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtTestUtil.java4
-rw-r--r--tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java83
-rw-r--r--tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Test_BrowserSuite.java59
3 files changed, 101 insertions, 45 deletions
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtTestUtil.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtTestUtil.java
index 9db0510b45..7270442a3a 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtTestUtil.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtTestUtil.java
@@ -68,6 +68,10 @@ public class SwtTestUtil {
public final static boolean isSolaris = System.getProperty("os.name").equals("Solaris") || System.getProperty("os.name").equals("SunOS");
public final static boolean isHPUX = System.getProperty("os.name").equals("HP-UX");
+ public final static boolean isRunningOnEclipseOrgHudsonGTK = isGTK
+ && ("hudsonbuild".equalsIgnoreCase(System.getProperty("user.name"))
+ || "genie.platform".equalsIgnoreCase(System.getProperty("user.name")));
+
static {
testFontName = "Helvetica";
}
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 eb05a66408..f49364ed25 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
@@ -14,8 +14,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeFalse;
-import java.util.Properties;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicIntegerArray;
@@ -60,6 +60,8 @@ public class Test_org_eclipse_swt_browser_Browser extends Test_org_eclipse_swt_w
boolean browser_debug = false;
+ boolean isWebkit1 = false;
+
/**
* Normally, sleep in 1 ms intervals 1000 times. During browser_debug, sleep 1000 ms for 1 interval.
* This allows one to see the browser shell for a few seconds, which would normally not be visible during
@@ -73,15 +75,39 @@ public class Test_org_eclipse_swt_browser_Browser extends Test_org_eclipse_swt_w
public void setUp() {
super.setUp();
+ // Print test name if running on hudson. This makes it easier to tell in the logs which test case caused crash.
+ if (SwtTestUtil.isRunningOnEclipseOrgHudsonGTK) {
+ System.out.println("Running Test_org_eclipse_swt_browser_Browser#" + name.getMethodName());
+ }
+
secondsToWaitTillFail = 3;
waitMS = browser_debug ? 1000 : 1;
loopMultipier = browser_debug ? 1 : 1000;
shell.setLayout(new FillLayout());
- setTitle(shell);
-
browser = new Browser(shell, SWT.NONE);
+ String shellTitle = name.getMethodName();
+ if (SwtTestUtil.isGTK && browser.getBrowserType().equals("webkit")) {
+
+ // Note, webkitGtk version is only available once Browser is instantiated.
+ String webkitGtkVersionStr = System.getProperty("org.eclipse.swt.internal.webkitgtk.version"); //$NON-NLS-1$
+
+ shellTitle = shellTitle + " Webkit version: " + webkitGtkVersionStr;
+
+ String[] webkitGtkVersionStrParts = webkitGtkVersionStr.split("\\.");
+ int[] webkitGtkVersionInts = new int[3];
+ for (int i = 0; i < 3; i++) {
+ webkitGtkVersionInts[i] = Integer.parseInt(webkitGtkVersionStrParts[i]);
+ }
+
+ // webkitgtk 2.5 and onwards uses webkit2.
+ if (webkitGtkVersionInts[0] == 1 || (webkitGtkVersionInts[0] == 2 && webkitGtkVersionInts[1] <= 4)) {
+ isWebkit1 = true;
+ }
+ }
+ shell.setText(shellTitle);
+
/*
* setWidget() is needed for Browser to occupy the whole shell.
* (Without setWidget(), composite and browser receive half the shell each).
@@ -94,27 +120,10 @@ public void setUp() {
if (! SwtTestUtil.isWindows) {
setWidget(browser);
}
-}
-/**
- * Append relevant information to the shell title.
- * On Gtk, we support multiple versions of Webkit. It's useful to know which webkit version the test runs on.
- * @param title
- */
-void setTitle(Shell shell) {
- String title = name.getMethodName();
- if (SwtTestUtil.isGTK) {
- String SWT_WEBKITGTK_VERSION = "org.eclipse.swt.internal.webkitgtk.version"; //$NON-NLS-1$
- Properties sp = System.getProperties();
- String webkitGtkVer = sp.getProperty(SWT_WEBKITGTK_VERSION);
- if (webkitGtkVer != null)
- title = title + " Webkit version: " + webkitGtkVer;
- }
- shell.setText(title);
}
-
/**
* Test that if Browser is constructed with the parent being "null", Browser throws an exception.
*/
@@ -124,7 +133,7 @@ public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
Browser browser = new Browser(shell, SWT.NONE);
browser.dispose();
browser = new Browser(shell, SWT.BORDER);
- System.out.println("Browser#getBrowserType(): " + browser.getBrowserType());
+ // System.out.println("Test_org_eclipse_swt_browser_Browser#test_Constructor*#getBrowserType(): " + browser.getBrowserType());
browser.dispose();
try {
browser = new Browser(null, SWT.NONE);
@@ -216,6 +225,13 @@ public void test_listener_addProgressListenerLorg_eclipse_swt_browser_ProgressLi
for (int i = 0; i < 100; i++) browser.removeProgressListener(listener);
}
+@Override
+@Test
+public void test_isVisible() {
+ // Note. This test sometimes crashes with webkit1 because shell.setVisible() calls g_main_context_iteration(). See Bug 509411
+ // To reproduce, try running test suite 20 times in a loop.
+ super.test_isVisible();
+}
/**
* Test that if addStatusTextListener() is called without a listener, IllegalArgumentException is thrown.
@@ -650,6 +666,8 @@ public void test_setTextLjava_lang_String() {
*/
@Test
public void test_setUrl() {
+ // Note, this test sometimes crashes on webkit1. See Bug 509411
+
/* THIS TEST REQUIRES WEB ACCESS! How else can we really test the http:// part of a browser widget? */
assert(browser.setUrl("http://www.eclipse.org/swt"));
runLoopTimer(2000);
@@ -674,6 +692,8 @@ public void test_stop() {
*/
@Test
public void test_evaluate_string() {
+ assumeFalse(webkit1SkipMsg(), isWebkit1); // Bug 509411
+
final AtomicReference<String> returnValue = new AtomicReference<>();
browser.addProgressListener(new ProgressListener() {
@Override
@@ -705,6 +725,7 @@ public void test_evaluate_string() {
*/
@Test
public void test_evaluate_number_normal() {
+ assumeFalse(webkit1SkipMsg(), isWebkit1); // Bug 509411
Double testNum = 123.0;
boolean passed = evaluate_number_helper(testNum);
assertTrue(passed);
@@ -716,6 +737,8 @@ public void test_evaluate_number_normal() {
*/
@Test
public void test_evaluate_number_negative() {
+ assumeFalse(webkit1SkipMsg(), isWebkit1); // Bug 509411
+
Double testNum = -123.0;
boolean passed = evaluate_number_helper(testNum);
assertTrue(passed);
@@ -727,6 +750,8 @@ public void test_evaluate_number_negative() {
*/
@Test
public void test_evaluate_number_big() {
+ assumeFalse(webkit1SkipMsg(), isWebkit1); // Bug 509411
+
Double testNum = 10000000000.0;
boolean passed = evaluate_number_helper(testNum);
assertTrue(passed);
@@ -766,6 +791,7 @@ boolean evaluate_number_helper(Double testNum) {
*/
@Test
public void test_evaluate_boolean() {
+ assumeFalse(webkit1SkipMsg(), isWebkit1); // Bug 509411
final AtomicBoolean atomicBoolean = new AtomicBoolean(false);
browser.addProgressListener(new ProgressListener() {
@Override
@@ -797,9 +823,9 @@ public void test_evaluate_boolean() {
*/
@Test
public void test_evaluate_null() {
+ assumeFalse(webkit1SkipMsg(), isWebkit1); // Bug 509411
// Boolen only used as dummy placeholder so the object is not null.
final AtomicReference<Object> returnValue = new AtomicReference<>(new Boolean(true));
- System.out.println(returnValue);
browser.addProgressListener(new ProgressListener() {
@Override
public void changed(ProgressEvent event) {
@@ -830,6 +856,8 @@ public void test_evaluate_null() {
*/
@Test
public void test_evaluate_invalid_return_value() {
+ assumeFalse(webkit1SkipMsg(), isWebkit1); // Bug 509411
+
if (SwtTestUtil.isWindows) {
/* Bug 508210 . Inconsistent beahiour on windows at the moment.
* Fixing requires deeper investigation. Disabling newly added test for now.
@@ -878,6 +906,7 @@ public void test_evaluate_invalid_return_value() {
*/
@Test
public void test_evaluate_evaluation_failed_exception() {
+ assumeFalse(webkit1SkipMsg(), isWebkit1); // Bug 509411
final AtomicInteger exception = new AtomicInteger(-1);
browser.addProgressListener(new ProgressListener() {
@Override
@@ -914,6 +943,8 @@ public void test_evaluate_evaluation_failed_exception() {
*/
@Test
public void test_evaluate_array_numbers() {
+ assumeFalse(webkit1SkipMsg(), isWebkit1); // Bug 509411
+
// 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.
@@ -955,6 +986,8 @@ public void test_evaluate_array_numbers() {
*/
@Test
public void test_evaluate_array_strings () {
+ assumeFalse(webkit1SkipMsg(), isWebkit1); // Bug 509411
+
final AtomicReferenceArray<String> atomicStringArray = new AtomicReferenceArray<>(3);
atomicStringArray.set(0, "executing");
browser.addProgressListener(new ProgressListener() {
@@ -995,6 +1028,7 @@ public void test_evaluate_array_strings () {
*/
@Test
public void test_evaluate_array_mixedTypes () {
+ assumeFalse(webkit1SkipMsg(), isWebkit1); // Bug 509411
final AtomicReferenceArray<Object> atomicArray = new AtomicReferenceArray<>(3);
atomicArray.set(0, "executing");
browser.addProgressListener(new ProgressListener() {
@@ -1051,4 +1085,9 @@ void runLoopTimer(final int milliseconds) {
Display display = Display.getCurrent();
while (!exit[0] && !shell.isDisposed()) if (!display.readAndDispatch()) display.sleep();
}
+
+private String webkit1SkipMsg() {
+ return "Test_org_eclipse_swt_browser. Bug 509411. Skipping test on Webkit1 due to sporadic crash: "+ name.getMethodName();
+}
+
}
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Test_BrowserSuite.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Test_BrowserSuite.java
index 2031e1144b..5bbd5dcf58 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Test_BrowserSuite.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Test_BrowserSuite.java
@@ -11,11 +11,10 @@
package org.eclipse.swt.tests.junit.browser;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assume.assumeFalse;
import org.eclipse.swt.tests.junit.SwtTestUtil;
import org.eclipse.swt.widgets.Display;
-import org.junit.After;
-import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
@@ -27,79 +26,93 @@ import org.junit.rules.TestName;
*/
public class Test_BrowserSuite {
-public static boolean isRunningOnEclipseOrgHudsonGTK = SwtTestUtil.isGTK
- && ("hudsonbuild".equalsIgnoreCase(System.getProperty("user.name"))
- || "genie.platform".equalsIgnoreCase(System.getProperty("user.name")));
-
@Rule
public TestName name = new TestName();
+String skipMsg() {
+ return "Test_BrowserSuite." + name.getMethodName() + "() skipped, see bug 499159, 509411";
+}
+
@Test
public void testBrowser1() {
- if (isRunningOnEclipseOrgHudsonGTK) {
- System.out.println("Test_BrowserSuite." + name.getMethodName() + "() skipped, see bug 499159");
- return;
- }
+ assumeFalse(skipMsg(), SwtTestUtil.isRunningOnEclipseOrgHudsonGTK);
+ manualSetUp();
assertTrue(Browser1_location_progress_fromURL.test());
+ manualTearDown();
}
@Test
public void testBrowser2() {
+ manualSetUp();
assertTrue(Browser2_location_and_progress_advanced.test());
+ manualTearDown();
}
@Test
public void testBrowser3() {
- if (isRunningOnEclipseOrgHudsonGTK) {
- System.out.println("Test_BrowserSuite." + name.getMethodName() + "() skipped, see bug 499159");
- return;
- }
+ assumeFalse(skipMsg(), SwtTestUtil.isRunningOnEclipseOrgHudsonGTK);
+ System.out.println("testbrowse3 starting " + SwtTestUtil.isRunningOnEclipseOrgHudsonGTK);
+ manualSetUp();
assertTrue(Browser3_window_open_visibility_listeners.test());
+ manualTearDown();
}
@Test
public void testBrowser4() {
+ manualSetUp();
assertTrue(Browser4_window_close_listener.test());
+ manualTearDown();
}
@Test
public void testBrowser5() {
+ manualSetUp();
assertTrue(Browser5_sizing_and_bounds.test());
+ manualTearDown();
}
@Test
public void testBrowser6() {
- if (isRunningOnEclipseOrgHudsonGTK) {
- System.out.println("Test_BrowserSuite." + name.getMethodName() + "() skipped, see bug 499159");
- return;
- }
+ assumeFalse(skipMsg(), SwtTestUtil.isRunningOnEclipseOrgHudsonGTK);
+ manualSetUp();
assertTrue(Browser6_title_change_listener.test());
+ manualTearDown();
}
@Test
public void testBrowser7() {
+ manualSetUp();
assertTrue(Browser7_child_browsers.test());
+ manualTearDown();
}
@Test
public void testBrowser8() {
+ manualSetUp();
assertTrue(Browser8_execute_fromMemory.test());
+ manualTearDown();
}
@Test
public void testBrowser9() {
+ manualSetUp();
assertTrue(Browser9_execute_fromFile.test());
+ manualTearDown();
}
-@Before
-public void setUp() {
- System.out.println("Browser#setUp(): " + name.getMethodName());
+//Bug 509658. Display.dispose can cause webkit1 to crash in some cases.
+// Thus we have a situation where the setup causes a crash even in test cases
+// that are marked not to be run on hudson. This is very confusing.
+//
+// For now, to avoid calling display.dispose for problematic test webkit1 test cases
+// we call setup/teardown manually.
+public void manualSetUp() {
+ System.out.println("Test_BrowserSuite#setUp(): " + name.getMethodName());
Display display = Display.getCurrent();
if (display != null) display.dispose();
}
-@After
-public void tearDown() {
+public void manualTearDown() {
Display display = Display.getCurrent();
if (display != null) display.dispose();
}

Back to the top