2007-10-11 Carlos Alberto Cortez <calberto.cortez@gmail.com>
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / ListViewItemTest.cs
1 // Permission is hereby granted, free of charge, to any person obtaining
2 // a copy of this software and associated documentation files (the
3 // "Software"), to deal in the Software without restriction, including
4 // without limitation the rights to use, copy, modify, merge, publish,
5 // distribute, sublicense, and/or sell copies of the Software, and to
6 // permit persons to whom the Software is furnished to do so, subject to
7 // the following conditions:
8 //
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
11 //
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19 //
20 // Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
21 //
22 // Author:
23 //      Jordi Mas i Hernandez <jordi@ximian.com>
24 //
25 //
26
27 using System;
28 using System.Windows.Forms;
29 using System.Drawing;
30 using System.Reflection;
31 using NUnit.Framework;
32
33 namespace MonoTests.System.Windows.Forms
34 {
35         [TestFixture]
36         public class ListViewItemTest
37         {
38                 [Test]
39                 public void ListViewItemConstructors ()
40                 {
41                         Font fnt = new Font ("Arial", 12);
42                         ListViewItem item1 = new ListViewItem ("Hello folks");
43                         Assert.AreEqual ("Hello folks", item1.Text, "Constructor#1");
44
45                         ListViewItem item2 = new ListViewItem (new string [] {"Element1", "Element2"},
46                                 -1, Color.Blue, Color.Red, fnt);
47
48                         Assert.AreEqual (item2.ForeColor, Color.Blue, "Constructor#2");
49                         Assert.AreEqual (item2.BackColor, Color.Red, "Constructor#3");
50
51                         Assert.AreEqual (2, item2.SubItems.Count,"Constructor#4");
52                         Assert.AreEqual (Color.Blue, item2.SubItems[0].ForeColor,"Constructor#5");
53                         Assert.AreEqual (Color.Red, item2.SubItems[0].BackColor, "Constructor#6");
54                         Assert.AreEqual (fnt, item2.SubItems[0].Font, "Constructor#7");
55                         Assert.AreEqual ("Element1", item2.SubItems[0].Text, "Constructor#8");
56                         Assert.AreEqual ("Element2", item2.SubItems[1].Text, "Constructor#12");
57
58                         ListViewItem item3 = new ListViewItem ((string)null);
59                         Assert.AreEqual (String.Empty, item3.Text, "Constructor#13");
60
61                         ListViewItem item4 = new ListViewItem ((string)null, -99);
62                         Assert.AreEqual (String.Empty, item4.Text, "Constructor#14");
63                         Assert.AreEqual (-99, item4.ImageIndex, "Constructor#15");
64
65                         ListViewItem item5 = new ListViewItem (new string [2]);
66                         Assert.AreEqual (2, item5.SubItems.Count, "Constructor#16");
67                         Assert.IsNotNull (item5.SubItems [0], "Constructor#17");
68                         Assert.IsNotNull (item5.SubItems [1], "Constructor#18");
69
70                         ListViewItem item6 = new ListViewItem (new string [2], -1, Color.Blue, Color.Red,
71                                 fnt);
72                         Assert.AreEqual (2, item6.SubItems.Count, "Constructor#19");
73                         Assert.IsNotNull (item6.SubItems [0], "Constructor#20");
74                         Assert.IsNotNull (item6.SubItems [1], "Constructor#21");
75                         Assert.AreEqual (Color.Blue, item6.ForeColor, "Constructor#22");
76                         Assert.AreEqual (Color.Blue, item6.SubItems [0].ForeColor, "Constructor#23");
77                         Assert.AreEqual (Color.Red, item6.BackColor, "Constructor#24");
78                         Assert.AreEqual (Color.Red, item6.SubItems [0].BackColor, "Constructor#25");
79                         Assert.AreEqual (fnt, item6.Font, "Constructor#26");
80                         Assert.AreEqual (fnt, item6.SubItems [0].Font, "Constructor#27");
81                 }
82
83                 [Test]
84                 public void Constructor2_Text_Null ()
85                 {
86                         ListViewItem item = new ListViewItem ((string) null);
87                         Assert.AreEqual (-1, item.ImageIndex, "#1");
88                         Assert.AreEqual (1, item.SubItems.Count, "#2");
89                         Assert.IsNotNull (item.SubItems [0].Text, "#3");
90                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#4");
91                 }
92
93                 [Test]
94                 public void Constructor3_Items_Empty ()
95                 {
96                         ListViewItem item = new ListViewItem (new string [3]);
97                         Assert.AreEqual (-1, item.ImageIndex, "#1");
98                         Assert.AreEqual (3, item.SubItems.Count, "#2");
99                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#3");
100                         Assert.AreEqual (string.Empty, item.SubItems [1].Text, "#4");
101                         Assert.AreEqual (string.Empty, item.SubItems [2].Text, "#5");
102                 }
103
104                 [Test]
105                 public void Constructor3_Items_Null ()
106                 {
107                         ListViewItem item = new ListViewItem ((string []) null);
108                         Assert.AreEqual (-1, item.ImageIndex, "#1");
109                         Assert.AreEqual (1, item.SubItems.Count, "#2");
110                         Assert.IsNotNull (item.SubItems [0].Text, "#3");
111                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#4");
112                 }
113
114                 [Test]
115                 [ExpectedException (typeof (NullReferenceException))]
116                 public void Constructor4_SubItems_Empty ()
117                 {
118                         new ListViewItem (new ListViewItem.ListViewSubItem [2], 3);
119                 }
120
121                 [Test]
122                 [ExpectedException (typeof (NullReferenceException))]
123                 public void Constructor4_SubItems_Null ()
124                 {
125                         new ListViewItem ((ListViewItem.ListViewSubItem []) null, 3);
126                 }
127
128                 [Test]
129                 public void Constructor5_Text_Null ()
130                 {
131                         ListViewItem item = new ListViewItem ((string) null, 2);
132                         Assert.AreEqual (2, item.ImageIndex, "#1");
133                         Assert.AreEqual (1, item.SubItems.Count, "#2");
134                         Assert.IsNotNull (item.SubItems [0].Text, "#3");
135                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#4");
136                 }
137
138                 [Test]
139                 public void Constructor6_Items_Empty ()
140                 {
141                         ListViewItem item = new ListViewItem (new string [3], 5);
142                         Assert.AreEqual (5, item.ImageIndex, "#1");
143                         Assert.AreEqual (3, item.SubItems.Count, "#2");
144                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#3");
145                         Assert.AreEqual (string.Empty, item.SubItems [1].Text, "#4");
146                         Assert.AreEqual (string.Empty, item.SubItems [2].Text, "#5");
147                 }
148
149                 [Test]
150                 public void Constructor6_Items_Null ()
151                 {
152                         ListViewItem item = new ListViewItem ((string []) null, 3);
153                         Assert.AreEqual (3, item.ImageIndex, "#1");
154                         Assert.AreEqual (1, item.SubItems.Count, "#2");
155                         Assert.IsNotNull (item.SubItems [0].Text, "#3");
156                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#4");
157                 }
158
159                 [Test]
160                 public void Constructor7_Items_Empty ()
161                 {
162                         Font font = new Font (FontFamily.GenericSansSerif, 6);
163
164                         ListViewItem item = new ListViewItem (new string [2], 3, Color.Red,
165                                 Color.Blue, font);
166                         Assert.AreEqual (Color.Blue, item.BackColor, "#1");
167                         Assert.AreEqual (Color.Red, item.ForeColor, "#2");
168                         Assert.AreSame (font, item.Font, "#3");
169                         Assert.AreEqual (3, item.ImageIndex, "#4");
170                         Assert.AreEqual (2, item.SubItems.Count, "#5");
171                         Assert.IsNotNull (item.SubItems [0].Text, "#6");
172                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#7");
173                         Assert.IsNotNull (item.SubItems [1].Text, "#8");
174                         Assert.AreEqual (string.Empty, item.SubItems [1].Text, "#9");
175                 }
176
177                 [Test]
178                 public void Constructor7_Items_Null ()
179                 {
180                         Font font = new Font (FontFamily.GenericSansSerif, 6);
181
182                         ListViewItem item = new ListViewItem ((string []) null, 3, Color.Red,
183                                 Color.Blue, font);
184                         Assert.AreEqual (Color.Blue, item.BackColor, "#1");
185                         Assert.AreEqual (Color.Red, item.ForeColor, "#2");
186                         Assert.AreSame (font, item.Font, "#3");
187                         Assert.AreEqual (3, item.ImageIndex, "#4");
188                         Assert.AreEqual (1, item.SubItems.Count, "#5");
189                         Assert.IsNotNull (item.SubItems [0].Text, "#6");
190                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#7");
191                 }
192
193 #if NET_2_0
194                 [Test]
195                 public void Constructor9_Text_Null ()
196                 {
197                         ListViewItem item = new ListViewItem ((string) null, "key");
198                         Assert.AreEqual (-1, item.ImageIndex, "#1");
199                         Assert.IsNotNull (item.ImageKey, "#2");
200                         Assert.AreEqual ("key", item.ImageKey, "#3");
201                         Assert.AreEqual (1, item.SubItems.Count, "#4");
202                         Assert.IsNotNull (item.SubItems [0].Text, "#5");
203                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#6");
204                 }
205
206                 [Test]
207                 public void Constructor9_ImageKey_Null ()
208                 {
209                         ListViewItem item = new ListViewItem ("name", (string) null);
210                         Assert.AreEqual (-1, item.ImageIndex, "#1");
211                         Assert.IsNotNull (item.ImageKey, "#2");
212                         Assert.AreEqual (string.Empty, item.ImageKey, "#3");
213                         Assert.AreEqual (1, item.SubItems.Count, "#4");
214                         Assert.IsNotNull (item.SubItems [0].Text, "#5");
215                         Assert.AreEqual ("name", item.SubItems [0].Text, "#6");
216                 }
217
218                 [Test]
219                 [ExpectedException (typeof (NullReferenceException))]
220                 public void Constructor10_SubItems_Null ()
221                 {
222                         new ListViewItem ((ListViewItem.ListViewSubItem []) null, "key");
223                 }
224
225                 [Test]
226                 [ExpectedException (typeof (NullReferenceException))]
227                 public void Constructor10_SubItems_Empty ()
228                 {
229                         new ListViewItem (new ListViewItem.ListViewSubItem [2], "key");
230                 }
231
232                 [Test]
233                 public void Constructor10_ImageKey_Null ()
234                 {
235                         ListViewItem.ListViewSubItem subItemA = new ListViewItem.ListViewSubItem ();
236                         subItemA.Text = "A";
237                         ListViewItem.ListViewSubItem subItemB = new ListViewItem.ListViewSubItem ();
238                         subItemB.Text = "B";
239
240                         ListViewItem item = new ListViewItem (new ListViewItem.ListViewSubItem [] {
241                                 subItemA, subItemB }, (string) null);
242                         Assert.AreEqual (-1, item.ImageIndex, "#1");
243                         Assert.IsNotNull (item.ImageKey, "#2");
244                         Assert.AreEqual (string.Empty, item.ImageKey, "#3");
245                         Assert.AreEqual (2, item.SubItems.Count, "#4");
246                         Assert.IsNotNull (item.SubItems [0].Text, "#5");
247                         Assert.AreEqual ("A", item.SubItems [0].Text, "#6");
248                         Assert.IsNotNull (item.SubItems [1].Text, "#7");
249                         Assert.AreEqual ("B", item.SubItems [1].Text, "#8");
250                 }
251 #endif
252
253                 [Test]
254                 public void ListViewItemDefaultValues ()
255                 {
256                         ListViewItem item = new ListViewItem ();
257
258                         Assert.IsFalse (item.Focused, "DefaultValues#3");
259                         Assert.IsFalse (item.Checked, "DefaultValues#4");
260                         Assert.AreEqual (string.Empty, item.Text, "DefaultValues#5");
261                         Assert.IsTrue (item.UseItemStyleForSubItems, "DefaultValues#6");
262                         Assert.AreEqual (-1, item.ImageIndex, "DefaultValues#7");
263 #if NET_2_0
264                         Assert.AreEqual (String.Empty, item.Name, "DefaultValues#8");
265                         Assert.AreEqual(String.Empty, item.ImageKey, "DefaultValues#9");
266                         Assert.AreEqual (String.Empty, item.ToolTipText, "DefaultValues#10");
267 #endif
268                 }
269
270                 [Test]
271                 public void ListViewItemBackColor ()
272                 {
273                         ListViewItem item = new ListViewItem ();
274
275                         ListView lv = new ListView ();
276                         lv.Items.Add (item);
277                         lv.BackColor = Color.Orange;
278                         Assert.AreEqual (lv.BackColor, item.BackColor, "BackColor#1");
279                         Assert.AreEqual (lv.BackColor, item.SubItems [0].BackColor, "BackColor#2");
280
281                         item.BackColor = Color.Navy;
282                         Assert.AreEqual (Color.Navy, item.BackColor, "BackColor#3");
283                         Assert.AreEqual (Color.Navy, item.SubItems [0].BackColor, "BackColor#4");
284
285                         item.SubItems [0].BackColor = Color.Green;
286                         Assert.AreEqual (Color.Green, item.BackColor, "BackColor#5");
287                         Assert.AreEqual (Color.Green, item.SubItems [0].BackColor, "BackColor#6");
288                 }
289
290                 [Test]
291                 public void ListViewItemForeColor ()
292                 {
293                         ListViewItem item = new ListViewItem ();
294
295                         ListView lv = new ListView ();
296                         lv.Items.Add (item);
297                         lv.ForeColor = Color.Orange;
298                         Assert.AreEqual (lv.ForeColor, item.ForeColor, "ForeColor#1");
299                         Assert.AreEqual (lv.ForeColor, item.SubItems [0].ForeColor, "ForeColor#2");
300
301                         item.ForeColor = Color.Navy;
302                         Assert.AreEqual (Color.Navy, item.ForeColor, "ForeColor#3");
303                         Assert.AreEqual (Color.Navy, item.SubItems [0].ForeColor, "ForeColor#4");
304
305                         item.SubItems [0].ForeColor = Color.Green;
306                         Assert.AreEqual (Color.Green, item.ForeColor, "ForeColor#5");
307                         Assert.AreEqual (Color.Green, item.SubItems [0].ForeColor, "ForeColor#6");
308                 }
309
310                 [Test]
311                 public void ListViewItemFocused ()
312                 {
313                         ListView lv = new ListView ();
314                         ListViewItem item1 = lv.Items.Add ("A");
315                         ListViewItem item2 = lv.Items.Add ("B");
316                         ListViewItem item3 = lv.Items.Add ("C");
317
318                         // Need to show form
319                         Form form = new Form ();
320                         lv.Parent = form;
321                         form.Show ();
322
323                         item1.Focused = true;
324                         Assert.IsTrue (item1.Focused, "#A1");
325                         Assert.IsFalse (item2.Focused, "#A2");
326                         Assert.IsFalse (item3.Focused, "#A3");
327                         Assert.AreEqual (item1, lv.FocusedItem, "#A4");
328
329                         item2.Focused = true;
330                         Assert.IsFalse (item1.Focused, "#B1");
331                         Assert.IsTrue (item2.Focused, "#B2");
332                         Assert.IsFalse (item3.Focused, "#B3");
333                         Assert.AreEqual (item2, lv.FocusedItem, "#B4");
334
335                         item3.Focused = true;
336                         Assert.IsFalse (item1.Focused, "#C1");
337                         Assert.IsFalse (item2.Focused, "#C2");
338                         Assert.IsTrue (item3.Focused, "#C3");
339                         Assert.AreEqual (item3, lv.FocusedItem, "#C4");
340
341                         item3.Focused = false;
342                         Assert.IsFalse (item1.Focused, "#D1");
343                         Assert.IsFalse (item2.Focused, "#D2");
344                         Assert.IsFalse (item3.Focused, "#D3");
345                         Assert.IsNull (lv.FocusedItem, "#D4");
346
347                         form.Dispose ();
348                 }
349
350                 [Test] // bug #330415 and #331643
351                 [Category ("NotWorking")]
352                 public void RemoveFocusedItem ()
353                 {
354                         ListView lv = new ListView ();
355                         ListViewItem itemA = lv.Items.Add ("ItemA");
356                         ListViewItem itemB = lv.Items.Add ("ItemB");
357                         ListViewItem itemC = lv.Items.Add ("ItemC");
358                         ListViewItem itemD = lv.Items.Add ("ItemD");
359
360                         Form form = new Form ();
361                         form.ShowInTaskbar = false;
362                         form.Controls.Add (lv);
363                         form.Show ();
364
365                         Assert.IsTrue (itemA.Focused, "#A1");
366                         Assert.IsFalse (itemB.Focused, "#A2");
367                         Assert.IsFalse (itemC.Focused, "#A3");
368                         Assert.IsFalse (itemD.Focused, "#A4");
369
370                         itemB.Focused = true;
371
372                         Assert.IsFalse (itemA.Focused, "#B1");
373                         Assert.IsTrue (itemB.Focused, "#B2");
374                         Assert.IsFalse (itemC.Focused, "#B3");
375                         Assert.IsFalse (itemD.Focused, "#B4");
376
377                         lv.Items.Remove (itemB);
378
379                         Assert.IsFalse (itemA.Focused, "#C1");
380                         Assert.IsFalse (itemB.Focused, "#C2");
381                         Assert.IsTrue (itemC.Focused, "#C3");
382                         Assert.IsFalse (itemD.Focused, "#C4");
383
384                         itemD.Focused = true;
385
386                         Assert.IsFalse (itemA.Focused, "#D1");
387                         Assert.IsFalse (itemB.Focused, "#D2");
388                         Assert.IsFalse (itemC.Focused, "#D3");
389                         Assert.IsTrue (itemD.Focused, "#D4");
390
391                         lv.Items.Remove (itemD);
392
393                         Assert.IsFalse (itemA.Focused, "#E1");
394                         Assert.IsFalse (itemB.Focused, "#E2");
395                         Assert.IsTrue (itemC.Focused, "#E3");
396                         Assert.IsFalse (itemD.Focused, "#E4");
397
398                         lv.Items.Remove (itemC);
399
400                         Assert.IsTrue (itemA.Focused, "#F1");
401                         Assert.IsFalse (itemB.Focused, "#F2");
402                         Assert.IsFalse (itemC.Focused, "#F3");
403                         Assert.IsFalse (itemD.Focused, "#F4");
404
405                         lv.Items.Remove (itemA);
406
407                         Assert.IsFalse (itemA.Focused, "#G1");
408                         Assert.IsFalse (itemB.Focused, "#G2");
409                         Assert.IsFalse (itemC.Focused, "#G3");
410                         Assert.IsFalse (itemD.Focused, "#G4");
411
412                         ListViewItem itemE = lv.Items.Add ("ItemE");
413
414                         Assert.IsFalse (itemA.Focused, "#H1");
415                         Assert.IsFalse (itemB.Focused, "#H2");
416                         Assert.IsFalse (itemC.Focused, "#H3");
417                         Assert.IsFalse (itemD.Focused, "#H4");
418                         Assert.IsFalse (itemE.Focused, "#H5");
419
420                         form.Dispose ();
421                 }
422         
423 #if NET_2_0
424                 [Test]
425                 public void ListViewItemGroup ()
426                 {
427                         ListViewGroup lvg1 = new ListViewGroup ();
428                         ListViewGroup lvg2 = new ListViewGroup ();
429                         ListViewItem lvi = new ListViewItem ();
430                 
431                         lvg1.Items.Add (lvi);
432                 
433                         Assert.AreEqual (1, lvg1.Items.Count, "#A1");
434                         Assert.AreEqual (lvg1, lvi.Group, "#A2");
435                         lvi.Group = lvg2;
436                 
437                         Assert.AreEqual (0, lvg1.Items.Count, "#B1");
438                         Assert.AreEqual (1, lvg2.Items.Count, "#B2");
439                         Assert.AreEqual (lvg2, lvi.Group, "#B3");
440                 }
441 #endif
442
443                 [Test]
444                 public void ListViewItemUseItemStyleForSubItems ()
445                 {
446                         ListViewItem item = new ListViewItem ();
447                         Assert.AreEqual (1, item.SubItems.Count);
448
449                         // UseitemStyleForSubItems works at draw level
450                         item.UseItemStyleForSubItems = true;
451
452                         ListViewItem.ListViewSubItem subitem0 = item.SubItems [0];
453                         Color subitem0_back_color = subitem0.BackColor = Color.Black;
454                         Color subitem0_fore_color = subitem0.ForeColor = Color.White;
455
456                         Assert.AreEqual (subitem0_back_color, item.SubItems [0].BackColor, "UseItemStyleForSubItems#1");
457                         Assert.AreEqual (subitem0_fore_color, item.SubItems [0].ForeColor, "UseItemStyleForSubItems#2");
458                         Assert.AreEqual (item.BackColor, item.SubItems [0].BackColor, "UseItemStyleForSubItems#3");
459                         Assert.AreEqual (item.ForeColor, item.SubItems [0].ForeColor, "UseItemStyleForSubItems#4");
460
461                         ListViewItem.ListViewSubItem subitem1 = item.SubItems.Add ("SubItem");
462                         Color subitem1_back_color = subitem1.BackColor = Color.Blue;
463                         Color subitem1_fore_color = subitem1.ForeColor = Color.Gray;
464
465                         Assert.AreEqual (subitem1_back_color, subitem1.BackColor, "UseItemStyleForSubItem#5");
466                         Assert.AreEqual (subitem1_fore_color, subitem1.ForeColor, "UseItemStyleForSubItem#6");
467                 }
468
469                 [Test]
470                 public void ListViewItemTestClone ()
471                 {
472                         ListViewItem item1 = new ListViewItem ("Hello");
473                         item1.ForeColor = Color.Blue;
474                         item1.BackColor = Color.Red;
475                         item1.Font = new Font ("Arial", 14);
476                         item1.SubItems.Add ("Element2");
477 #if NET_2_0
478                         item1.ToolTipText = item1.Text;
479 #endif
480
481                         ListViewItem item2 =  (ListViewItem) item1.Clone ();
482                         Assert.AreEqual (Color.Blue, item2.ForeColor, "#1");
483                         Assert.AreEqual (Color.Red, item2.BackColor, "#2");
484                         Assert.AreEqual ("Hello", item2.Text, "#3");
485                         Assert.AreEqual (item1.Font, item2.Font, "#4");
486                         Assert.AreEqual (2, item2.SubItems.Count, "#5");
487                         Assert.AreEqual ("Hello", item2.SubItems [0].Text, "#6");
488                         Assert.AreEqual ("Element2", item2.SubItems[1].Text, "#7");
489 #if NET_2_0
490                         Assert.AreEqual (item1.ToolTipText, item2.ToolTipText, "#8");
491 #endif
492                 }
493
494 #if NET_2_0
495                 [Test]
496                 public void ListViewItemTestImageIndex()
497                 {
498                         ListViewItem item1 = new ListViewItem();
499
500                         item1.ImageKey = "Key1";
501                         item1.ImageIndex = 0;
502                         Assert.AreEqual(String.Empty, item1.ImageKey, "ImageIndex#1");
503
504                         item1.ImageIndex = 0;
505                         item1.ImageKey = "Key1";
506                         Assert.AreEqual (-1, item1.ImageIndex, "ImageIndex#2");
507
508                         item1.ImageKey = "Key1";
509                         item1.ImageIndex = -1;
510                         Assert.AreEqual (String.Empty, item1.ImageKey, "ImageIndex#3");
511
512                         item1.ImageIndex = 0;
513                         item1.ImageKey = String.Empty;
514                         Assert.AreEqual (-1, item1.ImageIndex, "ImageIndex#4");
515                 }
516
517                 [Test]
518                 public void ListViewItemToolTipText ()
519                 {
520                         ListViewItem item1 = new ListViewItem();
521                         item1.ToolTipText = null;
522                         Assert.AreEqual (String.Empty, item1.ToolTipText, "ToolTipText#1");
523                 }
524 #endif
525         }
526
527         [TestFixture]
528         public class ListViewSubItemTest
529         {
530                 [Test]
531                 public void ListViewSubItemConstructorTest ()
532                 {
533                         ListViewItem.ListViewSubItem subItem = new ListViewItem.ListViewSubItem (null, null);
534                         Assert.AreEqual (String.Empty, subItem.Text, "#A1");
535
536                         ListViewItem.ListViewSubItem subItem2 = new ListViewItem.ListViewSubItem (null, "SubItem2");
537                         Assert.AreEqual ("SubItem2", subItem2.Text, "#A2");
538
539                         Font fnt = new Font ("Arial", 12);
540                         ListViewItem.ListViewSubItem subItem3 = new ListViewItem.ListViewSubItem (null, "SubItem3", 
541                                 Color.Blue, Color.Green, fnt);
542                         Assert.AreEqual ("SubItem3", subItem3.Text, "#A3");
543                         Assert.AreEqual (Color.Green, subItem3.BackColor, "#A4");
544                         Assert.AreEqual (Color.Blue, subItem3.ForeColor, "#A5");
545                         Assert.AreEqual (fnt, subItem3.Font, "#A6");
546                 }
547
548                 [Test]
549                 public void ListViewSubItemPropertiesTest ()
550                 {
551                         ListViewItem.ListViewSubItem subItem1 = new ListViewItem.ListViewSubItem ();
552                         Assert.AreEqual (string.Empty, subItem1.Text, "#A1");
553                         
554                         subItem1.Text = null;
555                         Assert.AreEqual (string.Empty, subItem1.Text, "#B1");
556                         subItem1.Text = "test";
557                         Assert.AreEqual ("test", subItem1.Text, "#B2");
558                 }
559         }
560
561         [TestFixture]
562         public class ListViewSubItemCollectionTest
563         {
564                 [Test]
565                 public void AddRange1 ()
566                 {
567                         ListViewItem item = new ListViewItem ();
568                         ListViewItem.ListViewSubItem subItemA = item.SubItems.Add ("A");
569
570                         Assert.AreEqual (2, item.SubItems.Count, "#A1");
571                         Assert.IsNotNull (item.SubItems [0], "#A2");
572                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#A3");
573
574                         ListViewItem.ListViewSubItem subItemB = new ListViewItem.ListViewSubItem ();
575                         subItemB.Text = "B";
576                         ListViewItem.ListViewSubItem subItemC = new ListViewItem.ListViewSubItem ();
577                         subItemB.Text = "C";
578
579                         item.SubItems.AddRange (new ListViewItem.ListViewSubItem [] {
580                                 subItemB, null, subItemC });
581                         Assert.AreEqual (4, item.SubItems.Count, "#B1");
582                         Assert.IsNotNull (item.SubItems [0], "#B2");
583                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#B3");
584                         Assert.IsNotNull (item.SubItems [1], "#B3");
585                         Assert.AreSame (subItemA, item.SubItems [1], "#B4");
586                         Assert.IsNotNull (item.SubItems [2], "#B5");
587                         Assert.AreSame (subItemB, item.SubItems [2], "#B6");
588                         Assert.IsNotNull (item.SubItems [3], "#B7");
589                         Assert.AreSame (subItemC, item.SubItems [3], "#B8");
590                 }
591
592                 [Test]
593                 public void AddRange1_Null ()
594                 {
595                         ListViewItem item = new ListViewItem ();
596                         try {
597                                 item.SubItems.AddRange ((ListViewItem.ListViewSubItem []) null);
598                                 Assert.Fail ("#1");
599                         } catch (ArgumentNullException ex) {
600                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
601                                 Assert.IsNotNull (ex.Message, "#3");
602                                 Assert.IsNotNull (ex.ParamName, "#4");
603                                 Assert.AreEqual ("items", ex.ParamName, "#5");
604                                 Assert.IsNull (ex.InnerException, "#6");
605                         }
606                 }
607
608                 [Test]
609                 public void AddRange2 ()
610                 {
611                         string subItemAText = "A";
612                         string subItemBText = "B";
613                         string subItemCText = "B";
614
615                         ListViewItem item = new ListViewItem ();
616                         item.SubItems.Add (subItemAText);
617
618                         Assert.AreEqual (2, item.SubItems.Count, "#A1");
619                         Assert.IsNotNull (item.SubItems [0], "#A2");
620                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#A3");
621                         Assert.IsNotNull (item.SubItems [1], "#A4");
622                         Assert.AreEqual (subItemAText, item.SubItems [1].Text, "#A5");
623
624                         item.SubItems.AddRange (new string [] { subItemBText, null, subItemCText });
625                         Assert.AreEqual (4, item.SubItems.Count, "#B1");
626                         Assert.IsNotNull (item.SubItems [0], "#B2");
627                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#B3");
628                         Assert.IsNotNull (item.SubItems [1], "#B4");
629                         Assert.AreSame (subItemAText, item.SubItems [1].Text, "#B5");
630                         Assert.IsNotNull (item.SubItems [2], "#B6");
631                         Assert.AreSame (subItemBText, item.SubItems [2].Text, "#B7");
632                         Assert.IsNotNull (item.SubItems [3], "#B8");
633                         Assert.AreSame (subItemCText, item.SubItems [3].Text, "#B9");
634                 }
635
636                 [Test]
637                 public void AddRange2_Null ()
638                 {
639                         ListViewItem item = new ListViewItem ();
640                         try {
641                                 item.SubItems.AddRange ((string []) null);
642                                 Assert.Fail ("#1");
643                         } catch (ArgumentNullException ex) {
644                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
645                                 Assert.IsNotNull (ex.Message, "#3");
646                                 Assert.IsNotNull (ex.ParamName, "#4");
647                                 Assert.AreEqual ("items", ex.ParamName, "#5");
648                                 Assert.IsNull (ex.InnerException, "#6");
649                         }
650                 }
651
652                 [Test]
653                 public void AddRange3 ()
654                 {
655                         string subItemAText = "A";
656                         string subItemBText = "B";
657                         string subItemCText = "B";
658                         Font font = new Font ("Arial", 14);
659
660                         ListViewItem item = new ListViewItem ();
661                         item.SubItems.Add (subItemAText);
662
663                         Assert.AreEqual (2, item.SubItems.Count, "#A1");
664                         Assert.IsNotNull (item.SubItems [0], "#A2");
665                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#A3");
666                         Assert.IsNotNull (item.SubItems [1], "#A4");
667                         Assert.AreEqual (subItemAText, item.SubItems [1].Text, "#A5");
668
669                         item.SubItems.AddRange (new string [] { subItemBText, null, subItemCText },
670                                 Color.Blue, Color.Red, font);
671                         Assert.AreEqual (4, item.SubItems.Count, "#B1");
672                         Assert.IsNotNull (item.SubItems [0], "#B2");
673                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#B3");
674                         Assert.IsNotNull (item.SubItems [1], "#C1");
675                         Assert.AreSame (subItemAText, item.SubItems [1].Text, "#C2");
676                         Assert.IsNotNull (item.SubItems [2], "#D1");
677                         Assert.AreSame (subItemBText, item.SubItems [2].Text, "#D2");
678                         Assert.AreEqual (Color.Blue, item.SubItems [2].ForeColor, "#D3");
679                         Assert.AreEqual (Color.Red, item.SubItems [2].BackColor, "#D4");
680                         Assert.AreSame (font, item.SubItems [2].Font, "#D5");
681                         Assert.IsNotNull (item.SubItems [3], "#E1");
682                         Assert.AreSame (subItemCText, item.SubItems [3].Text, "#E2");
683                         Assert.AreEqual (Color.Blue, item.SubItems [3].ForeColor, "#E3");
684                         Assert.AreEqual (Color.Red, item.SubItems [3].BackColor, "#E4");
685                         Assert.AreSame (font, item.SubItems [3].Font, "#E6");
686                 }
687
688                 [Test]
689                 public void AddRange3_Items_Null ()
690                 {
691                         ListViewItem item = new ListViewItem ();
692                         try {
693                                 item.SubItems.AddRange ((string []) null, Color.Blue, Color.Red,
694                                         new Font ("Arial", 14));
695                                 Assert.Fail ("#1");
696                         } catch (ArgumentNullException ex) {
697                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
698                                 Assert.IsNotNull (ex.Message, "#3");
699                                 Assert.IsNotNull (ex.ParamName, "#4");
700                                 Assert.AreEqual ("items", ex.ParamName, "#5");
701                                 Assert.IsNull (ex.InnerException, "#6");
702                         }
703                 }
704
705                 [Test]
706                 public void AddRange4 ()
707                 {
708                         ListViewItem item = new ListViewItem ();
709                         Assert.AreEqual (1, item.SubItems.Count, "#1");
710
711                         item.SubItems.AddRange (new string [3]);
712                         Assert.AreEqual (1, item.SubItems.Count, "#2");
713
714                         item.SubItems.AddRange (new ListViewItem.ListViewSubItem [3]);
715                         Assert.AreEqual (1, item.SubItems.Count, "#3");
716                 }
717
718                 [Test]
719                 public void Clear ()
720                 {
721                         ListViewItem item = new ListViewItem ();
722                         item.SubItems.AddRange (new string [] { "A", "B", "C" });
723                         item.SubItems.Clear ();
724                         Assert.AreEqual (1, item.SubItems.Count, "#1");
725                         Assert.IsNotNull (item.SubItems [0].Text, "#2");
726                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#3");
727                 }
728
729                 [Test]
730                 public void RemoveAt ()
731                 {
732                         ListViewItem item = new ListViewItem ();
733                         item.SubItems.AddRange (new string [] { "A", "B" });
734                         Assert.AreEqual (3, item.SubItems.Count, "#A1");
735                         Assert.IsNotNull (item.SubItems [0].Text, "#A2");
736                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#A3");
737                         Assert.IsNotNull (item.SubItems [1].Text, "#A4");
738                         Assert.AreEqual ("A", item.SubItems [1].Text, "#A5");
739                         Assert.IsNotNull (item.SubItems [2].Text, "#A6");
740                         Assert.AreEqual ("B", item.SubItems [2].Text, "#A7");
741
742                         item.SubItems.RemoveAt (1);
743
744                         Assert.AreEqual (2, item.SubItems.Count, "#B1");
745                         Assert.IsNotNull (item.SubItems [0].Text, "#B2");
746                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#B3");
747                         Assert.IsNotNull (item.SubItems [1].Text, "#B4");
748                         Assert.AreEqual ("B", item.SubItems [1].Text, "#B5");
749
750                         item.SubItems.RemoveAt (0);
751
752                         Assert.AreEqual (1, item.SubItems.Count, "#C1");
753                         Assert.IsNotNull (item.SubItems [0].Text, "#C2");
754                         Assert.AreEqual ("B", item.SubItems [0].Text, "#C3");
755
756                         item.SubItems.RemoveAt (0);
757
758                         Assert.AreEqual (1, item.SubItems.Count, "#D1");
759                         Assert.IsNotNull (item.SubItems [0].Text, "#D2");
760                         Assert.AreEqual (string.Empty, item.SubItems [0].Text, "#D3");
761                 }
762         }
763 }