diff --git a/NiL.JS/BaseLibrary/Promise.cs b/NiL.JS/BaseLibrary/Promise.cs index 5a3393669..610a22c14 100644 --- a/NiL.JS/BaseLibrary/Promise.cs +++ b/NiL.JS/BaseLibrary/Promise.cs @@ -188,7 +188,7 @@ private void callbackInvoke() public static Promise resolve(JSValue data) { - return data.As() ?? new Promise(fromResult(data)); + return data.Value as Promise ?? new Promise(fromResult(data)); } public static Promise reject(JSValue data) diff --git a/Tests/Fuzz/Bug_299.cs b/Tests/Fuzz/Bug_299.cs new file mode 100644 index 000000000..8ded51c3c --- /dev/null +++ b/Tests/Fuzz/Bug_299.cs @@ -0,0 +1,44 @@ +using System; +using System.Threading.Tasks; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using NiL.JS; +using NiL.JS.BaseLibrary; +using NiL.JS.Core; +using NiL.JS.Extensions; + +namespace Tests.Fuzz +{ + [TestClass] + public sealed class Bug_299 + { + [TestMethod] + public async Task Promise_299() + { + var script = Script.Parse( + @" +export default class Test { + async run(params) { + return params; + } +} +" + ); + var context = new GlobalContext(); + var module = new Module($"main.js", script, context); + module.Run(); + + var ctor = module.Exports.Default.As(); + var instance = ctor.Construct(new Arguments()); + var run = instance.GetProperty("run").As(); + + var param = JSON.parse("{}"); + var result = run.MakeDelegate>()(param); + if (result.Value is Promise promise) + { + result = await promise.Task; + } + + Assert.AreEqual(param, result); + } + } +}