2009-01-16 Carlos Alberto Cortez <calberto.cortez@gmail.com>
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / ColumnHeaderTest.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) 2007 Novell, Inc. (http://www.novell.com)
21 //
22 // Author:
23 //      Carlos Alberto Cortez <calberto.cortez@gmail.com>
24 //
25
26 using System;
27 using System.Drawing;
28 using System.Windows.Forms;
29 using NUnit.Framework;
30
31 namespace MonoTests.System.Windows.Forms
32 {
33         [TestFixture]
34         public class ColumnHeaderTest : TestHelper
35         {
36 #if NET_2_0
37                 [SetUp]
38                 protected override void SetUp ()
39                 {
40                         columnReordered = 0;
41                         base.SetUp ();
42                 }
43 #endif
44
45                 [Test]
46                 public void DefaultValuesTest ()
47                 {
48                         ColumnHeader col = new ColumnHeader ();
49
50                         Assert.IsNull (col.ListView, "1");
51                         Assert.AreEqual (-1, col.Index, "2");
52                         Assert.AreEqual ("ColumnHeader", col.Text, "3");
53                         Assert.AreEqual (HorizontalAlignment.Left, col.TextAlign, "4");
54 #if NET_2_0
55                         Assert.AreEqual (-1, col.DisplayIndex, "5");
56                         Assert.AreEqual (-1, col.ImageIndex, "6");
57                         Assert.AreEqual (String.Empty, col.ImageKey, "7");
58                         Assert.IsNull (col.ImageList, "8");
59                         Assert.AreEqual (String.Empty, col.Name, "9");
60                         Assert.IsNull (col.Tag, "10");
61 #endif
62                 }
63
64 #if NET_2_0
65                 [Test]
66                 public void DisplayIndex_ListView_Created ()
67                 {
68                         ColumnHeader colA = new ColumnHeader ();
69                         ColumnHeader colB = new ColumnHeader ();
70                         ColumnHeader colC = new ColumnHeader ();
71                         ColumnHeader colD = new ColumnHeader ();
72                         colA.DisplayIndex = 2;
73                         colD.DisplayIndex = 0;
74                         colB.DisplayIndex = 3;
75                         colC.DisplayIndex = 1;
76
77                         Form form = new Form ();
78                         form.ShowInTaskbar = false;
79                         ListView lv = new ListView ();
80                         lv.ColumnReordered += new ColumnReorderedEventHandler (ColumnReordered);
81                         lv.View = View.Details;
82                         lv.Columns.Add (colA);
83                         lv.Columns.Add (colB);
84                         lv.Columns.Add (colC);
85                         form.Controls.Add (lv);
86                         form.Show ();
87
88                         Assert.AreEqual (0, colA.DisplayIndex, "#A1");
89                         Assert.AreEqual (1, colB.DisplayIndex, "#A2");
90                         Assert.AreEqual (2, colC.DisplayIndex, "#A3");
91                         Assert.AreEqual (0, colD.DisplayIndex, "#A4");
92                         Assert.AreEqual (0, columnReordered, "#A5");
93
94                         colC.DisplayIndex = 0;
95                         Assert.AreEqual (1, colA.DisplayIndex, "#B1");
96                         Assert.AreEqual (2, colB.DisplayIndex, "#B2");
97                         Assert.AreEqual (0, colC.DisplayIndex, "#B3");
98                         Assert.AreEqual (0, colD.DisplayIndex, "#B4");
99                         Assert.AreEqual (0, columnReordered, "#B5");
100
101                         colC.DisplayIndex = 2;
102                         Assert.AreEqual (0, colA.DisplayIndex, "#C1");
103                         Assert.AreEqual (1, colB.DisplayIndex, "#C2");
104                         Assert.AreEqual (2, colC.DisplayIndex, "#C3");
105                         Assert.AreEqual (0, colD.DisplayIndex, "#C4");
106                         Assert.AreEqual (0, columnReordered, "#C5");
107
108                         colB.DisplayIndex = 2;
109                         Assert.AreEqual (0, colA.DisplayIndex, "#D1");
110                         Assert.AreEqual (2, colB.DisplayIndex, "#D2");
111                         Assert.AreEqual (1, colC.DisplayIndex, "#D3");
112                         Assert.AreEqual (0, colD.DisplayIndex, "#D4");
113                         Assert.AreEqual (0, columnReordered, "#D5");
114
115                         colD.DisplayIndex = 1;
116                         lv.Columns.Add (colD);
117
118                         Assert.AreEqual (0, colA.DisplayIndex, "#E1");
119                         Assert.AreEqual (2, colB.DisplayIndex, "#E2");
120                         Assert.AreEqual (1, colC.DisplayIndex, "#E3");
121                         Assert.AreEqual (3, colD.DisplayIndex, "#E4");
122                         Assert.AreEqual (0, columnReordered, "#E5");
123                         
124                         form.Close ();
125                 }
126
127                 [Test]
128                 public void DisplayIndex_ListView_Disposed ()
129                 {
130                         ListView lv = new ListView ();
131                         lv.View = View.Details;
132                         ColumnHeader colA = new ColumnHeader ();
133                         lv.Columns.Add (colA);
134                         ColumnHeader colB = new ColumnHeader ();
135                         lv.Columns.Add (colB);
136                         ColumnHeader colC = new ColumnHeader ();
137                         lv.Columns.Add (colC);
138                         Assert.AreEqual (0, colA.DisplayIndex, "#A1");
139                         Assert.AreEqual (1, colB.DisplayIndex, "#A2");
140                         Assert.AreEqual (2, colC.DisplayIndex, "#A3");
141                         colA.DisplayIndex = 2;
142                         lv.Columns.Remove (colB);
143                         lv.Dispose ();
144                         Assert.AreEqual (1, colA.DisplayIndex, "#B1");
145                         Assert.AreEqual (-1, colB.DisplayIndex, "#B2");
146                         Assert.AreEqual (0, colC.DisplayIndex, "#B3");
147                         colA.DisplayIndex = 255;
148                         Assert.AreEqual (255, colA.DisplayIndex, "#C1");
149                         Assert.AreEqual (-1, colB.DisplayIndex, "#C2");
150                         Assert.AreEqual (0, colC.DisplayIndex, "#C3");
151                 }
152
153                 [Test]
154                 public void DisplayIndex_ListView_NotCreated ()
155                 {
156                         ColumnHeader colA = new ColumnHeader ();
157                         colA.DisplayIndex = -66;
158                         Assert.AreEqual (-66, colA.DisplayIndex, "#A1");
159                         colA.DisplayIndex = 66;
160                         Assert.AreEqual (66, colA.DisplayIndex, "#A2");
161
162                         ColumnHeader colB = new ColumnHeader ();
163                         colB.DisplayIndex = 0;
164                         Assert.AreEqual (0, colB.DisplayIndex, "#A3");
165
166                         ColumnHeader colC = new ColumnHeader ();
167                         colC.DisplayIndex = 1;
168                         Assert.AreEqual (1, colC.DisplayIndex, "#A4");
169
170                         ListView lv = new ListView ();
171                         lv.ColumnReordered += new ColumnReorderedEventHandler (ColumnReordered);
172                         lv.View = View.Details;
173                         lv.Columns.Add (colA);
174                         lv.Columns.Add (colB);
175                         lv.Columns.Add (colC);
176
177                         try {
178                                 colA.DisplayIndex = -1;
179                                 Assert.Fail ("#B1");
180                         } catch (ArgumentOutOfRangeException ex) {
181                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
182                                 Assert.IsNull (ex.InnerException, "#B3");
183                                 Assert.IsNotNull (ex.Message, "#B4");
184                                 Assert.IsNotNull (ex.ParamName, "#B5");
185                                 Assert.AreEqual ("DisplayIndex", ex.ParamName, "#B6");
186                         }
187
188                         try {
189                                 colA.DisplayIndex = lv.Columns.Count;
190                                 Assert.Fail ("#C1");
191                         } catch (ArgumentOutOfRangeException ex) {
192                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
193                                 Assert.IsNull (ex.InnerException, "#C3");
194                                 Assert.IsNotNull (ex.Message, "#C4");
195                                 Assert.IsNotNull (ex.ParamName, "#C5");
196                                 Assert.AreEqual ("DisplayIndex", ex.ParamName, "#C6");
197                         }
198
199                         Assert.AreEqual (0, colA.DisplayIndex, "#D1");
200                         Assert.AreEqual (1, colB.DisplayIndex, "#D2");
201                         Assert.AreEqual (2, colC.DisplayIndex, "#D3");
202                         Assert.AreEqual (0, columnReordered, "#D4");
203                 }
204
205                 [Test]
206                 public void ImageIndex_Invalid ()
207                 {
208                         ColumnHeader col = new ColumnHeader ();
209                         col.ImageIndex = 2;
210                         try {
211                                 col.ImageIndex = -2;
212                                 Assert.Fail ("#1");
213                         } catch (ArgumentOutOfRangeException ex) {
214                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
215                                 Assert.IsNotNull (ex.Message, "#3");
216                                 Assert.IsNotNull (ex.ParamName, "#4");
217                                 Assert.AreEqual ("ImageIndex", ex.ParamName, "#5");
218                                 Assert.IsNull (ex.InnerException, "#6");
219                         }
220                         Assert.AreEqual (2, col.ImageIndex, "#7");
221                 }
222
223                 [Test]
224                 public void ImageKey ()
225                 {
226                         ColumnHeader col = new ColumnHeader ();
227                         Assert.AreEqual (string.Empty, col.ImageKey, "#1");
228                         col.ImageKey = "test";
229                         Assert.AreEqual ("test", col.ImageKey, "#2");
230                         col.ImageKey = null;
231                         Assert.AreEqual (string.Empty, col.ImageKey, "#3");
232                 }
233
234                 [Test]
235                 public void ImageKeyAndImageIndexInteraction ()
236                 {
237                         ColumnHeader col = new ColumnHeader ();
238                         col.ImageIndex = 1;
239                         Assert.AreEqual (1, col.ImageIndex, "#A1");
240                         Assert.AreEqual (string.Empty, col.ImageKey, "#A2");
241                         col.ImageKey = "test";
242                         Assert.AreEqual (-1, col.ImageIndex, "#B1");
243                         Assert.AreEqual ("test", col.ImageKey, "#B2");
244                         col.ImageIndex = 2;
245                         Assert.AreEqual (2, col.ImageIndex, "#C1");
246                         Assert.AreEqual (string.Empty, col.ImageKey, "#C2");
247                         col.ImageKey = null;
248                         Assert.AreEqual (-1, col.ImageIndex, "#D1");
249                         Assert.AreEqual (string.Empty, col.ImageKey, "#D2");
250                 }
251
252                 [Test]
253                 public void ImageList ()
254                 {
255                         ColumnHeader col = new ColumnHeader ();
256                         Assert.IsNull (col.ImageList, "#1");
257
258                         ListView lv = new ListView ();
259                         lv.View = View.Details;
260                         ImageList small = new ImageList ();
261                         lv.SmallImageList = small;
262                         ImageList large = new ImageList ();
263                         lv.LargeImageList = large;
264                         lv.Columns.Add (col);
265                         Assert.IsNotNull (col.ImageList, "#2");
266                         Assert.AreSame (small, col.ImageList, "#3");
267                 }
268
269                 [Test]
270                 public void ImageList_ListView_Disposed ()
271                 {
272                         ListView lv = new ListView ();
273                         lv.View = View.Details;
274                         ImageList small = new ImageList ();
275                         lv.SmallImageList = small;
276                         ImageList large = new ImageList ();
277                         lv.LargeImageList = large;
278                         ColumnHeader col = new ColumnHeader ();
279                         lv.Columns.Add (col);
280                         lv.Dispose ();
281                         Assert.IsNull (col.ImageList);
282                 }
283 #endif
284
285                 [Test]
286                 public void Index_ListView_Disposed ()
287                 {
288                         ListView lv = new ListView ();
289                         lv.View = View.Details;
290                         ColumnHeader colA = new ColumnHeader ();
291                         lv.Columns.Add (colA);
292                         ColumnHeader colB = new ColumnHeader ();
293                         lv.Columns.Add (colB);
294                         lv.Dispose ();
295                         Assert.AreEqual (-1, colA.Index, "#1");
296                         Assert.AreEqual (-1, colB.Index, "#2");
297                 }
298
299 #if NET_2_0
300                 [Test]
301                 public void Name ()
302                 {
303                         ColumnHeader col = new ColumnHeader ();
304                         Assert.AreEqual (string.Empty, col.Name, "#1");
305                         col.Name = "Address";
306                         Assert.AreEqual ("Address", col.Name, "#2");
307                         col.Name = null;
308                         Assert.AreEqual (string.Empty, col.Name, "#3");
309                 }
310
311                 [Test]
312                 public void Tag ()
313                 {
314                         ColumnHeader col = new ColumnHeader ();
315                         Assert.IsNull (col.Tag, "#1");
316                         col.Tag = "whatever";
317                         Assert.AreEqual ("whatever", col.Tag, "#2");
318                         col.Tag = null;
319                         Assert.IsNull (col.Tag, "#3");
320                 }
321 #endif
322
323                 [Test]
324                 public void Text_ListView_Disposed ()
325                 {
326                         ListView lv = new ListView ();
327                         lv.View = View.Details;
328                         ColumnHeader col = new ColumnHeader ();
329                         lv.Columns.Add (col);
330                         lv.Dispose ();
331                         col.Text = "whatever";
332                         Assert.AreEqual ("whatever", col.Text);
333                 }
334
335                 [Test]
336                 public void TextAlign_ListView_Disposed ()
337                 {
338                         ListView lv = new ListView ();
339                         lv.View = View.Details;
340                         ColumnHeader col = new ColumnHeader ();
341                         lv.Columns.Add (col);
342                         lv.Dispose ();
343                         col.TextAlign = HorizontalAlignment.Right;
344                         Assert.AreEqual (HorizontalAlignment.Right, col.TextAlign);
345                 }
346
347                 [Test]
348                 public void ToStringTest ()
349                 {
350                         ListView lv = new ListView ();
351                         lv.SmallImageList = new ImageList ();
352                         ColumnHeader col = new ColumnHeader ();
353 #if NET_2_0
354                         col.DisplayIndex = 3;
355                         col.ImageIndex = 2;
356                         col.Name = "address_col";
357                         col.Tag = DateTime.Now;
358 #endif
359                         col.Text = "Address";
360                         col.TextAlign = HorizontalAlignment.Right;
361                         col.Width = 30;
362                         lv.Columns.Add (col);
363                         Assert.AreEqual ("ColumnHeader: Text: Address", col.ToString ());
364                 }
365
366                 [Test]
367                 [Category ("NotWorking")]
368                 public void WidthDefault ()
369                 {
370                         ColumnHeader col = new ColumnHeader ();
371                         Assert.AreEqual (60, col.Width);
372                 }
373
374                 [Test]
375                 public void WidthTest ()
376                 {
377                         ColumnHeader col = new ColumnHeader ();
378                         col.Text = "Column text";
379
380                         ListView lv = new ListView ();
381                         lv.Items.Add ("Item text");
382                         lv.View = View.Details;
383                         lv.Columns.Add (col);
384                         lv.CreateControl ();
385
386                         col.Width = -1;
387                         Assert.IsTrue (col.Width > 0, "#1");
388
389                         col.Width = -2;
390                         Assert.IsTrue (col.Width > 0, "#2");
391                 }
392
393                 [Test]
394                 public void Width_ListView_Disposed ()
395                 {
396                         ListView lv = new ListView ();
397                         lv.View = View.Details;
398                         ColumnHeader col = new ColumnHeader ();
399                         lv.Columns.Add (col);
400                         lv.Dispose ();
401                         col.Width = 10;
402                         Assert.AreEqual (10, col.Width);
403                 }
404
405 #if NET_2_0
406                 public void ColumnReordered (object sender, ColumnReorderedEventArgs  e)
407                 {
408                         columnReordered++;
409                 }
410
411                 private int columnReordered;
412 #endif
413         }
414 }