/* bender-tags: editor,unit */
/* bender-ckeditor-plugins: wysiwygarea */

// Clean up all instances been created on the page.
function removeAllInstances() {
	var allInstances = CKEDITOR.instances;
	for ( var i in allInstances ) {
		CKEDITOR.remove(  allInstances[ i ] );
	}
}

bender.test( {
	setUp: function() {
		removeAllInstances();
	},

	test_replaceId: function() {
		CKEDITOR.replace( 'editor1' );
		assert.isObject( CKEDITOR.instances.editor1, 'editor instance not found' );
		assert.areSame( 'editor1', CKEDITOR.instances.editor1.name, 'instance name doesn\'t match' );
		assert.areSame( document.getElementById( 'editor1' ), CKEDITOR.instances.editor1.element.$, 'instance element doesn\'t match' );
	},

	test_replaceName: function() {
		CKEDITOR.replace( 'editor2' );
		assert.isObject( CKEDITOR.instances.editor2, 'editor instance not found' );
		assert.areSame( 'editor2', CKEDITOR.instances.editor2.name, 'instance name doesn\'t match' );
		assert.areSame( document.getElementsByName( 'editor2' )[ 0 ], CKEDITOR.instances.editor2.element.$, 'instance element doesn\'t match' );
	},

	test_replaceElement: function() {
		CKEDITOR.replace( document.getElementById( 'editor5' ) );
		assert.isObject( CKEDITOR.instances.editor5, 'editor instance not found' );
		assert.areSame( 'editor5', CKEDITOR.instances.editor5.name, 'instance name doesn\'t match' );
		assert.areSame( document.getElementById( 'editor5' ), CKEDITOR.instances.editor5.element.$, 'instance element doesn\'t match' );
	},


	test_replaceError: function() {
		assert.throwsError( Error, function() {
			CKEDITOR.replace( 'error' );
		} );
	},

	test_replaceAll_Class: function() {
		CKEDITOR.replaceAll( 'myclass' );

		assert.isObject( CKEDITOR.instances.editor3, 'editor3 instance not found' );
		assert.areSame( 'editor3', CKEDITOR.instances.editor3.name, 'editor3 instance name doesn\'t match' );
		assert.areSame( document.getElementById( 'editor3' ), CKEDITOR.instances.editor3.element.$, 'editor3 instance element doesn\'t match' );

		assert.isObject( CKEDITOR.instances.editor4, 'editor4 instance not found' );
		assert.areSame( 'editor4', CKEDITOR.instances.editor4.name, 'editor4 instance name doesn\'t match' );
		assert.areSame( document.getElementsByName( 'editor4' )[ 0 ], CKEDITOR.instances.editor4.element.$, 'editor4 instance element doesn\'t match' );

		assert.isUndefined( CKEDITOR.instances.editor6, 'editor6 should be undefined' );
		assert.isUndefined( CKEDITOR.instances.editor7, 'editor7 should be undefined' );
		assert.isUndefined( CKEDITOR.instances.editor8, 'editor8 should be undefined' );
		assert.isUndefined( CKEDITOR.instances.editor8, 'editor9 should be undefined' );
	},

	test_replaceAll_Function: function() {
		CKEDITOR.replaceAll( function( textarea ) {
			return ( textarea.id != 'editor6' && textarea.id != 'editor8' );
		} );

		assert.isObject( CKEDITOR.instances.editor7, 'editor7 instance not found' );
		assert.areSame( 'editor7', CKEDITOR.instances.editor7.name, 'editor7 instance name doesn\'t match' );
		assert.areSame( document.getElementById( 'editor7' ), CKEDITOR.instances.editor7.element.$, 'editor7 instance element doesn\'t match' );

		assert.isObject( CKEDITOR.instances.editor9, 'editor9 instance not found' );
		assert.areSame( 'editor9', CKEDITOR.instances.editor9.name, 'editor9 instance name doesn\'t match' );
		assert.areSame( document.getElementById( 'editor9' ), CKEDITOR.instances.editor9.element.$, 'editor9 instance element doesn\'t match' );

		assert.isUndefined( CKEDITOR.instances.editor6, 'editor6 should be undefined' );
		assert.isUndefined( CKEDITOR.instances.editor8, 'editor8 should be undefined' );
	},

	test_replaceAll: function() {
		CKEDITOR.replaceAll();

		assert.isObject( CKEDITOR.instances.editor6, 'editor6 instance not found' );
		assert.areSame( 'editor6', CKEDITOR.instances.editor6.name, 'editor6 instance name doesn\'t match' );
		assert.areSame( document.getElementById( 'editor6' ), CKEDITOR.instances.editor6.element.$, 'editor6 instance element doesn\'t match' );

		assert.isObject( CKEDITOR.instances.editor8, 'editor8 editor instance not found' );
		assert.areSame( 'editor8', CKEDITOR.instances.editor8.name, 'editor8 instance name doesn\'t match' );
		assert.areSame( document.getElementById( 'editor8' ), CKEDITOR.instances.editor8.element.$, 'editor8 instance element doesn\'t match' );
	}
} );