aboutsummaryrefslogtreecommitdiff
path: root/node_modules/utila/scripts/coffee/test/object.coffee
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/utila/scripts/coffee/test/object.coffee')
-rw-r--r--node_modules/utila/scripts/coffee/test/object.coffee233
1 files changed, 233 insertions, 0 deletions
diff --git a/node_modules/utila/scripts/coffee/test/object.coffee b/node_modules/utila/scripts/coffee/test/object.coffee
new file mode 100644
index 000000000..e36140c8d
--- /dev/null
+++ b/node_modules/utila/scripts/coffee/test/object.coffee
@@ -0,0 +1,233 @@
+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' \ No newline at end of file