bfj
Version:
Big-friendly JSON. Asynchronous streaming functions for large JSON data sets.
119 lines (91 loc) • 2.97 kB
JavaScript
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)
})
})
})
})