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] SetUp()37 protected override void SetUp () 38 { 39 columnReordered = 0; 40 base.SetUp (); 41 } 42 43 [Test] DefaultValuesTest()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] DisplayIndex_ListView_Created()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] DisplayIndex_ListView_Disposed()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] DisplayIndex_ListView_NotCreated()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] ImageIndex_Invalid()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] ImageKey()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] ImageKeyAndImageIndexInteraction()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] ImageList()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] ImageList_ListView_Disposed()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] Index_ListView_Disposed()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] Name()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] Tag()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] Text_ListView_Disposed()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] TextAlign_ListView_Disposed()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] ToStringTest()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")] WidthDefault()358 public void WidthDefault () 359 { 360 ColumnHeader col = new ColumnHeader (); 361 Assert.AreEqual (60, col.Width); 362 } 363 364 [Test] WidthTest()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] Width_ListView_Disposed()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] Width_AutoResize_Expand()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 ColumnReordered(object sender, ColumnReorderedEventArgs e)427 public void ColumnReordered (object sender, ColumnReorderedEventArgs e) 428 { 429 columnReordered++; 430 } 431 432 private int columnReordered; 433 } 434 } 435