Skip to content

Commit

Permalink
Fix some remaining function parameter destructuring issues (#1349)
Browse files Browse the repository at this point in the history
  • Loading branch information
lahma committed Nov 7, 2022
1 parent 943ac85 commit c1ad0af
Show file tree
Hide file tree
Showing 6 changed files with 277 additions and 226 deletions.
2 changes: 0 additions & 2 deletions Jint.Tests.Test262/Test262Harness.settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -185,8 +185,6 @@

// failing tests in new test suite (due to updating to latest and using whole set)
"language/arguments-object/mapped/nonconfigurable-descriptors-define-failure.js",
"language/destructuring/binding/syntax/destructuring-array-parameters-function-arguments-length.js",
"language/destructuring/binding/syntax/destructuring-object-parameters-function-arguments-length.js",
"language/eval-code/direct/arrow-fn-a-following-parameter-is-named-arguments-arrow-func-declare-arguments-assign-incl-def-param-arrow-arguments.js",
"language/eval-code/direct/arrow-fn-a-following-parameter-is-named-arguments-arrow-func-declare-arguments-assign.js",
"language/eval-code/direct/arrow-fn-a-preceding-parameter-is-named-arguments-arrow-func-declare-arguments-assign-incl-def-param-arrow-arguments.js",
Expand Down
53 changes: 48 additions & 5 deletions Jint.Tests/Runtime/DestructuringTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,58 @@ namespace Jint.Tests.Runtime;

public class DestructuringTests
{
private readonly Engine _engine;

public DestructuringTests()
{
_engine = new Engine()
.SetValue("equal", new Action<object, object>(Assert.Equal));
}

[Fact]
public void WithStrings()
public void WithParameterStrings()
{
const string Script = @"
return function([a, b, c]) {
return a === ""a"" && b === ""b"" && c === void undefined;
}(""ab"");";
equal('a', a);
equal('b', b);
return c === void undefined;
}('ab');";

Assert.True(_engine.Evaluate(Script).AsBoolean());
}

[Fact]
public void WithParameterObjectPrimitives()
{
const string Script = @"
return function({toFixed}, {slice}) {
equal(Number.prototype.toFixed, toFixed);
equal(String.prototype.slice, slice);
return true;
}(2,'');";

var engine = new Engine();
Assert.True(engine.Evaluate(Script).AsBoolean());
Assert.True(_engine.Evaluate(Script).AsBoolean());
}

[Fact]
public void WithParameterComputedProperties()
{
const string Script = @"
var qux = 'corge';
return function({ [qux]: grault }) {
equal('garply', grault);
}({ corge: 'garply' });";

_engine.Execute(Script);
}

[Fact]
public void WithParameterFunctionLengthProperty()
{
_engine.Execute("equal(0, ((x = 42, y) => {}).length);");
_engine.Execute("equal(1, ((x, y = 42, z) => {}).length);");
_engine.Execute("equal(1, ((a, b = 39,) => {}).length);");
_engine.Execute("equal(2, function({a, b}, [c, d]){}.length);");
}
}

0 comments on commit c1ad0af

Please sign in to comment.