* Test/System.Windows.Forms/TestHelper.cs: Inconsistent eol fixes and
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / ToolStripItemCollectionTest.cs
1 //
2 // ToolStripItemCollectionTest.cs
3 //
4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
11 // 
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
14 // 
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 //
23 // Copyright (c) 2007 Gert Driesen
24 //
25 // Authors:
26 //      Gert Driesen (drieseng@users.sourceforge.net)
27 //
28
29 #if NET_2_0
30 using System;
31 using System.Collections.Generic;
32 using System.Windows.Forms;
33
34 using NUnit.Framework;
35
36 namespace MonoTests.System.Windows.Forms
37 {
38         [TestFixture]
39         public class ToolStripItemCollectionTests : TestHelper
40         {
41                 private List<ToolStripItem> itemsAdded;
42                 private List<ToolStripItem> itemsRemoved;
43
44                 [SetUp]
45                 protected override void SetUp () {
46                         itemsAdded = new List<ToolStripItem> ();
47                         itemsRemoved = new List<ToolStripItem> ();
48                         base.SetUp ();
49                 }
50
51                 [Test]
52                 public void Constructor ()
53                 {
54                         ToolStrip toolStrip = CreateToolStrip ();
55                         ToolStripItemCollection items = null;
56
57                         items = new ToolStripItemCollection (toolStrip, new ToolStripItem [0]);
58                         Assert.AreEqual (0, items.Count, "#A1");
59                         Assert.IsFalse (items.IsReadOnly, "#A2");
60                         Assert.AreEqual (0, itemsAdded.Count, "#A3");
61
62                         MockToolStripButton buttonA = new MockToolStripButton ("A");
63                         MockToolStripButton buttonB = new MockToolStripButton ("B");
64                         items = new ToolStripItemCollection (toolStrip, new ToolStripItem [] {
65                                 buttonA, buttonB });
66                         Assert.AreEqual (2, items.Count, "#B1");
67                         Assert.IsFalse (items.IsReadOnly, "#B2");
68                         Assert.AreEqual (0, itemsAdded.Count, "#B3");
69                         Assert.AreSame (buttonA, items [0], "#B4");
70                         Assert.AreSame (buttonB, items [1], "#B5");
71                         Assert.IsNull (buttonA.Owner, "#B6");
72                         Assert.IsNull (buttonA.ParentToolStrip, "#B7");
73                         Assert.IsNull (buttonB.Owner, "#B8");
74                         Assert.IsNull (buttonB.ParentToolStrip, "#B9");
75
76                         // null item
77                         try {
78                                 new ToolStripItemCollection (toolStrip, new ToolStripItem [] {
79                                         buttonA, null, buttonB });
80                                 Assert.Fail ("#C1");
81                         } catch (ArgumentNullException ex) {
82                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#C2");
83                                 Assert.IsNull (ex.InnerException, "#C3");
84                                 Assert.IsNotNull (ex.Message, "#C4");
85                                 Assert.AreEqual ("value", ex.ParamName, "#C5");
86                         }
87                 }
88
89                 [Test]
90                 public void Constructor_Owner_Null ()
91                 {
92                         try {
93                                 new ToolStripItemCollection ((ToolStrip) null, new ToolStripItem [0]);
94                                 Assert.Fail ("#1");
95                         } catch (ArgumentNullException ex) {
96                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
97                                 Assert.IsNull (ex.InnerException, "#3");
98                                 Assert.IsNotNull (ex.Message, "#4");
99                                 Assert.AreEqual ("owner", ex.ParamName, "#5");
100                         }
101                 }
102
103                 [Test]
104                 public void Constructor_Items_Null ()
105                 {
106                         try {
107                                 new ToolStripItemCollection (new ToolStrip (), (ToolStripItem []) null);
108                                 Assert.Fail ("#1");
109                         } catch (ArgumentNullException ex) {
110                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
111                                 Assert.IsNull (ex.InnerException, "#3");
112                                 Assert.IsNotNull (ex.Message, "#4");
113                                 Assert.AreEqual ("toolStripItems", ex.ParamName, "#5");
114                         }
115                 }
116
117                 [Test]
118                 public void Insert_Owned ()
119                 {
120                         ToolStrip toolStrip = CreateToolStrip ();
121                         ToolStripItemCollection items = toolStrip.Items;
122
123                         MockToolStripButton buttonA = new MockToolStripButton ("A");
124                         items.Insert (0, buttonA);
125                         Assert.AreEqual (1, items.Count, "#A1");
126                         Assert.AreEqual (1, itemsAdded.Count, "#A2");
127                         Assert.AreSame (buttonA, items [0], "#A3");
128                         Assert.AreSame (toolStrip, buttonA.Owner, "#A4");
129                         Assert.IsNull (buttonA.ParentToolStrip, "#A5");
130
131                         MockToolStripButton buttonB = new MockToolStripButton ("B");
132                         items.Insert (0, buttonB);
133                         Assert.AreEqual (2, items.Count, "#B1");
134                         Assert.AreEqual (2, itemsAdded.Count, "#B2");
135                         Assert.AreSame (buttonB, items [0], "#B3");
136                         Assert.AreSame (buttonA, items [1], "#B4");
137                         Assert.AreSame (toolStrip, buttonB.Owner, "#B5");
138                         Assert.IsNull (buttonB.ParentToolStrip, "#B6");
139
140                         MockToolStripButton buttonC = new MockToolStripButton ("C");
141                         items.Insert (1, buttonC);
142                         Assert.AreEqual (3, items.Count, "#C1");
143                         Assert.AreEqual (3, itemsAdded.Count, "#C2");
144                         Assert.AreSame (buttonB, items [0], "#C3");
145                         Assert.AreSame (buttonC, items [1], "#C4");
146                         Assert.AreSame (buttonA, items [2], "#C5");
147                         Assert.AreSame (toolStrip, buttonC.Owner, "#C6");
148                         Assert.IsNull (buttonC.ParentToolStrip, "#C7");
149                 }
150
151                 [Test]
152                 public void Insert_Owned_CreateControl ()
153                 {
154                         ToolStrip toolStrip = CreateToolStrip ();
155                         toolStrip.CreateControl ();
156                         ToolStripItemCollection items = toolStrip.Items;
157
158                         MockToolStripButton buttonA = new MockToolStripButton ("A");
159                         items.Insert (0, buttonA);
160                         Assert.AreEqual (1, items.Count, "#A1");
161                         Assert.AreEqual (1, itemsAdded.Count, "#A2");
162                         Assert.AreSame (buttonA, items[0], "#A3");
163                         Assert.AreSame (toolStrip, buttonA.Owner, "#A4");
164                         Assert.IsNotNull (buttonA.ParentToolStrip, "#A5");
165
166                         MockToolStripButton buttonB = new MockToolStripButton ("B");
167                         items.Insert (0, buttonB);
168                         Assert.AreEqual (2, items.Count, "#B1");
169                         Assert.AreEqual (2, itemsAdded.Count, "#B2");
170                         Assert.AreSame (buttonB, items[0], "#B3");
171                         Assert.AreSame (buttonA, items[1], "#B4");
172                         Assert.AreSame (toolStrip, buttonB.Owner, "#B5");
173                         Assert.IsNotNull (buttonB.ParentToolStrip, "#B6");
174
175                         MockToolStripButton buttonC = new MockToolStripButton ("C");
176                         items.Insert (1, buttonC);
177                         Assert.AreEqual (3, items.Count, "#C1");
178                         Assert.AreEqual (3, itemsAdded.Count, "#C2");
179                         Assert.AreSame (buttonB, items[0], "#C3");
180                         Assert.AreSame (buttonC, items[1], "#C4");
181                         Assert.AreSame (buttonA, items[2], "#C5");
182                         Assert.AreSame (toolStrip, buttonC.Owner, "#C6");
183                         Assert.IsNotNull (buttonC.ParentToolStrip, "#C7");
184                 }
185
186                 [Test]
187                 public void Insert_StandAlone ()
188                 {
189                         ToolStrip toolStrip = CreateToolStrip ();
190                         ToolStripItemCollection items = new ToolStripItemCollection (
191                                 toolStrip, new ToolStripItem [0]);
192
193                         MockToolStripButton buttonA = new MockToolStripButton ("A");
194                         items.Insert (0, buttonA);
195                         Assert.AreEqual (1, items.Count, "#A1");
196                         Assert.AreEqual (0, itemsAdded.Count, "#A2");
197                         Assert.AreSame (buttonA, items [0], "#A3");
198                         Assert.IsNull (buttonA.Owner, "#A4");
199                         Assert.IsNull (buttonA.ParentToolStrip, "#A5");
200
201                         MockToolStripButton buttonB = new MockToolStripButton ("B");
202                         items.Insert (0, buttonB);
203                         Assert.AreEqual (2, items.Count, "#B1");
204                         Assert.AreEqual (0, itemsAdded.Count, "#B2");
205                         Assert.AreSame (buttonB, items [0], "#B3");
206                         Assert.AreSame (buttonA, items [1], "#B4");
207                         Assert.IsNull (buttonB.Owner, "#B5");
208                         Assert.IsNull (buttonB.ParentToolStrip, "#B6");
209
210                         MockToolStripButton buttonC = new MockToolStripButton ("C");
211                         items.Insert (1, buttonC);
212                         Assert.AreEqual (3, items.Count, "#C1");
213                         Assert.AreEqual (0, itemsAdded.Count, "#C2");
214                         Assert.AreSame (buttonB, items [0], "#C3");
215                         Assert.AreSame (buttonC, items [1], "#C4");
216                         Assert.AreSame (buttonA, items [2], "#C5");
217                         Assert.IsNull (buttonC.Owner, "#C6");
218                         Assert.IsNull (buttonC.ParentToolStrip, "#C7");
219                 }
220
221                 [Test]
222                 public void Insert_Index_OutOfRange ()
223                 {
224                         ToolStrip toolStrip = CreateToolStrip ();
225                         ToolStripItemCollection items = new ToolStripItemCollection (
226                                 toolStrip, new ToolStripItem [0]);
227
228                         try {
229                                 items.Insert (-1, new ToolStripButton ());
230                                 Assert.Fail ("#A1");
231                         } catch (ArgumentOutOfRangeException ex) {
232                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
233                                 Assert.IsNull (ex.InnerException, "#A3");
234                                 Assert.IsNotNull (ex.Message, "#A4");
235                                 Assert.AreEqual ("index", ex.ParamName, "#A5");
236                         }
237
238                         try {
239                                 items.Insert (1, new ToolStripButton ());
240                                 Assert.Fail ("#B1");
241                         } catch (ArgumentOutOfRangeException ex) {
242                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
243                                 Assert.IsNull (ex.InnerException, "#B3");
244                                 Assert.IsNotNull (ex.Message, "#B4");
245                                 Assert.AreEqual ("index", ex.ParamName, "#B5");
246                         }
247                 }
248
249                 [Test]
250                 public void Insert_Item_Null ()
251                 {
252                         ToolStrip toolStrip = CreateToolStrip ();
253                         ToolStripItemCollection items = new ToolStripItemCollection (
254                                 toolStrip, new ToolStripItem [0]);
255                         try {
256                                 items.Insert (0, (ToolStripItem) null);
257                                 Assert.Fail ("#1");
258                         } catch (ArgumentNullException ex) {
259                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
260                                 Assert.IsNull (ex.InnerException, "#3");
261                                 Assert.IsNotNull (ex.Message, "#4");
262                                 Assert.AreEqual ("value", ex.ParamName, "#5");
263                         }
264                 }
265
266                 [Test]
267                 public void Remove_Owned ()
268                 {
269                         ToolStrip toolStrip = CreateToolStrip ();
270                         ToolStripItemCollection items = toolStrip.Items;
271
272                         MockToolStripButton buttonA = new MockToolStripButton ("A");
273                         MockToolStripButton buttonB = new MockToolStripButton ("B");
274                         MockToolStripButton buttonC = new MockToolStripButton ("B");
275                         items.Insert (0, buttonA);
276                         items.Insert (0, buttonB);
277
278                         items.Remove (buttonB);
279                         Assert.AreEqual (1, items.Count, "#A1");
280                         Assert.AreEqual (1, itemsRemoved.Count, "#A2");
281                         Assert.AreSame (buttonA, items [0], "#A3");
282                         Assert.AreSame (buttonB, itemsRemoved [0], "#A4");
283                         Assert.IsNull (buttonB.Owner, "#A5");
284                         Assert.IsNull (buttonB.ParentToolStrip, "#A6");
285
286                         // remove null item
287                         items.Remove ((ToolStripItem) null);
288                         Assert.AreEqual (1, items.Count, "#B1");
289                         Assert.AreEqual (2, itemsRemoved.Count, "#B2");
290                         Assert.AreSame (buttonA, items [0], "#B3");
291                         Assert.IsNull (itemsRemoved [1], "#B4");
292
293                         // remove item not owner by toolstrip
294                         items.Remove (buttonC);
295                         Assert.AreEqual (1, items.Count, "#C1");
296                         Assert.AreEqual (3, itemsRemoved.Count, "#C2");
297                         Assert.AreSame (buttonA, items [0], "#C3");
298                         Assert.AreSame(buttonC, itemsRemoved [2], "#C4");
299                         Assert.IsNull (buttonC.Owner, "#C5");
300                         Assert.IsNull (buttonC.ParentToolStrip, "#C6");
301
302                         items.Remove (buttonA);
303                         Assert.AreEqual (0, items.Count, "#D1");
304                         Assert.AreEqual (4, itemsRemoved.Count, "#D2");
305                         Assert.AreSame(buttonA, itemsRemoved [3], "#D3");
306                         Assert.IsNull (buttonC.Owner, "#D4");
307                         Assert.IsNull (buttonC.ParentToolStrip, "#D5");
308
309                         // remove item which is no longer in the collection
310                         items.Remove (buttonA);
311                         Assert.AreEqual (0, items.Count, "#E1");
312                         Assert.AreEqual (5, itemsRemoved.Count, "#E2");
313                         Assert.AreSame(buttonA, itemsRemoved [4], "#E3");
314
315                         // remove item owned by other toolstrip
316                         ToolStrip otherToolStrip = new ToolStrip ();
317                         MockToolStripButton buttonD = new MockToolStripButton ("B");
318                         otherToolStrip.Items.Add (buttonD);
319                         Assert.AreSame (otherToolStrip, buttonD.Owner, "#F1");
320                         Assert.IsNull (buttonD.ParentToolStrip, "#F2");
321                         items.Remove (buttonD);
322                         Assert.AreEqual (0, items.Count, "#F3");
323                         Assert.AreEqual (6, itemsRemoved.Count, "#F4");
324                         Assert.IsNull (buttonD.Owner, "#F5");
325                         Assert.IsNull (buttonD.ParentToolStrip, "#F6");
326                 }
327
328                 [Test]
329                 public void Remove_StandAlone ()
330                 {
331                         ToolStrip toolStrip = CreateToolStrip ();
332                         ToolStripItemCollection items = new ToolStripItemCollection (
333                                 toolStrip, new ToolStripItem [0]);
334
335                         MockToolStripButton buttonA = new MockToolStripButton ("A");
336                         MockToolStripButton buttonB = new MockToolStripButton ("B");
337                         MockToolStripButton buttonC = new MockToolStripButton ("B");
338                         items.Insert (0, buttonA);
339                         items.Insert (0, buttonB);
340
341                         items.Remove (buttonB);
342                         Assert.AreEqual (1, items.Count, "#A1");
343                         Assert.AreEqual (0, itemsRemoved.Count, "#A2");
344                         Assert.AreSame (buttonA, items [0], "#A3");
345
346                         items.Remove ((ToolStripItem) null);
347                         Assert.AreEqual (1, items.Count, "#B1");
348                         Assert.AreEqual (0, itemsRemoved.Count, "#B2");
349                         Assert.AreSame (buttonA, items [0], "#B3");
350
351                         items.Remove (buttonC);
352                         Assert.AreEqual (1, items.Count, "#C1");
353                         Assert.AreEqual (0, itemsRemoved.Count, "#C2");
354                         Assert.AreSame (buttonA, items [0], "#C3");
355
356                         items.Remove (buttonA);
357                         Assert.AreEqual (0, items.Count, "#D1");
358                         Assert.AreEqual (0, itemsRemoved.Count, "#D2");
359
360                         items.Remove (buttonA);
361                         Assert.AreEqual (0, items.Count, "#E1");
362                         Assert.AreEqual (0, itemsRemoved.Count, "#E2");
363
364                         // remove item owned by other toolstrip
365                         ToolStrip otherToolStrip = new ToolStrip ();
366                         MockToolStripButton buttonD = new MockToolStripButton ("B");
367                         otherToolStrip.Items.Add (buttonD);
368                         Assert.AreSame (otherToolStrip, buttonD.Owner, "#F1");
369                         Assert.IsNull (buttonD.ParentToolStrip, "#F2");
370                         items.Remove (buttonD);
371                         Assert.AreEqual (0, items.Count, "#F3");
372                         Assert.AreEqual (0, itemsRemoved.Count, "#F4");
373                         Assert.AreSame (otherToolStrip, buttonD.Owner, "#F5");
374                         Assert.IsNull (buttonD.ParentToolStrip, "#F6");
375                 }
376
377                 void ToolStrip_ItemAdded (object sender, ToolStripItemEventArgs e)
378                 {
379                         itemsAdded.Add (e.Item);
380                 }
381
382                 void ToolStrip_ItemRemoved (object sender, ToolStripItemEventArgs e)
383                 {
384                         itemsRemoved.Add (e.Item);
385                 }
386
387                 ToolStrip CreateToolStrip ()
388                 {
389                         ToolStrip toolStrip = new ToolStrip ();
390                         toolStrip.ItemAdded += ToolStrip_ItemAdded;
391                         toolStrip.ItemRemoved += ToolStrip_ItemRemoved;
392                         return toolStrip;
393                 }
394
395                 class MockToolStripButton : ToolStripButton
396                 {
397                         public MockToolStripButton (string text) : base (text)
398                         {
399                         }
400
401                         public ToolStrip ParentToolStrip {
402                                 get { return base.Parent; }
403                                 set { base.Parent = value; }
404                         }
405                 }
406         }
407 }
408 #endif