dojo.provide("tests.webmap.widget.PanControl");

dojo.require("doh.runner");
dojo.require("webmap.widget.PanControl");
dojo.require("tests.Util");

var div;
function doPanControlSetup(){
	tests.Util.resetDom();
	div = document.createElement("div");
	document.body.appendChild(div);
}

doh.register("tests.webmap.widget.PanControl", 
	[
		{
			name: "_pan",
			setUp: function(){
				doPanControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.PanControl({}, div);
				c.startup();
				var panArgs;
				var listener = function(args){panArgs = args;};
				var s = dojo.subscribe("webmap.widget.PanControl.panned", listener);
				c._pan("W");
				tests.assertEqual({direction:"W"}, panArgs);
				c._pan("N");
				tests.assertEqual({direction:"N"}, panArgs);
				c.destroy();
				dojo.unsubscribe(s);
			}
		},
		{
			name: "_doMouseOver",
			setUp: function(){
				doPanControlSetup();
			},
			runTest: function(){
				var getHovCount = 0;
				var evt;
				var f = function(e){evt = e;getHovCount++;return "hov";};
				var c = new webmap.widget.PanControl({_getHoverClass:f}, div);
				c.startup();
				c._doMouseOver({target:c.buttons[0]});
				tests.assertEqual(1, getHovCount);
				tests.assertEqual(c.buttons[0], evt);
				tests.assertTrue(c.buttons[0].className.indexOf(" hov") > -1);
				c.destroy();
			}
		},
		{
			name: "_doMouseOver_dormant",
			setUp: function(){
				doPanControlSetup();
			},
			runTest: function(){
				var getHovCount = 0;
				var evt = null;
				var f = function(e){evt = e;getHovCount++;return "hov";};
				var c = new webmap.widget.PanControl({_getHoverClass:f}, div);
				c.startup();
				window.undockedWin = "not null";
				c._doMouseOver({target:c.buttons[0]});
				tests.assertEqual(0, getHovCount);
				tests.assertEqual(null, evt);
				tests.assertTrue(c.buttons[0].className.indexOf(" hov") == -1);
				c.destroy();
				window.undockedWin = null;
			}
		},
		{
			name: "_doMouseOut",
			setUp: function(){
				doPanControlSetup();
			},
			runTest: function(){
				var getHovCount = 0;
				var evt;
				var f = function(e){evt = e;getHovCount++;return "hov";};
				var c = new webmap.widget.PanControl({_getHoverClass:f}, div);
				c.startup();
				dojo.addClass(c.buttons[0], "hov");
				c._doMouseOut({target:c.buttons[0]});
				tests.assertEqual(1, getHovCount);
				tests.assertEqual(c.buttons[0], evt);
				tests.assertTrue(c.buttons[0].className.indexOf(" hov") == -1);
				c.destroy();
			}
		},
		{
			name: "_doMouseOut_dormant",
			setUp: function(){
				doPanControlSetup();
			},
			runTest: function(){return;
				var getHovCount = 0;
				var evt = null;
				var f = function(e){evt = e;getHovCount++;return "hov";};
				var c = new webmap.widget.PanControl({_getHoverClass:f}, div);
				c.startup();
				window.undockedWin = "not null";
				dojo.addClass(c.buttons[0], "hov");
				c._doMouseOut({target:c.buttons[0]});
				tests.assertEqual(0, getHovCount);
				tests.assertEqual(null, evt);
				tests.assertTrue(c.buttons[0].className.indexOf(" hov") > -1);
				c.destroy();
				window.undockedWin = null;
			}
		},
		{
			name: "_doClick",
			setUp: function(){
				doPanControlSetup();
			},
			runTest: function(){
				var pans = 0;
				var dir;
				var f = function(d){pans++;dir = d;};
				var c = new webmap.widget.PanControl({_pan:f}, div);
				c.startup();
				c._doClick({target:c.buttons[0]});
				tests.assertEqual(1, pans);
				tests.assertEqual(c.buttons[0].getAttribute("direction"), dir);
				c.destroy();
			}
		},
		{
			name: "_doClick_dormant",
			setUp: function(){
				doPanControlSetup();
			},
			runTest: function(){return;
				var pans = 0;
				var dir = null;
				var f = function(d){pans++;dir = d;};
				var c = new webmap.widget.PanControl({_pan:f}, div);
				c.startup();
				window.undockedWin = "not null";
				c._doClick({target:c.buttons[0]});
				tests.assertEqual(0, pans);
				tests.assertEqual(null, dir);
				c.destroy();
				window.undockedWin = null;
			}
		},
		{
			name: "_getHoverClass",
			setUp: function(){
				doPanControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.PanControl({}, div);
				c.startup();
				tests.assertEqual("webmapPanWestHover", c._getHoverClass(c.buttons[0]));
				tests.assertEqual("webmapPanNorthHover", c._getHoverClass(c.buttons[1]));
				tests.assertEqual("webmapPanSouthHover", c._getHoverClass(c.buttons[2]));
				tests.assertEqual("webmapPanEastHover", c._getHoverClass(c.buttons[3]));
				c.destroy();
			}
		}
	]
);