2005-05-04 Sureshkumar T <tsureshkumar@novell.com>
[mono.git] / mcs / class / System.Data / Test / System.Data / DataTableTest.cs
index 1510b56ac6fb673d81880866635f960814d74157..34f6eeb1190bc7b6d16eecee834d4d9e779952f6 100644 (file)
@@ -1139,37 +1139,22 @@ namespace MonoTests.System.Data
                [Test]
                public void ClearReset () //To test Clear and Reset methods
                {
-                       DataTable table = new DataTable ();
-                       DataTable table1 = new DataTable ();
+                       DataTable table = new DataTable ("table");
+                       DataTable table1 = new DataTable ("table1");
                 
                        DataSet set = new DataSet ();
                        set.Tables.Add (table);
                        set.Tables.Add (table1);
-                
-                       DataColumn col = new DataColumn ();
-                       col.ColumnName = "Id";
-                       col.DataType = Type.GetType ("System.Int32");
-                       table.Columns.Add (col);
-                       UniqueConstraint uc = new UniqueConstraint ("UK1", table.Columns[0] );
-                       table.Constraints.Add (uc);
-                       table.CaseSensitive = false;
-                
-                       col = new DataColumn ();
-                       col.ColumnName = "Name";
-                       col.DataType = Type.GetType ("System.String");
-                       table.Columns.Add (col);
-                
-                       col = new DataColumn ();
-                       col.ColumnName = "Id";
-                       col.DataType = Type.GetType ("System.Int32");
-                       table1.Columns.Add (col);
-                
-                       col = new DataColumn ();
-                       col.ColumnName = "Name";
-                       col.DataType = Type.GetType ("System.String");
-                       table1.Columns.Add (col);
 
-                       DataRelation dr = new DataRelation ("DR", table.Columns[0], table1.Columns[0]);
+                        table.Columns.Add ("Id", typeof (int));
+                        table.Columns.Add ("Name", typeof (string));
+                        table.Constraints.Add (new UniqueConstraint ("UK1", table.Columns [0]));
+                        table.CaseSensitive = false;
+                        
+                        table1.Columns.Add ("Id", typeof (int));
+                        table1.Columns.Add ("Name", typeof (string));
+
+                        DataRelation dr = new DataRelation ("DR", table.Columns[0], table1.Columns[0]);
                        set.Relations.Add (dr);
                 
                        DataRow row = table.NewRow ();
@@ -1186,21 +1171,21 @@ namespace MonoTests.System.Data
                        AssertEquals (1, table.ChildRelations.Count);
                        try {
                                table.Reset ();
-                               Fail ("#A01");
+                               Fail ("#A01, should have thrown ArgumentException");
                        }
                         catch (ArgumentException) {
                        }
-                       AssertEquals (0, table.Rows.Count);
-                       AssertEquals (0, table.ChildRelations.Count);
-                       AssertEquals (0, table.ParentRelations.Count);
-                       AssertEquals (0, table.Constraints.Count);
-                       table.Clear ();
+                       AssertEquals ("#CT01", 0, table.Rows.Count);
+                       AssertEquals ("#CT02", 0, table.ChildRelations.Count);
+                       AssertEquals ("#CT03", 0, table.ParentRelations.Count);
+                       AssertEquals ("#CT04", 0, table.Constraints.Count);
 
                        table1.Reset ();
                        AssertEquals ("#A05", 0, table1.Rows.Count);
                        AssertEquals ("#A06", 0, table1.Constraints.Count);
                        AssertEquals ("#A07", 0, table1.ParentRelations.Count);
                
+                        // clear test
                        table.Clear ();
                        AssertEquals ("#A08", 0, table.Rows.Count);
 #if NET_1_1
@@ -1209,8 +1194,50 @@ namespace MonoTests.System.Data
                        AssertEquals ("#A09", 1, table.Constraints.Count);
 #endif
                        AssertEquals ("#A10", 0, table.ChildRelations.Count);
+
                }
 
+                [Test]
+                public void ClearTest ()
+                {
+                        DataTable table = new DataTable ("test");
+                        table.Columns.Add ("id", typeof (int));
+                        table.Columns.Add ("name", typeof (string));
+                        
+                        table.PrimaryKey = new DataColumn [] { table.Columns [0] } ;
+                        
+                        table.Rows.Add (new object [] { 1, "mono 1" });
+                        table.Rows.Add (new object [] { 2, "mono 2" });
+                        table.Rows.Add (new object [] { 3, "mono 3" });
+                        table.Rows.Add (new object [] { 4, "mono 4" });
+
+                        table.AcceptChanges ();
+#if NET_2_0
+                        _tableClearedEventFired = false;
+                        table.TableCleared += new DataTableClearEventHandler (OnTableCleared);
+#endif // NET_2_0
+                        
+                        table.Clear ();
+#if NET_2_0
+                        AssertEquals ("#0 should have fired cleared event", true, _tableClearedEventFired);
+#endif // NET_2_0
+                        
+                        DataRow r = table.Rows.Find (1);
+                        AssertEquals ("#1 should have cleared", true, r == null);
+
+                        // try adding new row. indexes should have cleared
+                        table.Rows.Add (new object [] { 2, "mono 2" });
+                        AssertEquals ("#2 should add row", 1, table.Rows.Count);
+                }
+#if NET_2_0
+                private bool _tableClearedEventFired = false;
+                private void OnTableCleared (object src, DataTableClearEventArgs args)
+                {
+                        _tableClearedEventFired = true;
+                }
+#endif // NET_2_0
+                
+
                [Test]
                public void Serialize ()
                {
@@ -1328,6 +1355,47 @@ namespace MonoTests.System.Data
                         MyDataTable dt = (MyDataTable)(dt1.Clone());
                         AssertEquals("A#01",2,MyDataTable.count);
                 }
+
+                DataRowAction rowActionChanging = DataRowAction.Nothing;
+                DataRowAction rowActionChanged  = DataRowAction.Nothing;
+                [Test]
+                public void AcceptChangesTest ()
+                {
+                        DataTable dt = new DataTable ("test");
+                        dt.Columns.Add ("id", typeof (int));
+                        dt.Columns.Add ("name", typeof (string));
+                        
+                        dt.Rows.Add (new object [] { 1, "mono 1" });
+
+                        dt.RowChanged  += new DataRowChangeEventHandler (OnRowChanged);
+                        dt.RowChanging += new DataRowChangeEventHandler (OnRowChanging);
+
+                        try {
+                                rowActionChanged = rowActionChanging = DataRowAction.Nothing;
+                                dt.AcceptChanges ();
+
+                                AssertEquals ("#1 should have fired event and set action to commit",
+                                              DataRowAction.Commit, rowActionChanging);
+                                AssertEquals ("#2 should have fired event and set action to commit",
+                                              DataRowAction.Commit, rowActionChanged);
+
+                        } finally {
+                                dt.RowChanged  -= new DataRowChangeEventHandler (OnRowChanged);
+                                dt.RowChanging -= new DataRowChangeEventHandler (OnRowChanging);
+
+                        }
+                }
+
+                public void OnRowChanging (object src, DataRowChangeEventArgs args)
+                {
+                        rowActionChanging = args.Action;
+                }
+                
+                public void OnRowChanged (object src, DataRowChangeEventArgs args)
+                {
+                        rowActionChanged = args.Action;
+                }
+                
                                                                                                     
         }