1 | 'use strict';
|
2 |
|
3 | var hasOwnProperty = require('../src/hasOwnProperty'),
|
4 | assert = require('chai').assert;
|
5 |
|
6 | describe('hasOwnProperty', function() {
|
7 | it('returns a function if only property provided', function() {
|
8 | assert.ok(hasOwnProperty('property') instanceof Function);
|
9 | });
|
10 |
|
11 | it('throws a TypeError is property is not a string', function() {
|
12 | assert.throws(function() {
|
13 | hasOwnProperty({});
|
14 | }, TypeError, /must be a string/);
|
15 |
|
16 | assert.throws(function() {
|
17 | hasOwnProperty({})({});
|
18 | }, TypeError, /must be a string/);
|
19 | });
|
20 |
|
21 | it('checks whether an object has own property', function() {
|
22 | var objectWithUndefinedProperty = {
|
23 | property: undefined
|
24 | },
|
25 | objectWithNotEnumerableProperty = {},
|
26 | objectWithProperty = {
|
27 | property: 'value'
|
28 | },
|
29 | objectWithPropertyInPrototype = Object.create({
|
30 | property: 'value'
|
31 | }),
|
32 | objectWithoutPrototype = Object.create(null);
|
33 |
|
34 | objectWithoutPrototype.property = 'value';
|
35 |
|
36 | Object.defineProperty(objectWithNotEnumerableProperty, 'property', {
|
37 | enumerable: false,
|
38 | value: 10
|
39 | });
|
40 |
|
41 | assert.ok(hasOwnProperty('property'), objectWithUndefinedProperty);
|
42 | assert.ok(hasOwnProperty('property', objectWithUndefinedProperty));
|
43 | assert.ok(hasOwnProperty('property', objectWithNotEnumerableProperty));
|
44 | assert.ok(hasOwnProperty('property')(objectWithNotEnumerableProperty));
|
45 | assert.ok(hasOwnProperty('property', objectWithProperty));
|
46 | assert.ok(hasOwnProperty('property')(objectWithProperty));
|
47 | assert.ok(hasOwnProperty('property', objectWithPropertyInPrototype) === false);
|
48 | assert.ok(hasOwnProperty('property')(objectWithPropertyInPrototype) === false);
|
49 | assert.ok(hasOwnProperty('property', objectWithoutPrototype));
|
50 | assert.ok(hasOwnProperty('property')(objectWithoutPrototype));
|
51 | assert.ok(hasOwnProperty('property', {}) === false);
|
52 | assert.ok(hasOwnProperty('property')({}) === false);
|
53 | assert.ok(hasOwnProperty('property', null) === false);
|
54 | assert.ok(hasOwnProperty('property')(null) === false);
|
55 | assert.ok(hasOwnProperty('property', 'str') === false);
|
56 | assert.ok(hasOwnProperty('property')('str') === false);
|
57 | assert.ok(hasOwnProperty('property', []) === false);
|
58 | assert.ok(hasOwnProperty('property')([]) === false);
|
59 | });
|
60 | });
|