Skip to content

Commit

Permalink
Class support (#816)
Browse files Browse the repository at this point in the history
* enable class tests
* remove ArrowFunctionInstance for now and always use ScriptFunctionInstance
* fix constructors to use OrdinaryCreateFromConstructor
* rely on MakeConstructor instead of always initializing function to have prototype
  • Loading branch information
lahma authored Jan 3, 2021
1 parent 431a012 commit 5f1892c
Show file tree
Hide file tree
Showing 64 changed files with 1,247 additions and 753 deletions.
15 changes: 15 additions & 0 deletions Jint.Tests.Test262/Language/Expressions/ClassTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using Xunit;

namespace Jint.Tests.Test262.Language.Expressions
{
public class ClassTests : Test262Test
{
[Theory(DisplayName = "language\\expressions\\class")]
[MemberData(nameof(SourceFiles), "language\\expressions\\class", false)]
[MemberData(nameof(SourceFiles), "language\\expressions\\class", true, Skip = "Skipped")]
protected void Class(SourceFile sourceFile)
{
RunTestInternal(sourceFile);
}
}
}
15 changes: 15 additions & 0 deletions Jint.Tests.Test262/Language/Statements/ClassTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using Xunit;

namespace Jint.Tests.Test262.Language.Statements
{
public class ClassTests : Test262Test
{
[Theory(DisplayName = "language\\statements\\class")]
[MemberData(nameof(SourceFiles), "language\\statements\\class", false)]
[MemberData(nameof(SourceFiles), "language\\statements\\class", true, Skip = "Skipped")]
protected void Class(SourceFile sourceFile)
{
RunTestInternal(sourceFile);
}
}
}
69 changes: 60 additions & 9 deletions Jint.Tests.Test262/Test262Test.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,8 @@ protected void RunTestCode(string code, bool strict)
.Strict(strict)
);

engine.Execute(Sources["sta.js"]);
engine.Execute(Sources["assert.js"]);
engine.Execute(Sources["sta.js"], CreateParserOptions("sta.js"));
engine.Execute(Sources["assert.js"], CreateParserOptions("assert.js"));
engine.SetValue("print", new ClrFunctionInstance(engine, "print", (thisObj, args) => TypeConverter.ToString(args.At(0))));

var o = engine.Object.Construct(Arguments.Empty);
Expand All @@ -112,13 +112,13 @@ protected void RunTestCode(string code, bool strict)
var files = includes.Groups[1].Captures[0].Value.Split(',');
foreach (var file in files)
{
engine.Execute(Sources[file.Trim()]);
engine.Execute(Sources[file.Trim()], CreateParserOptions(file.Trim()));
}
}

if (code.IndexOf("propertyHelper.js", StringComparison.OrdinalIgnoreCase) != -1)
{
engine.Execute(Sources["propertyHelper.js"]);
engine.Execute(Sources["propertyHelper.js"], CreateParserOptions("propertyHelper.js"));
}

string lastError = null;
Expand Down Expand Up @@ -210,10 +210,6 @@ public static IEnumerable<object[]> SourceFiles(string pathPrefix, bool skipped)
skip = true;
reason = "tail-calls not implemented";
break;
case "class":
skip = true;
reason = "class keyword not implemented";
break;
case "BigInt":
skip = true;
reason = "BigInt not implemented";
Expand All @@ -230,6 +226,11 @@ public static IEnumerable<object[]> SourceFiles(string pathPrefix, bool skipped)
skip = true;
reason = "async not implemented";
break;
case "class-fields-private":
case "class-fields-public":
skip = true;
reason = "private/public class fields not implemented in esprima";
break;
case "new.target":
skip = true;
reason = "MetaProperty not implemented";
Expand Down Expand Up @@ -290,6 +291,48 @@ public static IEnumerable<object[]> SourceFiles(string pathPrefix, bool skipped)
reason = "Unicode support and its special cases need more work";
}

if (name.StartsWith("language/statements/class/subclass/builtin-objects/Promise"))
{
skip = true;
reason = "Promise not implemented";
}

if (name.StartsWith("language/statements/class/subclass/builtin-objects/TypedArray"))
{
skip = true;
reason = "TypedArray not implemented";
}

if (name.StartsWith("language/statements/class/subclass/builtin-objects/WeakMap"))
{
skip = true;
reason = "WeakMap not implemented";
}

if (name.StartsWith("language/statements/class/subclass/builtin-objects/WeakSet"))
{
skip = true;
reason = "WeakSet not implemented";
}

if (name.StartsWith("language/statements/class/subclass/builtin-objects/ArrayBuffer/"))
{
skip = true;
reason = "ArrayBuffer not implemented";
}

if (name.StartsWith("language/statements/class/subclass/builtin-objects/DataView"))
{
skip = true;
reason = "DataView not implemented";
}

if (name.StartsWith("language/statements/class/subclass/builtins.js"))
{
skip = true;
reason = "Uint8Array not implemented";
}

if (name.StartsWith("built-ins/RegExp/CharacterClassEscapes/"))
{
skip = true;
Expand Down Expand Up @@ -322,8 +365,16 @@ public static IEnumerable<object[]> SourceFiles(string pathPrefix, bool skipped)

return results;
}

private static ParserOptions CreateParserOptions(string fileName) =>
new ParserOptions(fileName)
{
AdaptRegexp = true,
Tolerant = true,
Loc = true
};
}

public class SourceFile : IXunitSerializable
{
public SourceFile()
Expand Down
Loading

0 comments on commit 5f1892c

Please sign in to comment.