| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
- export class A1 {
- attemptBindingChange() { A1 = 1; }
- bindingUnmodified() { return A1 !== 1; }
- }
- var A1Inst = new A1();
- assert.throws(function () { A1Inst.attemptBindingChange(); }, TypeError, 'Exported class name captured inside class is const', "Assignment to const");
- assert.doesNotThrow(function () { A1 = 1; }, 'Exported class name decl binding is mutable outside class');
- assert.throws(function () { A1Inst.attemptBindingChange(); }, TypeError, 'Mutation of class decl did not change constness', "Assignment to const");
- assert.areEqual(true, A1Inst.bindingUnmodified(), 'Captured class name does not observe mutation');
- assert.throws(function () { A1Inst.attemptBindingChange(); }, TypeError, 'Exported class name captured inside class is still const', "Assignment to const");
- class A2 {
- attemptBindingChange() { A2 = 1; }
- bindingUnmodified() { return A2 !== 1; }
- }
- var A2Inst = new A2();
- export { A2 };
- assert.throws(function () { A2Inst.attemptBindingChange(); }, TypeError, 'Delay exported class name captured in class is const', "Assignment to const");
- assert.doesNotThrow(function () { A2 = 1; }, 'Delay exported class name decl binding is mutable outside class');
- assert.throws(function () { A2Inst.attemptBindingChange(); }, TypeError, 'Mutation of class decl did not change constness', "Assignment to const");
- assert.areEqual(true, A2Inst.bindingUnmodified(), 'Captured class name does not observe mutation');
- assert.throws(function () { A2Inst.attemptBindingChange(); }, TypeError, 'Delay exported class name captured in class is still const', "Assignment to const");
- export let B1 = class B1 {
- attemptBindingChange() { B1 = 1; }
- bindingUnmodified() { return B1 !== 1; }
- }
- var B1Inst = new B1();
- assert.throws(function () { B1Inst.attemptBindingChange(); }, TypeError, 'Exported class expr name captured inside class is const', "Assignment to const");
- assert.doesNotThrow(function () { B1 = 1; }, 'Exported class expr name decl binding is mutable outside class');
- assert.throws(function () { B1Inst.attemptBindingChange(); }, TypeError, 'Mutation of class expr decl did not change constness', "Assignment to const");
- assert.areEqual(true, B1Inst.bindingUnmodified(), 'Captured class name does not observe mutation');
- assert.throws(function () { B1Inst.attemptBindingChange(); }, TypeError, 'Exported class expr name captured inside class is still const', "Assignment to const");
- let B2 = class B2 {
- attemptBindingChange() { B2 = 1; }
- bindingUnmodified() { return B2 !== 1; }
- }
- var B2Inst = new B2();
- export { B2 };
- assert.throws(function () { B2Inst.attemptBindingChange(); }, TypeError, 'Delay exported class expr name captured in class is const', "Assignment to const");
- assert.doesNotThrow(function () { B2 = 1; }, 'Delay exported class expr name decl binding is mutable outside class');
- assert.throws(function () { B2Inst.attemptBindingChange(); }, TypeError, 'Mutation of class expr decl did not change constness', "Assignment to const");
- assert.areEqual(true, B2Inst.bindingUnmodified(), 'Captured class name does not observe mutation');
- assert.throws(function () { B2Inst.attemptBindingChange(); }, TypeError, 'Delay exported class expr name captured in class is still const', "Assignment to const");
- export let C1 = class NotC1 {
- attemptOuterBindingChange() { C1 = 1; }
- attemptInnerBindingChange() { NotC1 = 1; }
- outerbindingUnmodified() { return C1 !== 1; }
- innerbindingUnmodified() { return NotC1 !== 1; }
- }
- var C1Inst = new C1();
- assert.throws(function () { C1Inst.attemptInnerBindingChange(); }, TypeError, 'Exported class expr name captured inside class is const', "Assignment to const");
- assert.doesNotThrow(function () { C1Inst.attemptOuterBindingChange(); }, 'Exported class expr name decl binding is mutable outside class');
- assert.throws(function () { C1Inst.attemptInnerBindingChange(); }, TypeError, 'Mutation of class expr decl did not change constness', "Assignment to const");
- assert.areEqual(false, C1Inst.outerbindingUnmodified(), 'Captured class decl observes mutation');
- assert.areEqual(true, C1Inst.innerbindingUnmodified(), 'Captured class name does not observe mutation');
- assert.throws(function () { C1Inst.attemptInnerBindingChange(); }, TypeError, 'Exported class expr name captured inside class is still const', "Assignment to const");
- let C2 = class NotC2 {
- attemptOuterBindingChange() { C2 = 1; }
- attemptInnerBindingChange() { NotC2 = 1; }
- outerbindingUnmodified() { return C2 !== 1; }
- innerbindingUnmodified() { return NotC2 !== 1; }
- }
- var C2Inst = new C2();
- export { C2 };
- assert.throws(function () { C2Inst.attemptInnerBindingChange(); }, TypeError, 'Exported class expr name captured inside class is const', "Assignment to const");
- assert.doesNotThrow(function () { C2Inst.attemptOuterBindingChange(); }, 'Exported class expr name decl binding is mutable outside class');
- assert.throws(function () { C2Inst.attemptInnerBindingChange(); }, TypeError, 'Mutation of class expr decl did not change constness', "Assignment to const");
- assert.areEqual(false, C2Inst.outerbindingUnmodified(), 'Captured class decl observes mutation');
- assert.areEqual(true, C2Inst.innerbindingUnmodified(), 'Captured class name does not observe mutation');
- assert.throws(function () { C2Inst.attemptInnerBindingChange(); }, TypeError, 'Exported class expr name captured inside class is still const', "Assignment to const");
- console.log("PASS");
|