dojo.provide("tests.webmap.widget.ThemeSelector");

dojo.require("doh.runner");
dojo.require("webmap.widget.ThemeSelector");
dojo.require("tests.Util");

var div;
function doThemeSelectorSetup(){
	tests.Util.resetDom();
	div = document.createElement("div");
	document.body.appendChild(div);
}

doh.register("tests.webmap.widget.ThemeSelector", 
	[
		{
			name: "postMixInProperties_postCreate",
			setUp: function(){
				doThemeSelectorSetup();
			},
			runTest: function(){
				var ts = new webmap.widget.ThemeSelector({}, div);
				tests.assertEqual(1, ts._subscriptions.length);
				tests.assertEqual("webmapThemeSelectorButton", ts.themeSelectorButton.focusNode.className);
				tests.assertEqual("&nbsp;", ts.themeSelectorButton.focusNode.innerHTML);
				ts.destroy();
			}
		},
		{
			name: "doHover_doMouseout",
			setUp: function(){
				doThemeSelectorSetup();
			},
			runTest: function(){
				var ts = new webmap.widget.ThemeSelector({}, div);
				ts.doHover();
				tests.assertEqual("webmapThemeSelectorButton webmapThemeSelectorButtonHover", ts.themeSelectorButton.focusNode.className);
				ts.doMouseout();
				tests.assertEqual("webmapThemeSelectorButton", ts.themeSelectorButton.focusNode.className);
				ts.destroy();
			}
		},
		// TODO: Sarah - write test for set choices where is Dormant
		{
			name: "_setChoices_chooseLayer",
			setUp: function(){
				doThemeSelectorSetup();
			},
			runTest: function(){
				var ts = new webmap.widget.ThemeSelector({}, div);
				tests.assertFalse(ts._choicesSet);
				webmap.publish("webmap.MapManager.mapDataChanged", [
					{
						layers:[{id:"zones", layers:[{id:"cd", name:"Community District"},{id:"zip", name:"Zip Code"}]}],
						clientData:{themeLayerId:"cd"}
					}
				]);
				tests.assertTrue(ts._choicesSet);
				var icons = dojo.query(".webmapThemeSelectorUnChecked");
				tests.assertEqual(4, icons.length);
				for (var i = 0; i < icons.length; i++){
					if (dijit.getEnclosingWidget(icons[i]).id == "cd" || dijit.getEnclosingWidget(icons[i]).id == "polygonTheme")
						tests.assertEqual("dijitMenuItemIcon webmapThemeSelectorUnChecked webmapThemeSelectorChecked", icons[i].className);
					else
						tests.assertEqual("dijitMenuItemIcon webmapThemeSelectorUnChecked", icons[i].className);
				}
				ts.chooseLayer(dijit.byId("zip"));
				icons = dojo.query(".webmapThemeSelectorUnChecked");
				tests.assertEqual(4, icons.length);
				for (var i = 0; i < icons.length; i++){
					if (dijit.getEnclosingWidget(icons[i]).id == "zip" || dijit.getEnclosingWidget(icons[i]).id == "polygonTheme")
						tests.assertEqual("dijitMenuItemIcon webmapThemeSelectorUnChecked webmapThemeSelectorChecked", icons[i].className);
					else
						tests.assertEqual("dijitMenuItemIcon webmapThemeSelectorUnChecked", icons[i].className);
				}
				ts.chooseLayer(dijit.byId("pointTheme"));
				for (var i = 0; i < icons.length; i++){
					if (dijit.getEnclosingWidget(icons[i]).id == "pointTheme")
						tests.assertEqual("dijitMenuItemIcon webmapThemeSelectorUnChecked webmapThemeSelectorChecked", icons[i].className);
					else
						tests.assertEqual("dijitMenuItemIcon webmapThemeSelectorUnChecked", icons[i].className);
				}
				ts.destroy();
			}
		},
		{
			name: "chooseLayer_doNotPublish",
			setUp: function(){
			},
			runTest: function(){
				console.warn("Write me!"); try{notWritten++;}catch(ignore){}
			}
		},
		{
			name: "_getPolygonLayers",
			setUp: function(){
				doThemeSelectorSetup();
			},
			runTest: function(){
				var ts = new webmap.widget.ThemeSelector({}, div);
				var allLayers = [{id:"poi"}, {id:"zones", layers:[{id:"cd", name:"Community District"},{id:"zip", name:"Zip Code"}]}];
				tests.assertEqual(allLayers[1].layers, ts._getPolygonLayers(allLayers));
				allLayers = [{id:"poi"}, {id:"other", layers:[{id:"cd", name:"Community District"},{id:"zip", name:"Zip Code"}]}];
				tests.assertEqual([], ts._getPolygonLayers(allLayers));
				ts.destroy();
			}
		}
	]
);