require './_prepare' object = mod 'object' test 'isBareObject', -> object.isBareObject('a').should.equal false object.isBareObject({'a': 'a'}).should.equal true test 'typeOf', -> object.typeOf('s').should.equal 'string' object.typeOf(0).should.equal 'number' object.typeOf(false).should.equal 'boolean' object.typeOf({}).should.equal 'object' object.typeOf(arguments).should.equal 'arguments' object.typeOf([]).should.equal 'array' test 'empty', -> o = a: 1 b: 2 object.empty o o.should.not.have.property 'a' o.should.not.have.property 'b' test 'fastEmpty', -> o = a: 1 b: 2 object.fastEmpty o o.should.not.have.property 'a' o.should.not.have.property 'b' test 'clone', -> object.clone([1])[0].should.equal 1 object.clone({a:1}).a.should.equal 1 o = {a: 1} object.clone(o).should.not.equal o test 'clone [include prototype]', -> class C constructor: (@a) -> sayA: -> @a + 'a' a = new C 'a' a.sayA().should.equal 'aa' b = object.clone a, yes b.should.not.equal a b.constructor.should.equal C b.a.should.equal 'a' b.a = 'a2' b.sayA().should.equal 'a2a' test 'clone [without prototype]', -> class C constructor: (@a) -> sayA: -> @a + 'a' a = new C 'a' a.sayA().should.equal 'aa' b = object.clone a, no b.should.equal a test 'overrideOnto [basic]', -> onto = a: 'a' b: c: 'c' d: e: 'e' what = a: 'a2' b: c: 'c2' d: f: 'f2' object.overrideOnto onto, what onto.a.should.equal 'a2' onto.b.should.have.property 'c' onto.b.c.should.equal 'c2' onto.b.d.should.not.have.property 'f' onto.b.d.e.should.equal 'e' test 'override', -> onto = a: 'a' b: c: 'c' d: e: 'e' what = a: 'a2' b: c: 'c2' d: f: 'f2' onto2 = object.override onto, what onto2.a.should.equal 'a2' onto2.b.should.have.property 'c' onto2.b.c.should.equal 'c2' onto2.b.d.should.not.have.property 'f' onto2.b.d.e.should.equal 'e' onto.should.not.equal onto2 do -> what = a: 'a2' c: -> z: 'z' y: a: 'a' onto = a: 'a' b: 'b' test 'appendOnto [basic]', -> object.appendOnto onto, what onto.a.should.equal 'a2' onto.b.should.equal 'b' onto.z.should.equal 'z' test "appendOnto [shallow copies instances]", -> onto.c.should.be.instanceof Function onto.c.should.equal what.c test "appendOnto [clones objects]", -> onto.should.have.property 'y' onto.y.a.should.equal 'a' onto.y.should.not.equal what.y test 'groupProps', -> obj = a1: '1' a2: '2' b1: '1' b2: '2' c1: '1' c2: '2' rest1: '1' rest2: '2' groups = object.groupProps obj, a: ['a1', 'a2'] b: [/^b[0-9]+$/] c: (key) -> key[0] is 'c' groups.a.should.have.property 'a1' groups.a.a1.should.equal '1' groups.a.should.have.property 'a2' groups.b.should.have.property 'b1' groups.b.should.have.property 'b2' groups.c.should.have.property 'c1' groups.c.should.have.property 'c2' groups.rest.should.have.property 'rest1' groups.rest.should.have.property 'rest1' groups.rest.should.not.have.property 'c1'