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 : TestHelper
41 private List<ToolStripItem> itemsAdded;
42 private List<ToolStripItem> itemsRemoved;
45 protected override void SetUp () {
46 itemsAdded = new List<ToolStripItem> ();
47 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 public void Constructor_Items_Null ()
107 new ToolStripItemCollection (new ToolStrip (), (ToolStripItem []) null);
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");
118 public void Insert_Owned ()
120 ToolStrip toolStrip = CreateToolStrip ();
121 ToolStripItemCollection items = toolStrip.Items;
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");
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");
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");
152 public void Insert_Owned_CreateControl ()
154 ToolStrip toolStrip = CreateToolStrip ();
155 toolStrip.CreateControl ();
156 ToolStripItemCollection items = toolStrip.Items;
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");
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");
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");
187 public void Insert_StandAlone ()
189 ToolStrip toolStrip = CreateToolStrip ();
190 ToolStripItemCollection items = new ToolStripItemCollection (
191 toolStrip, new ToolStripItem [0]);
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");
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");
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");
222 public void Insert_Index_OutOfRange ()
224 ToolStrip toolStrip = CreateToolStrip ();
225 ToolStripItemCollection items = new ToolStripItemCollection (
226 toolStrip, new ToolStripItem [0]);
229 items.Insert (-1, new ToolStripButton ());
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");
239 items.Insert (1, new ToolStripButton ());
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");
250 public void Insert_Item_Null ()
252 ToolStrip toolStrip = CreateToolStrip ();
253 ToolStripItemCollection items = new ToolStripItemCollection (
254 toolStrip, new ToolStripItem [0]);
256 items.Insert (0, (ToolStripItem) null);
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");
267 public void Remove_Owned ()
269 ToolStrip toolStrip = CreateToolStrip ();
270 ToolStripItemCollection items = toolStrip.Items;
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);
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");
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");
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");
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");
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");
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");
329 public void Remove_StandAlone ()
331 ToolStrip toolStrip = CreateToolStrip ();
332 ToolStripItemCollection items = new ToolStripItemCollection (
333 toolStrip, new ToolStripItem [0]);
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);
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");
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");
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");
356 items.Remove (buttonA);
357 Assert.AreEqual (0, items.Count, "#D1");
358 Assert.AreEqual (0, itemsRemoved.Count, "#D2");
360 items.Remove (buttonA);
361 Assert.AreEqual (0, items.Count, "#E1");
362 Assert.AreEqual (0, itemsRemoved.Count, "#E2");
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");
377 void ToolStrip_ItemAdded (object sender, ToolStripItemEventArgs e)
379 itemsAdded.Add (e.Item);
382 void ToolStrip_ItemRemoved (object sender, ToolStripItemEventArgs e)
384 itemsRemoved.Add (e.Item);
387 ToolStrip CreateToolStrip ()
389 ToolStrip toolStrip = new ToolStrip ();
390 toolStrip.ItemAdded += ToolStrip_ItemAdded;
391 toolStrip.ItemRemoved += ToolStrip_ItemRemoved;
395 class MockToolStripButton : ToolStripButton
397 public MockToolStripButton (string text) : base (text)
401 public ToolStrip ParentToolStrip {
402 get { return base.Parent; }
403 set { base.Parent = value; }