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