2 // Tests for System.Web.UI.WebControls.ImageMap.cs
\r
5 // Hagit Yidov (hagity@mainsoft.com
\r
7 // (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
\r
9 // Permission is hereby granted, free of charge, to any person obtaining
\r
10 // a copy of this software and associated documentation files (the
\r
11 // "Software"), to deal in the Software without restriction, including
\r
12 // without limitation the rights to use, copy, modify, merge, publish,
\r
13 // distribute, sublicense, and/or sell copies of the Software, and to
\r
14 // permit persons to whom the Software is furnished to do so, subject to
\r
15 // the following conditions:
\r
17 // The above copyright notice and this permission notice shall be
\r
18 // included in all copies or substantial portions of the Software.
\r
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
\r
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
\r
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
\r
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
\r
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
\r
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
\r
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\r
30 using NUnit.Framework;
\r
33 using System.Globalization;
\r
35 using System.Web.UI;
\r
36 using System.Web.UI.WebControls;
\r
37 using MonoTests.stand_alone.WebHarness;
\r
38 using MonoTests.SystemWeb.Framework;
\r
39 using System.Threading;
\r
41 namespace MonoTests.System.Web.UI.WebControls
\r
43 class PokerImageMap : ImageMap
\r
46 public PokerImageMap ()
\r
51 public object SaveState ()
\r
53 return SaveViewState ();
\r
56 public void LoadState (object o)
\r
61 public StateBag StateBag
\r
63 get { return base.ViewState; }
\r
66 public void DoOnClick (ImageMapEventArgs e)
\r
71 public void DoOnBubbleEven (Object source, ImageMapEventArgs e)
\r
73 base.OnBubbleEvent (source, e);
\r
77 public string Render ()
\r
79 StringWriter sw = new StringWriter ();
\r
80 HtmlTextWriter tw = new HtmlTextWriter (sw);
\r
83 return sw.ToString ();
\r
88 public class ImageMapTest
\r
91 public void SetUp ()
\r
93 WebTest.CopyResource (GetType (), "NoEventValidation.aspx", "NoEventValidation.aspx");
\r
99 public void ImageMap_DefaultProperties ()
\r
101 PokerImageMap imageMap = new PokerImageMap ();
\r
102 Assert.AreEqual (0, imageMap.StateBag.Count, "ViewState.Count");
\r
103 Assert.AreEqual (true, imageMap.Enabled, "Enabled");
\r
104 Assert.AreEqual (HotSpotMode.NotSet, imageMap.HotSpotMode, "HotSpotMode");
\r
105 Assert.AreEqual (0, imageMap.HotSpots.Count, "HotSpots.Count");
\r
106 Assert.AreEqual (string.Empty, imageMap.Target, "Target");
\r
110 public void ImageMap_AssignToDefaultProperties ()
\r
112 PokerImageMap imageMap = new PokerImageMap ();
\r
114 Assert.AreEqual (0, imageMap.StateBag.Count, "ViewState.Count");
\r
116 imageMap.Enabled = true;
\r
117 Assert.AreEqual (true, imageMap.Enabled, "Enabled");
\r
118 Assert.AreEqual (0, imageMap.StateBag.Count, "ViewState.Count-1");
\r
120 imageMap.HotSpotMode = HotSpotMode.Navigate;
\r
121 Assert.AreEqual (HotSpotMode.Navigate, imageMap.HotSpotMode, "HotSpotMode");
\r
122 Assert.AreEqual (1, imageMap.StateBag.Count, "ViewState.Count-2");
\r
124 imageMap.HotSpots.Add (new CircleHotSpot ());
\r
125 Assert.AreEqual (1, imageMap.HotSpots.Count, "HotSpots.Count");
\r
126 Assert.AreEqual (1, imageMap.StateBag.Count, "ViewState.Count-3");
\r
128 imageMap.Target = "Target";
\r
129 Assert.AreEqual ("Target", imageMap.Target, "Target");
\r
130 Assert.AreEqual (2, imageMap.StateBag.Count, "ViewState.Count-4");
\r
134 public void ImageMap_Defaults_Render ()
\r
136 PokerImageMap imageMap = new PokerImageMap ();
\r
137 string originalHtml = "<img src=\"\" style=\"border-width:0px;\" />";
\r
138 HtmlDiff.AssertAreEqual (imageMap.Render (), originalHtml, "RenderDefault");
\r
142 public void ImageMap_AssignedValues_RenderNavigate ()
\r
144 // HotSpotMode = Navigate using NavigateURL
\r
145 //-----------------------------------------
\r
146 PokerImageMap imageMap = new PokerImageMap ();
\r
147 imageMap.Enabled = true;
\r
148 imageMap.HotSpotMode = HotSpotMode.Navigate;
\r
149 imageMap.Target = "Target";
\r
150 CircleHotSpot circle = new CircleHotSpot ();
\r
151 circle.NavigateUrl = "NavigateURL";
\r
152 imageMap.HotSpots.Add (circle);
\r
153 string originalHtml = "<img src=\"\" usemap=\"#ImageMap\" style=\"border-width:0px;\" /><map name=\"ImageMap\">\r\n\t<area shape=\"circle\" coords=\"0,0,0\" href=\"NavigateURL\" target=\"Target\" title=\"\" alt=\"\" />\r\n</map>";
\r
154 HtmlDiff.AssertAreEqual (imageMap.Render (), originalHtml, "RenderNavigateTextAssigned");
\r
158 public void ImageMap_AssignedValues_RenderNavigateCircle ()
\r
160 // Circle.HotSpotMode = Navigate
\r
161 //------------------------------
\r
162 PokerImageMap imageMap = new PokerImageMap ();
\r
163 imageMap.Enabled = true;
\r
164 CircleHotSpot circle = new CircleHotSpot ();
\r
165 circle.AccessKey = "A";
\r
166 circle.AlternateText = "Circle";
\r
167 circle.HotSpotMode = HotSpotMode.Navigate;
\r
168 circle.NavigateUrl = "NavigateURL";
\r
169 circle.TabIndex = 1;
\r
170 circle.Radius = 10;
\r
173 imageMap.HotSpots.Add (circle);
\r
174 string originalHtml = "<img src=\"\" usemap=\"#ImageMap\" style=\"border-width:0px;\" /><map name=\"ImageMap\">\r\n\t<area shape=\"circle\" coords=\"30,40,10\" href=\"NavigateURL\" title=\"Circle\" alt=\"Circle\" accesskey=\"A\" tabindex=\"1\" />\r\n</map>";
\r
175 HtmlDiff.AssertAreEqual (imageMap.Render (), originalHtml, "RenderNavigateCircleTextAssigned");
\r
179 public void ImageMap_AssignedValues_RenderNavigateShapes ()
\r
181 // Rectangle/Polygon.HotSpotMode = Navigate
\r
182 //-----------------------------------------
\r
183 PokerImageMap imageMap = new PokerImageMap ();
\r
184 imageMap.Enabled = true;
\r
185 imageMap.HotSpotMode = HotSpotMode.NotSet;
\r
186 RectangleHotSpot rect = new RectangleHotSpot ();
\r
187 rect.AccessKey = "R";
\r
188 rect.AlternateText = "Rectangle";
\r
189 rect.HotSpotMode = HotSpotMode.Navigate;
\r
190 rect.NavigateUrl = "NavigateUrlRect";
\r
196 imageMap.HotSpots.Add (rect);
\r
197 imageMap.HotSpotMode = HotSpotMode.Navigate;
\r
198 PolygonHotSpot poly = new PolygonHotSpot ();
\r
199 poly.AccessKey = "P";
\r
200 poly.AlternateText = "Polygon";
\r
201 poly.NavigateUrl = "NavigateUrlPoly";
\r
203 poly.Coordinates = "10,20,30,40,50,60,100,200";
\r
204 imageMap.HotSpots.Add (poly);
\r
205 string originalHtml = "<img src=\"\" usemap=\"#ImageMap\" style=\"border-width:0px;\" /><map name=\"ImageMap\">\r\n\t<area shape=\"rect\" coords=\"30,20,40,10\" href=\"NavigateUrlRect\" title=\"Rectangle\" alt=\"Rectangle\" accesskey=\"R\" tabindex=\"1\" /><area shape=\"poly\" coords=\"10,20,30,40,50,60,100,200\" href=\"NavigateUrlPoly\" title=\"Polygon\" alt=\"Polygon\" accesskey=\"P\" tabindex=\"2\" />\r\n</map>";
\r
206 HtmlDiff.AssertAreEqual (imageMap.Render (), originalHtml, "RenderNavigateShapesTextAssigned");
\r
210 public void ImageMap_AssignedValues_RenderInactive ()
\r
212 // HotSpotMode = Inactive
\r
213 //-----------------------
\r
214 PokerImageMap imageMap = new PokerImageMap ();
\r
215 imageMap.Enabled = true;
\r
216 imageMap.HotSpotMode = HotSpotMode.Inactive;
\r
217 imageMap.Target = "Target";
\r
218 imageMap.HotSpots.Add (new CircleHotSpot ());
\r
219 string originalHtml = "<img src=\"\" usemap=\"#ImageMap\" style=\"border-width:0px;\" /><map name=\"ImageMap\">\r\n\t<area shape=\"circle\" coords=\"0,0,0\" nohref=\"true\" title=\"\" alt=\"\" />\r\n</map>";
\r
220 HtmlDiff.AssertAreEqual (imageMap.Render (), originalHtml, "RenderInaciveTextAssigned");
\r
224 public void ImageMap_AssignedValues_RenderDisabled ()
\r
228 PokerImageMap imageMap = new PokerImageMap ();
\r
229 imageMap.Enabled = false;
\r
230 imageMap.HotSpotMode = HotSpotMode.Navigate;
\r
231 imageMap.Target = "Target";
\r
232 CircleHotSpot circle = new CircleHotSpot ();
\r
233 circle.NavigateUrl = "NavigateURL";
\r
234 imageMap.HotSpots.Add (circle);
\r
235 string originalHtml = "<img disabled=\"disabled\" src=\"\" usemap=\"#ImageMap\" style=\"border-width:0px;\" /><map name=\"ImageMap\">\r\n\t<area shape=\"circle\" coords=\"0,0,0\" href=\"NavigateURL\" target=\"Target\" title=\"\" alt=\"\" />\r\n</map>";
\r
236 HtmlDiff.AssertAreEqual (imageMap.Render (), originalHtml, "RenderDisabledTextAssigne");
\r
240 public void ImageMap_ViewState ()
\r
242 PokerImageMap imageMap = new PokerImageMap ();
\r
243 imageMap.Enabled = true;
\r
244 Assert.AreEqual (true, imageMap.Enabled, "Enabled-beforecopy");
\r
245 imageMap.HotSpotMode = HotSpotMode.Navigate;
\r
246 Assert.AreEqual (HotSpotMode.Navigate, imageMap.HotSpotMode, "HotSpotMode-beforecopy");
\r
247 imageMap.HotSpots.Add (new CircleHotSpot ());
\r
248 Assert.AreEqual (1, imageMap.HotSpots.Count, "HotSpots.Count-beforecopy");
\r
249 imageMap.Target = "Target";
\r
250 Assert.AreEqual ("Target", imageMap.Target, "Target-beforecopy");
\r
251 object state = imageMap.SaveState ();
\r
252 PokerImageMap copy = new PokerImageMap ();
\r
253 copy.LoadState (state);
\r
254 Assert.AreEqual (true, copy.Enabled, "Enabled-aftercopy");
\r
255 Assert.AreEqual (HotSpotMode.Navigate, copy.HotSpotMode, "HotSpotMode-aftercopy");
\r
256 //Assert.AreEqual(1, copy.HotSpots.Count, "HotSpots.Count-aftercopy");
\r
257 Assert.AreEqual ("Target", copy.Target, "Target-aftercopy");
\r
261 private bool clicked = false;
\r
262 private string pbValue;
\r
264 private void ImageMapClickHandler (object sender, ImageMapEventArgs e)
\r
267 pbValue = e.PostBackValue;
\r
270 private void ResetEvents ()
\r
277 public void ImageMap_Event ()
\r
279 PokerImageMap imageMap = new PokerImageMap ();
\r
281 imageMap.HotSpotMode = HotSpotMode.PostBack;
\r
282 imageMap.Click += new ImageMapEventHandler (ImageMapClickHandler);
\r
283 Assert.AreEqual (false, clicked, "BeforeClick");
\r
284 imageMap.DoOnClick (new ImageMapEventArgs ("HotSpotName"));
\r
285 Assert.AreEqual (true, clicked, "AfterClick");
\r
289 public void ImageMap_EventCircle ()
\r
291 PokerImageMap imageMap = new PokerImageMap ();
\r
293 imageMap.HotSpotMode = HotSpotMode.NotSet;
\r
294 CircleHotSpot circle = new CircleHotSpot ();
\r
295 circle.HotSpotMode = HotSpotMode.PostBack;
\r
296 circle.PostBackValue = "myCircle";
\r
297 imageMap.HotSpots.Add (circle);
\r
298 imageMap.Click += new ImageMapEventHandler (ImageMapClickHandler);
\r
299 Assert.AreEqual ("Init", pbValue, "BeforeClick");
\r
300 imageMap.DoOnClick (new ImageMapEventArgs (circle.PostBackValue));
\r
301 Assert.AreEqual ("myCircle", pbValue, "AfterClick");
\r
305 public void ImageMap_EventRectangle ()
\r
307 PokerImageMap imageMap = new PokerImageMap ();
\r
309 imageMap.HotSpotMode = HotSpotMode.PostBack;
\r
310 RectangleHotSpot rect = new RectangleHotSpot ();
\r
311 rect.PostBackValue = "myRect";
\r
312 imageMap.HotSpots.Add (rect);
\r
313 imageMap.Click += new ImageMapEventHandler (ImageMapClickHandler);
\r
314 Assert.AreEqual ("Init", pbValue, "BeforeClick");
\r
315 imageMap.DoOnClick (new ImageMapEventArgs (rect.PostBackValue));
\r
316 Assert.AreEqual ("myRect", pbValue, "AfterClick");
\r
320 public void ImageMap_EventPolygon ()
\r
322 PokerImageMap imageMap = new PokerImageMap ();
\r
324 imageMap.HotSpotMode = HotSpotMode.NotSet;
\r
325 PolygonHotSpot poly = new PolygonHotSpot ();
\r
326 poly.HotSpotMode = HotSpotMode.PostBack;
\r
327 poly.PostBackValue = "myPoly";
\r
328 imageMap.HotSpots.Add (poly);
\r
329 imageMap.Click += new ImageMapEventHandler (ImageMapClickHandler);
\r
330 Assert.AreEqual ("Init", pbValue, "BeforeClick");
\r
331 imageMap.DoOnClick (new ImageMapEventArgs (poly.PostBackValue));
\r
332 Assert.AreEqual ("myPoly", pbValue, "AfterClick");
\r
335 public void ImageMap_BubbleEvent ()
\r
337 PokerImageMap imageMap = new PokerImageMap ();
\r
339 ImageMapEventArgs args = new ImageMapEventArgs ("HotSpotName");
\r
340 imageMap.Click += new ImageMapEventHandler (ImageMapClickHandler);
\r
341 Assert.AreEqual (false, clicked, "BeforeClick");
\r
342 imageMap.DoOnBubbleEven (imageMap, args);
\r
343 Assert.AreEqual (true, clicked, "AfterClick");
\r
346 private static void ImageMapClickHandler2 (object sender, ImageMapEventArgs e)
\r
348 WebTest.CurrentTest.UserData = e.PostBackValue;
\r
352 [Category ("NunitWeb")]
\r
353 public void ImageMap_PostBackRectangle ()
\r
355 WebTest t = new WebTest (PageInvoker.CreateOnLoad (myPageLoad));
\r
357 FormRequest fr = new FormRequest (t.Response, "form1");
\r
358 fr.Controls.Add ("__EVENTTARGET");
\r
359 fr.Controls.Add ("__EVENTARGUMENT");
\r
360 fr.Controls["__EVENTTARGET"].Value = "imgmap";
\r
361 fr.Controls["__EVENTARGUMENT"].Value = "0";
\r
364 Assert.AreEqual ("Rectangle", t.UserData, "AfterPostBack");
\r
368 [Category ("NunitWeb")]
\r
369 public void ImageMap_PostBackFireEvent ()
\r
371 WebTest t = new WebTest ("NoEventValidation.aspx");
\r
372 t.Invoker = PageInvoker.CreateOnLoad (PostBackFireEvent_Init);
\r
374 FormRequest fr = new FormRequest (t.Response, "form1");
\r
375 fr.Controls.Add ("__EVENTTARGET");
\r
376 fr.Controls.Add ("__EVENTARGUMENT");
\r
377 fr.Controls["__EVENTTARGET"].Value = "imgmap";
\r
378 fr.Controls["__EVENTARGUMENT"].Value = "0";
\r
381 if (t.UserData == null)
\r
382 Assert.Fail ("Event not fired fail");
\r
383 Assert.AreEqual ("ImageMapClickHandler", t.UserData.ToString (), "PostBackFireEvent");
\r
386 #region PostBackFireEvent
\r
387 public static void PostBackFireEvent_Init (Page p)
\r
389 ImageMap imgmap = new ImageMap ();
\r
390 imgmap.ID = "imgmap";
\r
391 imgmap.HotSpotMode = HotSpotMode.NotSet;
\r
392 imgmap.Click += new ImageMapEventHandler (ImageMapClickHandler3);
\r
393 RectangleHotSpot rect = new RectangleHotSpot ();
\r
394 rect.HotSpotMode = HotSpotMode.PostBack;
\r
395 rect.PostBackValue = "Rectangle";
\r
396 imgmap.HotSpots.Add (rect);
\r
397 p.Form.Controls.Add (imgmap);
\r
400 public static void ImageMapClickHandler3 (object sender, ImageMapEventArgs e)
\r
402 WebTest.CurrentTest.UserData = "ImageMapClickHandler";
\r
407 [Category ("NunitWeb")]
\r
408 public void ImageMap_PostBackCircle ()
\r
410 WebTest t = new WebTest (PageInvoker.CreateOnLoad (myPageLoad));
\r
412 FormRequest fr = new FormRequest (t.Response, "form1");
\r
413 fr.Controls.Add ("__EVENTTARGET");
\r
414 fr.Controls.Add ("__EVENTARGUMENT");
\r
415 fr.Controls["__EVENTTARGET"].Value = "imgmap";
\r
416 fr.Controls["__EVENTARGUMENT"].Value = "2";
\r
419 Assert.AreEqual ("Circle", t.UserData, "AfterPostBack");
\r
423 [Category ("NunitWeb")]
\r
424 public void ImageMap_PostBackPolygon ()
\r
426 WebTest t = new WebTest (PageInvoker.CreateOnLoad (myPageLoad));
\r
428 FormRequest fr = new FormRequest (t.Response, "form1");
\r
429 fr.Controls.Add ("__EVENTTARGET");
\r
430 fr.Controls.Add ("__EVENTARGUMENT");
\r
431 fr.Controls["__EVENTTARGET"].Value = "imgmap";
\r
432 fr.Controls["__EVENTARGUMENT"].Value = "1";
\r
435 Assert.AreEqual ("Polygon", t.UserData, "AfterPostBack");
\r
439 [Category ("NunitWeb")]
\r
440 public void ImageMap_PostBack_RenderBefore ()
\r
442 WebTest t = new WebTest (PageInvoker.CreateOnLoad (myPageLoad));
\r
444 string strTarget = @"<img id=""imgmap"" src="""" usemap=""#ImageMapimgmap"" style=""border-width:0px;"" /><map name=""ImageMapimgmap"">
445 <area shape=""rect"" coords=""0,0,0,0"" href=""javascript:__doPostBack('imgmap','0')"" title="""" alt="""" /><area shape=""poly"" coords="""" href=""javascript:__doPostBack('imgmap','1')"" title="""" alt="""" /><area shape=""circle"" coords=""0,0,0"" href=""javascript:__doPostBack('imgmap','2')"" title="""" alt="""" />
448 string RenderedPageHtml = t.Run ();
\r
449 string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
\r
450 HtmlDiff.AssertAreEqual (strTarget, RenderedControlHtml, "BeforePostBack");
\r
454 [Category ("NunitWeb")]
\r
455 public void ImageMap_PostBack_RenderAfter ()
\r
457 WebTest t = new WebTest (PageInvoker.CreateOnLoad (myPageLoad));
\r
459 FormRequest fr = new FormRequest (t.Response, "form1");
\r
460 fr.Controls.Add ("__EVENTTARGET");
\r
461 fr.Controls.Add ("__EVENTARGUMENT");
\r
462 fr.Controls["__EVENTTARGET"].Value = "imgmap";
\r
463 fr.Controls["__EVENTARGUMENT"].Value = "0";
\r
466 string strTarget = @"<img id=""imgmap"" src="""" usemap=""#ImageMapimgmap"" style=""border-width:0px;"" /><map name=""ImageMapimgmap"">
467 <area shape=""rect"" coords=""0,0,0,0"" href=""javascript:__doPostBack('imgmap','0')"" title="""" alt="""" /><area shape=""poly"" coords="""" href=""javascript:__doPostBack('imgmap','1')"" title="""" alt="""" /><area shape=""circle"" coords=""0,0,0"" href=""javascript:__doPostBack('imgmap','2')"" title="""" alt="""" />
470 string RenderedPageHtml = t.Run ();
\r
471 string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml);
\r
472 HtmlDiff.AssertAreEqual (strTarget, RenderedControlHtml, "AfterPostBack");
\r
475 public static void myPageLoad (Page page)
\r
477 WebTest.CurrentTest.UserData = "Init";
\r
478 ImageMap imgmap = new ImageMap ();
\r
479 imgmap.ID = "imgmap";
\r
480 imgmap.HotSpotMode = HotSpotMode.NotSet;
\r
481 imgmap.Click += new ImageMapEventHandler (ImageMapClickHandler2);
\r
482 RectangleHotSpot rect = new RectangleHotSpot ();
\r
483 rect.HotSpotMode = HotSpotMode.PostBack;
\r
484 rect.PostBackValue = "Rectangle";
\r
485 imgmap.HotSpots.Add (rect);
\r
486 PolygonHotSpot poly = new PolygonHotSpot ();
\r
487 poly.HotSpotMode = HotSpotMode.PostBack;
\r
488 poly.PostBackValue = "Polygon";
\r
489 imgmap.HotSpots.Add (poly);
\r
490 imgmap.HotSpotMode = HotSpotMode.PostBack;
\r
491 CircleHotSpot circle = new CircleHotSpot ();
\r
492 circle.PostBackValue = "Circle";
\r
493 imgmap.HotSpots.Add (circle);
\r
494 // Two marks for getting controls from form
\r
495 LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
\r
496 LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
\r
497 page.Form.Controls.Add (lcb);
\r
498 page.Form.Controls.Add (imgmap);
\r
499 page.Form.Controls.Add (lce);
\r
503 public void SetUpTest ()
\r
505 Thread.Sleep (100);
\r
508 [TestFixtureTearDown]
\r
509 public void TearDown ()
\r