dojo.provide("tests.webmap.widget.LoadingMessageControl");

dojo.require("doh.runner");
dojo.require("webmap.widget.LoadingMessageControl");
dojo.require("tests.Util");
dojo.require("webmap.MapManager");

var div;
function doLoadingMessageControlSetup(){
	tests.Util.resetDom();
	div = document.createElement("div");
	document.body.appendChild(div);
	window.undockedWin = null;
}

doh.register("tests.webmap.widget.LoadingMessageControl", 
	[
		{
			name: "postCreate",
			setUp: function(){
				doLoadingMessageControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.LoadingMessageControl({}, div);
				c.startup();
				tests.assertEqual(8, c._subscriptions.length);
				// TODO: sarah - verify which subscriptions
				c.destroy();
			}
		},
		{
			name: "testSubscriptions",
			setUp: function(){
				doLoadingMessageControlSetup();
			},
			runTest: function(){return;
				var c = new webmap.widget.LoadingMessageControl({}, div);
				c.startup();
				window.undockedWin = "not null";
				var hides = 0;
				var shows = 0;
				var resizes = 0;
				c._showLoading = function(){shows++;};
				c._hideLoading = function(){hides++;};
				c._resize = function(){resizes++;};
				webmap.publish("webmap.widget.MapControl.resized", []);
				webmap.publish("webmap.MapManager.ajaxCalled", []);
				//TODO: test all event handling
				//webmap.publish("webmap.MapManager.mapDataChanged", []);
				//webmap.publish("webmap.MapManager.queryingClientData", []);
				//webmap.publish("webmap.WindowManager.calloutShown", []);
				tests.assertEqual(1, shows);
				tests.assertEqual(0, hides);
				tests.assertEqual(1, resizes);
				window.undockedWin = null;
				c.destroy();
			}
		},
		{
			name: "_resize_domNode_display_none",
			setUp: function(){
				doLoadingMessageControlSetup();
			},
			runTest: function(){return;
				var c = new webmap.widget.LoadingMessageControl({}, div);
				c.startup();
				dojo.style(c.domNode, "width", "300px");
				dojo.style(c.domNode, "height", "100px");
				dojo.style(c.domNode, "display", "none");
				window.undockedWin = null;
				var shows = 0;
				var hides = 0;
				c._showLoading = function(){dojo.style(c.domNode, "display", "block");shows++;};
				c._hideLoading = function(){hides++;};
				dojo.publish("webmap.widget.MapControl.resized", [{w:800, h:600}]);
				tests.assertEqual(1, shows);
				tests.assertEqual(1, hides);
				tests.assertEqual(240, dojo.style(c.domNode, "left"));
				tests.assertEqual(246, dojo.style(c.domNode, "top"));
				c.destroy();
			}
		},
		{
			name: "_resize_domNode_display_block",
			setUp: function(){
				doLoadingMessageControlSetup();
			},
			runTest: function(){return;
				var c = new webmap.widget.LoadingMessageControl({}, div);
				c.startup();
				dojo.style(c.domNode, "width", "300px");
				dojo.style(c.domNode, "height", "100px");
				dojo.style(c.domNode, "display", "block");
				window.undockedWin = null;
				var shows = 0;
				c.countShows = function(){shows++;};
				var hides = 0;
				c.countHides = function(){hides++;};
				var conns = new Array();
				conns.push(dojo.connect(c, "_showLoading", c, "countShows"));
				conns.push(dojo.connect(c, "_hideLoading", c, "countHides"));
				c._resize({w:800, h:600});
				tests.assertEqual(0, shows);
				tests.assertEqual(0, hides);
				tests.assertEqual(240, dojo.style(c.domNode, "left"));
				tests.assertEqual(246, dojo.style(c.domNode, "top"));
				c.destroy();
				for (var i = 0; i < conns.length; i++)
					dojo.disconnect(conns[i]);
			}
		},
		{
			name: "_resize_domNode_dormant",
			setUp: function(){
				doLoadingMessageControlSetup();
			},
			runTest: function(){return;
				var c = new webmap.widget.LoadingMessageControl({}, div);
				c.startup();
				dojo.style(c.domNode, "left", "200px");
				dojo.style(c.domNode, "top", "100px");
				window.undockedWin = "not null";
				var shows = 0;
				c.countShows = function(){shows++;};
				var hides = 0;
				c.countHides = function(){hides++;};
				var conns = new Array();
				conns.push(dojo.connect(c, "_showLoading", c, "countShows"));
				conns.push(dojo.connect(c, "_hideLoading", c, "countHides"));
				c._resize({w:800, h:600});
				tests.assertEqual(0, shows);
				tests.assertEqual(0, hides);
				dojo.style(c.domNode, "display", "block");
				tests.assertEqual(200, dojo.style(c.domNode, "left"));
				tests.assertEqual(100, dojo.style(c.domNode, "top"));
				c.destroy();
				window.undockedWin = null;
				for (var i = 0; i < conns.length; i++)
					dojo.disconnect(conns[i]);
			}
		},
		{
			name: "_showLoading",
			setUp: function(){
				doLoadingMessageControlSetup();
			},
			runTest: function(){return;
				var c = new webmap.widget.LoadingMessageControl({}, div);
				c.startup();
				window.undockedWin = null;
				dojo.style(c.domNode, "display", "none");
				c._showLoading();
				tests.assertEqual("block", dojo.style(c.domNode, "display"));
				window.undockedWin = "not null";
				dojo.style(c.domNode, "display", "none");
				c._showLoading();
				tests.assertEqual("none", dojo.style(c.domNode, "display"));
				c.destroy();
				window.undockedWin = null;
			}
		},
		{
			name: "_hideLoading",
			setUp: function(){
				doLoadingMessageControlSetup();
			},
			runTest: function(){return;
				var c = new webmap.widget.LoadingMessageControl({}, div);
				c.startup();
				window.undockedWin = null;
				dojo.style(c.domNode, "display", "block");
				c._hideLoading();
				tests.assertEqual("none", dojo.style(c.domNode, "display"));
				window.undockedWin = "not null";
				dojo.style(c.domNode, "display", "block");
				c._hideLoading();
				//tests.assertEqual("block", dojo.style(c.domNode, "display"));
				c.destroy();
				window.undockedWin = null;
			}
		}
	]
);