File tree Expand file tree Collapse file tree
tests/Asynkron.JsEngine.Tests Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -3146,6 +3146,51 @@ class Derived extends Base {
31463146 }
31473147 }
31483148
3149+ [ Fact ]
3150+ public async Task AssertNoAstEvaluation_Enabled_AllowsEvalProducedInstanceFieldArrowWithSuperExecution ( )
3151+ {
3152+ var originalValue = EvaluationContext . AssertNoAstEvaluation ;
3153+
3154+ try
3155+ {
3156+ EvaluationContext . AssertNoAstEvaluation = true ;
3157+
3158+ var program = _engine . ParseProgram ( """
3159+ var executed = false;
3160+
3161+ class Base {
3162+ constructor() {
3163+ this.value = 7;
3164+ }
3165+
3166+ get read() {
3167+ return this.value;
3168+ }
3169+ }
3170+
3171+ class Derived extends Base {
3172+ field = eval('executed = true; () => super.read;');
3173+
3174+ constructor() {
3175+ super();
3176+ }
3177+ }
3178+
3179+ const instance = new Derived();
3180+ const arrow = instance.field;
3181+ `${executed}:${arrow.call({ value: 99 })}`;
3182+ """ ) ;
3183+
3184+ var result = await _engine . Evaluate ( program ) ;
3185+
3186+ Assert . Equal ( "true:7" , result ) ;
3187+ }
3188+ finally
3189+ {
3190+ EvaluationContext . AssertNoAstEvaluation = originalValue ;
3191+ }
3192+ }
3193+
31493194 [ Fact ]
31503195 public async Task AssertNoAstEvaluation_Enabled_AllowsClassFieldInitializerCallLikeSurfaceExecution ( )
31513196 {
Original file line number Diff line number Diff line change @@ -87,25 +87,32 @@ class Derived extends Base {
8787 }
8888
8989 [ Fact ( Timeout = 2000 ) ]
90- public async Task EvalProducedArrowFunctionCanUseSuper ( )
90+ public async Task EvalProducedArrowFunctionRetainsFieldInitializerSuperBinding ( )
9191 {
9292 await using var engine = CreateEngine ( ) ;
9393 var result = await engine . Evaluate ( """
9494
9595 var executed = false;
9696 class Base {
97- method() {
98- return 7;
97+ constructor() {
98+ this.value = 7;
99+ }
100+
101+ get read() {
102+ return this.value;
99103 }
100104 }
101105
102106 class Derived extends Base {
103- field = eval('executed = true; () => super.method();');
107+ field = eval('executed = true; () => super.read;');
108+ constructor() {
109+ super();
110+ }
104111 }
105112
106113 var instance = new Derived();
107114 var arrow = instance.field;
108- executed && arrow( ) === 7;
115+ executed && arrow.call({ value: 99 } ) === 7;
109116
110117 """ ) ;
111118
Original file line number Diff line number Diff line change @@ -331,35 +331,6 @@ public async Task IndexedMethodInvocationBindsThis()
331331 Assert . Equal ( 10d , result ) ;
332332 }
333333
334- [ Fact ( Skip = "Bug #363: Class field initializers with eval and super need special handling" ) ]
335- public async Task ClassFieldInitializerCanAccessSuper ( )
336- {
337- await using var engine = CreateEngine ( ) ;
338- var source = """
339- var executed = false;
340- class Base {
341- constructor() { this.value = 1; }
342- get read() { return this.value; }
343- }
344- class Derived extends Base {
345- field = eval('executed = true; () => super.read;');
346- constructor() {
347- super();
348- }
349- }
350- var instance = new Derived();
351- var getter = instance.field;
352- var result = getter.call(instance);
353- ({ executed, result });
354- """ ;
355-
356- var outcome = Assert . IsType < JsObject > ( await engine . Evaluate ( source ) ) ;
357- Assert . True ( outcome . TryGetProperty ( "executed" , out var executedValue ) ) ;
358- Assert . True ( JsOps . ToBoolean ( executedValue ) ) ;
359- Assert . True ( outcome . TryGetProperty ( "result" , out var resultValue ) ) ;
360- Assert . Equal ( 1d , JsOps . ToNumber ( resultValue ) ) ;
361- }
362-
363334 [ Fact ( Timeout = 2000 ) ]
364335 public async Task HostFunctionReceivesThisBinding ( )
365336 {
You can’t perform that action at this time.
0 commit comments