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' |