@moomfe/zenjs
Version:
ZenJS 是一个高性能的 JavaScript 工具库。
794 lines (669 loc) • 27.4 kB
JavaScript
describes.push({
name: 'Element.prototype',
describe: [
{
name: '$addClass',
'default': function(){
/** @type {Element} */
var div = window.div;
div.$addClass('a');
div.className.should.equals('a');
div.$addClass('a');
div.className.should.equals('a');
div.$addClass('a b c');
div.className.should.equals('a b c');
}
}, {
name: '$removeClass',
'default': function(){
/** @type {Element} */
var div = window.div.$addClass('a b c');
div.$removeClass('b');
div.className.should.equals('a c');
div.$removeClass('a c');
div.className.should.equals('');
div.$addClass('a b c');
div.className.should.equals('a b c');
div.$removeClass('');
div.className.should.equals('a b c');
div.$removeClass();
div.className.should.equals('');
}
}, {
name: '$hasClass',
'default': function(){
/** @type {Element} */
var div = window.div.$addClass('a b c');
div.$hasClass('a').should.true;
div.$hasClass('b').should.true;
div.$hasClass('c').should.true;
div.$hasClass('a b').should.true;
div.$hasClass('b c').should.true;
div.$hasClass('a c').should.true;
div.$hasClass('a b c').should.true;
div.$hasClass('a c b').should.true;
div.$hasClass('b a c').should.true;
div.$hasClass('b c a').should.true;
div.$hasClass('c a b').should.true;
div.$hasClass('c b a').should.true;
div.$hasClass().should.false;
div.$hasClass('').should.false;
div.$hasClass('d').should.false;
div.$hasClass('a d').should.false;
}
}, {
name: '$toggleClass',
'default': function(){
/** @type {Element} */
var div = window.div.$addClass('a b c');
div.$toggleClass('a');
div.className.should.equals('b c');
div.$toggleClass('a');
div.className.should.equals('b c a');
div.$toggleClass( 'a', true );
div.className.should.equals('b c a');
div.$toggleClass( 'a', false );
div.className.should.equals('b c');
div.$toggleClass( 'c d' );
div.className.should.equals('b d');
}
}, {
name: '$is',
'default': function(){
var div = window.div;
div.$is( 'div' ).should.true;
div.$is( div ).should.true;
div.$is( window.div ).should.false;
div.$is('#test').should.false;
div.$is('.test').should.false;
div.$is('#test.test').should.false;
div.$is(function( elem ){ return elem.id === 'test' }).should.false;
div.$is(function( elem ){ return elem.className === 'test' }).should.false;
div.id = 'test';
div.className = 'test';
div.$is('#test').should.true;
div.$is('.test').should.true;
div.$is('#test.test').should.true;
div.$is(function( elem ){ return elem.id === 'test' }).should.true;
div.$is(function( elem ){ return elem.className === 'test' }).should.true;
div.$is(function(){ }).should.false;
}
}, {
name: '$not',
'default': function(){
var div = window.div;
div.$not( 'div' ).should.false;
div.$not( div ).should.false;
div.$not( window.div ).should.true;
div.$not('#test').should.true;
div.$not('.test').should.true;
div.$not('#test.test').should.true;
div.$not(function( elem ){ return elem.id === 'test' }).should.true;
div.$not(function( elem ){ return elem.className === 'test' }).should.true;
div.id = 'test';
div.className = 'test';
div.$not('#test').should.false;
div.$not('.test').should.false;
div.$not('#test.test').should.false;
div.$not(function( elem ){ return elem.id === 'test' }).should.false;
div.$not(function( elem ){ return elem.className === 'test' }).should.false;
div.$not(function(){ }).should.true;
}
}, {
name: '$first / $firstChild',
'default': function(){
var div = window.div;
var span = div.appendChild( window.span );
var a = div.appendChild( window.a );
var a2 = div.appendChild( window.a ).$set('id','test');
div.$first().should.equals( span );
div.$first('*').should.equals( span );
div.$first('span').should.equals( span );
div.$first(':first-child').should.equals( span );
div.$first('a').should.equals( a );
div.$first('#test').should.equals( a2 );
isLikeNull( div.$first('input') ).should.true;
}
}, {
name: '$last / $lastChild',
'default': function(){
var div = window.div;
var span = div.appendChild( window.span );
var a = div.appendChild( window.a );
var a2 = div.appendChild( window.a ).$set('id','test');
div.$last().should.equals( a2 );
div.$last('*').should.equals( a2 );
div.$last('a').should.equals( a2 );
div.$last(':last-child').should.equals( a2 );
div.$last('#test').should.equals( a2 );
div.$last('span').should.equals( span );
isLikeNull( div.$last('input') ).should.true;
}
}, {
name: '$next',
'default': function(){
var div = window.div;
var span = div.appendChild( window.span );
var input = div.appendChild( window.input );
var a = div.appendChild( window.a );
span.$next().should.equals( input );
span.$next('*').should.equals( input );
span.$next('input').should.equals( input );
span.$next('a').should.equals( a );
isLikeNull( span.$next('div') ).should.true;
}
}, {
name: '$prev',
'default': function(){
var div = window.div;
var span = div.appendChild( window.span );
var input = div.appendChild( window.input );
var a = div.appendChild( window.a );
a.$prev().should.equals( input );
a.$prev('*').should.equals( input );
a.$prev('input').should.equals( input );
a.$prev('span').should.equals( span );
isLikeNull( a.$prev('div') ).should.true;
}
}, {
name: '$nextAll',
'default': function(){
var div = window.div;
var span = div.appendChild( window.span );
var input = div.appendChild( window.input );
var a = div.appendChild( window.a );
Object.$equals( span.$nextAll(), [ input, a ] ).should.true;
Object.$equals( span.$nextAll('*'), [ input, a ] ).should.true;
Object.$equals( span.$nextAll('input'), [ input ] ).should.true;
Object.$equals( span.$nextAll('a'), [ a ] ).should.true;
Object.$equals( span.$nextAll('div'), [] ).should.true;
}
}, {
name: '$prevAll',
'default': function(){
var div = window.div;
var span = div.appendChild( window.span );
var input = div.appendChild( window.input );
var a = div.appendChild( window.a );
Object.$equals( a.$prevAll(), [ input, span ] ).should.true;
Object.$equals( a.$prevAll('*'), [ input, span ] ).should.true;
Object.$equals( a.$prevAll('input'), [ input ] ).should.true;
Object.$equals( a.$prevAll('span'), [ span ] ).should.true;
Object.$equals( a.$prevAll('div'), [] ).should.true;
}
}, {
name: '$child / $children',
'default': function(){
var div = window.div;
var span = div.appendChild( window.span );
var input = div.appendChild( window.input );
var a = div.appendChild( window.a );
Object.$equals( div.$child(), [ span, input, a ] ).should.true;
Object.$equals( div.$child('*'), [ span, input, a ] ).should.true;
Object.$equals( div.$child('span'), [ span ] ).should.true;
Object.$equals( div.$child('input'), [ input ] ).should.true;
Object.$equals( div.$child('a'), [ a ] ).should.true;
Object.$equals( div.$child('div'), [] ).should.true;
}
}, {
name: '$parent',
'default': function(){
var div = window.div;
var div2 = div.appendChild( window.div );
div2.$parent().should.equals( div );
div2.$parent('*').should.equals( div );
div2.$parent('div').should.equals( div );
isLikeNull( div2.$parent('span') ).should.true;
}
}, {
name: '$parents',
'default': function(){
var div = window.div.$set('id','test');
var div2 = div.appendChild( window.div );
var div3 = div2.appendChild( window.div );
div3.$parents().should.equals( div2 );
div3.$parents('*').should.equals( div2 );
div3.$parents('div').should.equals( div2 );
div3.$parents('#test').should.equals( div );
isLikeNull( div2.$parents('span') ).should.true;
}
}, {
name: '$siblings',
'default': function(){
var div = window.div.$set('id','test');
var div2 = div.appendChild( window.div );
var div3 = div.appendChild( window.div );
var span = div.appendChild( window.span );
var input = div.appendChild( window.input );
Object.$equals( div2.$siblings(), [ div3, span, input ] ).should.true;
Object.$equals( div2.$siblings('*'), [ div3, span, input ] ).should.true;
Object.$equals( div2.$siblings(':last-child'), [ input ] ).should.true;
Object.$equals( div2.$siblings('div'), [ div3 ] ).should.true;
Object.$equals( div2.$siblings('span'), [ span ] ).should.true;
Object.$equals( div2.$siblings('input'), [ input ] ).should.true;
}
}, {
name: '$append',
'default': function(){
var div = window.div;
var span = window.span;
var input = window.input;
div.$append( span ).$append( input );
div.$first().should.equals( span );
div.$last().should.equals( input );
}
}, {
name: '$prepend',
'default': function(){
var div = window.div;
var span = window.span;
var input = window.input;
div.$prepend( span ).$prepend( input );
div.$first().should.equals( input );
div.$last().should.equals( span );
}
}, {
name: '$appendTo',
'default': function(){
var div = window.div;
var span = window.span.$appendTo( div );
var input = window.input.$appendTo( div );
div.$first().should.equals( span );
div.$last().should.equals( input );
}
}, {
name: '$prependTo',
'default': function(){
var div = window.div;
var span = window.span.$prependTo( div );
var input = window.input.$prependTo( div );
div.$first().should.equals( input );
div.$last().should.equals( span );
}
}, {
name: '$before',
'default': function(){
var div = window.div;
var input = window.input;
var span = window.span.$appendTo( div ).$before( input );
span.$prev().should.equals( input );
}
}, {
name: '$after',
'default': function(){
var div = window.div;
var input = window.input;
var span = window.span.$appendTo( div ).$after( input );
span.$next().should.equals( input );
}
}, {
name: '$delete / $remove',
'default': function(){
var div = window.div;
var div2 = window.div.$prependTo( div );
var div3 = window.div.$prependTo( div );
Object.$equals( div.$child(), [ div2, div3 ] ).should.true;
div2.$delete();
Object.$equals( div.$child(), [ div3 ] ).should.true;
}
}, {
name: '$query / $find',
'default': function(){
Object.$equals( div.$query, div.querySelectorAll ).should.false;
Object.$equals( Array.isArray( div.$query('div') ), true ).should.true;
}
}, {
name: '$queryFirst / $findFirst',
'default': function(){
Object.$equals( div.$queryFirst, div.querySelector ).should.true;
}
}, {
name: '$replaceWith / $replace',
'default': function(){
var div = window.div;
var div2 = window.div.$prependTo( div );
var div3 = window.div;
div.$first().should.equals( div2 );
div2.$replace( div3 );
div.$first().should.equals( div3 );
}
}, {
name: '$clone',
'default': function(){
Object.$equals( div.$clone, div.cloneNode ).should.true;
}
}, {
name: '$index',
'default': function(){
var div = window.div;
var div0 = div.appendChild( window.div );
var div1 = div.appendChild( window.div );
var div2 = div.appendChild( window.div );
var div3 = div.appendChild( window.div );
var div4 = div.appendChild( window.div );
var div5 = div.appendChild( window.div );
var div6 = div.appendChild( window.div );
// [ div0, div1, div2, div3, div4, div5, div6 ]
div0.$index().should.equals( 0 );
div1.$index().should.equals( 1 );
div2.$index().should.equals( 2 );
div3.$index().should.equals( 3 );
div4.$index().should.equals( 4 );
div5.$index().should.equals( 5 );
div6.$index().should.equals( 6 );
// [ div1, div0, div2, div3, div4, div5, div6 ]
div0.$index( 1 );
div0.$index().should.equals( 1 );
div1.$index().should.equals( 0 );
// [ div1, div2, div3, div4, div5, div6, div0 ]
div0.$index( 666 );
div0.$index().should.equals( 6 );
div1.$index().should.equals( 0 );
div2.$index().should.equals( 1 );
div3.$index().should.equals( 2 );
div4.$index().should.equals( 3 );
div5.$index().should.equals( 4 );
div6.$index().should.equals( 5 );
// [ div0, div1, div2, div3, div4, div5, div6 ]
div0.$index( 0 );
div0.$index().should.equals( 0 );
div1.$index().should.equals( 1 );
div2.$index().should.equals( 2 );
div3.$index().should.equals( 3 );
div4.$index().should.equals( 4 );
div5.$index().should.equals( 5 );
div6.$index().should.equals( 6 );
}
}, {
name: '$html',
'default': function(){
var div = window.div.$html( 123 );
div.$html().should.equals('123');
}
}, {
name: '$val / $value',
'default': function(){
var input = window.input;
input.type = 'text';
input.$val().should.equals('');
input.$val('ZenJS');
input.$val().should.equals('ZenJS');
var select = window.select;
var option1 = select.appendChild( window.option ).$val( 0 );
var option2 = select.appendChild( window.option ).$val( 1 );
select.$val().should.equals('0');
option2.selected = true;
select.$val().should.equals('1');
option1.$val().should.equals('0');
option2.$val().should.equals('1');
var select2 = window.select;
select2.multiple = true;
var option3 = select2.appendChild( window.option ).$val( 2 );
var option4 = select2.appendChild( window.option ).$val( 3 );
select2.$val([ '2', '3' ]);
option3.selected.should.true;
option4.selected.should.true;
[ '2', '3' ].$equals( select2.$val() ).should.true;
}
}, {
name: '$width',
'default': function(){
var div = window.div;
div.$width().should.equals( 0 );
div.$width( 123 );
div.$width().should.equals( 0 );
div.style.width.should.equals('123px');
}
}, {
name: '$height',
'default': function(){
var div = window.div;
div.$height().should.equals( 0 );
div.$height( 123 );
div.$height().should.equals( 0 );
div.style.height.should.equals('123px');
}
}, {
name: '_nodeName',
'default': function(){
div._nodeName.should.equals('div');
a._nodeName.should.equals('a');
span._nodeName.should.equals('span');
input._nodeName.should.equals('input');
select._nodeName.should.equals('select');
option._nodeName.should.equals('option');
}
}, {
name: '$prop',
describe: [
{
name: 'Normal use',
it: function(){
var div = window.div;
div.className = 'test';
div.$prop('class').should.equals('test');
div.$prop('class','test1').$prop('class').should.equals('test1');
var div2 = window.div.$prop({ id: 'test-id', class: 'test' });
div2.$prop('id').should.equals('test-id');
div2.$prop('class').should.equals('test');
}
}, {
name: 'checked',
it: function(){
var input = window.input;
input.$prop( 'type', 'checkbox' );
input.$prop('type').should.equals('checkbox');
input.$prop('checked').should.false;
input.$prop('checked',true).$prop('checked').should.true;
}
}, {
name: 'selected',
it: function(){
var select = window.select;
var option1 = window.option.$appendTo( select );
var option2 = window.option.$appendTo( select );
var option3 = window.option.$appendTo( select );
option1.$prop('selected').should.true;
option2.$prop('selected').should.false;
option3.$prop('selected').should.false;
option2.selected = true;
option1.$prop('selected').should.false;
option2.$prop('selected').should.true;
option3.$prop('selected').should.false;
option3.$prop('selected', true);
option1.$prop('selected').should.false;
option2.$prop('selected').should.false;
option3.$prop('selected').should.true;
}
}, {
name: 'tabIndex',
it: function(){
var input = window.input;
input.$prop('tabIndex').should.equals( 0 );
input.$prop('tabIndex',1).$prop('tabIndex').should.equals( 1 );
}
}
]
}, {
name: '$removeProp / $deleteProp',
'default': function(){
var div = window.div.$prop({ id: 'test-id', class: 'test' });
Object.$equals( div.$prop('id'), 'test-id' ).should.true;
Object.$equals( div.$prop('class'), 'test' ).should.true;
div.$removeProp('id');
Object.$equals( div.$prop('id'), '' ).should.true;
Object.$equals( div.$prop('class'), 'test' ).should.true;
div.$removeProp('class');
Object.$equals( div.$prop('id'), '' ).should.true;
Object.$equals( div.$prop('class'), '' ).should.true;
div.$prop({ id: 'test-id', class: 'test' });
Object.$equals( div.$prop('id'), 'test-id' ).should.true;
Object.$equals( div.$prop('class'), 'test' ).should.true;
div.$removeProp('id class');
Object.$equals( div.$prop('id'), '' ).should.true;
Object.$equals( div.$prop('class'), '' ).should.true;
}
}, {
name: '$attr',
describe: [
{
name: 'Normal use',
it: function(){
var div = window.div.$prop('class','test');
div.$attr('class').should.equals('test');
div.$attr('id','test-id').$attr('id').should.equals('test-id');
Object.$equals( div.$attr('class',null).$attr('class') ).should.true;
var div2 = window.div.$attr({ id: 'test-id', class: 'test' });
div2.$attr('id').should.equals('test-id');
div2.$attr('class').should.equals('test');
}
}, {
name: 'boolean',
it: function(){
var input = window.input.$prop('type','radio');
input.$attr('checked',true).$attr('checked').should.equals('checked');
Object.$equals( input.$attr('checked',false).$attr('checked') ).should.true;
}
}
]
}, {
name: '$removeAttr / $deleteAttr',
'default': function(){
var div = window.div.$attr({ id: 'test-id', class: 'test' });
Object.$equals( div.$attr('id'), 'test-id' ).should.true;
Object.$equals( div.$attr('class'), 'test' ).should.true;
div.$removeAttr('id');
Object.$equals( div.$attr('id'), undefined ).should.true;
Object.$equals( div.$attr('class'), 'test' ).should.true;
div.$removeAttr('class');
Object.$equals( div.$attr('id'), undefined ).should.true;
Object.$equals( div.$attr('class'), undefined ).should.true;
div.$attr({ id: 'test-id', class: 'test' });
Object.$equals( div.$attr('id'), 'test-id' ).should.true;
Object.$equals( div.$attr('class'), 'test' ).should.true;
div.$removeAttr('id class');
Object.$equals( div.$attr('id'), undefined ).should.true;
Object.$equals( div.$attr('class'), undefined ).should.true;
}
}, {
name: '$css',
describe: [
{
name: 'Get margin / padding / border-width',
it: function(){
var div = window.div.$appendTo( document.documentElement );
var style = div.style;
/* Margin */
div.$css('margin').should.equals('0px');
style.marginLeft = style.marginRight = '1px';
div.$css('margin').should.equals('0px 1px');
style.marginTop = '1px';
div.$css('margin').should.equals('1px 1px 0px');
style.marginBottom = '1px';
div.$css('margin').should.equals('1px');
style.marginLeft = '1px';
style.marginRight = '2px';
style.marginTop = '3px';
style.marginBottom = '4px';
div.$css('margin').should.equals('3px 2px 4px 1px');
/* Padding */
div.$css('padding').should.equals('0px');
style.paddingLeft = style.paddingRight = '1px';
div.$css('padding').should.equals('0px 1px');
style.paddingTop = '1px';
div.$css('padding').should.equals('1px 1px 0px');
style.paddingBottom = '1px';
div.$css('padding').should.equals('1px');
style.paddingLeft = '1px';
style.paddingRight = '2px';
style.paddingTop = '3px';
style.paddingBottom = '4px';
div.$css('padding').should.equals('3px 2px 4px 1px');
/* Border-Width */
div.$css('borderWidth').should.equals('0px');
div.$css('border-width').should.equals('0px');
style.border = '0px solid #FFF';
style.borderLeftWidth = style.borderRightWidth = '1px';
div.$css('borderWidth').should.equals('0px 1px');
div.$css('border-width').should.equals('0px 1px');
style.borderTopWidth = '1px';
div.$css('borderWidth').should.equals('1px 1px 0px');
div.$css('border-width').should.equals('1px 1px 0px');
style.borderBottomWidth = '1px';
div.$css('borderWidth').should.equals('1px');
div.$css('border-width').should.equals('1px');
style.borderLeftWidth = '1px';
style.borderRightWidth = '2px';
style.borderTopWidth = '3px';
style.borderBottomWidth = '4px';
div.$css('borderWidth').should.equals('3px 2px 4px 1px');
div.$css('border-width').should.equals('3px 2px 4px 1px');
div.$remove();
}
}, {
name: 'Get border-radius',
it: function(){
var div = window.div.$appendTo( document.documentElement );
var style = div.style;
div.$css('borderRadius').should.equals('0px');
div.$css('border-radius').should.equals('0px');
style.borderBottomLeftRadius = style.borderTopRightRadius = '1px';
div.$css('borderRadius').should.equals('0px 1px');
div.$css('border-radius').should.equals('0px 1px');
style.borderTopLeftRadius = '1px';
div.$css('borderRadius').should.equals('1px 1px 0px');
div.$css('border-radius').should.equals('1px 1px 0px');
style.borderTopLeftRadius = '1px';
style.borderTopRightRadius = '2px';
style.borderBottomLeftRadius = '3px';
style.borderBottomRightRadius = '4px';
div.$css('borderRadius').should.equals('1px 2px 4px 3px');
div.$css('border-radius').should.equals('1px 2px 4px 3px');
div.$remove();
}
}, {
name: 'Get other',
it: function(){
var div = window.div.$appendTo( document.documentElement );
var style = div.style;
div.$css('width').should.equals( document.body.clientWidth + 'px' );
div.$css('height').should.equals('0px');
style.height = style.width = '100px';
div.$css('width').should.equals('100px');
div.$css('height').should.equals('100px');
div.$css('opacity').should.equals('1');
style.opacity = 0.5;
div.$css('opacity').should.equals('0.5');
div.$remove();
}
}, {
name: 'Set css',
it: function(){
var div = window.div.$appendTo( document.documentElement );
div.$css( 'height', 100 );
div.$css( 'width', 100 );
div.$css( 'width' ).should.equals('100px');
div.$css( 'height' ).should.equals('100px');
div.$css( 'opacity', 0.5 );
div.$css( 'opacity' ).should.equals('0.5');
div.$remove();
}
}, {
name: 'Get style ( not in dom )',
it: function(){
var div = window.div;
var style = div.style;
div.$css('width').should.equals('');
div.$css('height').should.equals('');
style.height = style.width = '100px';
div.$css('width').should.equals('100px');
div.$css('height').should.equals('100px');
div.$css('opacity').should.equals('1');
style.opacity = 0.5;
div.$css('opacity').should.equals('0.5');
}
}
]
}
]
});