dojo.provide("tests.webmap.widget.EditToolbar");

dojo.require("doh.runner");
dojo.require("webmap.widget.EditToolbar");
dojo.require("tests.Util");

var div;
function doEditToolbarSetup(){
	tests.Util.resetDom();
	div = document.createElement("div");
	document.body.appendChild(div);
}
doh.register("tests.webmap.widget.EditToolbar", 
	[
		{
			name: "postCreate",
			widget: null,
			connect: dojo.connect,
			connectArgs: [],
			call: webmap.widget.EditToolbar.superclass.postCreate.call,
			callArgs: [],
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				webmap.widget.EditToolbar.superclass.postCreate.call = function(a){
					_this.callArgs.push(a);
				};
				dojo.connect = function (a0,a1,a2,a3){
					_this.connectArgs.push([a0,a1,a2,a3]);
					return _this.connect(a0,a1,a2,a3);
				};
				this.widget = new webmap.widget.EditToolbar({
					templateString:"<div></div>"
				},div);
			},
			runTest: function(){
				tests.assertEqual([[document, "onclick", this.widget, "_hide"]], this.connectArgs);
				tests.assertEqual([this.widget], this.callArgs);
			},
			tearDown: function(){
				webmap.widget.EditToolbar.superclass.postCreate.call = this.call;
				dojo.connect = this.connect;
				this.widget.destroy();
			}
		},
		{
			name: "reset",
			widget: null,
			byId: dijit.byId,
			removeClass: dojo.removeClass,
			ids:[],
			removes:[],
			icons:[],
			buttons:{bold:{iconNode:"boldNode", checked:true, iconClass:"bold"},
				italic:{iconNode:"italicNode", checked:true, iconClass:"italic"},
				underline:{iconNode:"underlineNode", checked:true, iconClass:"underline"}
			},
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.widget = new webmap.widget.EditToolbar({
					_getIconHoverClass:function(a){
						_this.icons.push(a);
						return a + "Hover";
					}
				},div);
				dijit.byId = function(id){
					_this.ids.push(id);
					return _this.buttons[id.split(".")[1]];
				};
				dojo.removeClass = function(a0,a1){
					_this.removes.push([a0,a1]);
				};
			},
			runTest: function(){
				var id = this.widget.id;
				this.widget.reset();
				tests.assertEqual([
					id + ".bold", 
					id + ".italic",
					id + ".underline"], this.ids);
				tests.assertEqual(["bold", "italic", "underline"], this.icons);
				tests.assertEqual([["boldNode", "boldHover"], ["italicNode", "italicHover"], 
					["underlineNode", "underlineHover"]], this.removes);
				this.widget.reset();
				tests.assertEqual([
					id + ".bold", 
					id + ".italic",
					id + ".underline", 
					id + ".bold",
					id + ".italic", 
					id + ".underline"], this.ids);
				tests.assertEqual(["bold", "italic", "underline"], this.icons);
				tests.assertEqual([["boldNode", "boldHover"], ["italicNode", "italicHover"], 
					["underlineNode", "underlineHover"]], this.removes);
			},
			tearDown: function(){
				dijit.byId = this.byId;
				dojo.removeClass = this.removeClass;
				this.widget.destroy();
			}
		},
		{
			name: "setFont",
			widget: null,
			editor: null,
			exeArgs: [],
			setUp: function(){
				doEditToolbarSetup();
				this.widget = new webmap.widget.EditToolbar({},div);
				var _this = this;
				this.editor = {
					execCommand: function(a0, a1){
						_this.exeArgs.push([a0, a1]);
					}
				};
			},
			runTest: function(){
				this.widget.setFont("Verdana");
				tests.assertEqual([], this.exeArgs);
				this.widget.editor = this.editor;
				this.widget.setFont("Verdana");
				tests.assertEqual([["fontName", "Verdana"]], this.exeArgs);
			},
			tearDown: function(){
				this.widget.destroy();
			}
		},
		{
			name: "setFontSize",
			widget: null,
			editor: null,
			exeArgs: [],
			setUp: function(){
				doEditToolbarSetup();
				this.widget = new webmap.widget.EditToolbar({},div);
				var _this = this;
				this.editor = {
					execCommand: function(a0, a1){
						_this.exeArgs.push([a0, a1]);
					}
				};
			},
			runTest: function(){
				this.widget.setFontSize(5, 2);
				tests.assertEqual([], this.exeArgs);
				this.widget.editor = this.editor;
				this.widget.setFontSize(5, 2);
				tests.assertEqual([["fontSize", 7]], this.exeArgs);
			},
			tearDown: function(){
				this.widget.destroy();
			}
		},
		{
			name: "doCommand_has_editor_is_ToggleButton_is_checked",
			widget: null,
			getEnclosingWidget: dijit.getEnclosingWidget,
			removeClass: dojo.removeClass,
			addClass: dojo.addClass,
			getArgs: [],
			addArgs: [],
			removeArgs: [],
			exeArgs: [],
			iconArgs: [],
			chkArgs: [],
			evt:{target:"target"},
			button: null,
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.button = {
					declaredClass: "dijit.form.ToggleButton",
					checked: true,
					iconClass:"iconClass",
					iconNode:"iconNode",
					setChecked:function(a){_this.chkArgs.push(a);}
				};
				this.widget = new webmap.widget.EditToolbar({
					_getIconHoverClass: function(a){
						_this.iconArgs.push(a);
						return "iconHoverClass";
					},
					editor: {execCommand: function(a){_this.exeArgs.push(a);}}
				},div);
				var _this = this;
				dijit.getEnclosingWidget = function(a){
					_this.getArgs.push(a);
					return _this.button;
				};
				dojo.addClass = function(a0,a1){
					_this.addArgs.push([a0,a1]);
				}
				dojo.removeClass = function(a0,a1){
					_this.removeArgs.push([a0,a1]);
				}
			},
			runTest: function(){
				this.widget.doCommand(this.evt);
				tests.assertEqual([this.evt.target], this.getArgs);
				tests.assertEqual([this.button.iconClass], this.iconArgs);
				tests.assertEqual([], this.removeArgs);
				tests.assertEqual([[this.button.iconNode, "iconHoverClass"]], this.addArgs);
				tests.assertEqual([this.button.value], this.exeArgs);
				tests.assertEqual([], this.chkArgs);
			},
			tearDown: function(){
				this.widget.destroy();
				dijit.getEnclosingWidget = this.getEnclosingWidget;
				dojo.removeClass = this.removeClass;
				dojo.addClass = this.addClass;
			}
		},
		{
			name: "doCommand_has_editor_is_ToggleButton_not_checked",
			widget: null,
			getEnclosingWidget: dijit.getEnclosingWidget,
			removeClass: dojo.removeClass,
			addClass: dojo.addClass,
			getArgs: [],
			addArgs: [],
			removeArgs: [],
			exeArgs: [],
			iconArgs: [],
			chkArgs: [],
			evt:{target:"target"},
			button: null,
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.button = {
					declaredClass: "dijit.form.ToggleButton",
					checked: false,
					iconClass:"iconClass",
					iconNode:"iconNode",
					setChecked:function(a){_this.chkArgs.push(a);}
				};
				this.widget = new webmap.widget.EditToolbar({
					_getIconHoverClass: function(a){
						_this.iconArgs.push(a);
						return "iconHoverClass";
					},
					editor: {execCommand: function(a){_this.exeArgs.push(a);}}
				},div);
				var _this = this;
				dijit.getEnclosingWidget = function(a){
					_this.getArgs.push(a);
					return _this.button;
				};
				dojo.addClass = function(a0,a1){
					_this.addArgs.push([a0,a1]);
				}
				dojo.removeClass = function(a0,a1){
					_this.removeArgs.push([a0,a1]);
				}
			},
			runTest: function(){
				this.widget.doCommand(this.evt);
				tests.assertEqual([this.evt.target], this.getArgs);
				tests.assertEqual([this.button.iconClass], this.iconArgs);
				tests.assertEqual([[this.button.iconNode, "iconHoverClass"]], this.removeArgs);
				tests.assertEqual([], this.addArgs);
				tests.assertEqual([this.button.value], this.exeArgs);
				tests.assertEqual([], this.chkArgs);
			},
			tearDown: function(){
				this.widget.destroy();
				dijit.getEnclosingWidget = this.getEnclosingWidget;
				dojo.removeClass = this.removeClass;
				dojo.addClass = this.addClass;
			}
		},
		{
			name: "doCommand_no_editor_not_ToggleButton",
			widget: null,
			getEnclosingWidget: dijit.getEnclosingWidget,
			removeClass: dojo.removeClass,
			addClass: dojo.addClass,
			getArgs: [],
			addArgs: [],
			removeArgs: [],
			iconArgs: [],
			chkArgs: [],
			evt:{target:"target"},
			button: null,
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.button = {
					declaredClass: "NOT_dijit.form.ToggleButton",
					iconClass:"iconClass",
					iconNode:"iconNode"
				};
				this.widget = new webmap.widget.EditToolbar({
					_getIconHoverClass: function(a){
						_this.iconArgs.push(a);
						return "iconHoverClass";
					}
				},div);
				var _this = this;
				dijit.getEnclosingWidget = function(a){
					_this.getArgs.push(a);
					return _this.button;
				};
				dojo.addClass = function(a0,a1){
					_this.addArgs.push([a0,a1]);
				}
				dojo.removeClass = function(a0,a1){
					_this.removeArgs.push([a0,a1]);
				}
			},
			runTest: function(){
				this.widget.doCommand(this.evt);
				tests.assertEqual([this.evt.target], this.getArgs);
				tests.assertEqual([], this.iconArgs);
				tests.assertEqual([], this.removeArgs);
				tests.assertEqual([], this.addArgs);
			},
			tearDown: function(){
				this.widget.destroy();
				dijit.getEnclosingWidget = this.getEnclosingWidget;
				dojo.removeClass = this.removeClass;
				dojo.addClass = this.addClass;
			}
		},
		{
			name: "doCommand_no_editor_is_ToggleButton",
			widget: null,
			getEnclosingWidget: dijit.getEnclosingWidget,
			removeClass: dojo.removeClass,
			addClass: dojo.addClass,
			getArgs: [],
			addArgs: [],
			removeArgs: [],
			iconArgs: [],
			chkArgs: [],
			evt:{target:"target"},
			button: null,
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.button = {
					declaredClass: "dijit.form.ToggleButton",
					checked: false,
					iconClass:"iconClass",
					iconNode:"iconNode",
					setChecked:function(a){_this.chkArgs.push(a);}
				};
				this.widget = new webmap.widget.EditToolbar({
					_getIconHoverClass: function(a){
						_this.iconArgs.push(a);
						return "iconHoverClass";
					}
				},div);
				var _this = this;
				dijit.getEnclosingWidget = function(a){
					_this.getArgs.push(a);
					return _this.button;
				};
				dojo.addClass = function(a0,a1){
					_this.addArgs.push([a0,a1]);
				}
				dojo.removeClass = function(a0,a1){
					_this.removeArgs.push([a0,a1]);
				}
			},
			runTest: function(){
				this.widget.doCommand(this.evt);
				tests.assertEqual([this.evt.target], this.getArgs);
				tests.assertEqual([], this.iconArgs);
				tests.assertEqual([], this.removeArgs);
				tests.assertEqual([], this.addArgs);
				tests.assertEqual([false], this.chkArgs);
			},
			tearDown: function(){
				this.widget.destroy();
				dijit.getEnclosingWidget = this.getEnclosingWidget;
				dojo.removeClass = this.removeClass;
				dojo.addClass = this.addClass;
			}
		},
		{
			name: "doCommand_has_editor_not_ToggleButton",
			widget: null,
			getEnclosingWidget: dijit.getEnclosingWidget,
			removeClass: dojo.removeClass,
			addClass: dojo.addClass,
			getArgs: [],
			addArgs: [],
			removeArgs: [],
			exeArgs: [],
			iconArgs: [],
			evt:{target:"target"},
			button: null,
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.button = {
					declaredClass: "NOT_dijit.form.ToggleButton",
					iconClass:"iconClass",
					iconNode:"iconNode"
				};
				this.widget = new webmap.widget.EditToolbar({
					_getIconHoverClass: function(a){
						_this.iconArgs.push(a);
						return "iconHoverClass";
					},
					editor: {execCommand: function(a){_this.exeArgs.push(a);}}
				},div);
				var _this = this;
				dijit.getEnclosingWidget = function(a){
					_this.getArgs.push(a);
					return _this.button;
				};
				dojo.addClass = function(a0,a1){
					_this.addArgs.push([a0,a1]);
				}
				dojo.removeClass = function(a0,a1){
					_this.removeArgs.push([a0,a1]);
				}
			},
			runTest: function(){
				this.widget.doCommand(this.evt);
				tests.assertEqual([this.evt.target], this.getArgs);
				tests.assertEqual([this.button.iconClass], this.iconArgs);
				tests.assertEqual([], this.removeArgs);
				tests.assertEqual([[this.button.iconNode, "iconHoverClass"]], this.addArgs);
				tests.assertEqual([this.button.value], this.exeArgs);
			},
			tearDown: function(){
				this.widget.destroy();
				dijit.getEnclosingWidget = this.getEnclosingWidget;
				dojo.removeClass = this.removeClass;
				dojo.addClass = this.addClass;
			}
		},
		{
			name: "setTextColor",
			widget: null,
			editor: null,
			exeArgs: [],
			setUp: function(){
				doEditToolbarSetup();
				this.widget = new webmap.widget.EditToolbar({},div);
				var _this = this;
				this.editor = {
					execCommand: function(a0, a1){
						_this.exeArgs.push([a0, a1]);
					}
				};
			},
			runTest: function(){
				this.widget.setTextColor("red");
				tests.assertEqual([], this.exeArgs);
				this.widget.editor = this.editor;
				this.widget.setTextColor("red");
				tests.assertEqual([["foreColor", "red"]], this.exeArgs);
			},
			tearDown: function(){
				this.widget.destroy();
			}
		},
		{
			name: "setBackgroundColor",
			widget: null,
			editor: null,
			setArgs: [],
			setUp: function(){
				doEditToolbarSetup();
				this.widget = new webmap.widget.EditToolbar({},div);
				var _this = this;
				this.editor = {
					setBackgroundColor: function(c){
						_this.setArgs.push(c);
					}
				};
			},
			runTest: function(){
				this.widget.setBackgroundColor("red");
				tests.assertEqual([], this.setArgs);
				this.widget.editor = this.editor;
				this.widget.setBackgroundColor("red");
				tests.assertEqual(["red"], this.setArgs);
			},
			tearDown: function(){
				this.widget.destroy();
			}
		},
		{
			name: "setBorderColor",
			widget: null,
			editor: null,
			setArgs: [],
			setUp: function(){
				doEditToolbarSetup();
				this.widget = new webmap.widget.EditToolbar({},div);
				var _this = this;
				this.editor = {
					setBorderColor: function(c){
						_this.setArgs.push(c);
					}
				};
			},
			runTest: function(){
				this.widget.setBorderColor("red");
				tests.assertEqual([], this.setArgs);
				this.widget.editor = this.editor;
				this.widget.setBorderColor("red");
				tests.assertEqual(["red"], this.setArgs);
			},
			tearDown: function(){
				this.widget.destroy();
			}
		},
		{
			name: "setBorderWidth",
			widget: null,
			editor: null,
			setArgs: [],
			setUp: function(){
				doEditToolbarSetup();
				this.widget = new webmap.widget.EditToolbar({},div);
				var _this = this;
				this.editor = {
					setBorderWidth: function(w){
						_this.setArgs.push(w);
					}
				};
			},
			runTest: function(){
				this.widget.setBorderWidth(2, 1);
				tests.assertEqual([], this.setArgs);
				this.widget.editor = this.editor;
				this.widget.setBorderWidth(2, 1);
				tests.assertEqual([3], this.setArgs);
			},
			tearDown: function(){
				this.widget.destroy();
			}
		},
		{
			name: "doHover",
			widget: null,
			style: dojo.style,
			getEnclosingWidget: dijit.getEnclosingWidget,
			addClass: dojo.addClass,
			getArgs: [],
			styleArgs: [],
			addArgs: [],
			iconArgs: [],
			evt: {target:"target"},
			button: {
				iconNode:"iconNode", 
				iconClass:"iconClass"
			},
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.widget = new webmap.widget.EditToolbar({
					_getIconHoverClass:function(a){
						_this.iconArgs.push(a);
						return "iconHoverClass";
					}
				},div);
				dojo.style = function(a0, a1, a2){
					_this.styleArgs.push([a0, a1, a2]);
				};
				dijit.getEnclosingWidget = function(a){
					_this.getArgs.push(a);
					return _this.button;
				};
				dojo.addClass = function(a0, a1){
					_this.addArgs.push([a0, a1]);
				};
			},
			runTest: function(){
				this.widget.doHover(this.evt);
				tests.assertEqual([
					[this.evt.target, "borderColor", "transparent"],
					[this.evt.target, "backgroundColor", "transparent"]
					], this.styleArgs);
				tests.assertEqual([this.evt.target], this.getArgs);
				tests.assertEqual([this.button.iconClass], this.iconArgs);
				tests.assertEqual([[this.button.iconNode, "iconHoverClass"]], this.addArgs);
			},
			tearDown: function(){
				this.widget.destroy();
				dojo.style = this.style;
				dijit.getEnclosingWidget = this.getEnclosingWidget;
				dojo.addClass = this.addClass;
			}
		},
		{
			name: "doMouseout_not_ToggleButton",
			widget: null,
			getEnclosingWidget: dijit.getEnclosingWidget,
			removeClass: dojo.removeClass,
			getArgs: [],
			removeArgs: [],
			iconArgs: [],
			evt: {target:"target"},
			button: {
				declaredClass:"NOT_dijit.form.ToggleButton",
				iconNode:"iconNode", 
				iconClass:"iconClass"
			},
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.widget = new webmap.widget.EditToolbar({
					_getIconHoverClass:function(a){
						_this.iconArgs.push(a);
						return "iconHoverClass";
					}
				},div);
				dijit.getEnclosingWidget = function(a){
					_this.getArgs.push(a);
					return _this.button;
				};
				dojo.removeClass = function(a0, a1){
					_this.removeArgs.push([a0, a1]);
				};
			},
			runTest: function(){
				this.widget.doMouseout(this.evt);
				tests.assertEqual([this.evt.target], this.getArgs);
				tests.assertEqual([this.button.iconClass], this.iconArgs);
				tests.assertEqual([[this.button.iconNode, "iconHoverClass"]], this.removeArgs);
			},
			tearDown: function(){
				this.widget.destroy();
				dijit.getEnclosingWidget = this.getEnclosingWidget;
				dojo.removeClass = this.removeClass;
			}
		},
		{
			name: "doMouseout_ToggleButton_not_checked",
			widget: null,
			getEnclosingWidget: dijit.getEnclosingWidget,
			removeClass: dojo.removeClass,
			getArgs: [],
			removeArgs: [],
			iconArgs: [],
			evt: {target:"target"},
			button: {
				declaredClass:"dijit.form.ToggleButton",
				checked:false,
				iconNode:"iconNode", 
				iconClass:"iconClass"
			},
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.widget = new webmap.widget.EditToolbar({
					_getIconHoverClass:function(a){
						_this.iconArgs.push(a);
						return "iconHoverClass";
					}
				},div);
				dijit.getEnclosingWidget = function(a){
					_this.getArgs.push(a);
					return _this.button;
				};
				dojo.removeClass = function(a0, a1){
					_this.removeArgs.push([a0, a1]);
				};
			},
			runTest: function(){
				this.widget.doMouseout(this.evt);
				tests.assertEqual([this.evt.target], this.getArgs);
				tests.assertEqual([this.button.iconClass], this.iconArgs);
				tests.assertEqual([[this.button.iconNode, "iconHoverClass"]], this.removeArgs);
			},
			tearDown: function(){
				this.widget.destroy();
				dijit.getEnclosingWidget = this.getEnclosingWidget;
				dojo.removeClass = this.removeClass;
			}
		},
		{
			name: "doMouseout_ToggleButton_is_checked",
			widget: null,
			getEnclosingWidget: dijit.getEnclosingWidget,
			removeClass: dojo.removeClass,
			getArgs: [],
			removeArgs: [],
			iconArgs: [],
			evt: {target:"target"},
			button: {
				declaredClass:"dijit.form.ToggleButton",
				checked:true,
				iconNode:"iconNode", 
				iconClass:"iconClass"
			},
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.widget = new webmap.widget.EditToolbar({
					_getIconHoverClass:function(a){
						_this.iconArgs.push(a);
						return "iconHoverClass";
					}
				},div);
				dijit.getEnclosingWidget = function(a){
					_this.getArgs.push(a);
					return _this.button;
				};
				dojo.removeClass = function(a0, a1){
					_this.removeArgs.push([a0, a1]);
				};
			},
			runTest: function(){
				this.widget.doMouseout(this.evt);
				tests.assertEqual([this.evt.target], this.getArgs);
				tests.assertEqual([], this.iconArgs);
				tests.assertEqual([], this.removeArgs);
			},
			tearDown: function(){
				this.widget.destroy();
				dijit.getEnclosingWidget = this.getEnclosingWidget;
				dojo.removeClass = this.removeClass;
			}
		},
		{
			name: "show_has_window_connectedHidden_false_has_windowBox",
			widget: null,
			winWidget: null,
			style: dojo.style,
			connect: dojo.connect,
			addClass: dojo.addClass,
			styleArgs: [],
			connArgs: [],
			addArgs: [],
			showArgs: [],
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.winWidget = {
					domNode:"domNode",
					show: function(a){_this.showArgs.push(a);}
				};
				this.widget = new webmap.widget.EditToolbar({
					open:false,
					_connectedHidden:false,
					_windowBox: {l:30,t:10,w:200,h:100},
					_getWindow:function(){
						_this.gets++;
						return _this.winWidget;
					}
				}, div);
				dojo.connect = function(a0, a1, a2, a3){
					_this.connArgs.push([a0, a1, a2, a3]);
					return "conn";
				};
				dojo.style = function(a0, a1, a2){
					_this.styleArgs.push([a0, a1, a2]);
				};
				dojo.addClass = function(a0, a1){
					_this.addArgs.push([a0, a1]);
				};
			},
			runTest: function(){
				this.widget.show();
				tests.assertEqual([[this.widget.domNode, "display", "block"],
					[this.winWidget.domNode, "visibility", "visible"]], this.styleArgs);
				tests.assertEqual([[this.winWidget, "onAfterHide", this.widget, "_hidden"]], 
					this.connArgs);
				tests.assertEqual("conn", this.widget._connections[this.widget._connections.length - 1]);
				var expected = [];
				if (dojo.isIE) expected.push([this.winWidget.domNode, "webmapIeToolbarWindow"]);
				tests.assertEqual(expected, this.addArgs);
				tests.assertEqual([{properties:{
						left:{end: this.widget._windowBox.l},
						top:{end: this.widget._windowBox.t},
						width:{end: this.widget._windowBox.w},
						height:{end: this.widget._windowBox.h}}}], this.showArgs);
				tests.assertTrue(this.widget._connectedHidden);
			},
			tearDown: function(){
				this.widget._connections.pop();
				this.widget.destroy();
				dojo.style = this.style;
				dojo.connect = this.connect;
				dojo.addClass = this.addClass;
			}
		},
		{
			name: "show_has_window_connectedHidden_true_has_windowBox",
			widget: null,
			winWidget: null,
			style: dojo.style,
			connect: dojo.connect,
			addClass: dojo.addClass,
			styleArgs: [],
			connArgs: [],
			addArgs: [],
			showArgs: [],
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.winWidget = {
					domNode:"domNode",
					show: function(a){_this.showArgs.push(a);}
				};
				this.widget = new webmap.widget.EditToolbar({
					open:false,
					_connectedHidden:true,
					_windowBox: {l:30,t:10,w:200,h:100},
					_getWindow:function(){
						_this.gets++;
						return _this.winWidget;
					}
				}, div);
				dojo.connect = function(a0, a1, a2, a3){
					_this.connArgs.push([a0, a1, a2, a3]);
					return "conn";
				};
				dojo.style = function(a0, a1, a2){
					_this.styleArgs.push([a0, a1, a2]);
				};
				dojo.addClass = function(a0, a1){
					_this.addArgs.push([a0, a1]);
				};
			},
			runTest: function(){
				this.widget.show();
				tests.assertEqual([[this.widget.domNode, "display", "block"],
					[this.winWidget.domNode, "visibility", "visible"]], this.styleArgs);
				tests.assertEqual([], this.connArgs);
				var expected = [];
				if (dojo.isIE) expected.push([this.winWidget.domNode, "webmapIeToolbarWindow"]);
				tests.assertEqual(expected, this.addArgs);
				tests.assertEqual([{properties:{
						left:{end: this.widget._windowBox.l},
						top:{end: this.widget._windowBox.t},
						width:{end: this.widget._windowBox.w},
						height:{end: this.widget._windowBox.h}}}], this.showArgs);
				tests.assertTrue(this.widget._connectedHidden);
			},
			tearDown: function(){
				this.widget.destroy();
				dojo.style = this.style;
				dojo.connect = this.connect;
				dojo.addClass = this.addClass;
			}
		},
		{
			name: "show_has_window_connectedHidden_true_no_windowBox",
			widget: null,
			winWidget: null,
			style: dojo.style,
			connect: dojo.connect,
			addClass: dojo.addClass,
			styleArgs: [],
			connArgs: [],
			addArgs: [],
			showArgs: [],
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.winWidget = {
					domNode:"domNode",
					show: function(a){_this.showArgs.push(a);}
				};
				this.widget = new webmap.widget.EditToolbar({
					open:false,
					_connectedHidden:true,
					_windowBox: null,
					_getWindow:function(){
						_this.gets++;
						return _this.winWidget;
					}
				}, div);
				dojo.connect = function(a0, a1, a2, a3){
					_this.connArgs.push([a0, a1, a2, a3]);
					return "conn";
				};
				dojo.style = function(a0, a1, a2){
					_this.styleArgs.push([a0, a1, a2]);
				};
				dojo.addClass = function(a0, a1){
					_this.addArgs.push([a0, a1]);
				};
			},
			runTest: function(){
				this.widget.show();
				tests.assertEqual([[this.widget.domNode, "display", "block"],
					[this.winWidget.domNode, "visibility", "visible"]], this.styleArgs);
				tests.assertEqual([], this.connArgs);
				var expected = [];
				if (dojo.isIE) expected.push([this.winWidget.domNode, "webmapIeToolbarWindow"]);
				tests.assertEqual(expected, this.addArgs);
				tests.assertEqual([], this.showArgs);
				tests.assertTrue(this.widget._connectedHidden);
			},
			tearDown: function(){
				this.widget.destroy();
				dojo.style = this.style;
				dojo.connect = this.connect;
				dojo.addClass = this.addClass;
			}
		},
		{
			name: "hide_has_window_no_windowBox",
			widget: null,
			winWidget: null,
			getDimensions: webmap.util.DhtmlUtil.getDimensions,
			dimArgs: [],
			style: dojo.style,
			styleArgs: [],
			hides:0,
			gets: 0,
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.winWidget = {
					domNode:"winWidgetNode",
					hide: function(){_this.hides++;}
				};
				this.widget = new webmap.widget.EditToolbar({
					open:true,
					_windowBox: null,
					_getWindow:function(){
						_this.gets++;
						return _this.winWidget;
					}
				}, div);
				webmap.util.DhtmlUtil.getDimensions = function(n){
					_this.dimArgs.push(n);
					return "dimensions";
				};
				dojo.style = function(a0, a1, a2){
					_this.styleArgs.push([a0, a1, a2]);
				};
			},
			runTest: function(){
				this.widget.hide();
				tests.assertEqual(1, this.gets);
				tests.assertEqual([this.winWidget.domNode], this.dimArgs);
				tests.assertEqual("dimensions", this.widget._windowBox);
				tests.assertEqual(1, this.hides);
				tests.assertEqual([], this.styleArgs);
				tests.assertFalse(this.widget.open);
			},
			tearDown: function(){
				this.widget.destroy();
				webmap.util.DhtmlUtil.getDimensions = this.getDimensions;
				dojo.style = this.style;
			}
		},
		{
			name: "hide_has_window_has_windowBox",
			widget: null,
			winWidget: null,
			getDimensions: webmap.util.DhtmlUtil.getDimensions,
			dimArgs: [],
			style: dojo.style,
			styleArgs: [],
			hides:0,
			gets: 0,
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.winWidget = {
					domNode:"winWidgetNode",
					hide: function(){_this.hides++;}
				};
				this.widget = new webmap.widget.EditToolbar({
					open:true,
					_windowBox: "box",
					_getWindow:function(){
						_this.gets++;
						return _this.winWidget;
					}
				}, div);
				webmap.util.DhtmlUtil.getDimensions = function(n){
					_this.dimArgs.push(n);
					return "dimensions";
				};
				dojo.style = function(a0, a1, a2){
					_this.styleArgs.push([a0, a1, a2]);
				}
			},
			runTest: function(){
				this.widget.hide();
				tests.assertEqual(1, this.gets);
				tests.assertEqual([], this.dimArgs);
				tests.assertEqual("box", this.widget._windowBox);
				tests.assertEqual(1, this.hides);
				tests.assertEqual([], this.styleArgs);
				tests.assertFalse(this.widget.open);
			},
			tearDown: function(){
				this.widget.destroy();
				webmap.util.DhtmlUtil.getDimensions = this.getDimensions;
				dojo.style = this.style;
			}
		},
		{
			name: "hide_no_window",
			widget: null,
			getDimensions: webmap.util.DhtmlUtil.getDimensions,
			dimArgs: [],
			style: dojo.style,
			styleArgs: [],
			gets: 0,
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.widget = new webmap.widget.EditToolbar({
					open:true,
					_windowBox: "box",
					_getWindow:function(){
						_this.gets++;
						return null;
					}
				}, div);
				webmap.util.DhtmlUtil.getDimensions = function(n){
					_this.dimArgs.push(n);
					return "dimensions";
				};
				dojo.style = function(a0, a1, a2){
					_this.styleArgs.push([a0, a1, a2]);
				}
			},
			runTest: function(){
				this.widget.hide();
				tests.assertEqual(1, this.gets);
				tests.assertEqual([], this.dimArgs);
				tests.assertEqual("box", this.widget._windowBox);
				tests.assertEqual([[this.widget.domNode, "display", "none"]], this.styleArgs);
				tests.assertFalse(this.widget.open);
			},
			tearDown: function(){
				this.widget.destroy();
				webmap.util.DhtmlUtil.getDimensions = this.getDimensions;
				dojo.style = this.style;
			}
		},
		{
			name: "_hide_has_window_isMouseEventInToolbar_true",
			widget: null,
			winWidget: {domNode:"winWidgetNode"},
			editorWinNode: "editorWinNode",
			isMouseEventInNode: webmap.util.DhtmlUtil.isMouseEventInNode,
			gets: 0,
			hides: 0,
			utilArgs: [],
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.widget = new webmap.widget.EditToolbar({
					_getWindow:function(){
						_this.gets++;
						return _this.winWidget;
					},
					editor:{
						getWindow: function(){
							return _this.editorWinNode;
						}
					},
					hide: function(){_this.hides++;}
				}, div);
				webmap.util.DhtmlUtil.isMouseEventInNode = function(a0, a1){
					_this.utilArgs.push([a0, a1]);
					return true;
				}
			},
			runTest: function(){
				this.widget._hide("evt");
				tests.assertEqual(1, this.gets);
				tests.assertEqual([["evt", this.winWidget.domNode]], this.utilArgs);
				tests.assertEqual(0, this.hides);
			},
			tearDown: function(){
				this.widget.destroy();
				webmap.util.DhtmlUtil.isMouseEventInNode = this.isMouseEventInNode;
			}
		},
		{
			name: "_hide_has_window_isMouseEventInToolbar_false_no_editor",
			widget: null,
			winWidget: {domNode:"winWidgetNode"},
			editorWinNode: "editorWinNode",
			isMouseEventInNode: webmap.util.DhtmlUtil.isMouseEventInNode,
			gets: 0,
			hides: 0,
			utilArgs: [],
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.widget = new webmap.widget.EditToolbar({
					_getWindow:function(){
						_this.gets++;
						return _this.winWidget;
					},
					hide: function(){_this.hides++;}
				}, div);
				webmap.util.DhtmlUtil.isMouseEventInNode = function(a0, a1){
					_this.utilArgs.push([a0, a1]);
					return false;
				}
			},
			runTest: function(){
				this.widget._hide("evt");
				tests.assertEqual(1, this.gets);
				tests.assertEqual([["evt", this.winWidget.domNode]], this.utilArgs);
				tests.assertEqual(1, this.hides);
			},
			tearDown: function(){
				this.widget.destroy();
				webmap.util.DhtmlUtil.isMouseEventInNode = this.isMouseEventInNode;
			}
		},
		{
			name: "_hide_has_window_isMouseEventInToolbar_false_has_editor_isMouseEventInEditor_false",
			widget: null,
			winWidget: {domNode:"winWidgetNode"},
			editorWinNode: "editorWinNode",
			isMouseEventInNode: webmap.util.DhtmlUtil.isMouseEventInNode,
			gets: 0,
			hides: 0,
			utilArgs: [],
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.widget = new webmap.widget.EditToolbar({
					_getWindow:function(){
						_this.gets++;
						return _this.winWidget;
					},
					editor:{
						getWindow: function(){
							return _this.editorWinNode;
						}
					},
					hide: function(){_this.hides++;}
				}, div);
				webmap.util.DhtmlUtil.isMouseEventInNode = function(a0, a1){
					_this.utilArgs.push([a0, a1]);
					return false;
				}
			},
			runTest: function(){
				this.widget._hide("evt");
				tests.assertEqual(1, this.gets);
				tests.assertEqual([["evt", this.winWidget.domNode],["evt", this.editorWinNode]], this.utilArgs);
				tests.assertEqual(1, this.hides);
			},
			tearDown: function(){
				this.widget.destroy();
				webmap.util.DhtmlUtil.isMouseEventInNode = this.isMouseEventInNode;
			}
		},
		{
			name: "_hide_has_window_isMouseEventInToolbar_false_has_editor_isMouseEventInEditor_true",
			widget: null,
			winWidget: {domNode:"winWidgetNode"},
			editorWinNode: "editorWinNode",
			isMouseEventInNode: webmap.util.DhtmlUtil.isMouseEventInNode,
			gets: 0,
			hides: 0,
			utilArgs: [],
			setUp: function(){
				doEditToolbarSetup();
				var _this = this;
				this.widget = new webmap.widget.EditToolbar({
					_getWindow:function(){
						_this.gets++;
						return _this.winWidget;
					},
					editor:{
						getWindow: function(){
							return _this.editorWinNode;
						}
					},
					hide: function(){_this.hides++;}
				}, div);
				webmap.util.DhtmlUtil.isMouseEventInNode = function(a0, a1){
					_this.utilArgs.push([a0, a1]);
					return _this.utilArgs.length == 2;
				}
			},
			runTest: function(){
				this.widget._hide("evt");
				tests.assertEqual(1, this.gets);
				tests.assertEqual([["evt", this.winWidget.domNode],["evt", this.editorWinNode]], this.utilArgs);
				tests.assertEqual(0, this.hides);
			},
			tearDown: function(){
				this.widget.destroy();
				webmap.util.DhtmlUtil.isMouseEventInNode = this.isMouseEventInNode;
			}
		},
		{
			name: "_hidden",
			widget: null,
			setUp: function(){
				doEditToolbarSetup();
				this.widget = new webmap.widget.EditToolbar({open:true}, div);
			},
			runTest: function(){
				tests.assertTrue(this.widget.open);
				this.widget._hidden();
				tests.assertFalse(this.widget.open);
			},
			tearDown: function(){
				this.widget.destroy();
			}
		},
		{
			name: "_getWindow",
			widget: null,
			getEnclosingWidget: dijit.getEnclosingWidget,
			getArgs: [],
			domNode: null,
			goodNode: {parentNode:{parentNode:"grandpa"}},
			badNode1: {},
			badNode2: {parentNode:{parentNode:"grandma"}},
			setUp: function(){
				doEditToolbarSetup();
				this.widget = new webmap.widget.EditToolbar({}, div);
				this.domNode = this.widget.domNode;
				this.widget.domNode = this.goodNode;
				var _this = this;
				dijit.getEnclosingWidget = function(n){
					_this.getArgs.push(n);
					if (n == "grandpa")
						return "success";
					else
						return null;
				}
			},
			runTest: function(){
				//is in a window
				tests.assertEqual("success", this.widget._getWindow());
				tests.assertEqual(["grandpa"], this.getArgs);
				//not in a window ignore exception
				this.widget.domNode = this.badNode1;
				tests.assertEqual(null, this.widget._getWindow());
				tests.assertEqual(["grandpa"], this.getArgs);
				//not in a window
				this.widget.domNode = this.badNode2;
				tests.assertEqual(null, this.widget._getWindow());
				tests.assertEqual(["grandpa","grandma"], this.getArgs);
			},
			tearDown: function(){
				this.widget.domNode = this.domNode;
				this.widget.destroy();
				dijit.getEnclosingWidget = this.getEnclosingWidget;
			}
		},
		{
			name: "_getIconHoverClass",
			widget: null,
			setUp: function(){
				doEditToolbarSetup();
				this.widget = new webmap.widget.EditToolbar({},div);
			},
			runTest: function(){
				var hover = this.widget._getIconHoverClass("className1 webmapBold className2 webmapToolbarIcon");
				tests.assertEqual("webmapBoldHover", hover);
				hover = this.widget._getIconHoverClass("className1 webmapBoldHover className2 webmapToolbarIcon");
				tests.assertEqual("className1 webmapBoldHover className2 webmapToolbarIcon", hover);
				hover = this.widget._getIconHoverClass("className1 className2 webmapToolbarIcon webmapItalicHover");
				tests.assertEqual("className1 className2 webmapToolbarIcon webmapItalicHover", hover);
				hover = this.widget._getIconHoverClass("className1 className2 webmapToolbarIcon webmapItalic");
				tests.assertEqual("webmapItalicHover", hover);
				hover = this.widget._getIconHoverClass("className1 className2 webmapToolbarIcon");
				tests.assertEqual("className1 className2 webmapToolbarIcon", hover);
				hover = this.widget._getIconHoverClass("className1 className2 className3");
				tests.assertEqual("className1 className2 className3", hover);
			},
			tearDown: function(){
				this.widget.destroy();
			}
		}
	]
);