diff --git a/Jenkinsfile b/Jenkinsfile index 9e75d34dc4c..8b90eaee83c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -48,9 +48,9 @@ def getNativeJdkUrl(String os, String arch) { // To update the used JDK version // Temporary workaround until there are official Temurin GA releases for Windows on ARM that can be consumed through JustJ dir("${WORKSPACE}/repackage-win32.aarch64-jdk") { sh """ - curl -L 'https://github.com/adoptium/temurin17-binaries/releases/download/jdk17u-2024-02-07-14-14-beta/OpenJDK17U-jdk_aarch64_windows_hotspot_2024-02-07-14-14.zip' > jdk.zip - unzip -q jdk.zip jdk-17.0.11+1/include/** jdk-17.0.11+1/lib/** - cd jdk-17.0.11+1 + curl -L 'https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.9%2B10/OpenJDK21U-jdk_aarch64_windows_hotspot_21.0.9_10.zip' > jdk.zip + unzip -q jdk.zip jdk-21.0.9+10/include/** jdk-21.0.9+10/lib/** + cd jdk-21.0.9+10 tar -czf ../jdk.tar.gz include/ lib/ """ } @@ -59,15 +59,15 @@ def getNativeJdkUrl(String os, String arch) { // To update the used JDK version // Downloading jdk and renew it for riscv64 architecture on Linux dir("${WORKSPACE}/repackage-linux.riscv64-jdk") { sh """ - curl -L 'https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.12%2B7/OpenJDK17U-jdk_riscv64_linux_hotspot_17.0.12_7.tar.gz' > jdk.tar.gz - tar -xzf jdk.tar.gz jdk-17.0.12+7/include/ jdk-17.0.12+7/lib/ - cd jdk-17.0.12+7 + curl -L 'https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.9%2B10/OpenJDK21U-jdk_riscv64_linux_hotspot_21.0.9_10.tar.gz' > jdk.tar.gz + tar -xzf jdk.tar.gz jdk-21.0.9+10/include/ jdk-21.0.9+10/lib/ + cd jdk-21.0.9+10 tar -czf ../jdk.tar.gz include/ lib/ """ } return "file://${WORKSPACE}/repackage-linux.riscv64-jdk/jdk.tar.gz" } - return "https://download.eclipse.org/justj/jres/17/downloads/20230428_1804/org.eclipse.justj.openjdk.hotspot.jre.minimal.stripped-17.0.7-${os}-${arch}.tar.gz" + return "https://download.eclipse.org/justj/jres/21/downloads/20251104_1502/org.eclipse.justj.openjdk.hotspot.jre.minimal.stripped-21.0.9-${os}-${arch}.tar.gz" } def getLatestGitTag() { diff --git a/binaries/.classpath_cocoa b/binaries/.classpath_cocoa index 1793b5a0a6b..96722abf566 100644 --- a/binaries/.classpath_cocoa +++ b/binaries/.classpath_cocoa @@ -1,6 +1,6 @@ - + diff --git a/binaries/.classpath_gtk b/binaries/.classpath_gtk index e51d302489d..d0d5cfd3456 100644 --- a/binaries/.classpath_gtk +++ b/binaries/.classpath_gtk @@ -1,6 +1,6 @@ - + diff --git a/binaries/.classpath_win32 b/binaries/.classpath_win32 index d57ed0d923c..daf088542d2 100644 --- a/binaries/.classpath_win32 +++ b/binaries/.classpath_win32 @@ -1,6 +1,6 @@ - + diff --git a/binaries/.settings/org.eclipse.jdt.core.prefs b/binaries/.settings/org.eclipse.jdt.core.prefs index 8487c861252..cae1a13aba8 100644 --- a/binaries/.settings/org.eclipse.jdt.core.prefs +++ b/binaries/.settings/org.eclipse.jdt.core.prefs @@ -11,9 +11,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.compliance=21 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -129,4 +129,4 @@ org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=17 +org.eclipse.jdt.core.compiler.source=21 diff --git a/binaries/pom.xml b/binaries/pom.xml index 78946f0f1b8..b653c087ad0 100644 --- a/binaries/pom.xml +++ b/binaries/pom.xml @@ -27,7 +27,7 @@ ${buildId} - 17 + 21 ${project.basedir}/../../bundles/org.eclipse.swt diff --git a/bundles/org.eclipse.swt.svg/.classpath b/bundles/org.eclipse.swt.svg/.classpath index db7adf11eda..6b440ca4a80 100644 --- a/bundles/org.eclipse.swt.svg/.classpath +++ b/bundles/org.eclipse.swt.svg/.classpath @@ -1,6 +1,6 @@ - + diff --git a/bundles/org.eclipse.swt.svg/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.swt.svg/.settings/org.eclipse.jdt.core.prefs index 4b76983c5f1..d46203831a9 100644 --- a/bundles/org.eclipse.swt.svg/.settings/org.eclipse.jdt.core.prefs +++ b/bundles/org.eclipse.swt.svg/.settings/org.eclipse.jdt.core.prefs @@ -1,10 +1,10 @@ eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 -org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 +org.eclipse.jdt.core.compiler.compliance=21 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=17 +org.eclipse.jdt.core.compiler.source=21 org.eclipse.jdt.core.incompleteClasspath=warning diff --git a/bundles/org.eclipse.swt.svg/META-INF/MANIFEST.MF b/bundles/org.eclipse.swt.svg/META-INF/MANIFEST.MF index 927d6cd3375..8af23d13c53 100644 --- a/bundles/org.eclipse.swt.svg/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.swt.svg/META-INF/MANIFEST.MF @@ -6,7 +6,7 @@ Automatic-Module-Name: org.eclipse.swt.svg Bundle-Name: %fragmentName Bundle-Vendor: %providerName Bundle-Localization: fragment -Bundle-RequiredExecutionEnvironment: JavaSE-17 +Bundle-RequiredExecutionEnvironment: JavaSE-21 Fragment-Host: org.eclipse.swt Import-Package: com.github.weisj.jsvg;version="[2.0.0,3.0.0)", com.github.weisj.jsvg.parser;version="[2.0.0,3.0.0)", diff --git a/bundles/org.eclipse.swt.tools/.classpath b/bundles/org.eclipse.swt.tools/.classpath index 0b1deab5967..248df8cf33a 100644 --- a/bundles/org.eclipse.swt.tools/.classpath +++ b/bundles/org.eclipse.swt.tools/.classpath @@ -1,6 +1,6 @@ - + diff --git a/bundles/org.eclipse.swt.tools/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.swt.tools/.settings/org.eclipse.jdt.core.prefs index fc5c4be44b5..051dfda3423 100644 --- a/bundles/org.eclipse.swt.tools/.settings/org.eclipse.jdt.core.prefs +++ b/bundles/org.eclipse.swt.tools/.settings/org.eclipse.jdt.core.prefs @@ -10,9 +10,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.compliance=21 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -109,4 +109,4 @@ org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=17 +org.eclipse.jdt.core.compiler.source=21 diff --git a/bundles/org.eclipse.swt.tools/META-INF/MANIFEST.MF b/bundles/org.eclipse.swt.tools/META-INF/MANIFEST.MF index 7798f42e14a..5cbce4f2d39 100644 --- a/bundles/org.eclipse.swt.tools/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.swt.tools/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Export-Package: org.eclipse.swt.tools.internal; x-internal:=true Bundle-ActivationPolicy: lazy Bundle-Localization: plugin -Bundle-RequiredExecutionEnvironment: JavaSE-17 +Bundle-RequiredExecutionEnvironment: JavaSE-21 Require-Bundle: org.eclipse.core.runtime;bundle-version="3.29.0", org.eclipse.core.resources;bundle-version="3.4.0", org.eclipse.jdt.core;bundle-version="3.4.0", diff --git a/bundles/org.eclipse.swt/.classpath b/bundles/org.eclipse.swt/.classpath index 12be8d4f662..a419f671c20 100644 --- a/bundles/org.eclipse.swt/.classpath +++ b/bundles/org.eclipse.swt/.classpath @@ -1,5 +1,7 @@ - + + + diff --git a/bundles/org.eclipse.swt/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.swt/.settings/org.eclipse.jdt.core.prefs index 9478cb16537..1e0cb16bbc7 100644 --- a/bundles/org.eclipse.swt/.settings/org.eclipse.jdt.core.prefs +++ b/bundles/org.eclipse.swt/.settings/org.eclipse.jdt.core.prefs @@ -1,9 +1,9 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.compliance=21 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -12,4 +12,4 @@ org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=17 +org.eclipse.jdt.core.compiler.source=21 diff --git a/bundles/org.eclipse.swt/Build-SWT-native-binaries-for-running-platform.launch b/bundles/org.eclipse.swt/Build-SWT-native-binaries-for-running-platform.launch index 84830403aa4..b931964b4df 100644 --- a/bundles/org.eclipse.swt/Build-SWT-native-binaries-for-running-platform.launch +++ b/bundles/org.eclipse.swt/Build-SWT-native-binaries-for-running-platform.launch @@ -20,6 +20,6 @@ - + diff --git a/bundles/org.eclipse.swt/META-INF/MANIFEST.MF b/bundles/org.eclipse.swt/META-INF/MANIFEST.MF index e00e43a3b4f..d9342c48fc1 100644 --- a/bundles/org.eclipse.swt/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.swt/META-INF/MANIFEST.MF @@ -23,5 +23,5 @@ Export-Package: org.eclipse.swt.program, org.eclipse.swt.widgets Eclipse-ExtensibleAPI: true -Bundle-RequiredExecutionEnvironment: JavaSE-17 +Bundle-RequiredExecutionEnvironment: JavaSE-21 Automatic-Module-Name: org.eclipse.swt diff --git a/bundles/org.eclipse.swt/Readme.Linux.md b/bundles/org.eclipse.swt/Readme.Linux.md index ca1d02fc1ff..3382958ba82 100644 --- a/bundles/org.eclipse.swt/Readme.Linux.md +++ b/bundles/org.eclipse.swt/Readme.Linux.md @@ -13,7 +13,7 @@ You need to install the following on your system: * make * gcc * GTK3/GTK4 development files (see https://www.gtk.org/docs/installations/linux/) -* Java 17 JDK (https://adoptium.net/marketplace/?version=17) +* Java 21 JDK (https://adoptium.net/marketplace/?version=21) * (optional) Webkit for GTK development files (webkit2gtk3-devel) ### Building and Testing locally diff --git a/bundles/org.eclipse.swt/Readme.macOS.md b/bundles/org.eclipse.swt/Readme.macOS.md index 525805a3ae5..cd1e9f2e996 100644 --- a/bundles/org.eclipse.swt/Readme.macOS.md +++ b/bundles/org.eclipse.swt/Readme.macOS.md @@ -89,7 +89,7 @@ this information into this readme. You need to install the following on your system: * XCode Command Line Tools (already present in XCode) -* Java 17 JDK (https://adoptium.net/marketplace/?version=17) +* Java 21 JDK (https://adoptium.net/marketplace/?version=21) ### Building and Testing locally diff --git a/examples/.settings_shared/org.eclipse.jdt.core.prefs b/examples/.settings_shared/org.eclipse.jdt.core.prefs index f10d95a29e9..91a5224bed0 100644 --- a/examples/.settings_shared/org.eclipse.jdt.core.prefs +++ b/examples/.settings_shared/org.eclipse.jdt.core.prefs @@ -14,9 +14,9 @@ org.eclipse.jdt.core.compiler.annotation.owning=org.eclipse.jdt.annotation.Ownin org.eclipse.jdt.core.compiler.annotation.resourceanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.compliance=21 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -135,4 +135,4 @@ org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=17 +org.eclipse.jdt.core.compiler.source=21 diff --git a/examples/org.eclipse.swt.examples.browser.demos/.classpath b/examples/org.eclipse.swt.examples.browser.demos/.classpath index 81fe078c20c..375961e4d61 100644 --- a/examples/org.eclipse.swt.examples.browser.demos/.classpath +++ b/examples/org.eclipse.swt.examples.browser.demos/.classpath @@ -1,6 +1,6 @@ - + diff --git a/examples/org.eclipse.swt.examples.browser.demos/META-INF/MANIFEST.MF b/examples/org.eclipse.swt.examples.browser.demos/META-INF/MANIFEST.MF index 9f90cf4aca1..ab0cf5f759c 100644 --- a/examples/org.eclipse.swt.examples.browser.demos/META-INF/MANIFEST.MF +++ b/examples/org.eclipse.swt.examples.browser.demos/META-INF/MANIFEST.MF @@ -11,5 +11,5 @@ Export-Package: org.eclipse.swt.examples.browser.demos, Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-17 +Bundle-RequiredExecutionEnvironment: JavaSE-21 Automatic-Module-Name: org.eclipse.swt.examples.browser.demos diff --git a/examples/org.eclipse.swt.examples.launcher/.classpath b/examples/org.eclipse.swt.examples.launcher/.classpath index 81fe078c20c..375961e4d61 100644 --- a/examples/org.eclipse.swt.examples.launcher/.classpath +++ b/examples/org.eclipse.swt.examples.launcher/.classpath @@ -1,6 +1,6 @@ - + diff --git a/examples/org.eclipse.swt.examples.launcher/META-INF/MANIFEST.MF b/examples/org.eclipse.swt.examples.launcher/META-INF/MANIFEST.MF index 19c803db13e..fdd3c6f1b0e 100644 --- a/examples/org.eclipse.swt.examples.launcher/META-INF/MANIFEST.MF +++ b/examples/org.eclipse.swt.examples.launcher/META-INF/MANIFEST.MF @@ -9,5 +9,5 @@ Bundle-Localization: plugin Require-Bundle: org.eclipse.core.runtime, org.eclipse.ui Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-17 +Bundle-RequiredExecutionEnvironment: JavaSE-21 Automatic-Module-Name: org.eclipse.swt.examples.launcher diff --git a/examples/org.eclipse.swt.examples.ole.win32/.classpath b/examples/org.eclipse.swt.examples.ole.win32/.classpath index 3628e336878..35386b94bbb 100644 --- a/examples/org.eclipse.swt.examples.ole.win32/.classpath +++ b/examples/org.eclipse.swt.examples.ole.win32/.classpath @@ -1,6 +1,6 @@ - + diff --git a/examples/org.eclipse.swt.examples.ole.win32/META-INF/MANIFEST.MF b/examples/org.eclipse.swt.examples.ole.win32/META-INF/MANIFEST.MF index 36e963f389a..36ef8c27a57 100644 --- a/examples/org.eclipse.swt.examples.ole.win32/META-INF/MANIFEST.MF +++ b/examples/org.eclipse.swt.examples.ole.win32/META-INF/MANIFEST.MF @@ -16,5 +16,5 @@ Require-Bundle: org.eclipse.ui.ide, org.eclipse.ui, org.eclipse.swt Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-17 +Bundle-RequiredExecutionEnvironment: JavaSE-21 Automatic-Module-Name: org.eclipse.swt.examples.ole.win32 diff --git a/examples/org.eclipse.swt.examples.views/.classpath b/examples/org.eclipse.swt.examples.views/.classpath index 81fe078c20c..375961e4d61 100644 --- a/examples/org.eclipse.swt.examples.views/.classpath +++ b/examples/org.eclipse.swt.examples.views/.classpath @@ -1,6 +1,6 @@ - + diff --git a/examples/org.eclipse.swt.examples.views/META-INF/MANIFEST.MF b/examples/org.eclipse.swt.examples.views/META-INF/MANIFEST.MF index 57c8db5b49d..d32085fde80 100644 --- a/examples/org.eclipse.swt.examples.views/META-INF/MANIFEST.MF +++ b/examples/org.eclipse.swt.examples.views/META-INF/MANIFEST.MF @@ -9,5 +9,5 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.ui, org.eclipse.swt.examples Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-17 +Bundle-RequiredExecutionEnvironment: JavaSE-21 Automatic-Module-Name: org.eclipse.swt.examples.views diff --git a/examples/org.eclipse.swt.examples.watchdog/.classpath b/examples/org.eclipse.swt.examples.watchdog/.classpath index 81fe078c20c..375961e4d61 100644 --- a/examples/org.eclipse.swt.examples.watchdog/.classpath +++ b/examples/org.eclipse.swt.examples.watchdog/.classpath @@ -1,6 +1,6 @@ - + diff --git a/examples/org.eclipse.swt.examples.watchdog/META-INF/MANIFEST.MF b/examples/org.eclipse.swt.examples.watchdog/META-INF/MANIFEST.MF index 1603be7be7e..4722f92b210 100644 --- a/examples/org.eclipse.swt.examples.watchdog/META-INF/MANIFEST.MF +++ b/examples/org.eclipse.swt.examples.watchdog/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: %bundleName Bundle-SymbolicName: org.eclipse.swt.examples.watchdog;singleton:=true Bundle-Version: 1.2.0.qualifier Bundle-Activator: org.eclipse.swt.examples.watchdog.WatchdogPlugin -Bundle-RequiredExecutionEnvironment: JavaSE-17 +Bundle-RequiredExecutionEnvironment: JavaSE-21 Bundle-ActivationPolicy: lazy Require-Bundle: org.eclipse.core.runtime, org.eclipse.swt, diff --git a/examples/org.eclipse.swt.examples/.classpath b/examples/org.eclipse.swt.examples/.classpath index 3628e336878..35386b94bbb 100644 --- a/examples/org.eclipse.swt.examples/.classpath +++ b/examples/org.eclipse.swt.examples/.classpath @@ -1,6 +1,6 @@ - + diff --git a/examples/org.eclipse.swt.examples/META-INF/MANIFEST.MF b/examples/org.eclipse.swt.examples/META-INF/MANIFEST.MF index 9b80453c74f..42cc3244a80 100644 --- a/examples/org.eclipse.swt.examples/META-INF/MANIFEST.MF +++ b/examples/org.eclipse.swt.examples/META-INF/MANIFEST.MF @@ -5,7 +5,7 @@ Bundle-SymbolicName: org.eclipse.swt.examples; singleton:=true Bundle-Version: 3.108.1000.qualifier Bundle-Vendor: %providerName Bundle-Localization: plugin -Bundle-RequiredExecutionEnvironment: JavaSE-17 +Bundle-RequiredExecutionEnvironment: JavaSE-21 Export-Package: org.eclipse.swt.examples.accessibility, org.eclipse.swt.examples.addressbook, org.eclipse.swt.examples.browserexample, diff --git a/examples/org.eclipse.swt.snippets/.classpath_cocoa b/examples/org.eclipse.swt.snippets/.classpath_cocoa index 5eb75e01205..bcad73af751 100644 --- a/examples/org.eclipse.swt.snippets/.classpath_cocoa +++ b/examples/org.eclipse.swt.snippets/.classpath_cocoa @@ -1,6 +1,6 @@ - + diff --git a/examples/org.eclipse.swt.snippets/.classpath_gtk b/examples/org.eclipse.swt.snippets/.classpath_gtk index 5eb75e01205..bcad73af751 100644 --- a/examples/org.eclipse.swt.snippets/.classpath_gtk +++ b/examples/org.eclipse.swt.snippets/.classpath_gtk @@ -1,6 +1,6 @@ - + diff --git a/examples/org.eclipse.swt.snippets/.classpath_win32 b/examples/org.eclipse.swt.snippets/.classpath_win32 index 327658cb814..57034d8d944 100644 --- a/examples/org.eclipse.swt.snippets/.classpath_win32 +++ b/examples/org.eclipse.swt.snippets/.classpath_win32 @@ -1,6 +1,6 @@ - + diff --git a/examples/org.eclipse.swt.snippets/META-INF/MANIFEST.MF b/examples/org.eclipse.swt.snippets/META-INF/MANIFEST.MF index 68f01cccaae..ded320a0665 100644 --- a/examples/org.eclipse.swt.snippets/META-INF/MANIFEST.MF +++ b/examples/org.eclipse.swt.snippets/META-INF/MANIFEST.MF @@ -6,5 +6,5 @@ Bundle-Version: 3.4.100 Bundle-Vendor: %providerName Bundle-Localization: plugin Require-Bundle: org.eclipse.swt -Bundle-RequiredExecutionEnvironment: JavaSE-17 +Bundle-RequiredExecutionEnvironment: JavaSE-21 Automatic-Module-Name: org.eclipse.swt.snippets diff --git a/tests/org.eclipse.swt.tests.cocoa/.classpath b/tests/org.eclipse.swt.tests.cocoa/.classpath index 2f34581291e..e9ab5bc0eef 100644 --- a/tests/org.eclipse.swt.tests.cocoa/.classpath +++ b/tests/org.eclipse.swt.tests.cocoa/.classpath @@ -1,6 +1,6 @@ - + diff --git a/tests/org.eclipse.swt.tests.cocoa/META-INF/MANIFEST.MF b/tests/org.eclipse.swt.tests.cocoa/META-INF/MANIFEST.MF index 0e141f54f07..ef3dbc27e22 100644 --- a/tests/org.eclipse.swt.tests.cocoa/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.swt.tests.cocoa/META-INF/MANIFEST.MF @@ -7,5 +7,5 @@ Bundle-Vendor: Eclipse.org Require-Bundle: org.junit;bundle-version="4.12.0", org.eclipse.swt Eclipse-BundleShape: dir -Bundle-RequiredExecutionEnvironment: JavaSE-17 +Bundle-RequiredExecutionEnvironment: JavaSE-21 Automatic-Module-Name: org.eclipse.swt.tests.cocoa diff --git a/tests/org.eclipse.swt.tests.gtk/.classpath b/tests/org.eclipse.swt.tests.gtk/.classpath index 2f34581291e..e9ab5bc0eef 100644 --- a/tests/org.eclipse.swt.tests.gtk/.classpath +++ b/tests/org.eclipse.swt.tests.gtk/.classpath @@ -1,6 +1,6 @@ - + diff --git a/tests/org.eclipse.swt.tests.gtk/META-INF/MANIFEST.MF b/tests/org.eclipse.swt.tests.gtk/META-INF/MANIFEST.MF index df1de1a9214..adbbe81d510 100644 --- a/tests/org.eclipse.swt.tests.gtk/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.swt.tests.gtk/META-INF/MANIFEST.MF @@ -8,5 +8,5 @@ Require-Bundle: junit-jupiter-api;bundle-version="[5.14.0,6.0.0)", org.eclipse.swt, junit-platform-suite-api;bundle-version="[1.14.0,2.0.0)" Eclipse-BundleShape: dir -Bundle-RequiredExecutionEnvironment: JavaSE-17 +Bundle-RequiredExecutionEnvironment: JavaSE-21 Automatic-Module-Name: org.eclipse.swt.tests.gtk diff --git a/tests/org.eclipse.swt.tests.win32/.classpath b/tests/org.eclipse.swt.tests.win32/.classpath index 2f34581291e..e9ab5bc0eef 100644 --- a/tests/org.eclipse.swt.tests.win32/.classpath +++ b/tests/org.eclipse.swt.tests.win32/.classpath @@ -1,6 +1,6 @@ - + diff --git a/tests/org.eclipse.swt.tests.win32/META-INF/MANIFEST.MF b/tests/org.eclipse.swt.tests.win32/META-INF/MANIFEST.MF index 2c3b7b737f1..fa513f60415 100644 --- a/tests/org.eclipse.swt.tests.win32/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.swt.tests.win32/META-INF/MANIFEST.MF @@ -6,7 +6,7 @@ Bundle-Version: 3.108.200.qualifier Bundle-Vendor: Eclipse.org Require-Bundle: org.eclipse.swt Eclipse-BundleShape: dir -Bundle-RequiredExecutionEnvironment: JavaSE-17 +Bundle-RequiredExecutionEnvironment: JavaSE-21 Automatic-Module-Name: org.eclipse.swt.tests.win32 Import-Package: org.junit.jupiter.api;version="[5.13.0,6.0.0)", org.junit.jupiter.params;version="[5.13.0,6.0.0)", diff --git a/tests/org.eclipse.swt.tests/.classpath b/tests/org.eclipse.swt.tests/.classpath index 8b8a72b5f85..20ee34b9746 100644 --- a/tests/org.eclipse.swt.tests/.classpath +++ b/tests/org.eclipse.swt.tests/.classpath @@ -1,6 +1,6 @@ - + diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/EchoHttpServer.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/EchoHttpServer.java new file mode 100644 index 00000000000..874a3218868 --- /dev/null +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/EchoHttpServer.java @@ -0,0 +1,131 @@ +/******************************************************************************* + * Copyright (c) 2025 Kichwa Coders Canada, Inc. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.swt.tests.junit; + +import java.io.BufferedReader; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpServer; + +public class EchoHttpServer implements Closeable { + + private HttpServer server; + + public EchoHttpServer() throws IOException { + InetSocketAddress addr = new InetSocketAddress(InetAddress.getLoopbackAddress(), 0); + server = HttpServer.create(addr, 0); + createHandlers(); + server.start(); + } + + protected void createHandlers() { + server.createContext("/get/echo", this::handleGetEcho); + server.createContext("/post/echo", this::handlePostEcho); + } + + @Override + public void close() { + server.stop(0); + } + + public int port() { + return server.getAddress().getPort(); + } + + public String getEchoUrl(String msg) { + return "http://localhost:" + port() + "/get/echo?msg=" + URLEncoder.encode(msg, StandardCharsets.UTF_8); + } + + public String postEchoUrl() { + return "http://localhost:" + port() + "/post/echo"; + } + + protected void handleGetEcho(HttpExchange exchange) throws IOException { + if (!"GET".equalsIgnoreCase(exchange.getRequestMethod())) { + exchange.sendResponseHeaders(405, -1); + return; + } + + String msg = extractMessageFromQuery(exchange.getRequestURI().getQuery()); + respond(exchange, msg); + } + + protected void handlePostEcho(HttpExchange exchange) throws IOException { + if (!"POST".equalsIgnoreCase(exchange.getRequestMethod())) { + exchange.sendResponseHeaders(405, -1); + return; + } + + byte[] bodyBytes = exchange.getRequestBody().readAllBytes(); + String body = new String(bodyBytes, StandardCharsets.UTF_8); + + respond(exchange, body); + } + + private String extractMessageFromQuery(String query) { + if (query == null) + return ""; + // XXX: This is not real/complete query decoding, add more + // as needed if tests require it + for (String part : query.split("&")) { + if (part.startsWith("msg=")) { + return URLDecoder.decode(part.substring(4), StandardCharsets.UTF_8); + } + } + return ""; + } + + private void respond(HttpExchange exchange, String text) throws IOException { + var html = expectedResponse(text); + byte[] bytes = html.getBytes(StandardCharsets.UTF_8); + + exchange.sendResponseHeaders(200, bytes.length); + try (OutputStream os = exchange.getResponseBody()) { + os.write(bytes); + } + } + + public String expectedResponse(String text) { + var html = String.format(""" + + + + %s + + +

This is the SWT Test Echo Http Server

+

This is the echo message (also in title): %s

+ + + """, text, text); + return html; + } + + public static void main(String[] args) throws IOException { + try (var server = new EchoHttpServer()) { + System.out.println("started on port " + server.port()); + System.out.println("Try visiting " + server.getEchoUrl("Hello SWT")); + System.out.println("Will shutdown by pressing newline"); + new BufferedReader(new InputStreamReader(System.in)).readLine(); + } + System.out.println("shutdown"); + } + +} 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 5d9baff9aa5..67d0e6adf1b 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 @@ -32,9 +32,6 @@ import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URL; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; @@ -49,6 +46,8 @@ import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicIntegerArray; @@ -91,6 +90,8 @@ import org.junit.jupiter.api.TestMethodOrder; import org.junit.jupiter.api.io.TempDir; +import com.sun.net.httpserver.HttpExchange; + /** * Automated Test Suite for class org.eclipse.swt.browser.Browser * @@ -399,76 +400,84 @@ public void test_Constructor_multipleInstantiationsInDifferentThreads() { } @Test -public void test_evalute_Cookies () { - final AtomicBoolean loaded = new AtomicBoolean(false); - browser.addProgressListener(ProgressListener.completedAdapter(event -> loaded.set(true))); +public void test_evalute_Cookies () throws IOException { + try (var server = new EchoHttpServer()) { + final AtomicBoolean loaded = new AtomicBoolean(false); + browser.addProgressListener(ProgressListener.completedAdapter(event -> loaded.set(true))); - // Using JavaScript Cookie API on local (file) URL gives DOM Exception 18 - browser.setUrl("https://www.eclipse.org/swt"); - shell.open(); - waitForPassCondition(loaded::get); + // Using JavaScript Cookie API on local (file) URL gives DOM Exception 18 + browser.setUrl(server.getEchoUrl("test_evalute_Cookies")); + shell.open(); + waitForPassCondition(loaded::get); - // Set the cookies - // document.cookie behaves different from other global vars - browser.evaluate("document.cookie = \"cookie1=value1\";"); - browser.evaluate("document.cookie = \"cookie2=value2\";"); + // Set the cookies + // document.cookie behaves different from other global vars + browser.evaluate("document.cookie = \"cookie1=value1\";"); + browser.evaluate("document.cookie = \"cookie2=value2\";"); - // Retrieve entire cookie store - String res = (String) browser.evaluate("return document.cookie;"); + // Retrieve entire cookie store + String res = (String) browser.evaluate("return document.cookie;"); - assertFalse(res.isEmpty()); + assertFalse(res.isEmpty()); + } } @Tag("gtk4-todo") @Test -public void test_ClearAllSessionCookies () { - final AtomicBoolean loaded = new AtomicBoolean(false); - browser.addProgressListener(ProgressListener.completedAdapter(event -> loaded.set(true))); +public void test_ClearAllSessionCookies () throws IOException { + try (var server = new EchoHttpServer()) { + final AtomicBoolean loaded = new AtomicBoolean(false); + browser.addProgressListener(ProgressListener.completedAdapter(event -> loaded.set(true))); - // Using JavaScript Cookie API on local (file) URL gives DOM Exception 18 - browser.setUrl("https://www.eclipse.org/swt"); - shell.open(); - waitForPassCondition(loaded::get); + // Using JavaScript Cookie API on local (file) URL gives DOM Exception 18 + String url = server.getEchoUrl("test_ClearAllSessionCookies"); + browser.setUrl(url); + shell.open(); + waitForPassCondition(loaded::get); - // Set the cookies - Browser.setCookie("cookie1=value1", "https://www.eclipse.org/swt"); - Browser.setCookie("cookie2=value2", "https://www.eclipse.org/swt"); + // Set the cookies + Browser.setCookie("cookie1=value1", url); + Browser.setCookie("cookie2=value2", url); - // Get the cookies - String v1 = Browser.getCookie("cookie1", "https://www.eclipse.org/swt"); - String v2 = Browser.getCookie("cookie2", "https://www.eclipse.org/swt"); - assertEquals("value1", v1); - assertEquals("value2", v2); + // Get the cookies + String v1 = Browser.getCookie("cookie1", url); + String v2 = Browser.getCookie("cookie2", url); + assertEquals("value1", v1); + assertEquals("value2", v2); - Browser.clearSessions(); + Browser.clearSessions(); - // Should be empty - String e1 = Browser.getCookie("cookie1", "https://www.eclipse.org/swt"); - String e2 = Browser.getCookie("cookie2", "https://www.eclipse.org/swt"); - assertTrue(e1 == null || e1.isEmpty()); - assertTrue(e2 == null || e2.isEmpty()); + // Should be empty + String e1 = Browser.getCookie("cookie1", url); + String e2 = Browser.getCookie("cookie2", url); + assertTrue(e1 == null || e1.isEmpty()); + assertTrue(e2 == null || e2.isEmpty()); + } } @Tag("gtk4-todo") @Test -public void test_get_set_Cookies() { - final AtomicBoolean loaded = new AtomicBoolean(false); - browser.addProgressListener(ProgressListener.completedAdapter(event -> loaded.set(true))); +public void test_get_set_Cookies() throws IOException { + try (var server = new EchoHttpServer()) { + final AtomicBoolean loaded = new AtomicBoolean(false); + browser.addProgressListener(ProgressListener.completedAdapter(event -> loaded.set(true))); - // Using JavaScript Cookie API on local (file) URL gives DOM Exception 18 - browser.setUrl("https://www.eclipse.org/swt"); - shell.open(); - waitForPassCondition(loaded::get); + // Using JavaScript Cookie API on local (file) URL gives DOM Exception 18 + String url = server.getEchoUrl("test_ClearAllSessionCookies"); + browser.setUrl(url); + shell.open(); + waitForPassCondition(loaded::get); - // Set the cookies - Browser.setCookie("cookie1=value1", "https://www.eclipse.org/swt"); - Browser.setCookie("cookie2=value2", "https://www.eclipse.org/swt"); + // Set the cookies + Browser.setCookie("cookie1=value1", url); + Browser.setCookie("cookie2=value2", url); - // Get the cookies - String v1 = Browser.getCookie("cookie1", "https://www.eclipse.org/swt"); - assertEquals("value1", v1); - String v2 = Browser.getCookie("cookie2", "https://www.eclipse.org/swt"); - assertEquals("value2", v2); + // Get the cookies + String v1 = Browser.getCookie("cookie1", url); + assertEquals("value1", v1); + String v2 = Browser.getCookie("cookie2", url); + assertEquals("value2", v2); + } } @Override @@ -1182,63 +1191,51 @@ public void test_setUrl_local() { validateTitleChanged(expectedTitle, browserSetFunc); } -/** This test requires working Internet connection */ @Test -public void test_setUrl_remote() { +public void test_setUrl_remote() throws IOException { assumeFalse(SwtTestUtil.isCocoa, "Test fails on Mac, see https://github.com/eclipse-platform/eclipse.platform.swt/issues/722"); - // This test sometimes times out if build server has a bad connection. Thus for this test we have a longer timeout. - secondsToWaitTillFail = 35; + try (var server = new EchoHttpServer()) { - String url = "https://example.com"; // example.com loads very quickly and conveniently has a consistent title + String url = server.getEchoUrl("test_setUrl_remote"); - // Skip this test if we don't have a working Internet connection. - assumeTrue(checkInternet(url), "Skipping test due to bad internet connection"); - testLog.append("checkInternet() passed"); - - String expectedTitle = "Example Domain"; - Runnable browserSetFunc = () -> { - testLog.append("Setting Browser url to:" + url); - boolean opSuccess = browser.setUrl(url); - assertTrue(opSuccess); - }; - validateTitleChanged(expectedTitle, browserSetFunc); + String expectedTitle = "test_setUrl_remote"; + Runnable browserSetFunc = () -> { + testLog.append("Setting Browser url to:" + url); + boolean opSuccess = browser.setUrl(url); + assertTrue(opSuccess); + }; + validateTitleChanged(expectedTitle, browserSetFunc); + } } -/** This test requires working Internet connection */ @Test -public void test_setUrl_remote_with_post() { - // This test sometimes times out if build server has a bad connection. Thus for this test we have a longer timeout. - secondsToWaitTillFail = 35; - - String url = "https://bugs.eclipse.org/bugs/buglist.cgi"; - - // Skip this test if we don't have a working Internet connection. - assumeTrue(checkInternet(url), "Skipping test due to bad internet connection"); - testLog.append("checkInternet() passed"); +public void test_setUrl_remote_with_post() throws IOException { + try (var server = new EchoHttpServer()) { + String url = server.postEchoUrl(); + String postData = "test_setUrl_remote_with_post"; - Runnable browserSetFunc = () -> { - testLog.append("Setting Browser url to:" + url); - boolean opSuccess = browser.setUrl( - url, "bug_severity=enhancement&bug_status=NEW&email1=rgrunber&emailassigned_to1=1&emailtype1=substring", - null); - assertTrue(opSuccess); - }; + Runnable browserSetFunc = () -> { + testLog.append("Setting Browser url to:" + url); + boolean opSuccess = browser.setUrl(url, postData, null); + assertTrue(opSuccess); + }; - final AtomicReference completed = new AtomicReference<>(false); - browser.addProgressListener(completedAdapter(event -> { - testLog.append("ProgressListener fired"); - completed.set(true); - })); - browserSetFunc.run(); - shell.open(); + final AtomicReference completed = new AtomicReference<>(false); + browser.addProgressListener(completedAdapter(event -> { + testLog.append("ProgressListener fired"); + completed.set(true); + })); + browserSetFunc.run(); + shell.open(); - boolean hasFinished = waitForPassCondition(() -> completed.get().booleanValue()); - assertTrue(hasFinished); + boolean hasFinished = waitForPassCondition(() -> completed.get().booleanValue()); + assertTrue(hasFinished); - // Even a successful empty query returns about 10000 chars of HTML - int numChars = browser.getText().length(); - assertTrue(numChars > 10000); + String lowerCase = browser.getText().toLowerCase(); + assertTrue(lowerCase.contains("test_setUrl_remote_with_post".toLowerCase()), "Browser getText was: " + browser.getText()); + assertTrue(lowerCase.contains(""), "Browser getText was: " + browser.getText()); + } } private void validateTitleChanged(String expectedTitle, Runnable browserSetFunc) { @@ -1818,11 +1815,46 @@ private String normalizeHtmlString(String htmlString) { * Test that a page load an be stopped (stop()) without throwing an exception. */ @Test -public void test_stop() { - /* THIS TEST REQUIRES WEB ACCESS! How else can we really test the http:// part of a browser widget? */ - browser.setUrl("https://www.eclipse.org/swt"); - waitForMilliseconds(1000); - browser.stop(); +public void test_stop() throws IOException { + CountDownLatch latch = new CountDownLatch(1); + try (var server = new EchoHttpServer() { + @Override + protected void handleGetEcho(HttpExchange exchange) throws IOException { + try { + // Simulates a slow http server, the latch.countdown allows + // this to complete + // the timeout here is so that this doesn't get stuck + latch.await(5, TimeUnit.SECONDS); + } catch (InterruptedException e) { + throw new IOException(e); + } + super.handleGetEcho(exchange); + } + }) { + shell.open(); + + final AtomicBoolean completed = new AtomicBoolean(false); + browser.addProgressListener(ProgressListener.completedAdapter(event -> completed.set(true))); + browser.setUrl(server.getEchoUrl("test_stop")); + waitForMilliseconds(1000); + assertFalse(completed.get()); + browser.stop(); + // allow the GET to complete, and ensure we complete, and since + // we control the server, we know that the document should still + // be blank, so test for that + latch.countDown(); + waitForPassCondition(completed::get); + assertFalse(browser.getText().toLowerCase().contains("test_stop"), "Browser getText was: " + browser.getText()); + + // Make sure that after stop we can issue a fresh call + final AtomicBoolean loaded = new AtomicBoolean(false); + browser.addProgressListener(ProgressListener.completedAdapter(event -> loaded.set(true))); + browser.setUrl(server.getEchoUrl("test_stop - after the stop")); + waitForPassCondition(loaded::get); + String lowerCase = browser.getText().toLowerCase(); + assertTrue(lowerCase.contains("test_stop - after the stop"), "Browser getText was: " + browser.getText()); + assertTrue(lowerCase.contains(""), "Browser getText was: " + browser.getText()); + } } @Test @@ -2177,23 +2209,26 @@ public void test_evaluate_array_mixedTypes () { */ @Test public void test_evaluate_OpeningNewWindow() throws Exception { - AtomicBoolean initialLoad = new AtomicBoolean(); - AtomicBoolean openWindowListenerCalled = new AtomicBoolean(); - browser.addProgressListener(ProgressListener.completedAdapter(e -> initialLoad.set(true))); - browser.addOpenWindowListener(event -> { - event.required = true; // block default - openWindowListenerCalled.set(true); - }); - browser.setText(""" - - """); - waitForPassCondition(initialLoad::get); + try (var server = new EchoHttpServer()) { + AtomicBoolean initialLoad = new AtomicBoolean(); + AtomicBoolean openWindowListenerCalled = new AtomicBoolean(); + browser.addProgressListener(ProgressListener.completedAdapter(e -> initialLoad.set(true))); + browser.addOpenWindowListener(event -> { + event.required = true; // block default + openWindowListenerCalled.set(true); + }); + var html = String.format(""" + + """, server.getEchoUrl("test_evaluate_OpeningNewWindow")); + browser.setText(html); + waitForPassCondition(initialLoad::get); - browser.evaluate(""" - document.getElementById("button").click(); - """); + browser.evaluate(""" + document.getElementById("button").click(); + """); - waitForPassCondition(openWindowListenerCalled::get); + waitForPassCondition(openWindowListenerCalled::get); + } } ProgressListener callCustomFunctionUponLoad = completedAdapter(event -> browser.execute("callCustomFunction()")); @@ -2809,37 +2844,6 @@ void waitForMilliseconds(final int milliseconds) { } -/** - * Check if Internet connection to a http url works. - * - * @param url a full url like http://www.example.com - * @return true if server responded with correct code (200), false otherwise. - */ -private static Boolean checkInternet(String url) { - if (url!=null && url.toLowerCase().startsWith("http://")) { - throw new IllegalArgumentException("please use https instead, http do not work on mac out of the box and your test will hang there!"); - } - HttpURLConnection connection = null; - try { - connection = (HttpURLConnection) new URL(url).openConnection(); - connection.setRequestMethod("HEAD"); - int code = connection.getResponseCode(); // 200 is success. See https://tools.ietf.org/html/rfc7231#section-6.3.1. - if (code == 200) - return true; - } catch (MalformedURLException e) { - System.err.println("Given url is malformed: " + url + "Try a fully formed url like: https://www.example.com"); - e.printStackTrace(); - } catch (IOException e) { - // No connection was made. - } finally { - if (connection != null) { - connection.disconnect(); - } - } - return false; -} - - private static void printMemoryUse() { System.gc(); System.runFinalization(); diff --git a/tests/org.eclipse.swt.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.swt.tests/META-INF/MANIFEST.MF index 9f1d3b11082..58f21a17e4a 100644 --- a/tests/org.eclipse.swt.tests/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.swt.tests/META-INF/MANIFEST.MF @@ -17,6 +17,6 @@ Require-Bundle: junit-jupiter-engine;bundle-version="[5.12.0,6.0.0)", org.eclipse.test;bundle-version="3.6.200", org.eclipse.test.performance;bundle-version="3.13.0" Eclipse-BundleShape: dir -Bundle-RequiredExecutionEnvironment: JavaSE-17 +Bundle-RequiredExecutionEnvironment: JavaSE-21 Automatic-Module-Name: org.eclipse.swt.tests Require-Capability: eclipse.swt;filter:="(image.format=svg)"