more test work
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / CurrencyManagerTest.cs
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) 2006 Novell, Inc.
21 //
22 // Authors:
23 //      Jackson Harper  jackson@ximian.com
24
25
26 using System;
27 using System.Data;
28 using System.Collections;
29 using System.ComponentModel;
30 using System.Windows.Forms;
31
32 using NUnit.Framework;
33
34 namespace MonoTests.System.Windows.Forms {
35
36         [TestFixture]
37         public class CurrencyManagerTest {
38
39                 [Test]
40                 public void Defaults ()
41                 {
42                         BindingContext bc = new BindingContext ();
43                         ArrayList data_source = new ArrayList ();
44                         CurrencyManager cm = bc [data_source] as CurrencyManager;
45
46                         Assert.AreSame (data_source, cm.List, "DEFAULTS1");
47                         Assert.AreEqual (0, cm.Count, "DEFAULTS2");
48                         Assert.AreEqual (-1, cm.Position, "DEFAULTS3");
49                 }
50
51                 [Test]
52                 [ExpectedException (typeof (IndexOutOfRangeException))]
53                 public void UninitializedCurrent ()
54                 {
55                         BindingContext bc = new BindingContext ();
56                         ArrayList data_source = new ArrayList ();
57                         CurrencyManager cm = bc [data_source] as CurrencyManager;
58
59                         // This line should throw
60                         Assert.AreSame (null, cm.Current, "CurrentOfEmpty");
61                 }
62
63                 [Test]
64                 public void DataSetList ()
65                 {
66                         DataSet dataset = new DataSet ("DataSet");
67                         DataTable table = new DataTable ("Table");
68                         BindingContext bc = new BindingContext ();
69                         CurrencyManager cm;
70
71                         dataset.Tables.Add (table);
72                         cm = bc [dataset] as CurrencyManager;
73
74                         Assert.AreEqual (typeof (DataViewManager), cm.List.GetType (), "DATASETLIST1");
75                         Assert.AreEqual (1, cm.Count, "DATASETLIST2");
76                         Assert.AreEqual (0, cm.Position, "DATASETLIST3");
77 //                      Assert.AreEqual (typeof (DataViewManagerListItemTypeDescriptor), cm.Current.GetType (),
78 //                                      "DATASETLIST4");
79                 }
80
81                 [Test]
82                 public void DataSetListTable ()
83                 {
84                         DataSet dataset = new DataSet ("DataSet");
85                         DataTable table = new DataTable ("Table");
86                         BindingContext bc = new BindingContext ();
87                         CurrencyManager cm;
88
89                         dataset.Tables.Add (table);
90                         cm = bc [dataset, "Table"] as CurrencyManager;
91
92                         Assert.AreEqual (typeof (DataView), cm.List.GetType (), "DATASETLIST1");
93                         Assert.AreEqual (0, cm.Count, "DATASETLIST2");
94                         Assert.AreEqual (-1, cm.Position, "DATASETLIST3");
95                 }
96
97                 [Test]
98                 [ExpectedException (typeof (ArgumentException))]
99                 public void DataSetListTableBogusField ()
100                 {
101                         DataSet dataset = new DataSet ("DataSet");
102                         DataTable table = new DataTable ("Table.Column");
103                         BindingContext bc = new BindingContext ();
104                         CurrencyManager cm;
105
106                         dataset.Tables.Add (table);
107
108                         // child list can't be created
109                         cm = bc [dataset, "Table"] as CurrencyManager;
110                 }
111
112                 [Test]
113                 public void MoveArrayListForward ()
114                 {
115                         ArrayList data_source = new ArrayList ();
116                         BindingContext bc = new BindingContext ();
117
118                         for (int i = 0; i < 10; i++)
119                                 data_source.Add (new object ());
120
121                         CurrencyManager cm = bc [data_source] as CurrencyManager;
122                         for (int i = 0; i < 10; i++) {
123                                 Assert.AreSame (data_source [i], cm.Current, "MOVEALF" + i);
124                                 cm.Position++;
125                         }
126
127                         cm.Position++;
128                         cm.Position++;
129
130                         Assert.AreSame (data_source [9], cm.Current, "MOVEALFEND");
131                 }
132
133                 [Test]
134                 public void MoveArrayListBackward ()
135                 {
136                         ArrayList data_source = new ArrayList ();
137                         BindingContext bc = new BindingContext ();
138
139                         for (int i = 0; i < 10; i++)
140                                 data_source.Add (new object ());
141
142                         CurrencyManager cm = bc [data_source] as CurrencyManager;
143                         cm.Position = 9;
144                         for (int i = 9; i >= 0; i--) {
145                                 Assert.AreSame (data_source [i], cm.Current, "MOVEALB" + i);
146                                 cm.Position--;
147                         }
148
149                         cm.Position--;
150                         cm.Position--;
151
152                         Assert.AreSame (data_source [0], cm.Current, "MOVEALBSTART");
153                 }
154
155                 [Test]
156                 public void SetPositionArrayList ()
157                 {
158                         ArrayList data_source = new ArrayList ();
159                         BindingContext bc = new BindingContext ();
160
161                         for (int i = 0; i < 10; i++)
162                                 data_source.Add (new object ());
163
164                         CurrencyManager cm = bc [data_source] as CurrencyManager;
165                         for (int i = 3; i >= 0; i--) {
166                                 cm.Position = i;
167                                 Assert.AreSame (data_source [i], cm.Current, "MOVEAL1-" + i);
168                         }
169
170                         cm.Position--;
171
172                         for (int i = 0; i < 10; i++) {
173                                 cm.Position = i;
174                                 Assert.AreSame (data_source [i], cm.Current, "MOVEAL2-" + i);
175                         }
176
177                         for (int i = 5; i < 10; i++) {
178                                 cm.Position = i;
179                                 Assert.AreSame (data_source [i], cm.Current, "MOVEAL3-" + i);
180                         }
181                 }
182
183                 [Test]
184                 public void LateBuildDataTable ()
185                 {
186                         DataTable data_source = new DataTable ("Table");
187                         BindingContext bc = new BindingContext ();
188                         CurrencyManager cm = bc [data_source] as CurrencyManager;
189
190                         Assert.AreEqual (-1, cm.Position, "LATEBUILDTABLE1");
191                         Assert.AreEqual (0, cm.Count, "LATEBUILDTABLE2");
192
193                         DataColumn column = new DataColumn ("Column");
194                         column.DataType = typeof (int);
195                         data_source.Columns.Add (column);
196                         
197                         for (int i = 0; i < 10; i++) {
198                                 DataRow row = data_source.NewRow ();
199                                 row ["Column"] = i;
200                                 data_source.Rows.Add (row);
201                         }
202
203                         Assert.AreEqual (0, cm.Position, "LATEBUILDTABLE3");
204                         Assert.AreEqual (10, cm.Count, "LATEBUILDTABLE4");
205                 }
206
207                 [Test]
208                 public void LateBuildArrayList ()
209                 {
210                         ArrayList data_source = new ArrayList ();
211                         BindingContext bc = new BindingContext ();
212                         CurrencyManager cm = bc [data_source] as CurrencyManager;
213
214                         Assert.AreEqual (-1, cm.Position, "LATEBUILDLIST1");
215                         Assert.AreEqual (0, cm.Count, "LATEBUILDLIST2");
216
217                         data_source.AddRange (new object [] { 1, 2, 3, 4, 5, 6, 7 });
218
219                         Assert.AreEqual (-1, cm.Position, "LATEBUILDLIST3");
220                         Assert.AreEqual (7, cm.Count, "LATEBUILDLIST4");
221                 }
222
223                 [Test]
224                 public void MoveDataTableForward ()
225                 {
226                         DataTable data_source = new DataTable ("Table");
227                         BindingContext bc = new BindingContext ();
228                         CurrencyManager cm = bc [data_source] as CurrencyManager;
229                         DataColumn column = new DataColumn ("Column");
230
231                         column.DataType = typeof (int);
232                         data_source.Columns.Add (column);
233                         for (int i = 0; i < 10; i++) {
234                                 DataRow row = data_source.NewRow ();
235                                 row ["Column"] = i;
236                                 data_source.Rows.Add (row);
237                         }
238
239
240                         for (int i = 0; i < 10; i++) {
241                                 DataRowView row = cm.Current as DataRowView;
242                                 Assert.IsFalse (row == null, "MOVETABLEF-NULL-" + i);
243                                 Assert.AreEqual (row ["Column"], i, "MOVETABLEF-" + i);
244                                 cm.Position++;
245                         }
246
247                         cm.Position++;
248                         cm.Position++;
249
250                         Assert.AreEqual (9, ((DataRowView) cm.Current) ["Column"], "MOVETABLEF-END");
251                 }
252
253                 [Test]
254                 public void MoveDataTableBackward ()
255                 {
256                         DataTable data_source = new DataTable ("Table");
257                         BindingContext bc = new BindingContext ();
258                         CurrencyManager cm = bc [data_source] as CurrencyManager;
259                         DataColumn column = new DataColumn ("Column");
260
261                         column.DataType = typeof (int);
262                         data_source.Columns.Add (column);
263                         for (int i = 0; i < 10; i++) {
264                                 DataRow row = data_source.NewRow ();
265                                 row ["Column"] = i;
266                                 data_source.Rows.Add (row);
267                         }
268
269
270                         cm.Position = 9;
271                         for (int i = 9; i >= 0; i--) {
272                                 DataRowView row = cm.Current as DataRowView;
273                                 Assert.IsFalse (row == null, "MOVETABLEB-NULL-" + i);
274                                 Assert.AreEqual (row ["Column"], i, "MOVETABLEB-" + i);
275                                 cm.Position--;
276                         }
277
278                         cm.Position--;
279                         cm.Position--;
280
281                         Assert.AreEqual (0, ((DataRowView) cm.Current) ["Column"], "MOVETABLEB-START");
282                 }
283
284                 [Test]
285                 public void SetPositionDataTable ()
286                 {
287                         DataTable data_source = new DataTable ("Table");
288                         BindingContext bc = new BindingContext ();
289                         CurrencyManager cm = bc [data_source] as CurrencyManager;
290                         DataColumn column = new DataColumn ("Column");
291
292                         column.DataType = typeof (int);
293                         data_source.Columns.Add (column);
294                         for (int i = 0; i < 10; i++) {
295                                 DataRow row = data_source.NewRow ();
296                                 row ["Column"] = i;
297                                 data_source.Rows.Add (row);
298                         }
299
300
301                         for (int i = 5; i < 10; i++) {
302                                 cm.Position = i;
303                                 DataRowView row = cm.Current as DataRowView;
304                                 Assert.IsFalse (row == null, "SETTABLE1-NULL-" + i);
305                                 Assert.AreEqual (row ["Column"], i, "SETTABLE1-" + i);
306                         }
307
308                         for (int i = 5; i >= 0; i--) {
309                                 cm.Position = i;
310                                 DataRowView row = cm.Current as DataRowView;
311                                 Assert.IsFalse (row == null, "SETTABLE2-NULL-" + i);
312                                 Assert.AreEqual (row ["Column"], i, "SETTABLE2-" + i);
313                         }
314                 }
315
316                 [Test]
317                 public void NavigateDataSetToTable ()
318                 {
319                         DataSet data_source = new DataSet ("DataSet");
320                         DataTable table = new DataTable ("Table");
321                         DataColumn column = new DataColumn ("Column");
322                         BindingContext bc = new BindingContext ();
323
324                         data_source.Tables.Add (table);
325
326                         column.DataType = typeof (int);
327                         table.Columns.Add (column);
328                         for (int i = 0; i < 10; i++) {
329                                 DataRow row = table.NewRow ();
330                                 row ["Column"] = i;
331                                 table.Rows.Add (row);
332                         }
333
334                         CurrencyManager cm = bc [data_source, "Table"] as CurrencyManager;
335
336                         Assert.AreEqual (0, cm.Position, "NAVSETTOTABLE1");
337                         Assert.AreEqual (10, cm.Count, "NAVSETTOTABLE2");
338                         Assert.AreEqual (typeof (DataView), cm.List.GetType (), "NAVSETTOTABLE3");
339
340                         for (int i = 0; i < 10; i++) {
341                                 DataRowView row = cm.Current as DataRowView;
342                                 Assert.IsFalse (row == null, "NAVSETTOTABLE-NULL-" + i);
343                                 Assert.AreEqual (i, row ["Column"], "NAVSETTOTABLE-" + i);
344                                 cm.Position++;
345                         }
346
347                         cm.Position++;
348                         cm.Position++;
349
350                         Assert.AreEqual (9, ((DataRowView) cm.Current) ["Column"], "NAVSETTOTABLE-END");
351                 }
352
353                 [Test]
354                 public void NavigateDataSetToColumn ()
355                 {
356                         DataSet data_source = new DataSet ("DataSet");
357                         DataTable table = new DataTable ("Table");
358                         DataColumn column = new DataColumn ("Column");
359                         BindingContext bc = new BindingContext ();
360
361                         data_source.Tables.Add (table);
362
363                         column.DataType = typeof (int);
364                         table.Columns.Add (column);
365                         for (int i = 0; i < 10; i++) {
366                                 DataRow row = table.NewRow ();
367                                 row ["Column"] = i;
368                                 table.Rows.Add (row);
369                         }
370
371                         CurrencyManager cm = bc [data_source, "Table.Column"] as CurrencyManager;
372
373                         Assert.AreEqual (null, cm, "NAVSETTOCOLUMN1");
374                 }
375
376                 [Test]
377                 public void NavigateDataSetToParentRelation ()
378                 {
379                         DataSet data_source = CreateRelatedDataSet ();
380                         BindingContext bc = new BindingContext ();
381                         CurrencyManager cm = bc [data_source, "Table1.Relation"] as CurrencyManager;
382
383                         Assert.AreEqual (0, cm.Position, "NAVSETTORELATION1");
384                         Assert.AreEqual (1, cm.Count, "NAVSETTORELATION2");
385                         Assert.IsTrue (cm.List is DataView, "NAVSETTORELATION3");
386
387                         DataRowView row = cm.Current as DataRowView;
388                         Assert.IsFalse (row == null, "NAVSETTORELATION-NULL-VALUE");
389                         Assert.AreEqual (0, row ["Two"], "NAVSETTORELATION-VALUE");
390
391                         cm.Position++;
392                         cm.Position++;
393
394                         Assert.AreEqual (0, ((DataRowView) cm.Current) ["Two"], "NAVSETTORELATION-END");
395                 }
396
397                 [Test]
398                 [ExpectedException (typeof (ArgumentException))]
399                 public void DataSetToChildRelation ()
400                 {
401                         DataSet data_source = CreateRelatedDataSet ();
402                         BindingContext bc = new BindingContext ();
403
404                         // Can't create a list on a child relation
405                         CurrencyManager cm = bc [data_source, "Table2.Relation"] as CurrencyManager;
406                 }
407
408                 [Test]
409                 public void DataSetToParentRelationField ()
410                 {
411                         DataSet data_source = CreateRelatedDataSet ();
412                         BindingContext bc = new BindingContext ();
413
414                         CurrencyManager cm = bc [data_source, "Table1.Relation.Two"] as CurrencyManager;
415
416                         Assert.AreEqual (null, cm, "SETTOPARENTRELATIONFIELD");
417                 }
418
419                 [Test]
420                 public void MultiColumnedRelation ()
421                 {
422                         DataSet dataset = new DataSet ();
423                         DataTable sports = new DataTable ("Sports");
424                         DataTable athletes = new DataTable ("Athletes");
425                 
426                         DataColumn column;
427                         DataRow row;
428
429                         column = new DataColumn ();
430                         column.DataType = typeof (int);
431                         column.ColumnName = "SportID";
432                         column.Unique = true;
433                         sports.Columns.Add (column);
434
435                         column = new DataColumn ();
436                         column.DataType = typeof (string);
437                         column.ColumnName = "SportName";
438                         sports.Columns.Add (column);
439
440
441                         string [] sports_names = new string [] { "Hockey", "Baseball", "Basketball", "Football", "Boxing", "Surfing" };
442                         for (int i = 0; i < sports_names.Length; i++) {
443                                 row = sports.NewRow ();
444                                 row ["SportID"] = i;
445                                 row ["SportName"] = sports_names [i];
446                                 sports.Rows.Add (row);
447                         }
448                 
449                 
450                         // Athletes table
451                         column = new DataColumn ();
452                         column.DataType = typeof (int);
453                         column.ColumnName = "AthleteID";
454                         column.Unique = true;
455                         athletes.Columns.Add (column);
456
457                         column = new DataColumn ();
458                         column.DataType = typeof (int);
459                         column.ColumnName = "Sport";
460                         athletes.Columns.Add (column);
461
462                         column = new DataColumn ();
463                         column.DataType = typeof (string);
464                         column.ColumnName = "AthleteName";
465                         athletes.Columns.Add (column);
466
467                         string [] athlete_names = new string [] { "@alp", "@lupus", "@tjfontaine", "duncan", "marv", "WindowsUninstall",
468                                                                   "@jackson", "@migHome", "_Synced[work]", "GodZhila", "Raboo",
469                                                                   "@jchambers", "@mkestner", "barbosa", "IzeBurn", "squinky86",
470                                                                   "@kangaroo",  "@paco", "Demian", "logiclrd", "tenshiKur0" };
471                         for (int i = 0; i < athlete_names.Length; i++) {
472                                 row = athletes.NewRow ();
473                                 row ["AthleteID"] = i;
474                                 row ["Sport"] = i % sports_names.Length;
475                                 row ["AthleteName"] = athlete_names [i];
476                                 athletes.Rows.Add (row);
477                         }
478
479                         dataset.Tables.Add (sports);
480                         dataset.Tables.Add (athletes);
481                         dataset.Relations.Add ("AthletesSports", sports.Columns ["SportID"], athletes.Columns ["Sport"]);
482
483                         BindingContext bc = new BindingContext ();
484                         CurrencyManager cm = bc [dataset, "Sports.AthletesSports"] as CurrencyManager;
485
486                         Assert.AreEqual (0, cm.Position, "MC1");
487                         Assert.AreEqual (4, cm.Count, "MC2");
488
489                         DataRowView rowview = cm.Current as DataRowView;
490                         Assert.IsFalse (rowview == null, "MC3");
491                         Assert.AreEqual (0, rowview ["AthleteID"], "MC4");
492                         Assert.AreEqual ("@alp", rowview ["AthleteName"], "MC5");
493                         Assert.AreEqual (0, rowview ["Sport"], "MC6");
494
495                         cm.Position++;
496
497                         rowview = cm.Current as DataRowView;
498                         Assert.IsFalse (rowview == null, "MC7");
499                         Assert.AreEqual (6, rowview ["AthleteID"], "MC8");
500                         Assert.AreEqual ("@jackson", rowview ["AthleteName"], "MC9");
501                         Assert.AreEqual (0, rowview ["Sport"], "MC10");
502
503                         cm.Position++;
504
505                         rowview = cm.Current as DataRowView;
506                         Assert.IsFalse (rowview == null, "MC11");
507                         Assert.AreEqual (12, rowview ["AthleteID"], "MC12");
508                         Assert.AreEqual ("@mkestner", rowview ["AthleteName"], "MC13");
509                         Assert.AreEqual (0, rowview ["Sport"], "MC14");
510
511                         cm.Position++;
512
513                         rowview = cm.Current as DataRowView;
514                         Assert.IsFalse (rowview == null, "MC15");
515                         Assert.AreEqual (18, rowview ["AthleteID"], "MC16");
516                         Assert.AreEqual ("Demian", rowview ["AthleteName"], "MC17");
517                         Assert.AreEqual (0, rowview ["Sport"], "MC18");
518
519                         cm.Position++;
520
521                         rowview = cm.Current as DataRowView;
522                         Assert.IsFalse (rowview == null, "MC19");
523                         Assert.AreEqual (18, rowview ["AthleteID"], "MC20");
524                         Assert.AreEqual ("Demian", rowview ["AthleteName"], "MC21");
525                         Assert.AreEqual (0, rowview ["Sport"], "MC22");
526                 }
527
528                 private DataSet CreateRelatedDataSet ()
529                 {
530                         DataSet dataset = new DataSet ("DataSet");
531                         DataTable dt1 = new DataTable ("Table1");
532                         DataTable dt2 = new DataTable ("Table2");
533                         DataColumn column;
534
535                         column = new DataColumn ("One");
536                         column.DataType = typeof (int);
537                         column.Unique = true;
538                         dt1.Columns.Add (column);
539
540                         for (int i = 0; i < 10; i++) {
541                                 DataRow row = dt1.NewRow ();
542                                 row ["One"] = i;
543                                 dt1.Rows.Add (row);
544                         }
545                         
546                         column = new DataColumn ("Two");
547                         column.DataType = typeof (int);
548                         column.Unique = true;
549                         dt2.Columns.Add (column);
550
551                         for (int i = 0; i < 10; i++) {
552                                 DataRow row = dt2.NewRow ();
553                                 row ["Two"] = i;
554                                 dt2.Rows.Add (row);
555                         }
556
557                         dataset.Tables.Add (dt1);
558                         dataset.Tables.Add (dt2);
559                         dataset.Relations.Add ("Relation", dt1.Columns ["One"], dt2.Columns ["Two"]);
560
561                         return dataset;
562                 }
563
564                 [Test]
565                 public void EndUninitializedEdit ()
566                 {
567                         ArrayList list = new ArrayList ();
568                         BindingContext bc = new BindingContext ();
569                         CurrencyManager cm = bc [list] as CurrencyManager;
570
571                         cm.EndCurrentEdit ();
572                 }
573
574                 [Test]
575                 public void CancelUninitializedEdit ()
576                 {
577                         ArrayList list = new ArrayList ();
578                         BindingContext bc = new BindingContext ();
579                         CurrencyManager cm = bc [list] as CurrencyManager;
580
581                         cm.CancelCurrentEdit ();
582                 }
583
584                 [Test]
585                 public void CheckPositionOfRelatedSibling1 ()
586                 {
587                         DataSet data_source = CreateRelatedDataSet ();
588                         BindingContext bc = new BindingContext ();
589                         CurrencyManager cm = bc [data_source, "Table1.Relation"] as CurrencyManager;
590                         CurrencyManager scm = bc [data_source, "Table1"] as CurrencyManager;
591
592                         cm.Position++;
593                         cm.Position++;
594
595                         // position is not updated
596                         Assert.AreEqual (0, scm.Position, "#8");
597                 }
598
599                 [Test]
600                 public void CheckPositionOfRelatedSibling2 ()
601                 {
602                         DataSet data_source = CreateRelatedDataSet ();
603                         BindingContext bc = new BindingContext ();
604                         CurrencyManager cm = bc [data_source, "Table1.Relation"] as CurrencyManager;
605                         CurrencyManager scm = bc [data_source, "Table1"] as CurrencyManager;
606
607                         Assert.AreEqual (0, cm.Position, "#1");
608
609                         scm.Position++;
610
611                         Assert.AreEqual (0, cm.Position, "#2");
612                 }
613
614                 int event_num;
615                 int current_changed;
616                 int position_changed;
617                 int item_changed;
618                 ItemChangedEventArgs item_changed_args;
619
620                 void CurrentChanged (object sender, EventArgs args) { current_changed = ++event_num;  /*Console.WriteLine ("current_changed = {0}", current_changed); Console.WriteLine (Environment.StackTrace);*/ }
621                 void PositionChanged (object sender, EventArgs args) { position_changed = ++event_num;  /*Console.WriteLine ("position_changed = {0}", position_changed); Console.WriteLine (Environment.StackTrace);*/}
622                 void ItemChanged (object sender, ItemChangedEventArgs args) { item_changed = ++event_num; item_changed_args = args; /*Console.WriteLine ("item_changed = {0}, index = {1}", item_changed, args.Index); Console.WriteLine (Environment.StackTrace);*/ }
623                 void ListChanged (object sender, ListChangedEventArgs args) { /*Console.WriteLine ("ListChanged ({0},{1},{2})", args.ListChangedType, args.OldIndex, args.NewIndex); Console.WriteLine (Environment.StackTrace);*/ }
624
625                 [Test]
626                 public void AddNew ()
627                 {
628                         DataSet data_source = CreateRelatedDataSet ();
629                         BindingContext bc = new BindingContext ();
630                         CurrencyManager cm = bc [data_source, "Table1"] as CurrencyManager;
631
632                         event_num = current_changed = position_changed = -1;
633                         cm.CurrentChanged += new EventHandler (CurrentChanged);
634                         cm.PositionChanged += new EventHandler (PositionChanged);
635                         cm.ItemChanged += new ItemChangedEventHandler (ItemChanged);
636
637                         Assert.AreEqual (0, cm.Position, "AddNew1");
638                         Assert.AreEqual (10, cm.Count, "AddNew2");
639
640                         cm.AddNew ();
641
642                         Assert.AreEqual (10, cm.Position, "AddNew3");
643                         Assert.AreEqual (11, cm.Count, "AddNew4");
644
645                         Assert.AreEqual (0, item_changed, "AddNew5");
646                         Assert.AreEqual (-1, item_changed_args.Index, "AddNew6");
647                         Assert.AreEqual (1, current_changed, "AddNew7");
648                         Assert.AreEqual (2, position_changed, "AddNew8");
649
650                         cm.CurrentChanged -= new EventHandler (CurrentChanged);
651                         cm.PositionChanged -= new EventHandler (PositionChanged);
652                 }
653
654                 [Test]
655                 public void CancelAddNew ()
656                 {
657                         DataSet data_source = CreateRelatedDataSet ();
658                         BindingContext bc = new BindingContext ();
659                         CurrencyManager cm = bc [data_source, "Table1"] as CurrencyManager;
660
661                         DataView dv = cm.List as DataView;
662
663                         event_num = current_changed = position_changed = -1;
664                         cm.CurrentChanged += new EventHandler (CurrentChanged);
665                         cm.PositionChanged += new EventHandler (PositionChanged);
666                         cm.ItemChanged += new ItemChangedEventHandler (ItemChanged);
667                         dv.ListChanged += new ListChangedEventHandler (ListChanged);
668
669                         Assert.AreEqual (0, cm.Position, "CancelAddNew1");
670                         Assert.AreEqual (10, cm.Count, "CancelAddNew2");
671
672                         cm.AddNew ();
673
674                         Assert.AreEqual (0, item_changed, "CancelAddNew3");
675                         Assert.AreEqual (-1, item_changed_args.Index, "CancelAddNew4");
676                         Assert.AreEqual (1, current_changed, "CancelAddNew5");
677                         Assert.AreEqual (2, position_changed, "CancelAddNew6");
678
679                         cm.CancelCurrentEdit ();
680
681                         Assert.AreEqual (6, item_changed, "CancelAddNew7");
682                         Assert.AreEqual (9, item_changed_args.Index, "CancelAddNew8");
683                         Assert.AreEqual (3, current_changed, "CancelAddNew9");
684                         Assert.AreEqual (4, position_changed, "CancelAddNew10");
685
686                         Assert.AreEqual (9, cm.Position, "CancelAddNew11");
687                         Assert.AreEqual (10, cm.Count, "CancelAddNew12");
688
689                         cm.CurrentChanged -= new EventHandler (CurrentChanged);
690                         cm.PositionChanged -= new EventHandler (PositionChanged);
691                 }
692
693                 [Test]
694                 public void EndAddNew ()
695                 {
696                         DataSet data_source = CreateRelatedDataSet ();
697                         BindingContext bc = new BindingContext ();
698                         CurrencyManager cm = bc [data_source, "Table1"] as CurrencyManager;
699
700                         event_num = current_changed = position_changed = -1;
701                         cm.CurrentChanged += new EventHandler (CurrentChanged);
702                         cm.PositionChanged += new EventHandler (PositionChanged);
703                         cm.ItemChanged += new ItemChangedEventHandler (ItemChanged);
704
705                         Assert.AreEqual (0, cm.Position, "EndAddNew1");
706                         Assert.AreEqual (10, cm.Count, "EndAddNew2");
707
708                         cm.AddNew ();
709
710                         Assert.AreEqual (0, item_changed, "EndAddNew3");
711                         Assert.AreEqual (-1, item_changed_args.Index, "EndAddNew4");
712                         Assert.AreEqual (1, current_changed, "EndAddNew5");
713                         Assert.AreEqual (2, position_changed, "EndAddNew6");
714
715                         cm.EndCurrentEdit ();
716
717                         //                      Assert.AreEqual (3, item_changed, "EndAddNew7");
718                         //                      Assert.AreEqual (-1, item_changed_args.Index, "EndAddNew8");
719                         Assert.AreEqual (1, current_changed, "EndAddNew9");
720                         Assert.AreEqual (2, position_changed, "EndAddNew10");
721
722                         Assert.AreEqual (10, cm.Position, "EndAddNew11");
723                         Assert.AreEqual (11, cm.Count, "EndAddNew12");
724
725                         cm.CurrentChanged -= new EventHandler (CurrentChanged);
726                         cm.PositionChanged -= new EventHandler (PositionChanged);
727                 }
728
729                 [Test]
730                 public void AddNew2 ()
731                 {
732                         DataSet data_source = CreateRelatedDataSet ();
733                         BindingContext bc = new BindingContext ();
734                         CurrencyManager cm = bc [data_source, "Table1"] as CurrencyManager;
735
736                         DataView dv = cm.List as DataView;
737
738                         event_num = current_changed = position_changed = -1;
739                         cm.CurrentChanged += new EventHandler (CurrentChanged);
740                         cm.PositionChanged += new EventHandler (PositionChanged);
741                         cm.ItemChanged += new ItemChangedEventHandler (ItemChanged);
742                         dv.ListChanged += new ListChangedEventHandler (ListChanged);
743
744                         Assert.AreEqual (0, cm.Position, "AddNew1");
745                         Assert.AreEqual (10, cm.Count, "AddNew2");
746
747                         cm.AddNew ();
748
749                         Assert.AreEqual (10, cm.Position, "AddNew3");
750                         Assert.AreEqual (11, cm.Count, "AddNew4");
751
752                         // this does an implicit EndCurrentEdit
753                         cm.AddNew ();
754
755                         Assert.AreEqual (11, cm.Position, "AddNew5");
756                         Assert.AreEqual (12, cm.Count, "AddNew6");
757                 }
758         }
759 }
760