UNPKG

bfj

Version:

Big-friendly JSON. Asynchronous streaming functions for large JSON data sets.

119 lines (91 loc) • 2.97 kB
'use strict' const assert = require('chai').assert const modulePath = '../../src/set-property' suite('set-property:', () => { test('require does not throw', () => { assert.doesNotThrow(() => { require(modulePath) }) }) test('require returns function', () => { assert.isFunction(require(modulePath)) }) suite('require:', () => { let setProperty setup(() => { setProperty = require(modulePath) }) test('setProperty expects three arguments', () => { assert.lengthOf(setProperty, 3) }) suite('set regular property:', () => { let object setup(() => { object = {} setProperty(object, 'foo', 'bar') }) test('property was set', () => { assert.strictEqual(object.foo, 'bar') }) test('property is own', () => { assert.isTrue(Object.prototype.hasOwnProperty.call(object, 'foo')) }) test('property is enumerable', () => { assert.deepEqual(Object.keys(object), [ 'foo' ]) }) test('prototype was not changed', () => { assert.strictEqual(Object.getPrototypeOf(object), Object.prototype) }) }) suite('set __proto__ property:', () => { let object setup(() => { object = {} setProperty(object, '__proto__', { foo: 'bar' }) }) test('property is own', () => { assert.isTrue(Object.prototype.hasOwnProperty.call(object, '__proto__')) }) test('property is enumerable', () => { assert.deepEqual(Object.keys(object), [ '__proto__' ]) }) test('property value was set', () => { assert.deepEqual(object['__proto__'], { foo: 'bar' }) }) test('prototype was not changed', () => { assert.strictEqual(Object.getPrototypeOf(object), Object.prototype) }) test('property value is not inherited', () => { assert.isUndefined(object.foo) }) test('property is writable', () => { object['__proto__'] = 'baz' assert.strictEqual(object['__proto__'], 'baz') }) test('prototype was still not changed after assignment', () => { object['__proto__'] = 'baz' assert.strictEqual(Object.getPrototypeOf(object), Object.prototype) }) test('property is configurable', () => { delete object['__proto__'] assert.deepEqual(Object.keys(object), []) }) }) suite('set __proto__ property to null:', () => { let object setup(() => { object = {} setProperty(object, '__proto__', null) }) test('property is own', () => { assert.isTrue(Object.prototype.hasOwnProperty.call(object, '__proto__')) }) test('property value was set', () => { assert.isNull(object['__proto__']) }) test('prototype was not changed', () => { assert.strictEqual(Object.getPrototypeOf(object), Object.prototype) }) }) }) })