In Test/System.Windows.Forms:
[mono-project/dkf.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / DataBindingTests.cs
blobb7ea5ada01bca3d650698fbbc66dddbe750931ee
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.
20 // Copyright (c) 2007 Novell, Inc.
22 // Authors:
23 // Chris Toshok toshok@ximian.com
25 #define WITH_BINDINGS
27 using System;
28 using System.Collections;
29 using System.ComponentModel;
30 using System.Data;
31 using System.Reflection;
32 using System.Windows.Forms;
34 using NUnit.Framework;
35 using CategoryAttribute = NUnit.Framework.CategoryAttribute;
37 namespace MonoTests.System.Windows.Forms.DataBinding
39 public class DataBindingTest
41 protected int event_num;
42 protected string event_log = "";
44 protected void CurrentChanged (object sender, EventArgs args)
46 Console.WriteLine (Environment.StackTrace);
47 event_log += String.Format ("{0}: CurrentChanged\n", event_num++);
49 protected void PositionChanged (object sender, EventArgs args)
51 Console.WriteLine (Environment.StackTrace);
52 event_log += String.Format ("{0}: PositionChanged (to {1})\n", event_num++, ((CurrencyManager)sender).Position);
54 protected void ItemChanged (object sender, ItemChangedEventArgs args)
56 Console.WriteLine (Environment.StackTrace);
57 event_log += String.Format ("{0}: ItemChanged (index = {1})\n", event_num++, args.Index);
59 protected void ListChanged (object sender, ListChangedEventArgs args)
61 Console.WriteLine (Environment.StackTrace);
62 event_log += String.Format ("{0}: ListChanged ({1}, {2}, {3})\n", event_num++, args.ListChangedType, args.OldIndex, args.NewIndex);
64 protected void MetaDataChanged (object sender, EventArgs args)
66 Console.WriteLine (Environment.StackTrace);
67 event_log += String.Format ("{0}: MetaDataChanged\n", event_num++);
69 #if NET_2_0
70 protected void BindingComplete (object sender, BindingCompleteEventArgs args)
72 Console.WriteLine (Environment.StackTrace);
73 event_log += String.Format ("{0}: BindingComplete\n", event_num++);
75 protected void CurrentItemChanged (object sender, EventArgs args)
77 Console.WriteLine (Environment.StackTrace);
78 event_log += String.Format ("{0}: CurrentItemChanged\n", event_num++);
80 protected void DataError (object sender, BindingManagerDataErrorEventArgs args)
82 Console.WriteLine (Environment.StackTrace);
83 event_log += String.Format ("{0}: DataError\n", event_num++);
85 #endif
86 protected void Format (object sender, ConvertEventArgs args)
88 Console.WriteLine (Environment.StackTrace);
89 event_log += String.Format ("{0}: Binding.Format\n", event_num++);
91 protected void Parse (object sender, ConvertEventArgs args)
93 Console.WriteLine (Environment.StackTrace);
94 event_log += String.Format ("{0}: Binding.Parse\n", event_num++);
97 void TextChanged (object sender, EventArgs e)
99 Console.WriteLine (Environment.StackTrace);
100 event_log += String.Format ("{0}: TextChanged\n", event_num++);
103 protected void HookupCurrencyManager (CurrencyManager cm)
105 cm.CurrentChanged += new EventHandler (CurrentChanged);
106 cm.PositionChanged += new EventHandler (PositionChanged);
107 cm.ItemChanged += new ItemChangedEventHandler (ItemChanged);
108 cm.MetaDataChanged += new EventHandler (MetaDataChanged);
109 #if NET_2_0
110 cm.BindingComplete += new BindingCompleteEventHandler (BindingComplete);
111 cm.CurrentItemChanged += new EventHandler (CurrentItemChanged);
112 cm.DataError += new BindingManagerDataErrorEventHandler (DataError);
113 #endif
116 protected void HookupPropertyManager (PropertyManager pm)
118 pm.CurrentChanged += new EventHandler (CurrentChanged);
119 pm.PositionChanged += new EventHandler (PositionChanged);
120 #if NET_2_0
121 pm.BindingComplete += new BindingCompleteEventHandler (BindingComplete);
122 pm.CurrentItemChanged += new EventHandler (CurrentItemChanged);
123 pm.DataError += new BindingManagerDataErrorEventHandler (DataError);
124 #endif
127 protected void HookupBinding (Binding b)
129 b.Parse += new ConvertEventHandler (Parse);
130 b.Format += new ConvertEventHandler (Format);
133 protected void HookupControl (Control c)
135 c.TextChanged += new EventHandler (TextChanged);
139 [TestFixture]
140 public class CurrencyManagerTest2 : DataBindingTest
142 [Test]
143 public void TestDeleteOnlyRow ()
145 Control c = new Control ();
146 c.CreateControl ();
147 Binding binding;
148 CurrencyManager cm;
150 DataSet dataSet1 = new DataSet();
151 dataSet1.Tables.Add();
152 dataSet1.Tables[0].Columns.Add();
154 DataRow newrow = dataSet1.Tables[0].NewRow ();
155 dataSet1.Tables[0].Rows.Add(newrow);
157 c.BindingContext = new BindingContext ();
158 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
159 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
161 HookupCurrencyManager (cm);
162 HookupBinding (binding);
164 cm.Position = 0;
166 Assert.AreEqual (1, cm.Count, "1");
168 DataRowView row = (DataRowView)cm.Current;
170 event_log = "";
171 event_num = 0;
173 row.Delete ();
175 Console.WriteLine (event_log);
177 Assert.AreEqual (
178 #if NET_2_0
179 "0: PositionChanged (to -1)\n1: ItemChanged (index = -1)\n2: PositionChanged (to -1)\n3: CurrentChanged\n4: CurrentItemChanged\n5: ItemChanged (index = -1)\n"
180 #else // NET_1_0
181 "0: PositionChanged (to -1)\n1: ItemChanged (index = -1)\n2: ItemChanged (index = -1)\n"
182 #endif
183 , event_log, "2");
185 Assert.AreEqual (0, cm.Count, "3");
188 [Test]
189 public void TestDeleteRowBeforeCurrent ()
191 Control c = new Control ();
192 c.CreateControl ();
193 Binding binding;
194 CurrencyManager cm;
195 DataRow newrow;
197 DataSet dataSet1 = new DataSet();
198 dataSet1.Tables.Add();
199 dataSet1.Tables[0].Columns.Add();
201 newrow = dataSet1.Tables[0].NewRow ();
202 dataSet1.Tables[0].Rows.Add(newrow);
204 newrow = dataSet1.Tables[0].NewRow ();
205 dataSet1.Tables[0].Rows.Add(newrow);
207 c.BindingContext = new BindingContext ();
208 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
209 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
211 HookupCurrencyManager (cm);
212 #if WITH_BINDINGS
213 HookupBinding (binding);
214 #endif
216 cm.Position = 1;
218 Assert.AreEqual (2, cm.Count, "1");
220 DataView dv = dataSet1.Tables[0].DefaultView;
221 DataRowView row = dv[0];
223 event_log = "";
224 event_num = 0;
226 row.Delete ();
228 Console.WriteLine (event_log);
230 Assert.AreEqual (
232 #if NET_2_0
233 #if WITH_BINDINGS
234 "0: CurrentChanged\n1: CurrentItemChanged\n2: PositionChanged (to 0)\n3: ItemChanged (index = -1)\n4: Binding.Format\n"
235 #else
236 "0: CurrentChanged\n1: CurrentItemChanged\n2: PositionChanged (to 0)\n3: ItemChanged (index = -1)\n"
237 #endif
238 #else // NET_1_0
239 #if WITH_BINDINGS
240 "0: CurrentChanged\n1: PositionChanged (to 0)\n2: ItemChanged (index = -1)\n3: Binding.Format\n"
241 #else
242 "0: CurrentChanged\n1: PositionChanged (to 0)\n2: ItemChanged (index = -1)\n"
243 #endif
244 #endif
245 , event_log, "2");
248 [Test]
249 public void TestDeleteRowAfterCurrent ()
251 Control c = new Control ();
252 c.CreateControl ();
253 Binding binding;
254 CurrencyManager cm;
255 DataRow newrow;
257 DataSet dataSet1 = new DataSet();
258 dataSet1.Tables.Add();
259 dataSet1.Tables[0].Columns.Add();
261 newrow = dataSet1.Tables[0].NewRow ();
262 dataSet1.Tables[0].Rows.Add(newrow);
264 newrow = dataSet1.Tables[0].NewRow ();
265 dataSet1.Tables[0].Rows.Add(newrow);
267 c.BindingContext = new BindingContext ();
268 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
269 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
271 HookupCurrencyManager (cm);
272 #if WITH_BINDINGS
273 HookupBinding (binding);
274 #endif
276 cm.Position = 0;
278 Assert.AreEqual (2, cm.Count, "1");
280 DataView dv = dataSet1.Tables[0].DefaultView;
281 DataRowView row = dv[1];
283 event_log = "";
284 event_num = 0;
286 row.Delete ();
288 Console.WriteLine (event_log);
290 #if WITH_BINDINGS
291 Assert.AreEqual ("0: ItemChanged (index = -1)\n1: Binding.Format\n", event_log, "2");
292 #else
293 Assert.AreEqual ("0: ItemChanged (index = -1)\n", event_log, "2");
294 #endif
296 Assert.AreEqual (1, cm.Count, "3");
299 [Test]
300 public void TestDeleteCurrentRowWithOthers ()
302 Control c = new Control ();
303 c.CreateControl ();
304 Binding binding;
305 CurrencyManager cm;
306 DataRow newrow;
308 DataSet dataSet1 = new DataSet();
309 dataSet1.Tables.Add();
310 dataSet1.Tables[0].Columns.Add();
312 newrow = dataSet1.Tables[0].NewRow ();
313 dataSet1.Tables[0].Rows.Add(newrow);
315 newrow = dataSet1.Tables[0].NewRow ();
316 dataSet1.Tables[0].Rows.Add(newrow);
318 c.BindingContext = new BindingContext ();
319 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
320 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
322 HookupCurrencyManager (cm);
323 #if WITH_BINDINGS
324 HookupBinding (binding);
325 #endif
326 cm.Position = 0;
328 Assert.AreEqual (2, cm.Count, "1");
330 DataView dv = dataSet1.Tables[0].DefaultView;
331 DataRowView row = dv[0];
333 event_log = "";
334 event_num = 0;
336 row.Delete ();
338 Console.WriteLine (event_log);
340 Assert.AreEqual (
341 #if NET_2_0
342 #if WITH_BINDINGS
343 "0: CurrentChanged\n1: CurrentItemChanged\n2: ItemChanged (index = -1)\n3: Binding.Format\n"
344 #else
345 "0: CurrentChanged\n1: CurrentItemChanged\n2: ItemChanged (index = -1)\n"
346 #endif
347 #else
348 #if WITH_BINDINGS
349 "0: CurrentChanged\n1: ItemChanged (index = -1)\n2: Binding.Format\n"
350 #else
351 "0: CurrentChanged\n1: ItemChanged (index = -1)\n"
352 #endif
353 #endif
354 , event_log, "2");
356 Assert.AreEqual (1, cm.Count, "3");
359 [Test]
360 public void TestAddFirstRow ()
362 if (TestHelper.RunningOnUnix) {
363 Assert.Ignore ("Fails at the moment");
366 Control c = new Control ();
367 c.CreateControl ();
368 Binding binding;
369 CurrencyManager cm;
371 DataSet dataSet1 = new DataSet();
372 dataSet1.Tables.Add();
373 dataSet1.Tables[0].Columns.Add();
375 c.BindingContext = new BindingContext ();
376 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
377 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
379 HookupCurrencyManager (cm);
380 #if WITH_BINDINGS
381 HookupBinding (binding);
382 #endif
384 cm.Position = 0;
386 Assert.AreEqual (0, cm.Count, "1");
388 event_log = "";
389 event_num = 0;
391 DataRow newrow = dataSet1.Tables[0].NewRow ();
392 dataSet1.Tables[0].Rows.Add(newrow);
394 Console.WriteLine (event_log);
396 Assert.AreEqual (
397 #if NET_2_0
398 #if WITH_BINDINGS
399 "0: PositionChanged (to 0)\n1: CurrentChanged\n2: CurrentItemChanged\n3: ItemChanged (index = -1)\n4: ItemChanged (index = -1)\n5: Binding.Format\n6: Binding.Format\n7: Binding.Format\n"
400 #else
401 "0: PositionChanged (to 0)\n1: CurrentChanged\n2: CurrentItemChanged\n3: ItemChanged (index = -1)\n4: ItemChanged (index = -1)\n"
402 #endif
403 #else
404 #if WITH_BINDINGS
405 "0: PositionChanged (to 0)\n1: CurrentChanged\n2: ItemChanged (index = -1)\n3: ItemChanged (index = -1)\n4: Binding.Format\n5: Binding.Format\n6: Binding.Format\n"
406 #else
407 "0: PositionChanged (to 0)\n1: CurrentChanged\n2: ItemChanged (index = -1)\n3: ItemChanged (index = -1)\n"
408 #endif
409 #endif
410 , event_log, "2");
412 Assert.AreEqual (1, cm.Count, "3");
415 [Test]
416 public void TestAppendRowAfterCurrent ()
418 Control c = new Control ();
419 c.CreateControl ();
420 Binding binding;
421 CurrencyManager cm;
423 DataSet dataSet1 = new DataSet();
424 dataSet1.Tables.Add();
425 dataSet1.Tables[0].Columns.Add();
427 c.BindingContext = new BindingContext ();
428 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
429 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
431 HookupCurrencyManager (cm);
432 #if WITH_BINDINGS
433 HookupBinding (binding);
434 #endif
436 cm.Position = 0;
438 Assert.AreEqual (0, cm.Count, "1");
440 DataRow newrow = dataSet1.Tables[0].NewRow ();
441 dataSet1.Tables[0].Rows.Add(newrow);
443 event_log = "";
444 event_num = 0;
446 newrow = dataSet1.Tables[0].NewRow ();
447 dataSet1.Tables[0].Rows.Add(newrow);
449 Console.WriteLine (event_log);
451 #if WITH_BINDINGS
452 Assert.AreEqual ("0: ItemChanged (index = -1)\n1: Binding.Format\n", event_log, "2");
453 #else
454 Assert.AreEqual ("0: ItemChanged (index = -1)\n", event_log, "2");
455 #endif
457 Assert.AreEqual (2, cm.Count, "3");
460 [Test]
461 public void TestInsertRowBeforeCurrent ()
463 #if NET_2_0
464 #if WITH_BINDINGS
465 if (TestHelper.RunningOnUnix) {
466 Assert.Ignore ("Too many Binding.Format events here");
468 #endif
469 #endif
470 Control c = new Control ();
471 c.CreateControl ();
472 Binding binding;
473 CurrencyManager cm;
475 DataSet dataSet1 = new DataSet();
476 dataSet1.Tables.Add();
477 dataSet1.Tables[0].Columns.Add();
479 c.BindingContext = new BindingContext ();
480 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
481 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
483 /* insert 2 rows */
484 DataRow newrow = dataSet1.Tables[0].NewRow ();
485 dataSet1.Tables[0].Rows.Add(newrow);
486 newrow = dataSet1.Tables[0].NewRow ();
487 dataSet1.Tables[0].Rows.Add(newrow);
489 Assert.AreEqual (2, cm.Count, "1");
491 cm.Position = 1;
493 HookupCurrencyManager (cm);
494 #if WITH_BINDINGS
495 HookupBinding (binding);
496 #endif
498 event_log = "";
499 event_num = 0;
501 newrow = dataSet1.Tables[0].NewRow ();
502 dataSet1.Tables[0].Rows.InsertAt(newrow, 0);
504 Console.WriteLine (event_log);
506 Assert.AreEqual (
507 #if NET_2_0
508 #if WITH_BINDINGS
509 "0: CurrentChanged\n1: CurrentItemChanged\n2: ItemChanged (index = -1)\n3: PositionChanged (to 2)\n4: Binding.Format\n"
510 #else
511 "0: CurrentChanged\n1: CurrentItemChanged\n2: ItemChanged (index = -1)\n3: PositionChanged (to 2)\n"
512 #endif
513 #else
514 #if WITH_BINDINGS
515 "0: ItemChanged (index = -1)\n1: Binding.Format\n"
516 #else
517 "0: ItemChanged (index = -1)\n"
518 #endif
519 #endif
520 , event_log, "2");
522 Assert.AreEqual (3, cm.Count, "3");
525 [Test]
526 public void TestInsertRowAtCurrent ()
528 Control c = new Control ();
529 c.CreateControl ();
530 Binding binding;
531 CurrencyManager cm;
533 DataSet dataSet1 = new DataSet();
534 dataSet1.Tables.Add();
535 dataSet1.Tables[0].Columns.Add();
537 c.BindingContext = new BindingContext ();
538 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
539 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
541 HookupCurrencyManager (cm);
542 #if WITH_BINDINGS
543 HookupBinding (binding);
544 #endif
546 /* insert 2 rows */
547 DataRow newrow = dataSet1.Tables[0].NewRow ();
548 dataSet1.Tables[0].Rows.Add(newrow);
549 newrow = dataSet1.Tables[0].NewRow ();
550 dataSet1.Tables[0].Rows.Add(newrow);
552 Assert.AreEqual (2, cm.Count, "1");
554 cm.Position = 1;
556 event_log = "";
557 event_num = 0;
559 newrow = dataSet1.Tables[0].NewRow ();
560 dataSet1.Tables[0].Rows.InsertAt(newrow, 1);
562 Console.WriteLine (event_log);
564 Assert.AreEqual (
565 #if NET_2_0
566 #if WITH_BINDINGS
567 "0: CurrentChanged\n1: CurrentItemChanged\n2: ItemChanged (index = -1)\n3: PositionChanged (to 2)\n4: Binding.Format\n"
568 #else
569 "0: CurrentChanged\n1: CurrentItemChanged\n2: ItemChanged (index = -1)\n3: PositionChanged (to 2)\n"
570 #endif
571 #else
572 #if WITH_BINDINGS
573 "0: ItemChanged (index = -1)\n1: Binding.Format\n"
574 #else
575 "0: ItemChanged (index = -1)\n"
576 #endif
577 #endif
578 , event_log, "2");
580 Assert.AreEqual (3, cm.Count, "3");
583 [Test]
584 public void TestColumnAdd ()
586 #if ONLY_1_1
587 if (TestHelper.RunningOnUnix) {
588 Assert.Ignore ("in 1.1, DataView emits 2 MetadataChanged events per column add. fix in System.Data");
590 #endif
592 Control c = new Control ();
593 c.CreateControl ();
594 Binding binding;
595 CurrencyManager cm;
597 DataSet dataSet1 = new DataSet();
598 dataSet1.Tables.Add();
599 dataSet1.Tables[0].Columns.Add();
601 c.BindingContext = new BindingContext ();
602 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
603 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
605 HookupCurrencyManager (cm);
606 HookupBinding (binding);
608 cm.Position = 0;
610 Assert.AreEqual (0, cm.Count, "1");
612 event_log = "";
613 event_num = 0;
615 dataSet1.Tables[0].Columns.Add();
617 Console.WriteLine (event_log);
619 #if NET_2_0
620 Assert.AreEqual ("0: MetaDataChanged\n", event_log, "2");
621 #else
622 Assert.AreEqual ("0: MetaDataChanged\n1: MetaDataChanged\n", event_log, "2");
623 #endif
624 Assert.AreEqual (0, cm.Count, "3");
627 [Test]
628 public void TestColumnRemove ()
630 Control c = new Control ();
631 c.CreateControl ();
632 Binding binding;
633 CurrencyManager cm;
635 DataSet dataSet1 = new DataSet();
636 dataSet1.Tables.Add();
637 dataSet1.Tables[0].Columns.Add();
638 dataSet1.Tables[0].Columns.Add();
640 c.BindingContext = new BindingContext ();
641 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
642 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
644 HookupCurrencyManager (cm);
645 HookupBinding (binding);
647 cm.Position = 0;
649 Assert.AreEqual (0, cm.Count, "1");
651 event_log = "";
652 event_num = 0;
654 dataSet1.Tables[0].Columns.Remove(dataSet1.Tables[0].Columns[1]);
656 Console.WriteLine (event_log);
658 Assert.AreEqual ("0: MetaDataChanged\n", event_log, "2");
660 Assert.AreEqual (0, cm.Count, "3");
663 [Test]
664 public void TestColumnRemoveBound ()
666 Control c = new Control ();
667 c.CreateControl ();
668 Binding binding;
669 CurrencyManager cm;
671 DataSet dataSet1 = new DataSet();
672 dataSet1.Tables.Add();
673 dataSet1.Tables[0].Columns.Add();
674 dataSet1.Tables[0].Columns.Add();
676 c.BindingContext = new BindingContext ();
677 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
678 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
680 HookupCurrencyManager (cm);
681 HookupBinding (binding);
683 cm.Position = 0;
685 Assert.IsFalse (binding.IsBinding, "1");
686 Assert.AreEqual (0, cm.Count, "2");
688 event_log = "";
689 event_num = 0;
691 dataSet1.Tables[0].Columns.Remove(dataSet1.Tables[0].Columns[0]);
693 Console.WriteLine (event_log);
695 Assert.AreEqual ("0: MetaDataChanged\n", event_log, "3");
697 Assert.AreEqual (0, cm.Count, "4");
699 Assert.IsFalse (binding.IsBinding, "5");
702 [Test]
703 public void TestColumnChangeName ()
705 Control c = new Control ();
706 c.CreateControl ();
707 Binding binding;
708 CurrencyManager cm;
710 DataSet dataSet1 = new DataSet();
711 dataSet1.Tables.Add();
713 dataSet1.Tables [0].Columns.CollectionChanged += new CollectionChangeEventHandler (
714 DataColumnCollection_CollectionChanged);
716 dataSet1.Tables[0].Columns.Add();
718 c.BindingContext = new BindingContext ();
719 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
720 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
722 HookupCurrencyManager (cm);
723 HookupBinding (binding);
725 cm.Position = 0;
727 Assert.IsFalse (binding.IsBinding, "1");
728 Assert.AreEqual (0, cm.Count, "2");
730 event_log = "";
731 event_num = 0;
733 dataSet1.Tables [0].DefaultView.ListChanged += new ListChangedEventHandler (
734 DataView_ListChanged);
736 dataSet1.Tables[0].Columns[0].ColumnName = "new name";
738 Console.WriteLine (event_log);
740 Assert.AreEqual ("0: MetaDataChanged\n", event_log, "3");
742 Assert.AreEqual (0, cm.Count, "4");
744 Assert.IsFalse (binding.IsBinding, "5");
747 void DataColumnCollection_CollectionChanged (object sender, CollectionChangeEventArgs e)
749 Console.WriteLine ("collection changed : {0} {1}", e.Action, e.Element.GetType());
752 void DataView_ListChanged (object sender, ListChangedEventArgs e)
754 Console.WriteLine ("list changed : {0} {1} {2}", e.ListChangedType, e.OldIndex, e.NewIndex);
757 [Test]
758 public void TestRowModify ()
760 Control c = new Control ();
761 c.CreateControl ();
762 Binding binding;
763 CurrencyManager cm;
764 string column_name;
766 DataSet dataSet1 = new DataSet();
767 dataSet1.Tables.Add();
768 dataSet1.Tables[0].Columns.Add();
770 DataRow newrow = dataSet1.Tables[0].NewRow ();
771 dataSet1.Tables[0].Rows.Add(newrow);
773 column_name = dataSet1.Tables[0].Columns[0].ColumnName;
775 c.BindingContext = new BindingContext ();
776 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
778 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], column_name);
780 HookupCurrencyManager (cm);
781 #if WITH_BINDINGS
782 HookupBinding (binding);
783 #endif
784 cm.Position = 0;
786 Assert.AreEqual (1, cm.Count, "1");
788 event_log = "";
789 event_num = 0;
791 DataRowView row = (DataRowView)cm.Current;
792 row.BeginEdit ();
793 row[column_name] = "hi";
794 row.EndEdit ();
796 Console.WriteLine (event_log);
798 Assert.AreEqual (
799 #if NET_2_0
800 #if WITH_BINDINGS
801 "0: CurrentItemChanged\n1: ItemChanged (index = 0)\n2: Binding.Format\n"
802 #else
803 "0: CurrentItemChanged\n1: ItemChanged (index = 0)\n"
804 #endif
805 #else
806 #if WITH_BINDINGS
807 "0: ItemChanged (index = 0)\n1: Binding.Format\n"
808 #else
809 "0: ItemChanged (index = 0)\n"
810 #endif
811 #endif
812 , event_log, "2");
814 Assert.AreEqual (1, cm.Count, "3");
817 [Test]
818 public void TestRowCancelModify ()
820 Control c = new Control ();
821 c.CreateControl ();
822 Binding binding;
823 CurrencyManager cm;
824 string column_name;
826 DataSet dataSet1 = new DataSet();
827 dataSet1.Tables.Add();
828 dataSet1.Tables[0].Columns.Add();
830 DataRow newrow = dataSet1.Tables[0].NewRow ();
831 dataSet1.Tables[0].Rows.Add(newrow);
833 column_name = dataSet1.Tables[0].Columns[0].ColumnName;
835 c.BindingContext = new BindingContext ();
836 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
838 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], column_name);
840 HookupCurrencyManager (cm);
841 HookupBinding (binding);
843 cm.Position = 0;
845 Assert.AreEqual (1, cm.Count, "1");
847 event_log = "";
848 event_num = 0;
850 DataRowView row = (DataRowView)cm.Current;
851 row.BeginEdit ();
852 row[column_name] = "hi";
853 cm.CancelCurrentEdit ();
855 Console.WriteLine (event_log);
856 Assert.AreEqual ("0: ItemChanged (index = 0)\n", event_log, "2");
858 Assert.AreEqual (1, cm.Count, "3");
862 [Test]
863 public void TestDeleteInEdit ()
865 Control c = new Control ();
866 c.CreateControl ();
867 Binding binding;
868 BindingContext bc = new BindingContext ();
869 CurrencyManager cm;
871 DataSet dataSet1 = new DataSet();
872 dataSet1.Tables.Add();
873 dataSet1.Tables[0].Columns.Add();
875 DataRow newrow = dataSet1.Tables[0].NewRow ();
876 dataSet1.Tables[0].Rows.Add(newrow);
878 cm = (CurrencyManager) bc[dataSet1, dataSet1.Tables[0].TableName];
879 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
881 Assert.AreEqual (1, cm.Count, "1");
883 HookupCurrencyManager (cm);
884 #if WITH_BINDINGS
885 HookupBinding (binding);
886 #endif
888 cm.Position = 0;
890 event_log = "";
891 event_num = 0;
893 DataRowView row = (DataRowView)cm.Current;
894 row.Delete ();
896 Console.WriteLine (event_log);
898 Assert.AreEqual (
899 #if NET_2_0
900 "0: PositionChanged (to -1)\n1: ItemChanged (index = -1)\n2: PositionChanged (to -1)\n3: CurrentChanged\n4: CurrentItemChanged\n5: ItemChanged (index = -1)\n"
901 #else
902 "0: PositionChanged (to -1)\n1: ItemChanged (index = -1)\n2: ItemChanged (index = -1)\n"
903 #endif
904 , event_log, "1");
906 Assert.AreEqual (0, cm.Count, "2");
909 [Test]
910 public void Bug81022 ()
912 if (TestHelper.RunningOnUnix) {
913 Assert.Ignore ("Fails at the moment");
916 BindingContext bc = new BindingContext ();
917 CurrencyManager cm;
919 DataView dv = new DataView();
920 DataTable dt = new DataTable("Testdata");
922 cm = (CurrencyManager)bc [dt];
924 HookupCurrencyManager (cm);
926 event_log = ""; event_num = 0;
928 dv.Table = dt;
930 Assert.AreEqual ("", event_log, "1");
932 Console.WriteLine (">1");
933 dt.Columns.Add("A");
934 Console.WriteLine ("<1");
936 Assert.AreEqual ("0: MetaDataChanged\n", event_log, "1");
938 event_log = ""; event_num = 0;
939 Console.WriteLine (">2");
940 dt.Columns.Add("B");
941 Console.WriteLine ("<2");
943 Assert.AreEqual ("0: MetaDataChanged\n", event_log, "2");
945 event_log = ""; event_num = 0;
946 Console.WriteLine (">3");
947 dt.Rows.Add(new object[]{"A1", "B1"});
948 Console.WriteLine ("<3");
950 #if NET_2_0
951 Assert.AreEqual ("0: PositionChanged (to 0)\n1: CurrentChanged\n2: CurrentItemChanged\n3: ItemChanged (index = -1)\n4: ItemChanged (index = -1)\n", event_log, "3");
952 #else
953 Assert.AreEqual ("0: PositionChanged (to 0)\n1: CurrentChanged\n2: ItemChanged (index = -1)\n3: ItemChanged (index = -1)\n", event_log, "3");
954 #endif
956 event_log = ""; event_num = 0;
957 Console.WriteLine (">4");
958 dt.Rows.Add(new object[]{"A2", "B2"});
959 Console.WriteLine ("<4");
961 Assert.AreEqual ("0: ItemChanged (index = -1)\n", event_log, "4");
963 Assert.AreEqual (2, cm.Count, "5");
966 [Test]
967 public void CancelAddNew ()
969 if (TestHelper.RunningOnUnix) {
970 Assert.Ignore ("Fails at the moment");
973 Control c = new Control ();
974 c.CreateControl ();
975 Binding binding;
976 CurrencyManager cm;
978 DataSet dataSet1 = new DataSet();
979 dataSet1.Tables.Add();
980 dataSet1.Tables[0].Columns.Add();
982 c.BindingContext = new BindingContext ();
983 cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
984 binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
986 HookupCurrencyManager (cm);
987 #if WITH_BINDINGS
988 HookupBinding (binding);
989 #endif
990 event_log = "";
991 event_num = 0;
993 Console.WriteLine (">>>");
994 cm.AddNew ();
996 cm.CancelCurrentEdit ();
997 Console.WriteLine ("<<<");
999 Console.WriteLine (event_log);
1001 Assert.AreEqual (
1002 #if NET_2_0
1003 "0: PositionChanged (to 0)\n1: CurrentChanged\n2: CurrentItemChanged\n3: ItemChanged (index = -1)\n4: ItemChanged (index = -1)\n5: PositionChanged (to -1)\n6: ItemChanged (index = -1)\n7: PositionChanged (to -1)\n8: CurrentChanged\n9: CurrentItemChanged\n10: ItemChanged (index = -1)\n11: ItemChanged (index = -1)\n",
1004 #else
1005 "0: PositionChanged (to 0)\n1: CurrentChanged\n2: ItemChanged (index = -1)\n3: ItemChanged (index = -1)\n4: CurrentChanged\n5: PositionChanged (to -1)\n6: ItemChanged (index = -1)\n7: ItemChanged (index = -1)\n8: ItemChanged (index = -1)\n",
1006 #endif
1007 event_log, "1");
1012 [TestFixture]
1013 public class PropertyManagerTest2 : DataBindingTest
1015 [Test]
1016 public void TestPropertyChange ()
1018 if (TestHelper.RunningOnUnix) {
1019 Assert.Ignore ("Fails at the moment");
1022 Control c1 = new Control ();
1023 Control c2 = new Control ();
1025 c1.CreateControl ();
1026 c2.CreateControl ();
1028 Binding binding;
1029 PropertyManager pm;
1031 c1.BindingContext = new BindingContext ();
1032 c2.BindingContext = c1.BindingContext;
1034 pm = (PropertyManager) c2.BindingContext[c1, "Text"];
1036 binding = c2.DataBindings.Add ("Text", c1, "Text");
1038 Console.WriteLine (pm.GetType());
1039 Console.WriteLine (binding.BindingManagerBase.GetType());
1040 Assert.IsFalse (pm == binding.BindingManagerBase, "0");
1042 HookupPropertyManager (pm);
1043 HookupBinding (binding);
1045 event_log = "";
1046 event_num = 0;
1048 c1.Text = "hi";
1050 Console.WriteLine (event_log);
1052 #if NET_2_0
1053 Assert.AreEqual ("0: CurrentChanged\n1: CurrentItemChanged\n2: Binding.Format\n3: CurrentChanged\n4: CurrentItemChanged\n", event_log, "1");
1054 #else
1055 Assert.AreEqual ("0: CurrentChanged\n1: Binding.Format\n2: CurrentChanged\n", event_log, "1");
1056 #endif