1
0
Fork 0
mirror of https://github.com/VSadov/Satori.git synced 2025-06-11 18:20:26 +09:00

[browser] Marshalling of resolved Tasks/promises is not resolved in JS/C# (#105464)

* fix void Task marshaling

* Make MT test more deterministic.

---------

Co-authored-by: pavelsavara <pavel.savara@gmail.com>
This commit is contained in:
Ilona Tomkowicz 2024-08-01 09:21:14 +02:00 committed by GitHub
parent e3684bce47
commit 0ac75cdf7d
Signed by: github
GPG key ID: B5690EEEBB952194
5 changed files with 40 additions and 1 deletions

View file

@ -275,7 +275,7 @@ namespace System.Runtime.InteropServices.JavaScript
}
else
{
slot.ElementType = slot.Type;
slot.ElementType = MarshalerType.Void;
slot.Type = MarshalerType.TaskResolved;
return;
}

View file

@ -436,5 +436,12 @@ namespace System.Runtime.InteropServices.JavaScript.Tests
{
Assert.Equal(JavaScriptLibrary.JavaScriptInterop.ValidationMethod(5, 6), await JavaScriptTestHelper.callJavaScriptLibrary(5, 6));
}
[Fact]
public async void JSExportCompletedTaskReturnsResolvedPromise()
{
string result = await JavaScriptTestHelper.InvokeReturnCompletedTask();
Assert.Equal("resolved", result);
}
}
}

View file

@ -1148,6 +1148,17 @@ namespace System.Runtime.InteropServices.JavaScript.Tests
await task;
}
[Fact]
public async Task JsImportResolvedPromiseReturnsCompletedTask()
{
var promise = JavaScriptTestHelper.ReturnResolvedPromise();
#if !FEATURE_WASM_MANAGED_THREADS
Assert.False(promise.IsCompleted);
#endif
await promise;
Assert.True(promise.IsCompleted);
}
#endregion
#region Action

View file

@ -441,6 +441,18 @@ namespace System.Runtime.InteropServices.JavaScript.Tests
[JSImport("invoke1", "JavaScriptTestHelper")]
[return: JSMarshalAs<JSType.Promise<JSType.Number>>]
internal static partial Task<int> invoke1_TaskOfInt([JSMarshalAs<JSType.Promise<JSType.Number>>] Task<int> value, [JSMarshalAs<JSType.String>] string name);
[JSImport("returnResolvedPromise", "JavaScriptTestHelper")]
internal static partial Task ReturnResolvedPromise();
[JSImport("invokeReturnCompletedTask", "JavaScriptTestHelper")]
internal static partial Task<string> InvokeReturnCompletedTask();
[JSExport]
internal static Task ReturnCompletedTask()
{
return Task.CompletedTask;
}
[JSExport]
[return: JSMarshalAs<JSType.Promise<JSType.Any>>]

View file

@ -246,6 +246,15 @@ export function invoke2(arg1, name) {
return res;
}
export function returnResolvedPromise() {
return Promise.resolve();
}
export async function invokeReturnCompletedTask() {
await dllExports.System.Runtime.InteropServices.JavaScript.Tests.JavaScriptTestHelper.ReturnCompletedTask();
return "resolved";
}
export function invokeStructClassRecords(arg1) {
return [
dllExports.JavaScriptTestHelperNamespace.JavaScriptTestHelper.EchoString(arg1),