2 // ToolStripItemCollectionTest.cs
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:
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
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.
23 // Copyright (c) 2007 Gert Driesen
26 // Gert Driesen (drieseng@users.sourceforge.net)
31 using System.Collections.Generic;
32 using System.Windows.Forms;
34 using NUnit.Framework;
36 namespace MonoTests.System.Windows.Forms
39 public class ToolStripItemCollectionTests
41 private List<ToolStripItem> itemsAdded;
42 private List<ToolStripItem> itemsRemoved;
47 itemsAdded = new List<ToolStripItem> ();
48 itemsRemoved = new List<ToolStripItem> ();
52 public void Constructor ()
54 ToolStrip toolStrip = CreateToolStrip ();
55 ToolStripItemCollection items = null;
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");
62 MockToolStripButton buttonA = new MockToolStripButton ("A");
63 MockToolStripButton buttonB = new MockToolStripButton ("B");
64 items = new ToolStripItemCollection (toolStrip, new ToolStripItem [] {
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");
78 new ToolStripItemCollection (toolStrip, new ToolStripItem [] {
79 buttonA, null, buttonB });
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");
90 public void Constructor_Owner_Null ()
93 new ToolStripItemCollection ((ToolStrip) null, new ToolStripItem [0]);
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");
104 [ExpectedException (typeof (ArgumentNullException))]
105 public void ConstructorANE ()
107 new ToolStripItemCollection (new ToolStrip (), (ToolStripItem[])null);
111 public void Constructor_Items_Null ()
114 new ToolStripItemCollection (new ToolStrip (), (ToolStripItem []) null);
116 } catch (ArgumentNullException ex) {
117 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
118 Assert.IsNull (ex.InnerException, "#3");
119 Assert.IsNotNull (ex.Message, "#4");
120 Assert.AreEqual ("toolStripItems", ex.ParamName, "#5");
125 public void Insert_Owned ()
127 ToolStrip toolStrip = CreateToolStrip ();
128 ToolStripItemCollection items = toolStrip.Items;
130 MockToolStripButton buttonA = new MockToolStripButton ("A");
131 items.Insert (0, buttonA);
132 Assert.AreEqual (1, items.Count, "#A1");
133 Assert.AreEqual (1, itemsAdded.Count, "#A2");
134 Assert.AreSame (buttonA, items [0], "#A3");
135 Assert.AreSame (toolStrip, buttonA.Owner, "#A4");
136 Assert.IsNull (buttonA.ParentToolStrip, "#A5");
138 MockToolStripButton buttonB = new MockToolStripButton ("B");
139 items.Insert (0, buttonB);
140 Assert.AreEqual (2, items.Count, "#B1");
141 Assert.AreEqual (2, itemsAdded.Count, "#B2");
142 Assert.AreSame (buttonB, items [0], "#B3");
143 Assert.AreSame (buttonA, items [1], "#B4");
144 Assert.AreSame (toolStrip, buttonB.Owner, "#B5");
145 Assert.IsNull (buttonB.ParentToolStrip, "#B6");
147 MockToolStripButton buttonC = new MockToolStripButton ("C");
148 items.Insert (1, buttonC);
149 Assert.AreEqual (3, items.Count, "#C1");
150 Assert.AreEqual (3, itemsAdded.Count, "#C2");
151 Assert.AreSame (buttonB, items [0], "#C3");
152 Assert.AreSame (buttonC, items [1], "#C4");
153 Assert.AreSame (buttonA, items [2], "#C5");
154 Assert.AreSame (toolStrip, buttonC.Owner, "#C6");
155 Assert.IsNull (buttonC.ParentToolStrip, "#C7");
159 public void Insert_Owned_CreateControl ()
161 ToolStrip toolStrip = CreateToolStrip ();
162 toolStrip.CreateControl ();
163 ToolStripItemCollection items = toolStrip.Items;
165 MockToolStripButton buttonA = new MockToolStripButton ("A");
166 items.Insert (0, buttonA);
167 Assert.AreEqual (1, items.Count, "#A1");
168 Assert.AreEqual (1, itemsAdded.Count, "#A2");
169 Assert.AreSame (buttonA, items[0], "#A3");
170 Assert.AreSame (toolStrip, buttonA.Owner, "#A4");
171 Assert.IsNotNull (buttonA.ParentToolStrip, "#A5");
173 MockToolStripButton buttonB = new MockToolStripButton ("B");
174 items.Insert (0, buttonB);
175 Assert.AreEqual (2, items.Count, "#B1");
176 Assert.AreEqual (2, itemsAdded.Count, "#B2");
177 Assert.AreSame (buttonB, items[0], "#B3");
178 Assert.AreSame (buttonA, items[1], "#B4");
179 Assert.AreSame (toolStrip, buttonB.Owner, "#B5");
180 Assert.IsNotNull (buttonB.ParentToolStrip, "#B6");
182 MockToolStripButton buttonC = new MockToolStripButton ("C");
183 items.Insert (1, buttonC);
184 Assert.AreEqual (3, items.Count, "#C1");
185 Assert.AreEqual (3, itemsAdded.Count, "#C2");
186 Assert.AreSame (buttonB, items[0], "#C3");
187 Assert.AreSame (buttonC, items[1], "#C4");
188 Assert.AreSame (buttonA, items[2], "#C5");
189 Assert.AreSame (toolStrip, buttonC.Owner, "#C6");
190 Assert.IsNotNull (buttonC.ParentToolStrip, "#C7");
194 public void Insert_StandAlone ()
196 ToolStrip toolStrip = CreateToolStrip ();
197 ToolStripItemCollection items = new ToolStripItemCollection (
198 toolStrip, new ToolStripItem [0]);
200 MockToolStripButton buttonA = new MockToolStripButton ("A");
201 items.Insert (0, buttonA);
202 Assert.AreEqual (1, items.Count, "#A1");
203 Assert.AreEqual (0, itemsAdded.Count, "#A2");
204 Assert.AreSame (buttonA, items [0], "#A3");
205 Assert.IsNull (buttonA.Owner, "#A4");
206 Assert.IsNull (buttonA.ParentToolStrip, "#A5");
208 MockToolStripButton buttonB = new MockToolStripButton ("B");
209 items.Insert (0, buttonB);
210 Assert.AreEqual (2, items.Count, "#B1");
211 Assert.AreEqual (0, itemsAdded.Count, "#B2");
212 Assert.AreSame (buttonB, items [0], "#B3");
213 Assert.AreSame (buttonA, items [1], "#B4");
214 Assert.IsNull (buttonB.Owner, "#B5");
215 Assert.IsNull (buttonB.ParentToolStrip, "#B6");
217 MockToolStripButton buttonC = new MockToolStripButton ("C");
218 items.Insert (1, buttonC);
219 Assert.AreEqual (3, items.Count, "#C1");
220 Assert.AreEqual (0, itemsAdded.Count, "#C2");
221 Assert.AreSame (buttonB, items [0], "#C3");
222 Assert.AreSame (buttonC, items [1], "#C4");
223 Assert.AreSame (buttonA, items [2], "#C5");
224 Assert.IsNull (buttonC.Owner, "#C6");
225 Assert.IsNull (buttonC.ParentToolStrip, "#C7");
229 public void Insert_Index_OutOfRange ()
231 ToolStrip toolStrip = CreateToolStrip ();
232 ToolStripItemCollection items = new ToolStripItemCollection (
233 toolStrip, new ToolStripItem [0]);
236 items.Insert (-1, new ToolStripButton ());
238 } catch (ArgumentOutOfRangeException ex) {
239 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
240 Assert.IsNull (ex.InnerException, "#A3");
241 Assert.IsNotNull (ex.Message, "#A4");
242 Assert.AreEqual ("index", ex.ParamName, "#A5");
246 items.Insert (1, new ToolStripButton ());
248 } catch (ArgumentOutOfRangeException ex) {
249 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
250 Assert.IsNull (ex.InnerException, "#B3");
251 Assert.IsNotNull (ex.Message, "#B4");
252 Assert.AreEqual ("index", ex.ParamName, "#B5");
257 public void Insert_Item_Null ()
259 ToolStrip toolStrip = CreateToolStrip ();
260 ToolStripItemCollection items = new ToolStripItemCollection (
261 toolStrip, new ToolStripItem [0]);
263 items.Insert (0, (ToolStripItem) null);
265 } catch (ArgumentNullException ex) {
266 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
267 Assert.IsNull (ex.InnerException, "#3");
268 Assert.IsNotNull (ex.Message, "#4");
269 Assert.AreEqual ("value", ex.ParamName, "#5");
274 public void Remove_Owned ()
276 ToolStrip toolStrip = CreateToolStrip ();
277 ToolStripItemCollection items = toolStrip.Items;
279 MockToolStripButton buttonA = new MockToolStripButton ("A");
280 MockToolStripButton buttonB = new MockToolStripButton ("B");
281 MockToolStripButton buttonC = new MockToolStripButton ("B");
282 items.Insert (0, buttonA);
283 items.Insert (0, buttonB);
285 items.Remove (buttonB);
286 Assert.AreEqual (1, items.Count, "#A1");
287 Assert.AreEqual (1, itemsRemoved.Count, "#A2");
288 Assert.AreSame (buttonA, items [0], "#A3");
289 Assert.AreSame (buttonB, itemsRemoved [0], "#A4");
290 Assert.IsNull (buttonB.Owner, "#A5");
291 Assert.IsNull (buttonB.ParentToolStrip, "#A6");
294 items.Remove ((ToolStripItem) null);
295 Assert.AreEqual (1, items.Count, "#B1");
296 Assert.AreEqual (2, itemsRemoved.Count, "#B2");
297 Assert.AreSame (buttonA, items [0], "#B3");
298 Assert.IsNull (itemsRemoved [1], "#B4");
300 // remove item not owner by toolstrip
301 items.Remove (buttonC);
302 Assert.AreEqual (1, items.Count, "#C1");
303 Assert.AreEqual (3, itemsRemoved.Count, "#C2");
304 Assert.AreSame (buttonA, items [0], "#C3");
305 Assert.AreSame(buttonC, itemsRemoved [2], "#C4");
306 Assert.IsNull (buttonC.Owner, "#C5");
307 Assert.IsNull (buttonC.ParentToolStrip, "#C6");
309 items.Remove (buttonA);
310 Assert.AreEqual (0, items.Count, "#D1");
311 Assert.AreEqual (4, itemsRemoved.Count, "#D2");
312 Assert.AreSame(buttonA, itemsRemoved [3], "#D3");
313 Assert.IsNull (buttonC.Owner, "#D4");
314 Assert.IsNull (buttonC.ParentToolStrip, "#D5");
316 // remove item which is no longer in the collection
317 items.Remove (buttonA);
318 Assert.AreEqual (0, items.Count, "#E1");
319 Assert.AreEqual (5, itemsRemoved.Count, "#E2");
320 Assert.AreSame(buttonA, itemsRemoved [4], "#E3");
322 // remove item owned by other toolstrip
323 ToolStrip otherToolStrip = new ToolStrip ();
324 MockToolStripButton buttonD = new MockToolStripButton ("B");
325 otherToolStrip.Items.Add (buttonD);
326 Assert.AreSame (otherToolStrip, buttonD.Owner, "#F1");
327 Assert.IsNull (buttonD.ParentToolStrip, "#F2");
328 items.Remove (buttonD);
329 Assert.AreEqual (0, items.Count, "#F3");
330 Assert.AreEqual (6, itemsRemoved.Count, "#F4");
331 Assert.IsNull (buttonD.Owner, "#F5");
332 Assert.IsNull (buttonD.ParentToolStrip, "#F6");
336 public void Remove_StandAlone ()
338 ToolStrip toolStrip = CreateToolStrip ();
339 ToolStripItemCollection items = new ToolStripItemCollection (
340 toolStrip, new ToolStripItem [0]);
342 MockToolStripButton buttonA = new MockToolStripButton ("A");
343 MockToolStripButton buttonB = new MockToolStripButton ("B");
344 MockToolStripButton buttonC = new MockToolStripButton ("B");
345 items.Insert (0, buttonA);
346 items.Insert (0, buttonB);
348 items.Remove (buttonB);
349 Assert.AreEqual (1, items.Count, "#A1");
350 Assert.AreEqual (0, itemsRemoved.Count, "#A2");
351 Assert.AreSame (buttonA, items [0], "#A3");
353 items.Remove ((ToolStripItem) null);
354 Assert.AreEqual (1, items.Count, "#B1");
355 Assert.AreEqual (0, itemsRemoved.Count, "#B2");
356 Assert.AreSame (buttonA, items [0], "#B3");
358 items.Remove (buttonC);
359 Assert.AreEqual (1, items.Count, "#C1");
360 Assert.AreEqual (0, itemsRemoved.Count, "#C2");
361 Assert.AreSame (buttonA, items [0], "#C3");
363 items.Remove (buttonA);
364 Assert.AreEqual (0, items.Count, "#D1");
365 Assert.AreEqual (0, itemsRemoved.Count, "#D2");
367 items.Remove (buttonA);
368 Assert.AreEqual (0, items.Count, "#E1");
369 Assert.AreEqual (0, itemsRemoved.Count, "#E2");
371 // remove item owned by other toolstrip
372 ToolStrip otherToolStrip = new ToolStrip ();
373 MockToolStripButton buttonD = new MockToolStripButton ("B");
374 otherToolStrip.Items.Add (buttonD);
375 Assert.AreSame (otherToolStrip, buttonD.Owner, "#F1");
376 Assert.IsNull (buttonD.ParentToolStrip, "#F2");
377 items.Remove (buttonD);
378 Assert.AreEqual (0, items.Count, "#F3");
379 Assert.AreEqual (0, itemsRemoved.Count, "#F4");
380 Assert.AreSame (otherToolStrip, buttonD.Owner, "#F5");
381 Assert.IsNull (buttonD.ParentToolStrip, "#F6");
384 void ToolStrip_ItemAdded (object sender, ToolStripItemEventArgs e)
386 itemsAdded.Add (e.Item);
389 void ToolStrip_ItemRemoved (object sender, ToolStripItemEventArgs e)
391 itemsRemoved.Add (e.Item);
394 ToolStrip CreateToolStrip ()
396 ToolStrip toolStrip = new ToolStrip ();
397 toolStrip.ItemAdded += ToolStrip_ItemAdded;
398 toolStrip.ItemRemoved += ToolStrip_ItemRemoved;
402 class MockToolStripButton : ToolStripButton
404 public MockToolStripButton (string text) : base (text)
408 public ToolStrip ParentToolStrip {
409 get { return base.Parent; }
410 set { base.Parent = value; }