UNPKG

@moomfe/zenjs

Version:

ZenJS 是一个高性能的 JavaScript 工具库。

427 lines (391 loc) 15.5 kB
describes.push({ name: 'Object', describe: [ { name: '$assign', describe: [ { name: 'Default mode - deep copy', it: function(){ var target = { zenjs: { test: true } }; var source = { zenjs: { InDevelopment: true } } Object.$assign( target, source ); Object.$equals( target, { zenjs: { test: true, InDevelopment: true } } ).should.true; Object.$equals( source, { zenjs: { InDevelopment: true } } ).should.true; target = { zenjs: { test: true } }; Object.$assign( false, target, source ); Object.$equals( target, { zenjs: { test: true, InDevelopment: true } } ).should.true; Object.$equals( source, { zenjs: { InDevelopment: true } } ).should.true; } }, { name: 'Default mode - shallow copy', it: function(){ var target = { zenjs: { test: true } }; var source = { zenjs: { InDevelopment: true } } Object.$assign( true, target, source ); Object.$equals( target, { zenjs: { InDevelopment: true } } ).should.true; Object.$equals( source, { zenjs: { InDevelopment: true } } ).should.true; target.zenjs.should.equals( source.zenjs ); } }, { name: 'infinite Loop', it: function(){ var target = {}, source = { infiniteLoop: target }; Object.$equals( Object.$assign( target, source ), {} ).should.true; target = {}; source = {}; target.source = source; source.target = target; Object.$equals( Object.$assign( {}, target ), {} ).should.true; } }, { name: 'infinite Loop - Array', it: function(){ var target = [], source = [ target ]; Object.$equals( Object.$assign( target, source ), [] ).should.true; target = []; source = []; target.source = source; source.target = target; Object.$equals( Object.$assign( [], target ), [] ).should.true; } }, { name: 'Intelligent undefined', it: function(){ Object.$equals( Object.$assign( { asd: 123 }, { asd: undefined } ), { asd: 123 } ).should.true; Object.$equals( Object.$assign( {}, { asd: undefined } ), { asd: undefined } ).should.true; } }, { name: 'For Array type, a copy will be copied', it: function(){ var obj = { arr: [ 1, 2, 3 ] }; var obj2 = Object.$assign( {}, obj ); ( obj.arr === obj2.arr ).should.false; Object.$equals( obj.arr, obj2.arr ).should.true; } } ] }, { name: '$equals', describe: [ { name: 'equal to null', it: function(){ // true Object.$equals( undefined, undefined ).should.true; Object.$equals( null, null ).should.true; // false Object.$equals( undefined, null ).should.false; Object.$equals( null, undefined ).should.false; } }, { name: 'equal to false', it: function(){ // true Object.$equals( false, false ).should.true; Object.$equals( '', '' ).should.true; Object.$equals( 0, 0 ).should.true; // false Object.$equals( false, '' ).should.false; Object.$equals( '', false ).should.false; Object.$equals( false, 0 ).should.false; Object.$equals( 0, false ).should.false; Object.$equals( '', 0 ).should.false; Object.$equals( 0, '' ).should.false; } }, { name: 'other equal to false', it: function(){ // true Object.$equals( NaN, NaN ).should.true; Object.$equals( Infinity, Infinity ).should.true; // false Object.$equals( NaN, Infinity ).should.false; Object.$equals( Infinity, NaN ).should.false; } }, { name: 'String type', it: function(){ // true Object.$equals( 'ZenJS', 'ZenJS' ).should.true; Object.$equals( 'ZenUI', 'ZenUI' ).should.true; Object.$equals( '123', '123' ).should.true; // false Object.$equals( 'ZenJS', 'ZenUI' ).should.false; Object.$equals( '123', '456' ).should.false; Object.$equals( '', '123' ).should.false; } }, { name: 'Boolean type', it: function(){ // true Object.$equals( true, true ).should.true; Object.$equals( false, false ).should.true; // false Object.$equals( true, false ).should.false; } }, { name: 'Number type', it: function(){ // true Object.$equals( -1 , -1 ).should.true; Object.$equals( 0 , 0 ).should.true; Object.$equals( 1 , 1 ).should.true; Object.$equals( NaN , NaN ).should.true; Object.$equals( Infinity , Infinity ).should.true; Object.$equals( Infinity , Infinity ).should.true; // false Object.$equals( -1, 0 ).should.false; Object.$equals( 0, 1 ).should.false; Object.$equals( 0, NaN ).should.false; Object.$equals( 0, Infinity ).should.false; Object.$equals( NaN, Infinity ).should.false; } }, { name: 'Function type', it: function(){ // true function func1(){}; function func2(){}; Object.$equals( func1, func1 ).should.true; Object.$equals( func2, func2 ).should.true; Object.$equals( function(){ return true }, function(){ return true }).should.true; Object.$equals( function(){ return false }, function(){ return false }).should.true; // false Object.$equals( func1, func2 ).should.false; Object.$equals( function(){ return true }, function(){ return false }).should.false; } }, { name: 'Array type', it: function(){ // true Object.$equals( [], [] ).should.true; Object.$equals( [ 1 ], [ 1 ] ).should.true; Object.$equals( [ 1, 2 ], [ 1, 2 ] ).should.true; // false Object.$equals( [ ], [ 1 ] ).should.false; Object.$equals( [ 1 ], [ 2 ] ).should.false; Object.$equals( [ 1, 2, 3 ], [ 1, 2, 4 ] ).should.false; } }, { name: 'Array Like for IArguments', it: function(){ var args1; var args2; function func1(){ args1 = arguments; } function func2(){ args2 = arguments; } func1( 1, 2, 3 ); func2( 1, 2, 3 ); // true Object.$equals( args1, args2 ).should.true; // false func2( 1, 2, 3, 4 ); Object.$equals( args1, args2 ).should.false; } }, { name: 'Array Like for DOMTokenList', it: function(){ var div1 = div; var div2 = div; div1.className = div2.className = '1 2 3'; // true Object.$equals( div1.classList, div2.classList ).should.true; // false div2.className = '1 2 3 4'; Object.$equals( div1.classList, div2.classList ).should.false; } }, { name: 'Plain Object', it: function(){ // true Object.$equals( {}, {} ).should.true; Object.$equals( { a: 1 }, { a: 1 } ).should.true; Object.$equals( { a: 1, b: 2 }, { a: 1, b: 2 } ).should.true; Object.$equals( { zenjs: /ZenJS/ }, { zenjs: /ZenJS/ } ).should.true; // false Object.$equals( {}, { a: 1 } ).should.false; Object.$equals( { a: 1 }, { a: 2 } ).should.false; Object.$equals( { a: 1, b: 2 }, { a: 1 } ).should.false; Object.$equals( { a: 1, b: 2 }, { a: 1, b: 3 } ).should.false; Object.$equals( { zenjs: /ZenJS/ }, { zenjs: /ZenJS/img } ).should.false; } }, { name: 'Regexp type', it: function(){ // true Object.$equals( /ZenJS/, /ZenJS/ ).should.true; Object.$equals( /ZenJS/img, /ZenJS/img ).should.true; // false Object.$equals( /ZenJS/, /ZenUI/ ).should.false; Object.$equals( /ZenJS/, /ZenJS/img ).should.false; } }, { name: 'Date type', it: function(){ // true // 如果你看到这个没通过单元测试, 不要惊讶, 刷新下就可以了 Object.$equals( new Date(), new Date() ).should.true; Object.$equals( new Date('2018/7/28'), new Date('2018/7/28') ).should.true; Object.$equals( new Date('2019/7/28'), new Date('2019/7/28') ).should.true; // false Object.$equals( new Date(), new Date('2018/7/28') ).should.false; Object.$equals( new Date('2018/7/28'), new Date('2019/7/28') ).should.false; } }, { name: 'Elemnet type', it: function(){ // true Object.$equals( div, div ).should.true; Object.$equals( span, span ).should.true; Object.$equals( select, select ).should.true; Object.$equals( option, option ).should.true; // false Object.$equals( div, span ).should.false; Object.$equals( span, select ).should.false; Object.$equals( select, option ).should.false; } }, { name: 'Map', it: function(){ // true Object.$equals( new Map(), new Map() ).should.true; Object.$equals( new Map(), new Map([]) ).should.true; Object.$equals( new Map([]), new Map([]) ).should.true; Object.$equals( new Map([ [ 1, 2 ] ]), new Map([ [ 1, 2 ] ]) ).should.true; Object.$equals( new Map([ [ 1, 2 ], [ 3, 4 ] ]), new Map([ [ 1, 2 ], [ 3, 4 ] ]) ).should.true; // false Object.$equals( new Map(), new Map([ [ 1, 2 ] ]) ).should.false; Object.$equals( new Map([ [ 1, 2 ] ]), new Map([ [ 3, 4 ] ]) ).should.false; Object.$equals( new Map([ [ 1, 2 ], [ 3, 4 ] ]), new Map([ [ 1, 2 ], [ 3, 5 ] ]) ).should.false; } }, { name: 'Set', it: function(){ // true Object.$equals( new Set(), new Set() ).should.true; Object.$equals( new Set(), new Set([]) ).should.true; Object.$equals( new Set([]), new Set([]) ).should.true; Object.$equals( new Set([ 1 ]), new Set([ 1 ]) ).should.true; Object.$equals( new Set([ 1, 2 ]), new Set([ 1, 2 ]) ).should.true; Object.$equals( new Set([ 1, 2, 3 ]), new Set([ 1, 2, 3 ]) ).should.true; // false Object.$equals( new Set(), new Set([ 1 ]) ).should.false; Object.$equals( new Set([ 1 ]), new Set([ 1, 2 ]) ).should.false; Object.$equals( new Set([ 1, 2 ]), new Set([ 1, 2, 3 ]) ).should.false; } }, { name: 'Check different types', it: function(){ Object.$equals( new Map(), new Set() ).should.false; Object.$equals( new Set(), new Map() ).should.false; Object.$equals( div, new Map() ).should.false; Object.$equals( div, new Set() ).should.false; } }, { name: 'Object infinite Loop', it: function(){ var parent = {}; var children = {}; parent.children = children; children.parent = parent; var parent2 = {}; var children2 = {}; parent2.children = children2; children2.parent = parent2; Object.$equals( parent, parent2 ).should.true; } }, { name: 'Array infinite Loop', it: function(){ var parent = []; var children = []; parent.push( children ); children.push( parent ); var parent2 = []; var children2 = []; parent2.push( children2 ); children2.push( parent2 ); Object.$equals( parent, parent2 ).should.true; } } ] }, { name: '$each', describe: [ { name: 'Normal use', it: function(){ var obj = { 1: 3, 2: 2, 3: 1 }; Object.$each( obj, function( key, value, obj ){ switch( key ){ case "1": obj[ key ] = 1; break; case "3": obj[ key ] = 3; break; } }); Object.$equals( obj, { 1: 1, 2: 2, 3: 3 } ).should.true; Object .$each( obj, function( key, value, obj ){ Object.$equals( this, value ).should.true; Object.$equals( obj, obj ).should.true; }) .should.equals( obj ); } }, { name: 'Object.prototype.$each', it: function(){ var obj = { 1: 3, 2: 2, 3: 1 }; obj.$each(function( key, value, obj ){ switch( key ){ case "1": obj[ key ] = 1; break; case "3": obj[ key ] = 3; break; } }); Object.$equals( obj, { 1: 1, 2: 2, 3: 3 } ).should.true; obj .$each(function( key, value, obj ){ Object.$equals( this, value ).should.true; Object.$equals( obj, obj ).should.true; }) .should.equals( obj ); } } ] }, { name: '$isEmptyObject', describe: [ { name: 'Normal use', it: function(){ Object.$isEmptyObject( {} ).should.true; Object.$isEmptyObject( { Empty: false } ).should.false; } } ] }, { name: '$isPlainObject', describe: [ { name: 'Normal use', it: function(){ Object.$isPlainObject( {} ).should.true; Object.$isPlainObject( Object.create( null ) ).should.true; Object.$isPlainObject( div ).should.false; Object.$isPlainObject( Element ).should.false; Object.$isPlainObject( Element.prototype ).should.false; Object.$isPlainObject( new function(){} ).should.false; } } ] } ] });