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