Current File : /home/jvzmxxx/wiki/extensions/Flow/tests/qunit/engine/misc/test_mw-ui.enhance.js
( function ( $ ) {
	QUnit.module( 'ext.flow: mediawiki.ui.enhance' );

	QUnit.test( 'Forms with required fields have certain buttons disabled by default', 6, function ( assert ) {
		var $forms = [
			$( '<form><input class="mw-ui-input" required><button data-role="action" class="mw-ui-button">go</button></form>' ),
			$( '<form><input class="mw-ui-input" required><button data-role="submit" class="mw-ui-button">go</button></form>' ),
			$( '<form><textarea class="mw-ui-input"></textarea><input class="mw-ui-input"><button data-role="submit" class="mw-ui-button">go</button></form>' ),
			$( '<form><textarea class="mw-ui-input" required></textarea><button data-role="submit" class="mw-ui-button">go</button></form>' ),
			$( '<form><textarea class="mw-ui-input" required>foo</textarea><button data-role="submit" class="mw-ui-button">go</button></form>' ),
			$( '<form><textarea class="mw-ui-input" required>foo</textarea><input class="mw-ui-input" required><button data-role="submit" class="mw-ui-button">go</button></form>' )
		];

		$.each( $forms, function () {
			mw.flow.ui.enhance.enableFormWithRequiredFields( this );
		} );

		assert.strictEqual( $forms[ 0 ].find( 'button' ).prop( 'disabled' ), true,
			'Buttons with data-role=action are disabled when required fields are empty.' );
		assert.strictEqual( $forms[ 1 ].find( 'button' ).prop( 'disabled' ), true,
			'Buttons with data-role=action are disabled when required fields are empty.' );
		assert.strictEqual( $forms[ 2 ].find( 'button' ).prop( 'disabled' ), false,
			'Buttons with are enabled when no required fields in form.' );
		assert.strictEqual( $forms[ 3 ].find( 'button' ).prop( 'disabled' ), true,
			'Buttons are disabled when textarea is required but empty.' );
		assert.strictEqual( $forms[ 4 ].find( 'button' ).prop( 'disabled' ), false,
			'Buttons are enabled when required textarea has text.' );
		assert.strictEqual( $forms[ 5 ].find( 'button' ).prop( 'disabled' ), true,
			'Buttons are disabled when required textarea but required input does not.' );
	} );

	QUnit.test( 'mw-ui-tooltip', 4, function ( assert ) {
		assert.ok( mw.tooltip, 'mw.tooltip exists' );

		// Create a tooltip using body
		$( 'body' ).attr( 'title', 'test' );
		assert.ok( mw.tooltip.show( $( 'body' ) ), 'mw.ui.tooltip.show returned something' );
		assert.strictEqual( $( '.flow-ui-tooltip-content' ).filter( ':contains("test"):visible' ).length, 1,
			'Tooltip with text "test" is visible' );
		mw.tooltip.hide( $( 'body' ) );
		assert.strictEqual( $( '.flow-ui-tooltip-content' ).filter( ':contains("test")' ).length, 0,
			'Tooltip with text "test" is removed' );
		$( 'body' ).attr( 'title', '' );
	} );

	QUnit.test( 'mw-ui-modal', 15, function ( assert ) {
		var modal, $node;

		assert.ok( mw.tooltip, 'mw.Modal exists' );

		// Instantiation
		modal = mw.Modal();
		assert.strictEqual( modal.constructor, mw.Modal,
			'mw.Modal() returns mw.Modal instance' );

		modal = new mw.Modal();
		assert.strictEqual( modal.constructor, mw.Modal,
			'new mw.Modal() returns mw.Modal instance' );

		modal = mw.Modal( 'namefoo' );
		assert.strictEqual( modal.getName(), 'namefoo',
			'Modal sets name to "namefoo"' );

		// Title
		assert.strictEqual( modal.getNode().find( modal.headingSelector ).css( 'display' ), 'none',
			'Modal heading should be hidden with no title' );

		modal = mw.Modal( { title: 'titlefoo' } );
		assert.strictEqual( modal.getNode().find( modal.headingSelector ).text().indexOf( 'titlefoo' ) > -1, true,
			'Modal instantiation sets title to "titlefoo"' );

		modal.setTitle( 'titlebaz' );
		assert.strictEqual( modal.getNode().find( modal.headingSelector ).text().indexOf( 'titlebaz' ) > -1, true,
			'Modal setTitle to "titlebaz"' );

		// Content at instantiation
		modal = mw.Modal( { open: 'contentfoo' } );
		assert.strictEqual( modal.getContentNode().text(), 'contentfoo',
			'Modal instantiation sets content to "contentfoo"' );
		$node = modal.getNode();
		assert.strictEqual( $node.closest( 'body' ).length, 1,
			'Modal instantiation adds modal to body' );

		// Close
		modal.close();
		assert.strictEqual( $node.closest( 'body' ).length, 0,
			'Modal close removes it from page' );
		$node = null;

		// Content after instantiation
		modal = mw.Modal();

		modal.open( 'contentfoo' );
		assert.strictEqual( modal.getContentNode().html(), 'contentfoo',
			'Modal open string' );

		modal.open( '<h1>contentfoo</h1>' );
		assert.strictEqual( modal.getContentNode().html(), '<h1>contentfoo</h1>',
			'Modal open html string' );

		modal.open( $( '<h2>contentfoo</h2>' ) );
		assert.strictEqual( modal.getContentNode().html(), '<h2>contentfoo</h2>',
			'Modal open jQuery' );

		// @todo content Array
		// @todo content Object

		// Get nodes
		assert.strictEqual( modal.getNode().length, 1,
			'getNode has length' );
		assert.strictEqual( modal.getContentNode().length, 1,
			'getContentNode has length' );

		modal.close(); // kill the test modal

		// @todo setInteractiveHandler
		// @todo addSteps
		// @todo setStep
		// @todo getSteps
		// @todo prevOrClose
		// @todo nextOrSubmit
		// @todo prev
		// @todo next
		// @todo go
	} );

}( jQuery ) );