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:
parent
e3684bce47
commit
0ac75cdf7d
5 changed files with 40 additions and 1 deletions
|
@ -275,7 +275,7 @@ namespace System.Runtime.InteropServices.JavaScript
|
|||
}
|
||||
else
|
||||
{
|
||||
slot.ElementType = slot.Type;
|
||||
slot.ElementType = MarshalerType.Void;
|
||||
slot.Type = MarshalerType.TaskResolved;
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>>]
|
||||
|
|
|
@ -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),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue