You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
233 lines
3.0 KiB
233 lines
3.0 KiB
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' |