12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- using Jint.Runtime;
- namespace Jint.Tests.Runtime;
- public class ClassTests
- {
- [Fact]
- public void IsBlockScoped()
- {
- const string Script = @"
- class C {}
- var c1 = C;
- {
- class C {}
- var c2 = C;
- }
- return C === c1;";
- var engine = new Engine();
- Assert.True(engine.Evaluate(Script).AsBoolean());
- }
- [Fact]
- public void CanDestructureNestedMembers()
- {
- const string Script = @"
- class Board {
- constructor () {
- this.grid = {width: 10, height: 10}
- }
- get width () {
- const {grid} = this
- return grid.width
- }
- get doubleWidth () {
- const {width} = this
- return width * 2
- }
- }";
- var engine = new Engine();
- engine.Execute(Script);
- engine.Evaluate("var board = new Board()");
- Assert.Equal(10, engine.Evaluate("board.width"));
- Assert.Equal(20, engine.Evaluate("board.doubleWidth "));
- }
- [Fact]
- public void PrivateMemberAccessOutsideOfClass()
- {
- var ex = Assert.Throws<JavaScriptException>(() => new Engine().Evaluate
- (
- """
- class A { }
- new A().#nonexistent = 1;
- """
- ));
- Assert.Equal("Unexpected identifier '#nonexistent'", ex.Message);
- }
- [Fact]
- public void PrivateMemberAccessAgainstUnknownMemberInConstructor()
- {
- var ex = Assert.Throws<JavaScriptException>(() => new Engine().Evaluate
- (
- """
- class A { constructor() { #nonexistent = 2; } }
- new A();
- """
- ));
- Assert.Equal("Unexpected identifier '#nonexistent'", ex.Message);
- }
- }
|