41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
// Test file to verify decorator functionality
|
|
function sealed(constructor: Function) {
|
|
Object.seal(constructor);
|
|
Object.seal(constructor.prototype);
|
|
}
|
|
|
|
@sealed
|
|
class TestClass {
|
|
name = 'test';
|
|
|
|
modify() {
|
|
this.name = 'modified';
|
|
}
|
|
}
|
|
|
|
// Test that the class is sealed
|
|
const instance = new TestClass();
|
|
console.log('Initial name:', instance.name);
|
|
|
|
// This should work (modifying existing property)
|
|
instance.modify();
|
|
console.log('Modified name:', instance.name);
|
|
|
|
// This should fail silently in non-strict mode or throw in strict mode
|
|
try {
|
|
(instance as any).newProperty = 'should not work';
|
|
console.log('Adding new property:', (instance as any).newProperty);
|
|
} catch (e) {
|
|
console.log('Error adding property (expected):', e.message);
|
|
}
|
|
|
|
// Test that we can't add to prototype
|
|
try {
|
|
(TestClass.prototype as any).newMethod = function() {};
|
|
console.log('Prototype is NOT sealed (unexpected)');
|
|
} catch (e) {
|
|
console.log('Prototype is sealed (expected)');
|
|
}
|
|
|
|
console.log('Is TestClass sealed?', Object.isSealed(TestClass));
|
|
console.log('Is TestClass.prototype sealed?', Object.isSealed(TestClass.prototype)); |