%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /www/varak.net/wiki.varak.net/extensions/Mantle/tests/javascripts/common/
Upload File :
Create Path :
Current File : /www/varak.net/wiki.varak.net/extensions/Mantle/tests/javascripts/common/test_View.js

( function( M, $ ) {

var View = M.require( 'View' );

QUnit.module( 'Mantle view', {
	setup: function() {
		var compiler = {
			compile: function() {
				return {
					render: function( data, partials ) {
						if ( partials && partials.content ) {
							return '<h1>' + data.title + '</h1><p>' + partials.content.render( data ) + '</p>';
						} else if ( data.content ) {
							return '<h1>' + data.title + '</h1><p>' + data.content + '</p>';
						} else {
							return '<p>' + data.text + '</p>';
						}
					}
				};
			}
		};
		// Register template compiler
		M.template.registerCompiler( 'xyz', compiler );
	}
} );

QUnit.test( 'View', 2, function( assert ) {
	var view = new View( { el: 'body' } );
	assert.ok( view.$el instanceof $, 'assign jQuery object to $el' );
	assert.strictEqual( view.$el[0].tagName.toUpperCase(), 'BODY', 'assign proper jQuery object to $el' );
} );

QUnit.test( 'View, jQuery proxy functions', 10, function( assert ) {
	var self = this, view = new View( { el: 'body' } );
	[
		'append',
		'prepend',
		'appendTo',
		'prependTo',
		'after',
		'before',
		'insertAfter',
		'insertBefore',
		'remove',
		'detach'
	].forEach( function( prop ) {
		var stub = self.sandbox.stub( view.$el, prop );
		view[prop]( 'test', 1 );
		assert.ok( stub.calledWith( 'test', 1 ) );
		stub.restore();
	} );
} );

QUnit.test( 'View.extend, with el property', 1, function( assert ) {
	var ChildView, $testEl, view;
	ChildView = View.extend( {
		firstHeading: function() {
			return this.$( 'h1' ).text();
		}
	} );
	$testEl = $( '<div id="testView"><h1>Test</h1></div>' ).appendTo( 'body' );

	view = new ChildView( { el: '#testView' } );
	assert.strictEqual( view.firstHeading(), 'Test', 'register additional functions' );
	$testEl.remove();
} );

QUnit.test( 'View.extend, with defined template', 4, function( assert ) {
	var ChildView, view;
	ChildView = View.extend( {
		className: 'my-class',
		template: M.template.compile( '<h1>{{title}}</h1><p>{{content}}</p>', 'xyz' ),
		title: function() {
			return this.$( 'h1' ).text();
		},
		content: function() {
			return this.$( 'p' ).text();
		}
	} );

	view = new ChildView( { title: 'Test', content: 'Some content' } );
	assert.strictEqual( view.$el[0].tagName.toUpperCase(), 'DIV', 'wrap template in <div>' );
	assert.strictEqual( view.$el.attr( 'class' ), 'my-class', 'set class for $el' );
	assert.strictEqual( view.title(), 'Test', 'fill template with data from options' );
	assert.strictEqual( view.content(), 'Some content', 'fill template with data from options' );
} );

QUnit.test( 'View.extend, with partials', 2, function( assert ) {
	var ParentView, ChildView, view;

	ParentView = View.extend( {
		template: M.template.compile( '<h1>{{title}}</h1>{{>content}}', 'xyz' )
	} );

	ChildView = ParentView.extend( {
		templatePartials: {
			content: M.template.compile( '<p>{{text}}</p>', 'xyz' )
		}
	} );

	view = new ChildView( { title: 'Test', text: 'Some content' } );
	assert.strictEqual( view.$( 'h1' ).text(), 'Test', 'fill template with data from options' );
	assert.strictEqual( view.$( 'p' ).text(), 'Some content', 'fill partial with data from options' );
} );

QUnit.test( 'View.extend, extending partials', 1, function( assert ) {
	var ParentView, ChildView, view;

	ParentView = View.extend( {
		templatePartials: {
			a: 1,
			b: 2
		}
	} );

	ChildView = ParentView.extend( {
		templatePartials: {
			b: 3,
			c: 4
		}
	} );

	view = new ChildView();
	assert.deepEqual( view.templatePartials, { a: 1, b: 3, c: 4 } );
} );

QUnit.test( 'View.extend, extending defaults', 1, function( assert ) {
	var ParentView, ChildView, view;

	ParentView = View.extend( {
		defaults: {
			a: 1,
			b: 2
		}
	} );

	ChildView = ParentView.extend( {
		defaults: {
			b: 3,
			c: 4
		}
	} );

	view = new ChildView( { c: 5 } );
	assert.deepEqual( view.options, { a: 1, b: 3, c: 5 } );
} );

QUnit.test( 'View#preRender', 1, function( assert ) {
	var ChildView, view;
	ChildView = View.extend( {
		template: M.template.compile( '<p>{{text}}</p>', 'xyz' ),
		preRender: function( options ) {
			options.text = 'hello';
		}
	} );

	view = new ChildView();
	assert.strictEqual( view.$el.html(), '<p>hello</p>', 'manipulate template data' );
} );

QUnit.test( 'View#postRender', 1, function( assert ) {
	var ChildView, view, spy = this.sandbox.spy();
	ChildView = View.extend( {
		postRender: function() {
			spy();
		}
	} );

	view = new ChildView();
	assert.ok( spy.calledOnce, 'invoke postRender' );
} );

}( mw.mantle, jQuery) );

Zerion Mini Shell 1.0