<script src="../../JavascriptTestRunner.js"></script>
<script src="../../../Commands/InsertFluidGridLayoutDivDialog.js"></script>
<script language="javascript">   
 
var runner = new TestRunner();  
var mocker = runner.mocker;    

runner.addTestCase( 
{
	name:	'Public functions check', 

	test:	function()
		{					
			var self = new CssGrids.InsertFluidGridLayoutDivDialog();
		
			runner.assertListedPublicFunctionsExist(1, self);
				
			var publicFunctions = [
					'onLoad',
					'onClick_OkButton'		
				];

			runner.assertFunctionsArePublic(2, self, publicFunctions);

		}
});

runner.addTestCase(
{
	name:	'alert',

	test:	function()
		{
			runner.assertTrue('Just so it does not show up when dumping untested functions.', true);
		}
});

runner.addTestCase(
{
	name:	'divIdIsValid',

	test:	function()
		{
			var self = mocker.loadObject(new CssGrids.InsertFluidGridLayoutDivDialog(), 'divIdIsValid');
			
			mocker.bindChainRootToObject('self', self);

			//
			
			mocker.mock('self.getTrimmedStr_DivId()', '');
			mocker.mock('self.consts.msgs.pleaseProvideDivId');	
			mocker.mock('self.reportError()');
			mocker.mock('self.setFocusToDivId()');
			mocker.mock('self.getIdList()');
			
			var retVal = self.divIdIsValid();
			
			runner.assertParamsPassedIn(1, self.reportError, [self.consts.msgs.pleaseProvideDivId]);
			runner.assertCallCount(2, self.setFocusToDivId, 1);
			runner.assertCallCount(3, self.getIdList, 0);
			runner.assertFalse(4, retVal);
			
			//

			mocker.resetParamsAndCallCounts();
			
			mocker.mock('self.getTrimmedStr_DivId()', 'div3');
			mocker.mock('self.getIdList()', ['div1','div2','div3']);
			mocker.mock('self.refs.dwscripts.sprintf()', 'err txt');
			mocker.mock('self.refs.dw.getDocumentDOM().isValidIDValue()');
					
			var retVal = self.divIdIsValid();
			
			runner.assertParamsPassedIn(5, self.refs.dwscripts.sprintf, [self.consts.msgs.idAlreadyInUse, self.getTrimmedStr_DivId()]);
			runner.assertParamsPassedIn(6, self.reportError, [self.refs.dwscripts.sprintf()]);
			runner.assertCallCount(7, self.setFocusToDivId, 1);
			runner.assertCallCount(7.5, self.refs.dw.getDocumentDOM().isValidIDValue, 0);
			runner.assertFalse(8, retVal);
						
			//
			
			mocker.resetParamsAndCallCounts();
			
			mocker.mock('self.getIdList()', ['div1','div2']);
			mocker.mock('self.refs.dw.getDocumentDOM().isValidIDValue()', false);
			mocker.mock('self.consts.msgs.invalidIdValue');

			var retVal = self.divIdIsValid();
			
			runner.assertParamsPassedIn(9, self.refs.dw.getDocumentDOM().isValidIDValue, [self.getTrimmedStr_DivId(), true]);
			runner.assertParamsPassedIn(10, self.refs.dwscripts.sprintf, [self.consts.msgs.invalidIdValue, self.getTrimmedStr_DivId()]);			
			runner.assertParamsPassedIn(11, self.reportError, [self.refs.dwscripts.sprintf()]);
			runner.assertCallCount(12, self.setFocusToDivId, 1);
			runner.assertFalse(13, retVal);
					
			//

			mocker.resetParamsAndCallCounts();
			
			mocker.mock('self.refs.dw.getDocumentDOM().isValidIDValue()', true);

			var retVal = self.divIdIsValid();
			
			runner.assertTrue(14, retVal);
			
		}
});

runner.addTestCase(
{
	name:	'getHtmlToInsert',

	test:	function()
		{
			var self = mocker.loadObject(new CssGrids.InsertFluidGridLayoutDivDialog(), 'getHtmlToInsert');
			
			mocker.bindChainRootToObject('self', self);
			
			mocker.mock('self.getTrimmedStr_DivId()', 'div2');
			mocker.mock('self.refs.dw.loadString()', 'content txt');
			mocker.mock('self.refs.dwscripts.sprintf()', 'more txt');

			var retVal = self.getHtmlToInsert();
			
			runner.assertParamsPassedIn(1, self.refs.dw.loadString, ["command/insertFluidGridLayoutDiv/defaultContent"]);
			runner.assertParamsPassedIn(2, self.refs.dwscripts.sprintf, [self.refs.dw.loadString(), self.getTrimmedStr_DivId()]);
			runner.assertStringsEqual(3, retVal, '<div id="div2">more txt</div>');
			
		}
});

runner.addTestCase(
{
	name:	'getIdList',

	test:	function()
		{
			var self = mocker.loadObject(new CssGrids.InsertFluidGridLayoutDivDialog(), 'getIdList');
			
			function FakeElem(id)
			{
				this.id = id;
				this.getAttribute = function(){return id};	
			}
			
			var elemList = [new FakeElem('div1'), new FakeElem('div2'), new FakeElem('div3'), new FakeElem('')];
			
			mocker.bindChainRootToObject('self', self);
			
			mocker.mock('self.refs.dw.getDocumentDOM().getElementsByAttributeName()', elemList);
			mocker.mock('self.refs.dwscripts.trim()', function(str){return str});
			
			var retVal = self.getIdList();
			
			runner.assertArraysEqual(1, retVal, ['div1','div2','div3']);
		}
});

runner.addTestCase(
{
	name:	'getTrimmedStr_DivId',

	test:	function()
		{
			var self = mocker.loadObject(new CssGrids.InsertFluidGridLayoutDivDialog(), 'getTrimmedStr_DivId');
			
			mocker.bindChainRootToObject('self', self);
			
			mocker.mock('self.refs.document.getElementById().value', 'hello');
			mocker.mock('self.refs.dwscripts.trim()', 'trimmed txt');

			var retVal = self.getTrimmedStr_DivId();
			
			runner.assertParamsPassedIn(1, self.refs.document.getElementById, ['div_id']);
			runner.assertParamsPassedIn(2, self.refs.dwscripts.trim, ['hello']);
			runner.assertStringsEqual(3, retVal, 'trimmed txt');
		}
});

runner.addTestCase(
{
	name:	'isChecked_StartsNewRow',

	test:	function()
		{
			var self = mocker.loadObject(new CssGrids.InsertFluidGridLayoutDivDialog(), 'isChecked_StartsNewRow');
			
			mocker.bindChainRootToObject('self', self);
			
			mocker.mock('self.refs.document.getElementById().checked');

			var retVal = self.isChecked_StartsNewRow();
			
			runner.assertParamsPassedIn(1, self.refs.document.getElementById, ['starts_new_row']);
			runner.assertEqual(2, retVal, self.refs.document.getElementById().checked);						
		}
});

runner.addTestCase(
{
	name:	'onClick_OkButton',

	test:	function()
		{
			var self = mocker.loadObject(new CssGrids.InsertFluidGridLayoutDivDialog(), 'onClick_OkButton');
			
			var dom = {};
			
			mocker.bindChainRootToObject('dom', dom);
			mocker.bindChainRootToObject('self', self);
			
			mocker.mock('self.refs.dw.getDocumentDOM()', dom);
			mocker.mock('self.refs.dw.getDocumentDOM().insertHTML()');
			mocker.mock('dom.setInactiveDeviceIconsModified()');

			//
			
			mocker.mock('self.divIdIsValid()', false);
			mocker.mock('self.getHtmlToInsert()');
									
			var retVal = self.onClick_OkButton();
			
			runner.assertCallCount(1, self.getHtmlToInsert, 0);			
			
			//
			
			mocker.resetParamsAndCallCounts();
						
			mocker.mock('self.divIdIsValid()', true);
			mocker.mock('self.getHtmlToInsert()', 'html txt');
			mocker.mock('self.refs.styleSheetManager.insertRule()');
			mocker.mock('self.getTrimmedStr_DivId()', 'div2');
			mocker.mock('self.isChecked_StartsNewRow()');
			mocker.mock('dom.getElementById()');
			mocker.mock('dom.nodeToOffsets()', [10,20]);
			mocker.mock('self.refs.dw.setSelection()');
			mocker.mock('self.refs.window.close()');

			var retVal = self.onClick_OkButton();			
			
			runner.assertParamsPassedIn(2, self.refs.dw.getDocumentDOM().insertHTML, ['html txt', false, false]);
			runner.assertParamsPassedIn(3, self.refs.styleSheetManager.insertRule, ["#" + self.getTrimmedStr_DivId(), self.isChecked_StartsNewRow()]);
			runner.assertParamsPassedIn(4, dom.getElementById, ['div2']);
			runner.assertParamsPassedIn(5, dom.nodeToOffsets, [dom.getElementById()]);
			runner.assertParamsPassedIn(6, self.refs.dw.setSelection, [20,20]);
			runner.assertCallCount(7, self.refs.window.close, 1);					
			runner.assertCallCount(7.5, dom.setInactiveDeviceIconsModified, 1);
			
			//
			
			mocker.resetParamsAndCallCounts();
			
			mocker.mock('dom.getElementById()', null);

			var retVal = self.onClick_OkButton();			
			
			runner.assertCallCount(8, dom.nodeToOffsets, 0);
			runner.assertCallCount(9, self.refs.dw.setSelection, 0);						
		}
});

runner.addTestCase(
{
	name:	'onLoad',

	test:	function()
		{
			var self = mocker.loadObject(new CssGrids.InsertFluidGridLayoutDivDialog(), 'onLoad');
			
			mocker.bindChainRootToObject('self', self);
			
			mocker.mock('self.consts.baseDivName');
			mocker.mock('self.refs.dwscripts.getUniqueId()');
			mocker.mock('self.setDivId()');
			mocker.mock('self.refs.window.close()');
			
			//
			
			mocker.mock('self.refs.styleSheetManager.loadGridProps()', true);

			var retVal = self.onLoad();
			
			runner.assertParamsPassedIn(1, self.refs.dwscripts.getUniqueId, [self.consts.baseDivName, true]);
			runner.assertParamsPassedIn(2, self.setDivId, [self.refs.dwscripts.getUniqueId()]);			
			runner.assertCallCount(2.5, self.refs.window.close, 0);
			
			//
			
			mocker.resetParamsAndCallCounts();
			
			mocker.mock('self.refs.styleSheetManager.loadGridProps()', false);

			var retVal = self.onLoad();
			
			runner.assertCallCount(3, self.refs.window.close, 1);
			runner.assertCallCount(4, self.setDivId, 0);
		}
});

runner.addTestCase(
{
	name:	'reportError',

	test:	function()
		{
			var self = mocker.loadObject(new CssGrids.InsertFluidGridLayoutDivDialog(), 'reportError');
			
			var msg = {};
			
			mocker.bindChainRootToObject('self', self);
			
			mocker.mock('self.alert()');

			var retVal = self.reportError(msg);
			
			runner.assertParamsPassedIn(1, self.alert, [msg]);
		}
});

runner.addTestCase(
{
	name:	'setDivId',

	test:	function()
		{
			var self = mocker.loadObject(new CssGrids.InsertFluidGridLayoutDivDialog(), 'setDivId');
			
			var id = {};
			
			mocker.bindChainRootToObject('self', self);
			
			mocker.mock('self.refs.document.getElementById().value');
			mocker.mock('self.refs.document.getElementById().select()');

			var retVal = self.setDivId(id);
			
			runner.assertParamsPassedIn(1, self.refs.document.getElementById, ['div_id']);
			runner.assertEqual(2, self.refs.document.getElementById().value, id);
			runner.assertCallCount(3, self.refs.document.getElementById().select, 1);
			
		}
});

runner.addTestCase(
{
	name:	'setFocusToDivId',

	test:	function()
		{
			var self = mocker.loadObject(new CssGrids.InsertFluidGridLayoutDivDialog(), 'setFocusToDivId');
			
			mocker.bindChainRootToObject('self', self);
			
			mocker.mock('self.refs.document.getElementById().focus()');
			
			self.setFocusToDivId = function () 
			{
			    self.refs.document.getElementById("div_id").focus();
			}
			
			var retVal = self.setFocusToDivId();
			
			runner.assertParamsPassedIn(1, self.refs.document.getElementById, ['div_id']);
			runner.assertCallCount(2, self.refs.document.getElementById().focus, 1);			
		}
});



runner.addTestCase(
{	
	name: 	'Dump Untested Functions',
	
	skip: 	1,

	test: 	function()  
			{				
				runner.dumpUntestedFunctions(new CssGrids.InsertFluidGridLayoutDivDialog());				
			} 
});

if ( 0 )
{
	var method = 'setFocusToDivId';
	
	prompt	(	'Your new test case:', 
				runner.testCaseCreator.createTestCase	(	new CssGrids.InsertFluidGridLayoutDivDialog(), 
															'self', 
															method, 
															'CssGrids.InsertFluidGridLayoutDivDialog'
														)
			);
}

