123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- describe('Object', function () {
- "use strict";
- describe("Object.keys", function () {
- var obj = {
- "str": "boz",
- "obj": { },
- "arr": [],
- "bool": true,
- "num": 42,
- "null": null,
- "undefined": undefined
- };
- var loopedValues = [];
- for (var k in obj) {
- loopedValues.push(k);
- }
- var keys = Object.keys(obj);
- it('should have correct length', function () {
- expect(keys.length).toBe(7);
- });
- it('should return an Array', function () {
- expect(Array.isArray(keys)).toBe(true);
- });
- it('should return names which are own properties', function () {
- keys.forEach(function (name) {
- expect(obj.hasOwnProperty(name)).toBe(true);
- });
- });
- it('should return names which are enumerable', function () {
- keys.forEach(function (name) {
- expect(loopedValues.indexOf(name)).toNotBe(-1);
- })
- });
- it('should throw error for non object', function () {
- var e = {};
- expect(function () {
- try {
- Object.keys(42)
- } catch (err) {
- throw e;
- }
- }).toThrow(e);
- });
- });
- describe("Object.isExtensible", function () {
- var obj = { };
- it('should return true if object is extensible', function () {
- expect(Object.isExtensible(obj)).toBe(true);
- });
- it('should return false if object is not extensible', function () {
- expect(Object.isExtensible(Object.preventExtensions(obj))).toBe(false);
- });
- it('should return false if object is seal', function () {
- expect(Object.isExtensible(Object.seal(obj))).toBe(false);
- });
- it('should return false if object is freeze', function () {
- expect(Object.isExtensible(Object.freeze(obj))).toBe(false);
- });
- it('should throw error for non object', function () {
- var e1 = {};
- expect(function () {
- try {
- Object.isExtensible(42)
- } catch (err) {
- throw e1;
- }
- }).toThrow(e1);
- });
- });
- describe("Object.defineProperty", function () {
- var obj;
- beforeEach(function() {
- obj = {};
- Object.defineProperty(obj, 'name', {
- value : 'Testing',
- configurable: true,
- enumerable: true,
- writable: true
- });
- });
- it('should return the initial value', function () {
- expect(obj.hasOwnProperty('name')).toBeTruthy();
- expect(obj.name).toBe('Testing');
- });
- it('should be setable', function () {
- obj.name = 'Other';
- expect(obj.name).toBe('Other');
- });
- it('should return the parent initial value', function () {
- var child = Object.create(obj, {});
- expect(child.name).toBe('Testing');
- expect(child.hasOwnProperty('name')).toBeFalsy();
- });
- it('should not override the parent value', function () {
- var child = Object.create(obj, {});
- Object.defineProperty(child, 'name', {
- value : 'Other'
- });
- expect(obj.name).toBe('Testing');
- expect(child.name).toBe('Other');
- });
- it('should throw error for non object', function () {
- expect(function () {
- Object.defineProperty(42, 'name', {});
- }).toThrow();
- });
- });
- describe("Object.getOwnPropertyDescriptor", function () {
- it('should return undefined because the object does not own the property', function () {
- var descr = Object.getOwnPropertyDescriptor({}, 'name');
- expect(descr).toBeUndefined()
- });
- it('should return a data descriptor', function () {
- var descr = Object.getOwnPropertyDescriptor({name: 'Testing'}, 'name');
- expect(descr).not.toBeUndefined();
- expect(descr.value).toBe('Testing');
- expect(descr.writable).toBe(true);
- expect(descr.enumerable).toBe(true);
- expect(descr.configurable).toBe(true);
- });
- it('should return undefined because the object does not own the property', function () {
- var descr = Object.getOwnPropertyDescriptor(Object.create({name: 'Testing'}, {}), 'name');
- expect(descr).toBeUndefined()
- });
- it('should return a data descriptor', function () {
- var obj = Object.create({}, {
- name: {
- value : 'Testing',
- configurable: true,
- enumerable: true,
- writable: true
- }
- });
- var descr = Object.getOwnPropertyDescriptor(obj, 'name');
- expect(descr).not.toBeUndefined();
- expect(descr.value).toBe('Testing');
- expect(descr.writable).toBe(true);
- expect(descr.enumerable).toBe(true);
- expect(descr.configurable).toBe(true);
- });
- it('should throw error for non object', function () {
- expect(function () {
- Object.getOwnPropertyDescriptor(42, 'name');
- }).toThrow();
- });
- });
- });
|