New test for ListView.Dispose firing extra Layout events.
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / LinkLabelTest.cs
1 //\r
2 // LinkLabelTest.cs: MWF LinkLabel unit tests.\r
3 //\r
4 // Author:\r
5 //   Everaldo Canuto (ecanuto@novell.com)\r
6 //\r
7 // (C) 2007 Novell, Inc. (http://www.novell.com)\r
8 //\r
9 \r
10 using System;\r
11 using NUnit.Framework;\r
12 using System.Windows.Forms;\r
13 using System.Drawing;\r
14 \r
15 namespace MonoTests.System.Windows.Forms\r
16 {\r
17         [TestFixture]\r
18         public class LinkLabelTest : TestHelper\r
19         {\r
20                 [Test]\r
21                 public void LinkLabelAccessibility ()\r
22                 {\r
23                         LinkLabel l = new LinkLabel ();\r
24                         Assert.IsNotNull (l.AccessibilityObject, "#1");\r
25                 }\r
26 \r
27                 [Test]\r
28                 public void TestTabStop ()\r
29                 {\r
30                         LinkLabel l = new LinkLabel();\r
31 \r
32                         Assert.IsFalse (l.TabStop, "#1");\r
33                         l.Text = "Hello";\r
34                         Assert.IsTrue (l.TabStop, "#2");\r
35                         l.Text = "";\r
36                         Assert.IsFalse (l.TabStop, "#3");\r
37                 }\r
38                 \r
39                 [Test]\r
40                 public void TestLinkArea ()\r
41                 {\r
42                         LinkLabel l = new LinkLabel();\r
43 \r
44                         Assert.AreEqual (0, l.LinkArea.Start, "#1");\r
45                         Assert.AreEqual (0, l.LinkArea.Length, "#2");\r
46                         l.Text = "Hello";\r
47                         Assert.AreEqual (0, l.LinkArea.Start, "#3");\r
48                         Assert.AreEqual (5, l.LinkArea.Length, "#4");\r
49                         l.Text = "";\r
50                         Assert.AreEqual (0, l.LinkArea.Start, "#5");\r
51                         Assert.AreEqual (0, l.LinkArea.Length, "#6");\r
52                 }\r
53 \r
54                 [Test] // bug #344012\r
55                 public void InvalidateManualLinks ()\r
56                 {\r
57                         Form form = new Form ();\r
58                         form.ShowInTaskbar = false;\r
59 \r
60                         LinkLabel l = new LinkLabel ();\r
61                         l.Text = "linkLabel1";\r
62                         form.Controls.Add (l);\r
63 \r
64 #if NET_2_0\r
65                         LinkLabel.Link link = new LinkLabel.Link (2, 5);\r
66                         l.Links.Add (link);\r
67 #else\r
68                         l.Links.Add (2, 5);\r
69 #endif\r
70 \r
71                         form.Show ();\r
72                         form.Dispose ();\r
73                 }\r
74                 \r
75                 [Test]  // bug 410709\r
76                 public void LinkAreaSetter ()\r
77                 {\r
78                         // Basically this test is to show that setting LinkArea erased\r
79                         // any previous links\r
80                         LinkLabel l = new LinkLabel ();\r
81                         \r
82                         l.Text = "Really long text";\r
83                         \r
84                         Assert.AreEqual (1, l.Links.Count, "A1");\r
85                         \r
86                         l.Links.Clear ();\r
87                         l.Links.Add (0, 3);\r
88                         l.Links.Add (5, 3);\r
89 \r
90                         Assert.AreEqual (2, l.Links.Count, "A2");\r
91                 \r
92                         l.LinkArea = new LinkArea (1, 7);\r
93 \r
94                         Assert.AreEqual (1, l.Links.Count, "A3");\r
95                         Assert.AreEqual (1, l.LinkArea.Start, "A4");\r
96                         Assert.AreEqual (7, l.LinkArea.Length, "A5");\r
97                 }\r
98         }\r
99 \r
100 \r
101 #if NET_2_0\r
102         [TestFixture]\r
103         public class LinkTest : TestHelper\r
104         {\r
105                 [Test]\r
106                 public void Constructor ()\r
107                 {\r
108                         LinkLabel.Link l = new LinkLabel.Link ();\r
109                         \r
110                         Assert.AreEqual (null, l.Description, "A1");\r
111                         Assert.AreEqual (true, l.Enabled, "A2");\r
112                         Assert.AreEqual (0, l.Length, "A3");\r
113                         Assert.AreEqual (null, l.LinkData, "A4");\r
114                         Assert.AreEqual (string.Empty, l.Name, "A5");\r
115                         Assert.AreEqual (0, l.Start, "A6");\r
116                         Assert.AreEqual (null, l.Tag, "A7");\r
117                         Assert.AreEqual (false, l.Visited, "A8");\r
118 \r
119                         l = new LinkLabel.Link (5, 20);\r
120 \r
121                         Assert.AreEqual (null, l.Description, "A9");\r
122                         Assert.AreEqual (true, l.Enabled, "A10");\r
123                         Assert.AreEqual (20, l.Length, "A11");\r
124                         Assert.AreEqual (null, l.LinkData, "A12");\r
125                         Assert.AreEqual (string.Empty, l.Name, "A13");\r
126                         Assert.AreEqual (5, l.Start, "A14");\r
127                         Assert.AreEqual (null, l.Tag, "A15");\r
128                         Assert.AreEqual (false, l.Visited, "A16");\r
129 \r
130                         l = new LinkLabel.Link (3, 7, "test");\r
131 \r
132                         Assert.AreEqual (null, l.Description, "A17");\r
133                         Assert.AreEqual (true, l.Enabled, "A18");\r
134                         Assert.AreEqual (7, l.Length, "A19");\r
135                         Assert.AreEqual ("test", l.LinkData, "A20");\r
136                         Assert.AreEqual (string.Empty, l.Name, "A21");\r
137                         Assert.AreEqual (3, l.Start, "A22");\r
138                         Assert.AreEqual (null, l.Tag, "A23");\r
139                         Assert.AreEqual (false, l.Visited, "A24");\r
140                 }\r
141         }\r
142 #endif\r
143 \r
144         [TestFixture]\r
145         public class LinkCollectionTest : TestHelper\r
146         {\r
147                 [Test] // ctor (LinkLabel)\r
148                 public void Constructor1 ()\r
149                 {\r
150                         LinkLabel l = new LinkLabel ();\r
151                         l.Text = "Managed Windows Forms";\r
152 \r
153                         LinkLabel.LinkCollection links1 = new LinkLabel.LinkCollection (\r
154                                 l);\r
155                         LinkLabel.LinkCollection links2 = new LinkLabel.LinkCollection (\r
156                                 l);\r
157 \r
158                         Assert.AreEqual (1, links1.Count, "#A1");\r
159                         Assert.IsFalse (links1.IsReadOnly, "#A2");\r
160 #if NET_2_0\r
161                         Assert.IsFalse (links1.LinksAdded, "#A3");\r
162 #endif\r
163 \r
164                         LinkLabel.Link link = links1 [0];\r
165 #if NET_2_0\r
166                         Assert.IsNull (link.Description, "#B1");\r
167 #endif\r
168                         Assert.IsTrue (link.Enabled, "#B2");\r
169                         Assert.AreEqual (21, link.Length, "#B3");\r
170                         Assert.IsNull (link.LinkData, "#B4");\r
171 #if NET_2_0\r
172                         Assert.IsNotNull (link.Name, "#B5");\r
173                         Assert.AreEqual (string.Empty, link.Name, "#B6");\r
174 #endif\r
175                         Assert.AreEqual (0, link.Start, "#B7");\r
176 #if NET_2_0\r
177                         Assert.IsNull (link.Tag, "#B8");\r
178 #endif\r
179                         Assert.IsFalse (link.Visited, "#B9");\r
180 \r
181                         Assert.AreEqual (1, links2.Count, "#C1");\r
182                         Assert.IsFalse (links2.IsReadOnly, "#C2");\r
183 #if NET_2_0\r
184                         Assert.IsFalse (links2.LinksAdded, "#C3");\r
185 #endif\r
186                         Assert.AreSame (link, links2 [0], "#C4");\r
187                 }\r
188 \r
189                 [Test] // ctor (LinkLabel)\r
190                 public void Constructor1_Owner_Null ()\r
191                 {\r
192                         try {\r
193                                 new LinkLabel.LinkCollection ((LinkLabel) null);\r
194                                 Assert.Fail ("#1");\r
195                         } catch (ArgumentNullException ex) {\r
196                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
197                                 Assert.IsNull (ex.InnerException, "#3");\r
198                                 Assert.IsNotNull (ex.Message, "#4");\r
199                                 Assert.IsNotNull (ex.ParamName, "#5");\r
200                                 Assert.AreEqual ("owner", ex.ParamName, "#6");\r
201                         }\r
202                 }\r
203 \r
204 #if NET_2_0\r
205                 [Test] // Add (LinkLabel.Link)\r
206                 public void Add1 ()\r
207                 {\r
208                         LinkLabel l = new LinkLabel ();\r
209                         l.Text = "Managed Windows Forms";\r
210 \r
211                         LinkLabel.LinkCollection links1 = new LinkLabel.LinkCollection (\r
212                                 l);\r
213                         LinkLabel.LinkCollection links2 = new LinkLabel.LinkCollection (\r
214                                 l);\r
215 \r
216                         LinkLabel.Link linkA = new LinkLabel.Link (0, 7);\r
217                         Assert.AreEqual (0, links1.Add (linkA), "#A1");\r
218                         Assert.AreEqual (1, links1.Count, "#A2");\r
219                         Assert.AreEqual (1, links2.Count, "#A3");\r
220                         Assert.IsTrue (links1.LinksAdded, "#A4");\r
221                         Assert.IsFalse (links2.LinksAdded, "#A5");\r
222                         Assert.AreSame (linkA, links1 [0], "#A6");\r
223                         Assert.AreSame (linkA, links2 [0], "#A7");\r
224 \r
225                         LinkLabel.Link linkB = new LinkLabel.Link (8, 7);\r
226                         Assert.AreEqual (1, links1.Add (linkB), "#B1");\r
227                         Assert.AreEqual (2, links1.Count, "#B2");\r
228                         Assert.AreEqual (2, links2.Count, "#B3");\r
229                         Assert.IsTrue (links1.LinksAdded, "#B4");\r
230                         Assert.IsFalse (links2.LinksAdded, "#B5");\r
231                         Assert.AreSame (linkA, links1 [0], "#B6");\r
232                         Assert.AreSame (linkA, links2 [0], "#B7");\r
233                         Assert.AreSame (linkB, links1 [1], "#B8");\r
234                         Assert.AreSame (linkB, links2 [1], "#B9");\r
235 \r
236                         LinkLabel.LinkCollection links3 = new LinkLabel.LinkCollection (\r
237                                 l);\r
238                         Assert.AreEqual (2, links3.Count, "#C1");\r
239                         Assert.IsFalse (links3.LinksAdded, "#C2");\r
240                         Assert.AreSame (linkA, links3 [0], "#C3");\r
241                         Assert.AreSame (linkB, links3 [1], "#C4");\r
242                 }\r
243 \r
244                 [Test] // Add (LinkLabel.Link)\r
245                 public void Add1_Overlap ()\r
246                 {\r
247                         LinkLabel l = new LinkLabel ();\r
248                         l.Text = "Managed Windows Forms";\r
249 \r
250                         LinkLabel.LinkCollection links = new LinkLabel.LinkCollection (\r
251                                 l);\r
252 \r
253                         LinkLabel.Link linkA = new LinkLabel.Link (0, 7);\r
254                         links.Add (linkA);\r
255                         Assert.AreEqual (1, links.Count, "#A1");\r
256                         Assert.IsTrue (links.LinksAdded, "#A2");\r
257                         Assert.AreSame (linkA, links [0], "#A3");\r
258 \r
259                         LinkLabel.Link linkB = new LinkLabel.Link (5, 4);\r
260                         try {\r
261                                 links.Add (linkB);\r
262                                 Assert.Fail ("#B1");\r
263                         } catch (InvalidOperationException ex) {\r
264                                 // Overlapping link regions\r
265                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");\r
266                                 Assert.IsNull (ex.InnerException, "#B3");\r
267                                 Assert.IsNotNull (ex.Message, "#B4");\r
268                         }\r
269 \r
270                         Assert.AreEqual (2, links.Count, "#B5");\r
271                         Assert.IsTrue (links.LinksAdded, "#B6");\r
272                         Assert.AreSame (linkA, links [0], "#B7");\r
273                         Assert.AreSame (linkB, links [1], "#B8");\r
274                         Assert.AreEqual (0, linkA.Start, "#B9");\r
275                         Assert.AreEqual (7, linkA.Length, "#B10");\r
276                         Assert.AreEqual (5, linkB.Start, "#B11");\r
277                         Assert.AreEqual (4, linkB.Length, "#B12");\r
278 \r
279                         LinkLabel.Link linkC = new LinkLabel.Link (14, 3);\r
280                         try {\r
281                                 links.Add (linkC);\r
282                                 Assert.Fail ("#C1");\r
283                         } catch (InvalidOperationException ex) {\r
284                                 // Overlapping link regions\r
285                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");\r
286                                 Assert.IsNull (ex.InnerException, "#C3");\r
287                                 Assert.IsNotNull (ex.Message, "#C4");\r
288                         }\r
289 \r
290                         Assert.AreEqual (3, links.Count, "#C5");\r
291                         Assert.IsTrue (links.LinksAdded, "#C6");\r
292                         Assert.AreSame (linkA, links [0], "#C7");\r
293                         Assert.AreSame (linkB, links [1], "#C8");\r
294                         Assert.AreSame (linkC, links [2], "#C9");\r
295                         Assert.AreEqual (0, linkA.Start, "#C10");\r
296                         Assert.AreEqual (7, linkA.Length, "#C11");\r
297                         Assert.AreEqual (5, linkB.Start, "#C12");\r
298                         Assert.AreEqual (4, linkB.Length, "#C13");\r
299                         Assert.AreEqual (14, linkC.Start, "#C14");\r
300                         Assert.AreEqual (3, linkC.Length, "#C15");\r
301                 }\r
302 \r
303                 [Test] // Add (LinkLabel.Link)\r
304                 public void Add1_Value_Null ()\r
305                 {\r
306                         LinkLabel l = new LinkLabel ();\r
307                         l.Text = "Managed Windows Forms";\r
308 \r
309                         LinkLabel.LinkCollection links = new LinkLabel.LinkCollection (\r
310                                 l);\r
311                         try {\r
312                                 links.Add ((LinkLabel.Link) null);\r
313                                 Assert.Fail ("#1");\r
314                         } catch (NullReferenceException) {\r
315                         }\r
316                 }\r
317 #endif\r
318 \r
319                 [Test] // Add (int, int)\r
320                 public void Add2 ()\r
321                 {\r
322                         LinkLabel l = new LinkLabel ();\r
323                         l.Text = "Managed Windows Forms";\r
324 \r
325                         LinkLabel.LinkCollection links1 = new LinkLabel.LinkCollection (\r
326                                 l);\r
327                         LinkLabel.LinkCollection links2 = new LinkLabel.LinkCollection (\r
328                                 l);\r
329 \r
330                         LinkLabel.Link linkA = links1.Add (0, 7);\r
331                         Assert.AreEqual (1, links1.Count, "#A1");\r
332                         Assert.AreEqual (1, links2.Count, "#A2");\r
333 #if NET_2_0\r
334                         Assert.IsTrue (links1.LinksAdded, "#A3");\r
335                         Assert.IsFalse (links2.LinksAdded, "#A4");\r
336 #endif\r
337                         Assert.AreSame (linkA, links1 [0], "#A5");\r
338                         Assert.AreSame (linkA, links2 [0], "#A6");\r
339 \r
340                         LinkLabel.Link linkB = links1.Add (8, 7);\r
341                         Assert.AreEqual (2, links1.Count, "#B1");\r
342                         Assert.AreEqual (2, links2.Count, "#B2");\r
343 #if NET_2_0\r
344                         Assert.IsTrue (links1.LinksAdded, "#B3");\r
345                         Assert.IsFalse (links2.LinksAdded, "#B4");\r
346 #endif\r
347                         Assert.AreSame (linkA, links1 [0], "#B5");\r
348                         Assert.AreSame (linkA, links2 [0], "#B6");\r
349                         Assert.AreSame (linkB, links1 [1], "#B7");\r
350                         Assert.AreSame (linkB, links2 [1], "#B8");\r
351 \r
352                         LinkLabel.LinkCollection links3 = new LinkLabel.LinkCollection (\r
353                                 l);\r
354                         Assert.AreEqual (2, links3.Count, "#C1");\r
355 #if NET_2_0\r
356                         Assert.IsFalse (links3.LinksAdded, "#C2");\r
357 #endif\r
358                         Assert.AreSame (linkA, links3 [0], "#C3");\r
359                         Assert.AreSame (linkB, links3 [1], "#C4");\r
360                 }\r
361 \r
362                 [Test] // Add (int, int)\r
363                 public void Add2_Overlap ()\r
364                 {\r
365                         LinkLabel l = new LinkLabel ();\r
366                         l.Text = "Managed Windows Forms";\r
367 \r
368                         LinkLabel.LinkCollection links = new LinkLabel.LinkCollection (\r
369                                 l);\r
370 \r
371                         LinkLabel.Link linkA = links.Add (0, 7);\r
372                         Assert.AreEqual (1, links.Count, "#A1");\r
373 #if NET_2_0\r
374                         Assert.IsTrue (links.LinksAdded, "#A2");\r
375 #endif\r
376                         Assert.AreSame (linkA, links [0], "#A3");\r
377 \r
378                         try {\r
379                                 links.Add (5, 4);\r
380                                 Assert.Fail ("#B1");\r
381                         } catch (InvalidOperationException ex) {\r
382                                 // Overlapping link regions\r
383                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");\r
384                                 Assert.IsNull (ex.InnerException, "#B3");\r
385                                 Assert.IsNotNull (ex.Message, "#B4");\r
386                         }\r
387 \r
388                         Assert.AreEqual (2, links.Count, "#B5");\r
389 #if NET_2_0\r
390                         Assert.IsTrue (links.LinksAdded, "#B6");\r
391 #endif\r
392                         Assert.AreSame (linkA, links [0], "#B7");\r
393                         Assert.IsNotNull (links [1], "#B8");\r
394                         Assert.AreEqual (0, linkA.Start, "#B9");\r
395                         Assert.AreEqual (7, linkA.Length, "#B10");\r
396                         Assert.AreEqual (5, links [1].Start, "#B11");\r
397                         Assert.AreEqual (4, links [1].Length, "#B12");\r
398 \r
399                         try {\r
400                                 links.Add (14, 3);\r
401                                 Assert.Fail ("#C1");\r
402                         } catch (InvalidOperationException ex) {\r
403                                 // Overlapping link regions\r
404                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");\r
405                                 Assert.IsNull (ex.InnerException, "#C3");\r
406                                 Assert.IsNotNull (ex.Message, "#C4");\r
407                         }\r
408 \r
409                         Assert.AreEqual (3, links.Count, "#C5");\r
410 #if NET_2_0\r
411                         Assert.IsTrue (links.LinksAdded, "#C6");\r
412 #endif\r
413                         Assert.AreSame (linkA, links [0], "#C7");\r
414                         Assert.IsNotNull (links [1], "#C8");\r
415                         Assert.IsNotNull (links [2], "#C9");\r
416                         Assert.AreEqual (0, linkA.Start, "#C10");\r
417                         Assert.AreEqual (7, linkA.Length, "#C11");\r
418                         Assert.AreEqual (5, links [1].Start, "#C12");\r
419                         Assert.AreEqual (4, links [1].Length, "#C13");\r
420                         Assert.AreEqual (14, links [2].Start, "#C14");\r
421                         Assert.AreEqual (3, links [2].Length, "#C15");\r
422                 }\r
423         }\r
424 }\r