| 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); |
| }); |
| }); |
| |
| }); |