Index: _source/tests/plugins/toolbar/toolbar.html
===================================================================
--- _source/tests/plugins/toolbar/toolbar.html	(revision 0)
+++ _source/tests/plugins/toolbar/toolbar.html	(revision 0)
@@ -0,0 +1,122 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Plugin: toolbar</title>
+	<link rel="stylesheet" type="text/css" href="../../test.css" />
+	<script type="text/javascript" src="../../../../ckeditor_source.js"></script>
+	<script type="text/javascript" src="../../test.js"></script>
+	<script type="text/javascript">
+	//<![CDATA[
+/**
+ * Load the editor and wait for fully interactable.
+ * @param {Object} elementId
+ * @parma {Object} mode
+ * @param {Object} config
+ * @param {Object} callback Continuation with {@param editor}.
+ * @param {Object} context
+ */
+function prepareEditor( elementId, mode, config, callback, context )
+{
+	CKEDITOR.on( 'instanceReady',
+		function( evt )
+		{
+			var isMe = mode == CKEDITOR.ELEMENT_MODE_REPLACE ? 
+				evt.editor.name == elementId
+				: evt.editor.element.$ == 
+					document.getElementById( elementId );
+			if ( isMe )
+			{
+				callback.call( context, evt.editor );
+			}
+		}, this );
+
+	mode = mode || CKEDITOR.ELEMENT_MODE_REPLACE;
+	switch( mode )
+	{
+		case CKEDITOR.ELEMENT_MODE_REPLACE :
+			CKEDITOR.replace( elementId, config );
+			break;
+		case CKEDITOR.ELEMENT_MODE_APPENDTO :
+			CKEDITOR.appendTo( elementId, config );
+			break;
+	}
+}
+
+/**
+ * Find the specific UI item by row and column index.
+ * @param {Object} editor
+ * @param {Object} rowIndex
+ * @param {Object} colIndex
+ */
+function getToolbarUIItem( editor, rowIndex, colIndex){
+	return editor.toolbox.toolbars[ rowIndex -1].items[ colIndex-1];
+}
+
+CKEDITOR.test.addTestCase( ( function()
+	{
+		
+		// Local references.
+		var assert = CKEDITOR.test.assert, 
+			doc = CKEDITOR.document,
+			action = YAHOO.util.UserAction,
+			selector = YAHOO.util.Selector;
+			
+		return	{
+			
+			/**
+			 * Test 'tabIndex' and 'title' attribute of all toolbar items.  
+			 */
+			test_toolbarItemTabAndIndex : function()
+			{
+				prepareEditor( 'editor1', null, null, function( editor )
+					{
+						this.resume( function()
+						{
+							var toolbarItems = CKEDITOR.config.toolbar; 
+							var i , l = toolbarItems.length, row, rowIndex = 0;
+							for ( i = 0; i < l ; i++ ) {
+								row =  toolbarItems[ i ];
+								// Bypass line delimiter
+								if( row == '/'  )
+									continue;
+								rowIndex++;
+								
+								var j, s = toolbarItems[ i ].length, col, colIndex = 0;
+								for ( j = 0; j < s; j++ ) {
+									col = toolbarItems[ i ][ j ];
+										
+									colIndex++;
+								var item = getToolbarUIItem( editor,  rowIndex, colIndex );
+								
+								// By pass column dividers
+								if( !item.id )
+									continue;
+								
+								var itemElement = doc.getById( item.id );
+								
+								//Special case for combo
+								if( itemElement.hasClass( 'cke_rcombo' ) )
+										itemElement = itemElement.getElementsByTag( 'a' ).getItem( 0 );
+										
+								assert.isTrue( !!itemElement.getAttribute( 'title' ),  
+									'Toolbar item ' + col + ' doesn\'t have description title.' );
+								assert.areEqual( -1, itemElement.getAttribute( 'tabIndex' ),  
+									'Toolbar item ' + col + ' doesn\'t have correct tabIndex.' );
+								}
+							}
+							
+						} );
+					}, this );
+					this.wait();	        
+			},
+
+			name :document.title
+		};
+	} )() );
+	//]]>
+	</script>
+</head>
+<body>
+	<textarea id="editor1" name="editor1"></textarea>
+</body>
+</html>
