This repository has been archived by the owner on Oct 15, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 340
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Upstream changes had made test_constructor depend on specific error messages, so this change adds support for ChakraCore's error messages.
- Loading branch information
Showing
1 changed file
with
56 additions
and
50 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,50 +1,56 @@ | ||
'use strict'; | ||
const common = require('../../common'); | ||
const assert = require('assert'); | ||
|
||
// Testing api calls for a constructor that defines properties | ||
const TestConstructor = require(`./build/${common.buildType}/test_constructor`); | ||
const test_object = new TestConstructor(); | ||
|
||
assert.strictEqual(test_object.echo('hello'), 'hello'); | ||
|
||
test_object.readwriteValue = 1; | ||
assert.strictEqual(test_object.readwriteValue, 1); | ||
test_object.readwriteValue = 2; | ||
assert.strictEqual(test_object.readwriteValue, 2); | ||
|
||
assert.throws(() => { test_object.readonlyValue = 3; }, | ||
/^TypeError: Cannot assign to read only property 'readonlyValue' of object '#<MyObject>'$/); | ||
|
||
assert.ok(test_object.hiddenValue); | ||
|
||
// Properties with napi_enumerable attribute should be enumerable. | ||
const propertyNames = []; | ||
for (const name in test_object) { | ||
propertyNames.push(name); | ||
} | ||
assert.ok(propertyNames.includes('echo')); | ||
assert.ok(propertyNames.includes('readwriteValue')); | ||
assert.ok(propertyNames.includes('readonlyValue')); | ||
assert.ok(!propertyNames.includes('hiddenValue')); | ||
assert.ok(!propertyNames.includes('readwriteAccessor1')); | ||
assert.ok(!propertyNames.includes('readwriteAccessor2')); | ||
assert.ok(!propertyNames.includes('readonlyAccessor1')); | ||
assert.ok(!propertyNames.includes('readonlyAccessor2')); | ||
|
||
// The napi_writable attribute should be ignored for accessors. | ||
test_object.readwriteAccessor1 = 1; | ||
assert.strictEqual(test_object.readwriteAccessor1, 1); | ||
assert.strictEqual(test_object.readonlyAccessor1, 1); | ||
assert.throws(() => { test_object.readonlyAccessor1 = 3; }, | ||
/^TypeError: Cannot assign to read only property 'readonlyAccessor1' of object '#<MyObject>'$/); | ||
test_object.readwriteAccessor2 = 2; | ||
assert.strictEqual(test_object.readwriteAccessor2, 2); | ||
assert.strictEqual(test_object.readonlyAccessor2, 2); | ||
assert.throws(() => { test_object.readonlyAccessor2 = 3; }, | ||
/^TypeError: Cannot assign to read only property 'readonlyAccessor2' of object '#<MyObject>'$/); | ||
|
||
// validate that static properties are on the class as opposed | ||
// to the instance | ||
assert.strictEqual(TestConstructor.staticReadonlyAccessor1, 10); | ||
assert.strictEqual(test_object.staticReadonlyAccessor1, undefined); | ||
'use strict'; | ||
const common = require('../../common'); | ||
const assert = require('assert'); | ||
|
||
// Testing api calls for a constructor that defines properties | ||
const TestConstructor = require(`./build/${common.buildType}/test_constructor`); | ||
const test_object = new TestConstructor(); | ||
|
||
assert.strictEqual(test_object.echo('hello'), 'hello'); | ||
|
||
test_object.readwriteValue = 1; | ||
assert.strictEqual(test_object.readwriteValue, 1); | ||
test_object.readwriteValue = 2; | ||
assert.strictEqual(test_object.readwriteValue, 2); | ||
|
||
assert.throws(() => { test_object.readonlyValue = 3; }, | ||
common.engineSpecificMessage({ | ||
v8: /^TypeError: Cannot assign to read only property 'readonlyValue' of object '#<MyObject>'$/, | ||
chakracore: /^TypeError: Assignment to read-only properties is not allowed in strict mode$/})); | ||
|
||
assert.ok(test_object.hiddenValue); | ||
|
||
// Properties with napi_enumerable attribute should be enumerable. | ||
const propertyNames = []; | ||
for (const name in test_object) { | ||
propertyNames.push(name); | ||
} | ||
assert.ok(propertyNames.includes('echo')); | ||
assert.ok(propertyNames.includes('readwriteValue')); | ||
assert.ok(propertyNames.includes('readonlyValue')); | ||
assert.ok(!propertyNames.includes('hiddenValue')); | ||
assert.ok(!propertyNames.includes('readwriteAccessor1')); | ||
assert.ok(!propertyNames.includes('readwriteAccessor2')); | ||
assert.ok(!propertyNames.includes('readonlyAccessor1')); | ||
assert.ok(!propertyNames.includes('readonlyAccessor2')); | ||
|
||
// The napi_writable attribute should be ignored for accessors. | ||
test_object.readwriteAccessor1 = 1; | ||
assert.strictEqual(test_object.readwriteAccessor1, 1); | ||
assert.strictEqual(test_object.readonlyAccessor1, 1); | ||
assert.throws(() => { test_object.readonlyAccessor1 = 3; }, | ||
common.engineSpecificMessage({ | ||
v8: /^TypeError: Cannot assign to read only property 'readonlyAccessor1' of object '#<MyObject>'$/, | ||
chakracore: /^TypeError: Assignment to read-only properties is not allowed in strict mode$/})); | ||
test_object.readwriteAccessor2 = 2; | ||
assert.strictEqual(test_object.readwriteAccessor2, 2); | ||
assert.strictEqual(test_object.readonlyAccessor2, 2); | ||
assert.throws(() => { test_object.readonlyAccessor2 = 3; }, | ||
common.engineSpecificMessage({ | ||
v8: /^TypeError: Cannot assign to read only property 'readonlyAccessor2' of object '#<MyObject>'$/, | ||
chakracore: /^TypeError: Assignment to read-only properties is not allowed in strict mode$/})); | ||
|
||
// validate that static properties are on the class as opposed | ||
// to the instance | ||
assert.strictEqual(TestConstructor.staticReadonlyAccessor1, 10); | ||
assert.strictEqual(test_object.staticReadonlyAccessor1, undefined); |