4141import java .nio .file .Paths ;
4242import java .time .Instant ;
4343import java .util .ArrayList ;
44+ import java .util .Collection ;
4445import java .util .Collections ;
4546import java .util .List ;
4647import java .util .Locale ;
8182import org .junit .Rule ;
8283import org .junit .Test ;
8384import org .junit .rules .TestName ;
85+ import org .junit .runner .RunWith ;
8486import org .junit .runners .MethodSorters ;
87+ import org .junit .runners .Parameterized ;
88+ import org .junit .runners .Parameterized .Parameters ;
8589
8690/**
8791 * Automated Test Suite for class org.eclipse.swt.browser.Browser
8892 *
8993 * @see org.eclipse.swt.browser.Browser
9094 */
95+ @ RunWith (Parameterized .class )
9196@ FixMethodOrder (MethodSorters .NAME_ASCENDING )
9297public class Test_org_eclipse_swt_browser_Browser extends Test_org_eclipse_swt_widgets_Composite {
9398
@@ -132,6 +137,24 @@ private void testLogAppend(String msg) {
132137 boolean ignoreNonDisposedShells ;
133138 static List <String > descriptors = new ArrayList <>();
134139
140+ private final int swtBrowserSettings ;
141+
142+ @ Parameters (name = "browser flags: {0}" )
143+ public static Collection <Object []> browserFlagsToTest () {
144+ List <Object []> browserFlags = new ArrayList <>();
145+ if (SwtTestUtil .isWindows ) {
146+ // NOTE: This is currently disabled due to test issues in the CI
147+ // Execute Edge tests first, because IE starts some OS timer that conflicts with Edge event handling
148+ // browserFlags.add(0, new Object[] {SWT.EDGE});
149+ }
150+ browserFlags .add (new Object [] {SWT .NONE });
151+ return browserFlags ;
152+ }
153+
154+ public Test_org_eclipse_swt_browser_Browser (int swtBrowserSettings ) {
155+ this .swtBrowserSettings = swtBrowserSettings ;
156+ }
157+
135158@ Override
136159@ Before
137160public void setUp () {
@@ -147,7 +170,7 @@ public void setUp() {
147170 System .out .println ("Running Test_org_eclipse_swt_browser_Browser#" + name .getMethodName ());
148171
149172 shell .setLayout (new FillLayout ());
150- browser = createBrowser (shell , SWT . NONE );
173+ browser = createBrowser (shell , swtBrowserSettings );
151174
152175 isEdge = browser .getBrowserType ().equals ("edge" );
153176
@@ -249,8 +272,12 @@ private int reportOpenedDescriptors() {
249272}
250273
251274private Browser createBrowser (Shell s , int flags ) {
275+ long maximumBrowserCreationMilliseconds = 10_000 ;
276+ long createStartTime = System .currentTimeMillis ();
252277 Browser b = new Browser (s , flags );
253278 createdBroswers .add (b );
279+ long createDuration = System .currentTimeMillis () - createStartTime ;
280+ assertTrue ("creating browser took too long: " + createDuration + "ms" , createDuration < maximumBrowserCreationMilliseconds );
254281 return b ;
255282}
256283
@@ -259,12 +286,12 @@ private Browser createBrowser(Shell s, int flags) {
259286 */
260287@ Override
261288public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI () {
262- Browser browser = createBrowser (shell , SWT . NONE );
289+ Browser browser = createBrowser (shell , swtBrowserSettings );
263290 browser .dispose ();
264- browser = createBrowser (shell , SWT .BORDER );
291+ browser = createBrowser (shell , SWT .BORDER | swtBrowserSettings );
265292 // System.out.println("Test_org_eclipse_swt_browser_Browser#test_Constructor*#getBrowserType(): " + browser.getBrowserType());
266293 browser .dispose ();
267- assertThrows (IllegalArgumentException .class , () -> createBrowser (null , SWT . NONE ));
294+ assertThrows (IllegalArgumentException .class , () -> createBrowser (null , swtBrowserSettings ));
268295}
269296
270297/**
@@ -275,7 +302,7 @@ public void test_Constructor_asyncParentDisposal() {
275302 Display .getCurrent ().asyncExec (() -> {
276303 shell .dispose ();
277304 });
278- Browser browser = createBrowser (shell , SWT . EDGE );
305+ Browser browser = createBrowser (shell , swtBrowserSettings );
279306 assertFalse (browser .isDisposed ());
280307}
281308
@@ -448,7 +475,7 @@ public void test_getChildren() {
448475public void test_CloseWindowListener_closeShell () {
449476 Display display = Display .getCurrent ();
450477 Shell shell = new Shell (display );
451- Browser browser = createBrowser (shell , SWT . NONE );
478+ Browser browser = createBrowser (shell , swtBrowserSettings );
452479 browser .addCloseWindowListener (event -> {}); // shouldn't throw
453480 shell .close ();
454481}
@@ -487,7 +514,7 @@ public void test_CloseWindowListener_close () {
487514public void test_LocationListener_adapter_closeShell () {
488515 Display display = Display .getCurrent ();
489516 Shell shell = new Shell (display );
490- Browser browser = createBrowser (shell , SWT . NONE );
517+ Browser browser = createBrowser (shell , swtBrowserSettings );
491518 LocationAdapter adapter = new LocationAdapter () {};
492519 browser .addLocationListener (adapter ); // shouldn't throw
493520 shell .close ();
@@ -526,9 +553,9 @@ public void test_LocationListener_changing() {
526553 boolean passed = waitForPassCondition (changingFired ::get );
527554 assertTrue ("LocationListener.changing() event was never fired" , passed );
528555}
556+
529557@ Test
530558public void test_LocationListener_changed () {
531-
532559 AtomicBoolean changedFired = new AtomicBoolean (false );
533560 browser .addLocationListener (changedAdapter (e -> changedFired .set (true )));
534561 shell .open ();
@@ -737,7 +764,7 @@ public void test_LocationListener_ProgressListener_noExtraEvents() {
737764public void test_OpenWindowListener_closeShell () {
738765 Display display = Display .getCurrent ();
739766 Shell shell = new Shell (display );
740- Browser browser = createBrowser (shell , SWT . NONE );
767+ Browser browser = createBrowser (shell , swtBrowserSettings );
741768 browser .addOpenWindowListener (event -> {});
742769 shell .close ();
743770}
@@ -762,7 +789,7 @@ public void test_OpenWindowListener_addAndRemove() {
762789@ Test
763790public void test_OpenWindowListener_openHasValidEventDetails () {
764791 AtomicBoolean openFiredCorrectly = new AtomicBoolean (false );
765- final Browser browserChild = createBrowser (shell , SWT . None );
792+ final Browser browserChild = createBrowser (shell , swtBrowserSettings );
766793 browser .addOpenWindowListener (event -> {
767794 assertSame ("Expected Browser1 instance, but have another instance" , browser , event .widget );
768795 assertNull ("Expected event.browser to be null" , event .browser );
@@ -786,7 +813,7 @@ public void test_OpenWindowListener_open_ChildPopup() {
786813 Shell childShell = new Shell (shell , SWT .None );
787814 childShell .setText ("Child shell" );
788815 childShell .setLayout (new FillLayout ());
789- final Browser browserChild = createBrowser (childShell , SWT . NONE );
816+ final Browser browserChild = createBrowser (childShell , swtBrowserSettings );
790817
791818 browser .addOpenWindowListener (event -> {
792819 event .browser = browserChild ;
@@ -816,15 +843,14 @@ public void test_OpenWindowListener_open_ChildPopup() {
816843/** Validate event order : Child's visibility should come before progress completed event */
817844@ Test
818845public void test_OpenWindow_Progress_Listener_ValidateEventOrder () {
819-
820846 AtomicBoolean windowOpenFired = new AtomicBoolean (false );
821847 AtomicBoolean childCompleted = new AtomicBoolean (false );
822848 AtomicBoolean visibilityShowed = new AtomicBoolean (false );
823849
824850 Shell childShell = new Shell (shell , SWT .None );
825851 childShell .setText ("Child shell" );
826852 childShell .setLayout (new FillLayout ());
827- final Browser browserChild = createBrowser (childShell , SWT . NONE );
853+ final Browser browserChild = createBrowser (childShell , swtBrowserSettings );
828854
829855 browser .addOpenWindowListener (event -> {
830856 event .browser = browserChild ;
@@ -874,7 +900,7 @@ public void test_ProgressListener_newProgressAdapter() {
874900public void test_ProgressListener_newProgressAdapter_closeShell () {
875901 Display display = Display .getCurrent ();
876902 Shell shell = new Shell (display );
877- Browser browser = createBrowser (shell , SWT . NONE );
903+ Browser browser = createBrowser (shell , swtBrowserSettings );
878904 browser .addProgressListener (new ProgressAdapter () {});
879905 shell .close ();
880906}
@@ -883,7 +909,7 @@ public void test_ProgressListener_newProgressAdapter_closeShell() {
883909public void test_ProgressListener_newListener_closeShell () {
884910 Display display = Display .getCurrent ();
885911 Shell shell = new Shell (display );
886- Browser browser = createBrowser (shell , SWT . NONE );
912+ Browser browser = createBrowser (shell , swtBrowserSettings );
887913 browser .addProgressListener (new ProgressListener () {
888914 @ Override
889915 public void changed (ProgressEvent event ) {
@@ -980,13 +1006,13 @@ public void test_StatusTextListener_addAndRemove() {
9801006 */
9811007@ Test
9821008public void test_StatusTextListener_hoverMouseOverLink () {
983- assumeFalse (isEdge ); // no API in Edge for this
1009+ assumeFalse (" no API in Edge for this" , isEdge );
9841010
9851011 AtomicBoolean statusChanged = new AtomicBoolean (false );
9861012 int size = 500 ;
9871013
9881014 // 1) Create a page that has a hyper link (covering the whole page)
989- Browser browser = createBrowser (shell , SWT . NONE );
1015+ Browser browser = createBrowser (shell , swtBrowserSettings );
9901016 StringBuilder longhtml = new StringBuilder ();
9911017 for (int i = 0 ; i < 200 ; i ++) {
9921018 longhtml .append ("text text text text text text text text text text text text text text text text text text text text text text text text<br>" );
@@ -1026,7 +1052,7 @@ public void test_StatusTextListener_hoverMouseOverLink() {
10261052public void test_TitleListener_addListener_closeShell () {
10271053 Display display = Display .getCurrent ();
10281054 Shell shell = new Shell (display );
1029- Browser browser = createBrowser (shell , SWT . NONE );
1055+ Browser browser = createBrowser (shell , swtBrowserSettings );
10301056 browser .addTitleListener (event -> {
10311057 });
10321058 shell .close ();
@@ -1205,7 +1231,7 @@ public void test_VisibilityWindowListener_newAdapter() {
12051231public void test_VisibilityWindowListener_newAdapter_closeShell () {
12061232 Display display = Display .getCurrent ();
12071233 Shell shell = new Shell (display );
1208- Browser browser = createBrowser (shell , SWT . NONE );
1234+ Browser browser = createBrowser (shell , swtBrowserSettings );
12091235 browser .addVisibilityWindowListener (new VisibilityWindowAdapter (){});
12101236 shell .close ();
12111237}
@@ -1214,7 +1240,7 @@ public void test_VisibilityWindowListener_newAdapter_closeShell() {
12141240public void test_VisibilityWindowListener_newListener_closeShell () {
12151241 Display display = Display .getCurrent ();
12161242 Shell shell = new Shell (display );
1217- Browser browser = createBrowser (shell , SWT . NONE );
1243+ Browser browser = createBrowser (shell , swtBrowserSettings );
12181244 browser .addVisibilityWindowListener (new VisibilityWindowListener () {
12191245 @ Override
12201246 public void hide (WindowEvent event ) {
@@ -1260,7 +1286,7 @@ public void test_VisibilityWindowListener_multiple_shells() {
12601286 Shell childShell = new Shell (shell );
12611287 childShell .setText ("Child shell " + childCount .get ());
12621288 childShell .setLayout (new FillLayout ());
1263- Browser browserChild = createBrowser (childShell , SWT . NONE );
1289+ Browser browserChild = createBrowser (childShell , swtBrowserSettings );
12641290 event .browser = browserChild ;
12651291 browserChild .setText ("Child window" );
12661292 browserChild .addVisibilityWindowListener (new VisibilityWindowAdapter () {
@@ -1319,7 +1345,7 @@ public void test_VisibilityWindowListener_eventSize() {
13191345 childShell .setSize (250 , 350 );
13201346 childShell .setText ("Child shell" );
13211347 childShell .setLayout (new FillLayout ());
1322- final Browser browserChild = createBrowser (childShell , SWT . NONE );
1348+ final Browser browserChild = createBrowser (childShell , swtBrowserSettings );
13231349
13241350 browser .addOpenWindowListener (event -> {
13251351 event .browser = browserChild ;
@@ -1439,7 +1465,7 @@ public void test_setJavascriptEnabled_multipleInstances() {
14391465 AtomicBoolean instanceTwoFinishedCorrectly = new AtomicBoolean (false );
14401466
14411467
1442- Browser browserSecondInsance = createBrowser (shell , SWT . None );
1468+ Browser browserSecondInsance = createBrowser (shell , swtBrowserSettings );
14431469
14441470 browser .addProgressListener (completedAdapter (event -> {
14451471 if (pageLoadCount .get () == 1 ) {
@@ -2511,8 +2537,8 @@ public Object function(Object[] arguments) {
25112537@ Test
25122538public void test_BrowserFunction_multiprocess () {
25132539 // Test that BrowserFunctions work in multiple Browser instances simultaneously.
2514- Browser browser1 = createBrowser (shell , SWT . NONE );
2515- Browser browser2 = createBrowser (shell , SWT . NONE );
2540+ Browser browser1 = createBrowser (shell , swtBrowserSettings );
2541+ Browser browser2 = createBrowser (shell , swtBrowserSettings );
25162542
25172543 class JavaFunc extends BrowserFunction {
25182544 JavaFunc (Browser browser ) {
0 commit comments