diff --git a/eng/testing/WasmRunnerTemplate.cmd b/eng/testing/WasmRunnerTemplate.cmd
index a668ce2c6a464c..2ebcbcf8e93a97 100644
--- a/eng/testing/WasmRunnerTemplate.cmd
+++ b/eng/testing/WasmRunnerTemplate.cmd
@@ -54,7 +54,7 @@ if /I [%XHARNESS_COMMAND%] == [test] (
)
if [%XHARNESS_ARGS%] == [] (
- set "XHARNESS_ARGS=%JS_ENGINE% %JS_ENGINE_ARGS% %BROWSER_PATH% %MAIN_JS%"
+ set "XHARNESS_ARGS=%JS_ENGINE% %JS_ENGINE_ARGS% %BROWSER_PATH% %MAIN_JS% %WASM_XHARNESS_MONO_ARGS%"
)
echo EXECUTION_DIR=%EXECUTION_DIR%
diff --git a/eng/testing/WasmRunnerTemplate.sh b/eng/testing/WasmRunnerTemplate.sh
index ae78d5304e8aed..d4e352976e8075 100644
--- a/eng/testing/WasmRunnerTemplate.sh
+++ b/eng/testing/WasmRunnerTemplate.sh
@@ -50,7 +50,7 @@ if [[ "$XHARNESS_COMMAND" == "test" ]]; then
fi
if [[ -z "$XHARNESS_ARGS" ]]; then
- XHARNESS_ARGS="$JS_ENGINE $JS_ENGINE_ARGS $MAIN_JS"
+ XHARNESS_ARGS="$JS_ENGINE $JS_ENGINE_ARGS $MAIN_JS $WASM_XHARNESS_MONO_ARGS"
fi
echo EXECUTION_DIR=$EXECUTION_DIR
diff --git a/eng/testing/tests.wasm.targets b/eng/testing/tests.wasm.targets
index 191d2c2295690f..bed571a3064021 100644
--- a/eng/testing/tests.wasm.targets
+++ b/eng/testing/tests.wasm.targets
@@ -29,13 +29,13 @@
See also eng\testing\WasmRunnerTemplate.sh
-->
-
+
-
+
diff --git a/src/libraries/Common/tests/System/Net/Prerequisites/LocalEchoServer.props b/src/libraries/Common/tests/System/Net/Prerequisites/LocalEchoServer.props
index f70812e39b6855..3df500bdb8e3ea 100644
--- a/src/libraries/Common/tests/System/Net/Prerequisites/LocalEchoServer.props
+++ b/src/libraries/Common/tests/System/Net/Prerequisites/LocalEchoServer.props
@@ -1,9 +1,5 @@
- WasmTestOnBrowser
- $(TestArchiveRoot)browseronly/
- $(TestArchiveTestsRoot)$(OSPlatformConfig)/
-
<_TestEchoMiddleware Condition="'$(ContinuousIntegrationBuild)' == 'true' and '$(OS)' == 'Windows_NT'">%HELIX_CORRELATION_PAYLOAD%/xharness/TestEchoMiddleware
<_TestEchoMiddleware Condition="'$(ContinuousIntegrationBuild)' == 'true' and '$(OS)' != 'Windows_NT'">$HELIX_CORRELATION_PAYLOAD/xharness/TestEchoMiddleware
diff --git a/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.cs b/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.cs
index bdab9c979cc499..e1d416765a9d49 100644
--- a/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.cs
+++ b/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.cs
@@ -69,9 +69,10 @@ public static partial class PlatformDetection
public static bool IsSpeedOptimized => !IsSizeOptimized;
public static bool IsSizeOptimized => IsBrowser || IsAndroid || IsAppleMobile;
- public static bool IsBrowserDomSupported => GetIsBrowserDomSupported();
- public static bool IsBrowserDomSupportedOrNotBrowser => IsNotBrowser || GetIsBrowserDomSupported();
+ public static bool IsBrowserDomSupported => IsEnvironmentVariableTrue("IsBrowserDomSupported");
+ public static bool IsBrowserDomSupportedOrNotBrowser => IsNotBrowser || IsBrowserDomSupported;
public static bool IsNotBrowserDomSupported => !IsBrowserDomSupported;
+ public static bool IsWebSocketSupported => IsEnvironmentVariableTrue("IsWebSocketSupported");
public static bool LocalEchoServerIsNotAvailable => !LocalEchoServerIsAvailable;
public static bool LocalEchoServerIsAvailable => IsBrowser;
@@ -494,12 +495,12 @@ private static bool GetIsRunningOnMonoInterpreter()
#endif
}
- private static bool GetIsBrowserDomSupported()
+ private static bool IsEnvironmentVariableTrue(string variableName)
{
if (!IsBrowser)
return false;
- var val = Environment.GetEnvironmentVariable("IsBrowserDomSupported");
+ var val = Environment.GetEnvironmentVariable(variableName);
return (val != null && val == "true");
}
}
diff --git a/src/libraries/System.Net.WebSockets.Client/tests/AbortTest.cs b/src/libraries/System.Net.WebSockets.Client/tests/AbortTest.cs
index 209a6f10ff23b4..a5d97a9a421885 100644
--- a/src/libraries/System.Net.WebSockets.Client/tests/AbortTest.cs
+++ b/src/libraries/System.Net.WebSockets.Client/tests/AbortTest.cs
@@ -17,6 +17,7 @@ public AbortTest(ITestOutputHelper output) : base(output) { }
[OuterLoop("Uses external servers", typeof(PlatformDetection), nameof(PlatformDetection.LocalEchoServerIsNotAvailable))]
[ConditionalTheory(nameof(WebSocketsSupported)), MemberData(nameof(EchoServers))]
+ [ActiveIssue("https://github.com/dotnet/runtime/issues/63673", TestPlatforms.Browser)]
public async Task Abort_ConnectAndAbort_ThrowsWebSocketExceptionWithmessage(Uri server)
{
using (var cws = new ClientWebSocket())
diff --git a/src/libraries/System.Net.WebSockets.Client/tests/ConnectTest.cs b/src/libraries/System.Net.WebSockets.Client/tests/ConnectTest.cs
index 31c375a9cd499a..75b378f5056362 100644
--- a/src/libraries/System.Net.WebSockets.Client/tests/ConnectTest.cs
+++ b/src/libraries/System.Net.WebSockets.Client/tests/ConnectTest.cs
@@ -170,6 +170,7 @@ public async Task ConnectAsync_CookieHeaders_Success(Uri server)
[OuterLoop("Uses external servers", typeof(PlatformDetection), nameof(PlatformDetection.LocalEchoServerIsNotAvailable))]
[ConditionalTheory(nameof(WebSocketsSupported)), MemberData(nameof(EchoServers))]
+ [ActiveIssue("https://github.com/dotnet/runtime/issues/63681", TestPlatforms.Browser)]
public async Task ConnectAsync_PassNoSubProtocol_ServerRequires_ThrowsWebSocketException(Uri server)
{
const string AcceptedProtocol = "CustomProtocol";
@@ -256,6 +257,7 @@ public async Task ConnectAndCloseAsync_UseProxyServer_ExpectedClosedState(Uri se
}
[ConditionalFact(nameof(WebSocketsSupported))]
+ [ActiveIssue("https://github.com/dotnet/runtime/issues/63672", TestPlatforms.Browser)]
public async Task ConnectAsync_CancellationRequestedBeforeConnect_ThrowsOperationCanceledException()
{
using (var clientSocket = new ClientWebSocket())
@@ -268,6 +270,7 @@ public async Task ConnectAsync_CancellationRequestedBeforeConnect_ThrowsOperatio
}
[ConditionalFact(nameof(WebSocketsSupported))]
+ [ActiveIssue("https://github.com/dotnet/runtime/issues/63672", TestPlatforms.Browser)]
public async Task ConnectAsync_CancellationRequestedInflightConnect_ThrowsOperationCanceledException()
{
using (var clientSocket = new ClientWebSocket())
@@ -281,6 +284,7 @@ public async Task ConnectAsync_CancellationRequestedInflightConnect_ThrowsOperat
[ConditionalFact(nameof(WebSocketsSupported))]
[ActiveIssue("https://github.com/dotnet/runtime/issues/34690", TestPlatforms.Windows, TargetFrameworkMonikers.Netcoreapp, TestRuntimes.Mono)]
+ [ActiveIssue("https://github.com/dotnet/runtime/issues/63671", TestPlatforms.Browser)]
public async Task ConnectAsync_CancellationRequestedAfterConnect_ThrowsOperationCanceledException()
{
var releaseServer = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);
diff --git a/src/libraries/System.Net.WebSockets.Client/tests/System.Net.WebSockets.Client.Tests.csproj b/src/libraries/System.Net.WebSockets.Client/tests/System.Net.WebSockets.Client.Tests.csproj
index 956ee4d4146122..c553a385144b32 100644
--- a/src/libraries/System.Net.WebSockets.Client/tests/System.Net.WebSockets.Client.Tests.csproj
+++ b/src/libraries/System.Net.WebSockets.Client/tests/System.Net.WebSockets.Client.Tests.csproj
@@ -6,14 +6,35 @@
+
WasmTestOnBrowser
- $(TestArchiveRoot)browseronly/
+ $(TestArchiveRoot)browserornodejs/
$(TestArchiveTestsRoot)$(OSPlatformConfig)/
$(DefineConstants);TARGET_BROWSER
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/libraries/System.Net.WebSockets.Client/tests/WebSocketHelper.cs b/src/libraries/System.Net.WebSockets.Client/tests/WebSocketHelper.cs
index 1f0ccd55913214..0782f9d5232e42 100644
--- a/src/libraries/System.Net.WebSockets.Client/tests/WebSocketHelper.cs
+++ b/src/libraries/System.Net.WebSockets.Client/tests/WebSocketHelper.cs
@@ -125,7 +125,7 @@ public static async Task Retry(ITestOutputHelper output, Func> fun
private static bool InitWebSocketSupported()
{
ClientWebSocket cws = null;
- if (PlatformDetection.IsBrowser && !PlatformDetection.IsBrowserDomSupported)
+ if (PlatformDetection.IsBrowser && !PlatformDetection.IsWebSocketSupported)
{
return false;
}
diff --git a/src/libraries/System.Net.WebSockets.Client/tests/package-lock.json b/src/libraries/System.Net.WebSockets.Client/tests/package-lock.json
new file mode 100644
index 00000000000000..55a66ba4d40f97
--- /dev/null
+++ b/src/libraries/System.Net.WebSockets.Client/tests/package-lock.json
@@ -0,0 +1,44 @@
+{
+ "name": "system.net.websockets.client.tests",
+ "version": "1.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "system.net.websockets.client.tests",
+ "version": "1.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "ws": "^8.4.0"
+ }
+ },
+ "node_modules/ws": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.0.tgz",
+ "integrity": "sha512-IHVsKe2pjajSUIl4KYMQOdlyliovpEPquKkqbwswulszzI7r0SfQrxnXdWAEqOlDCLrVSJzo+O1hAwdog2sKSQ==",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ }
+ },
+ "dependencies": {
+ "ws": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.0.tgz",
+ "integrity": "sha512-IHVsKe2pjajSUIl4KYMQOdlyliovpEPquKkqbwswulszzI7r0SfQrxnXdWAEqOlDCLrVSJzo+O1hAwdog2sKSQ==",
+ "requires": {}
+ }
+ }
+}
diff --git a/src/libraries/System.Net.WebSockets.Client/tests/package.json b/src/libraries/System.Net.WebSockets.Client/tests/package.json
new file mode 100644
index 00000000000000..cb5a738db17e5a
--- /dev/null
+++ b/src/libraries/System.Net.WebSockets.Client/tests/package.json
@@ -0,0 +1,7 @@
+{
+ "name": "system.net.websockets.client.tests",
+ "private": true,
+ "dependencies": {
+ "ws": "8.4.0"
+ }
+}
diff --git a/src/mono/wasm/test-main.js b/src/mono/wasm/test-main.js
index 4348444be62995..9de96a2749fcc2 100644
--- a/src/mono/wasm/test-main.js
+++ b/src/mono/wasm/test-main.js
@@ -354,6 +354,27 @@ try {
console.error(e);
}
+if (is_node) {
+ const modulesToLoad = processedArguments.setenv["NPM_MODULES"];
+ if (modulesToLoad) {
+ modulesToLoad.split(',').forEach(module => {
+ const parts = module.split(':');
+
+ let message = `Loading npm '${parts[0]}'`;
+ const moduleExport = require(parts[0]);
+ if (parts.length == 2) {
+ message += ` and attaching to global as '${parts[1]}'.`;
+ globalThis[parts[1]] = moduleExport;
+ }
+
+ console.log(message);
+ });
+ }
+}
+
+// Must be after loading npm modules.
+processedArguments.setenv["IsWebSocketSupported"] = ("WebSocket" in globalThis).toString().toLowerCase();
+
async function loadDotnet(file) {
let loadScript = undefined;
if (typeof WScript !== "undefined") { // Chakra
diff --git a/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/WebAssembly.Browser.HotReload.Test.csproj b/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/WebAssembly.Browser.HotReload.Test.csproj
index f3ca0161fc5fe6..7e2602501266f1 100644
--- a/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/WebAssembly.Browser.HotReload.Test.csproj
+++ b/src/tests/FunctionalTests/WebAssembly/Browser/HotReload/WebAssembly.Browser.HotReload.Test.csproj
@@ -5,6 +5,9 @@
false
true
WasmTestOnBrowser
+ $(TestArchiveRoot)browseronly/
+ $(TestArchiveTestsRoot)$(OSPlatformConfig)/
+ $(DefineConstants);TARGET_BROWSER
42
main.js
false
diff --git a/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/WebAssembly.Browser.RuntimeConfig.Test.csproj b/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/WebAssembly.Browser.RuntimeConfig.Test.csproj
index d9c7984051cd39..90d9fa155b9245 100644
--- a/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/WebAssembly.Browser.RuntimeConfig.Test.csproj
+++ b/src/tests/FunctionalTests/WebAssembly/Browser/RuntimeConfig/WebAssembly.Browser.RuntimeConfig.Test.csproj
@@ -2,6 +2,9 @@
true
WasmTestOnBrowser
+ $(TestArchiveRoot)browseronly/
+ $(TestArchiveTestsRoot)$(OSPlatformConfig)/
+ $(DefineConstants);TARGET_BROWSER
42
main.js