Fix spelling
[mono.git] / mcs / class / System.Data / Test / System.Data / DataTableTest.cs
index 34f3936b748fd4fe08645d34cf1eb8f1877e22b8..c432b539409f1a38c5992e25acecd6cf4e91f1dd 100644 (file)
@@ -8,38 +8,66 @@
 // (C) 2003 Martin Willemoes Hansen
 // 
 
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
 using NUnit.Framework;
 using System;
 using System.Data;
+using System.Data.SqlTypes;
+using System.Globalization;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Xml;
 
 namespace MonoTests.System.Data
 {
        [TestFixture]
-       public class DataTableTest
+       public class DataTableTest : Assertion
        {
                [Test]
                public void Ctor()
                {
                        DataTable dt = new DataTable();
 
-                       Assertion.AssertEquals("CaseSensitive must be false." ,false,dt.CaseSensitive);
-                       Assertion.Assert("Col",dt.Columns != null);
-                       //Assertion.Assert(dt.ChildRelations != null);
-                       Assertion.Assert("Const", dt.Constraints != null);
-                       Assertion.Assert("ds", dt.DataSet == null); 
-                       Assertion.Assert("dv", dt.DefaultView != null);
-                       Assertion.Assert("de", dt.DisplayExpression == "");
-                       Assertion.Assert("ep", dt.ExtendedProperties != null);
-                       Assertion.Assert("he", dt.HasErrors == false);
-                       Assertion.Assert("lc", dt.Locale != null);
-                       Assertion.Assert("mc", dt.MinimumCapacity == 50); //LAMESPEC:
-                       Assertion.Assert("ns", dt.Namespace == "");
-                       //Assertion.Assert(dt.ParentRelations != null);
-                       Assertion.Assert("pf", dt.Prefix == "");
-                       Assertion.Assert("pk", dt.PrimaryKey != null);
-                       Assertion.Assert("rows", dt.Rows != null);
-                       Assertion.Assert("Site", dt.Site == null);
-                       Assertion.Assert("tname", dt.TableName == "");
+                       AssertEquals("CaseSensitive must be false." ,false,dt.CaseSensitive);
+                       Assert("Col",dt.Columns != null);
+                       //Assert(dt.ChildRelations != null);
+                       Assert("Const", dt.Constraints != null);
+                       Assert("ds", dt.DataSet == null); 
+                       Assert("dv", dt.DefaultView != null);
+                       Assert("de", dt.DisplayExpression == "");
+                       Assert("ep", dt.ExtendedProperties != null);
+                       Assert("he", dt.HasErrors == false);
+                       Assert("lc", dt.Locale != null);
+                       Assert("mc", dt.MinimumCapacity == 50); //LAMESPEC:
+                       Assert("ns", dt.Namespace == "");
+                       //Assert(dt.ParentRelations != null);
+                       Assert("pf", dt.Prefix == "");
+                       Assert("pk", dt.PrimaryKey != null);
+                       Assert("rows", dt.Rows != null);
+                       Assert("Site", dt.Site == null);
+                       Assert("tname", dt.TableName == "");
                        
                }
 
@@ -90,6 +118,11 @@ namespace MonoTests.System.Data
                        Row [0] = "Teresa";
                        Row [1] = "Mack";
                        Mom.Rows.Add (Row);
+
+                       Row = Mom.NewRow ();
+                       Row [0] = "'Jhon O'' Collenal'";
+                       Row [1] = "Pack";
+                       Mom.Rows.Add (Row);
                        
                        Row = Child.NewRow ();
                        Row [0] = "Nick";
@@ -120,37 +153,49 @@ namespace MonoTests.System.Data
                        Row [0] = "Mack";
                        Row [1] = 99;
                        Child.Rows.Add (Row);
+
+                       Row = Child.NewRow ();
+                       Row [0] = "Pack";
+                       Row [1] = 66;
+                       Child.Rows.Add (Row);
                        
                        DataRow [] Rows = Mom.Select ("Name = 'Teresa'");
-                       Assertion.AssertEquals ("test#01", 2, Rows.Length);
+                       AssertEquals ("test#01", 2, Rows.Length);
+
+                       // test with apos escaped
+                       Rows = Mom.Select ("Name = '''Jhon O'''' Collenal'''");
+                       AssertEquals ("test#01.1", 1, Rows.Length);
                        
                        Rows = Mom.Select ("Name = 'Teresa' and ChildName = 'Nick'");
-                       Assertion.AssertEquals ("test#02", 0, Rows.Length);
+                       AssertEquals ("test#02", 0, Rows.Length);
 
                        Rows = Mom.Select ("Name = 'Teresa' and ChildName = 'Jack'");
-                       Assertion.AssertEquals ("test#03", 1, Rows.Length);
+                       AssertEquals ("test#03", 1, Rows.Length);
 
                        Rows = Mom.Select ("Name = 'Teresa' and ChildName <> 'Jack'");
-                       Assertion.AssertEquals ("test#04", "Mack", Rows [0] [1]);
+                       AssertEquals ("test#04", "Mack", Rows [0] [1]);
                        
                        Rows = Mom.Select ("Name = 'Teresa' or ChildName <> 'Jack'");
-                       Assertion.AssertEquals ("test#05", 5, Rows.Length);
+                       AssertEquals ("test#05", 6, Rows.Length);
                        
                        Rows = Child.Select ("age = 20 - 1");
-                       Assertion.AssertEquals ("test#06", 1, Rows.Length);
+                       AssertEquals ("test#06", 1, Rows.Length);
                        
                        Rows = Child.Select ("age <= 20");
-                       Assertion.AssertEquals ("test#07", 3, Rows.Length);
+                       AssertEquals ("test#07", 3, Rows.Length);
                        
                        Rows = Child.Select ("age >= 20");
-                       Assertion.AssertEquals ("test#08", 3, Rows.Length);
+                       AssertEquals ("test#08", 4, Rows.Length);
                        
                        Rows = Child.Select ("age >= 20 and name = 'Mack' or name = 'Nick'");
-                       Assertion.AssertEquals ("test#09", 2, Rows.Length);
+                       AssertEquals ("test#09", 2, Rows.Length);
 
                        Rows = Child.Select ("age >= 20 and (name = 'Mack' or name = 'Nick')");
-                       Assertion.AssertEquals ("test#10", 1, Rows.Length);
-                       Assertion.AssertEquals ("test#11", "Mack", Rows [0] [0]);
+                       AssertEquals ("test#10", 1, Rows.Length);
+                       AssertEquals ("test#11", "Mack", Rows [0] [0]);
+                       
+                       Rows = Child.Select ("not (Name = 'Jack')");
+                       AssertEquals ("test#12", 6, Rows.Length);
                 }
                 
                [Test]
@@ -198,28 +243,28 @@ namespace MonoTests.System.Data
                        Child.Rows.Add (Row);
 
                        DataRow [] Rows = Child.Select ("age >= 20", "age DESC");
-                       Assertion.AssertEquals ("test#01", 3, Rows.Length);
-                       Assertion.AssertEquals ("test#02", "Mack", Rows [0] [0]);
-                       Assertion.AssertEquals ("test#03", "Mick", Rows [1] [0]);                       
-                       Assertion.AssertEquals ("test#04", "Dick", Rows [2] [0]);                       
+                       AssertEquals ("test#01", 3, Rows.Length);
+                       AssertEquals ("test#02", "Mack", Rows [0] [0]);
+                       AssertEquals ("test#03", "Mick", Rows [1] [0]);                 
+                       AssertEquals ("test#04", "Dick", Rows [2] [0]);                 
                        
                        Rows = Child.Select ("age >= 20", "age asc");
-                       Assertion.AssertEquals ("test#05", 3, Rows.Length);
-                       Assertion.AssertEquals ("test#06", "Dick", Rows [0] [0]);
-                       Assertion.AssertEquals ("test#07", "Mick", Rows [1] [0]);                       
-                       Assertion.AssertEquals ("test#08", "Mack", Rows [2] [0]);                       
+                       AssertEquals ("test#05", 3, Rows.Length);
+                       AssertEquals ("test#06", "Dick", Rows [0] [0]);
+                       AssertEquals ("test#07", "Mick", Rows [1] [0]);                 
+                       AssertEquals ("test#08", "Mack", Rows [2] [0]);                 
                 
                        Rows = Child.Select ("age >= 20", "name asc");
-                       Assertion.AssertEquals ("test#09", 3, Rows.Length);
-                       Assertion.AssertEquals ("test#10", "Dick", Rows [0] [0]);
-                       Assertion.AssertEquals ("test#11", "Mack", Rows [1] [0]);                       
-                       Assertion.AssertEquals ("test#12", "Mick", Rows [2] [0]);                       
+                       AssertEquals ("test#09", 3, Rows.Length);
+                       AssertEquals ("test#10", "Dick", Rows [0] [0]);
+                       AssertEquals ("test#11", "Mack", Rows [1] [0]);                 
+                       AssertEquals ("test#12", "Mick", Rows [2] [0]);                 
 
                        Rows = Child.Select ("age >= 20", "name desc");
-                       Assertion.AssertEquals ("test#09", 3, Rows.Length);
-                       Assertion.AssertEquals ("test#10", "Mick", Rows [0] [0]);
-                       Assertion.AssertEquals ("test#11", "Mack", Rows [1] [0]);                       
-                       Assertion.AssertEquals ("test#12", "Dick", Rows [2] [0]);                       
+                       AssertEquals ("test#09", 3, Rows.Length);
+                       AssertEquals ("test#10", "Mick", Rows [0] [0]);
+                       AssertEquals ("test#11", "Mack", Rows [1] [0]);                 
+                       AssertEquals ("test#12", "Dick", Rows [2] [0]);                 
 
                 }
 
@@ -253,29 +298,29 @@ namespace MonoTests.System.Data
                        Row [2] = 1;
                        T.Rows.Add (Row);
 
-                       Assertion.AssertEquals ("test#01", 12, T.Select ("age<=10").Length);
+                       AssertEquals ("test#01", 12, T.Select ("age<=10").Length);
                        
-                       Assertion.AssertEquals ("test#02", 12, T.Select ("age\n\t<\n\t=\t\n10").Length);
+                       AssertEquals ("test#02", 12, T.Select ("age\n\t<\n\t=\t\n10").Length);
 
                        try {
                                T.Select ("name = 1human ");
-                               Assertion.Fail ("test#03");
+                               Fail ("test#03");
                        } catch (Exception e) {
                                
                                // missing operand after 'human' operand 
-                               Assertion.AssertEquals ("test#04", typeof (SyntaxErrorException), e.GetType ());                                
+                               AssertEquals ("test#04", typeof (SyntaxErrorException), e.GetType ());                          
                        }
                        
                        try {                   
                                T.Select ("name = 1");
-                               Assertion.Fail ("test#05");
+                               Fail ("test#05");
                        } catch (Exception e) {
                                
                                // Cannot perform '=' operation between string and Int32
-                               Assertion.AssertEquals ("test#06", typeof (EvaluateException), e.GetType ());
+                               AssertEquals ("test#06", typeof (EvaluateException), e.GetType ());
                        }
                        
-                       Assertion.AssertEquals ("test#07", 1, T.Select ("age = '13'").Length);
+                       AssertEquals ("test#07", 1, T.Select ("age = '13'").Length);
 
                }
 
@@ -309,18 +354,18 @@ namespace MonoTests.System.Data
                        Row [2] = 1;
                        T.Rows.Add (Row);
                        
-                       Assertion.AssertEquals ("test#01", 11, T.Select ("age < 10").Length);
-                       Assertion.AssertEquals ("test#02", 12, T.Select ("age <= 10").Length);                  
-                       Assertion.AssertEquals ("test#03", 12, T.Select ("age< =10").Length);                   
-                       Assertion.AssertEquals ("test#04", 89, T.Select ("age > 10").Length);
-                       Assertion.AssertEquals ("test#05", 90, T.Select ("age >= 10").Length);                  
-                       Assertion.AssertEquals ("test#06", 100, T.Select ("age <> 10").Length);
-                       Assertion.AssertEquals ("test#07", 3, T.Select ("name < 'human10'").Length);
-                       Assertion.AssertEquals ("test#08", 3, T.Select ("id < '10'").Length);
+                       AssertEquals ("test#01", 11, T.Select ("age < 10").Length);
+                       AssertEquals ("test#02", 12, T.Select ("age <= 10").Length);                    
+                       AssertEquals ("test#03", 12, T.Select ("age< =10").Length);                     
+                       AssertEquals ("test#04", 89, T.Select ("age > 10").Length);
+                       AssertEquals ("test#05", 90, T.Select ("age >= 10").Length);                    
+                       AssertEquals ("test#06", 100, T.Select ("age <> 10").Length);
+                       AssertEquals ("test#07", 3, T.Select ("name < 'human10'").Length);
+                       AssertEquals ("test#08", 3, T.Select ("id < '10'").Length);
                        // FIXME: Somebody explain how this can be possible.
                        // it seems that it is no matter between 10 - 30. The
                        // result is allways 25 :-P
-                       Assertion.AssertEquals ("test#09", 25, T.Select ("id < 10").Length);
+                       //AssertEquals ("test#09", 25, T.Select ("id < 10").Length);
                        
                }
 
@@ -346,23 +391,23 @@ namespace MonoTests.System.Data
                        
                        try {
                                T.Select ("name = human1");
-                               Assertion.Fail ("test#01");
+                               Fail ("test#01");
                        } catch (Exception e) {
                                
                                // column name human not found
-                               Assertion.AssertEquals ("test#02", typeof (EvaluateException), e.GetType ());
+                               AssertEquals ("test#02", typeof (EvaluateException), e.GetType ());
                        }
                        
-                       Assertion.AssertEquals ("test#04", 1, T.Select ("id = '12'").Length);
-                       Assertion.AssertEquals ("test#05", 1, T.Select ("id = 12").Length);
+                       AssertEquals ("test#04", 1, T.Select ("id = '12'").Length);
+                       AssertEquals ("test#05", 1, T.Select ("id = 12").Length);
                        
                        try {
                                T.Select ("id = 1k3");
-                               Assertion.Fail ("test#06");
+                               Fail ("test#06");
                        } catch (Exception e) {
                                
                                // no operands after k3 operator
-                               Assertion.AssertEquals ("test#07", typeof (SyntaxErrorException), e.GetType ());
+                               AssertEquals ("test#07", typeof (SyntaxErrorException), e.GetType ());
                        }                                               
                }
                
@@ -395,55 +440,55 @@ namespace MonoTests.System.Data
                        Row [2] = 1;
                        T.Rows.Add (Row);
                                        
-                       Assertion.AssertEquals ("test#01", 1, T.Select ("name = 'human' + 1").Length);
+                       AssertEquals ("test#01", 1, T.Select ("name = 'human' + 1").Length);
                        
-                       Assertion.AssertEquals ("test#02", "human1", T.Select ("name = 'human' + 1") [0] ["name"]);                     
-                       Assertion.AssertEquals ("test#03", 1, T.Select ("name = 'human' + '1'").Length);
-                       Assertion.AssertEquals ("test#04", "human1", T.Select ("name = 'human' + '1'") [0] ["name"]);                   
-                       Assertion.AssertEquals ("test#05", 1, T.Select ("name = 'human' + 1 + 2").Length);
-                       Assertion.AssertEquals ("test#06", "human12", T.Select ("name = 'human' + '1' + '2'") [0] ["name"]);
+                       AssertEquals ("test#02", "human1", T.Select ("name = 'human' + 1") [0] ["name"]);                       
+                       AssertEquals ("test#03", 1, T.Select ("name = 'human' + '1'").Length);
+                       AssertEquals ("test#04", "human1", T.Select ("name = 'human' + '1'") [0] ["name"]);                     
+                       AssertEquals ("test#05", 1, T.Select ("name = 'human' + 1 + 2").Length);
+                       AssertEquals ("test#06", "human12", T.Select ("name = 'human' + '1' + '2'") [0] ["name"]);
                        
-                       Assertion.AssertEquals ("test#07", 1, T.Select ("name = 'huMAn' + 1").Length);
+                       AssertEquals ("test#07", 1, T.Select ("name = 'huMAn' + 1").Length);
                        
                        Set.CaseSensitive = true;
-                       Assertion.AssertEquals ("test#08", 0, T.Select ("name = 'huMAn' + 1").Length);
+                       AssertEquals ("test#08", 0, T.Select ("name = 'huMAn' + 1").Length);
                        
                        T.CaseSensitive = false;
-                       Assertion.AssertEquals ("test#09", 1, T.Select ("name = 'huMAn' + 1").Length);
+                       AssertEquals ("test#09", 1, T.Select ("name = 'huMAn' + 1").Length);
                        
                        T.CaseSensitive = true;
-                       Assertion.AssertEquals ("test#10", 0, T.Select ("name = 'huMAn' + 1").Length);
+                       AssertEquals ("test#10", 0, T.Select ("name = 'huMAn' + 1").Length);
                        
                        Set.CaseSensitive = false;
-                       Assertion.AssertEquals ("test#11", 0, T.Select ("name = 'huMAn' + 1").Length);
+                       AssertEquals ("test#11", 0, T.Select ("name = 'huMAn' + 1").Length);
                        
                        T.CaseSensitive = false;
-                       Assertion.AssertEquals ("test#12", 1, T.Select ("name = 'huMAn' + 1").Length);
+                       AssertEquals ("test#12", 1, T.Select ("name = 'huMAn' + 1").Length);
                        
-                       Assertion.AssertEquals ("test#13", 0, T.Select ("name = 'human1*'").Length);
-                       Assertion.AssertEquals ("test#14", 11, T.Select ("name like 'human1*'").Length);
-                       Assertion.AssertEquals ("test#15", 11, T.Select ("name like 'human1%'").Length);
+                       AssertEquals ("test#13", 0, T.Select ("name = 'human1*'").Length);
+                       AssertEquals ("test#14", 11, T.Select ("name like 'human1*'").Length);
+                       AssertEquals ("test#15", 11, T.Select ("name like 'human1%'").Length);
                        
                        try {
-                               Assertion.AssertEquals ("test#16", 11, T.Select ("name like 'h*an1'").Length);
-                               Assertion.Fail ("test#16");
+                               AssertEquals ("test#16", 11, T.Select ("name like 'h*an1'").Length);
+                               Fail ("test#16");
                        } catch (Exception e) {
                                
                                // 'h*an1' is invalid
-                               Assertion.AssertEquals ("test#17", typeof (EvaluateException), e.GetType ());
+                               AssertEquals ("test#17", typeof (EvaluateException), e.GetType ());
                        }
                        
                        try {
-                               Assertion.AssertEquals ("test#18", 11, T.Select ("name like 'h%an1'").Length);
-                               Assertion.Fail ("test#19");
+                               AssertEquals ("test#18", 11, T.Select ("name like 'h%an1'").Length);
+                               Fail ("test#19");
                        } catch (Exception e) {
                                
                                // 'h%an1' is invalid
-                               Assertion.AssertEquals ("test#20", typeof (EvaluateException), e.GetType ());
+                               AssertEquals ("test#20", typeof (EvaluateException), e.GetType ());
                        }
                        
-                       Assertion.AssertEquals ("test#21", 0, T.Select ("name like 'h[%]an'").Length);
-                       Assertion.AssertEquals ("test#22", 1, T.Select ("name like 'h[*]an'").Length);
+                       AssertEquals ("test#21", 0, T.Select ("name like 'h[%]an'").Length);
+                       AssertEquals ("test#22", 1, T.Select ("name like 'h[*]an'").Length);
                        
                }
 
@@ -468,13 +513,13 @@ namespace MonoTests.System.Data
                                T.Rows.Add (Row);
                        }
                        
-                       Assertion.AssertEquals ("test#01", 1000, T.Select ("Sum(age) > 10").Length);
-                       Assertion.AssertEquals ("test#02", 1000, T.Select ("avg(age) = 499").Length);
-                       Assertion.AssertEquals ("test#03", 1000, T.Select ("min(age) = 0").Length);
-                       Assertion.AssertEquals ("test#04", 1000, T.Select ("max(age) = 999").Length);
-                       Assertion.AssertEquals ("test#05", 1000, T.Select ("count(age) = 1000").Length);
-                       Assertion.AssertEquals ("test#06", 1000, T.Select ("stdev(age) > 287 and stdev(age) < 289").Length);
-                       Assertion.AssertEquals ("test#07", 1000, T.Select ("var(age) < 83417 and var(age) > 83416").Length);
+                       AssertEquals ("test#01", 1000, T.Select ("Sum(age) > 10").Length);
+                       AssertEquals ("test#02", 1000, T.Select ("avg(age) = 499").Length);
+                       AssertEquals ("test#03", 1000, T.Select ("min(age) = 0").Length);
+                       AssertEquals ("test#04", 1000, T.Select ("max(age) = 999").Length);
+                       AssertEquals ("test#05", 1000, T.Select ("count(age) = 1000").Length);
+                       AssertEquals ("test#06", 1000, T.Select ("stdev(age) > 287 and stdev(age) < 289").Length);
+                       AssertEquals ("test#07", 1000, T.Select ("var(age) < 83417 and var(age) > 83416").Length);
                }
                
                [Test]
@@ -505,16 +550,16 @@ namespace MonoTests.System.Data
                        T.Rows.Add (Row);
 
                        //TODO: How to test Convert-function
-                       Assertion.AssertEquals ("test#01", 25, T.Select ("age = 5*5") [0]["age"]);                      
-                       Assertion.AssertEquals ("test#02", 901, T.Select ("len(name) > 7").Length);
-                       Assertion.AssertEquals ("test#03", 125, T.Select ("age = 5*5*5 AND len(name)>7") [0]["age"]);
-                       Assertion.AssertEquals ("test#04", 1, T.Select ("isnull(id, 'test') = 'test'").Length);                 
-                       Assertion.AssertEquals ("test#05", 1000, T.Select ("iif(id = '56', 'test', 'false') = 'false'").Length);                        
-                       Assertion.AssertEquals ("test#06", 1, T.Select ("iif(id = '56', 'test', 'false') = 'test'").Length);
-                       Assertion.AssertEquals ("test#07", 9, T.Select ("substring(id, 2, 3) = '23'").Length);
-                       Assertion.AssertEquals ("test#08", "123", T.Select ("substring(id, 2, 3) = '23'") [0] ["id"]);
-                       Assertion.AssertEquals ("test#09", "423", T.Select ("substring(id, 2, 3) = '23'") [3] ["id"]);
-                       Assertion.AssertEquals ("test#10", "923", T.Select ("substring(id, 2, 3) = '23'") [8] ["id"]);
+                       AssertEquals ("test#01", 25, T.Select ("age = 5*5") [0]["age"]);                        
+                       AssertEquals ("test#02", 901, T.Select ("len(name) > 7").Length);
+                       AssertEquals ("test#03", 125, T.Select ("age = 5*5*5 AND len(name)>7") [0]["age"]);
+                       AssertEquals ("test#04", 1, T.Select ("isnull(id, 'test') = 'test'").Length);                   
+                       AssertEquals ("test#05", 1000, T.Select ("iif(id = '56', 'test', 'false') = 'false'").Length);                  
+                       AssertEquals ("test#06", 1, T.Select ("iif(id = '56', 'test', 'false') = 'test'").Length);
+                       AssertEquals ("test#07", 9, T.Select ("substring(id, 2, 3) = '23'").Length);
+                       AssertEquals ("test#08", "123", T.Select ("substring(id, 2, 3) = '23'") [0] ["id"]);
+                       AssertEquals ("test#09", "423", T.Select ("substring(id, 2, 3) = '23'") [3] ["id"]);
+                       AssertEquals ("test#10", "923", T.Select ("substring(id, 2, 3) = '23'") [8] ["id"]);
                        
                }
 
@@ -598,21 +643,23 @@ namespace MonoTests.System.Data
                         Child.Rows.Add (Row);
                        
                        DataRow [] Rows = Child.Select ("name = Parent.Childname");
-                       Assertion.AssertEquals ("test#01", 6, Rows.Length);
+                       AssertEquals ("test#01", 6, Rows.Length);
                        Rows = Child.Select ("Parent.childname = 'Jack'");
-                       Assertion.AssertEquals ("test#02", 1, Rows.Length);
+                       AssertEquals ("test#02", 1, Rows.Length);
                        
+                       /*
                        try {
                                // FIXME: LAMESPEC: Why the exception is thrown why... why... 
                                Mom.Select ("Child.Name = 'Jack'");
-                               Assertion.Fail ("test#03");
+                               Fail ("test#03");
                        } catch (Exception e) {
-                               Assertion.AssertEquals ("test#04", typeof (SyntaxErrorException), e.GetType ());
-                               Assertion.AssertEquals ("test#05", "Cannot interpret token 'Child' at position 1.", e.Message);
+                               AssertEquals ("test#04", typeof (SyntaxErrorException), e.GetType ());
+                               AssertEquals ("test#05", "Cannot interpret token 'Child' at position 1.", e.Message);
                        }
+                       */
                        
                        Rows = Child.Select ("Parent.name = 'Laura'");
-                       Assertion.AssertEquals ("test#06", 3, Rows.Length);
+                       AssertEquals ("test#06", 3, Rows.Length);
                        
                        DataTable Parent2 = new DataTable ("Parent2");
                         Col = new DataColumn ("Name");
@@ -652,27 +699,40 @@ namespace MonoTests.System.Data
                        
                        try {
                                Rows = Child.Select ("Parent.ChildName = 'Jack'");
-                               Assertion.Fail ("test#07");
+                               Fail ("test#07");
                        } catch (Exception e) {
-                               Assertion.AssertEquals ("test#08", typeof (EvaluateException), e.GetType ());
-                               Assertion.AssertEquals ("test#09", "The table [Child] involved in more than one relation. You must explicitly mention a relation name in the expression 'parent.[ChildName]'.", e.Message);
+                               AssertEquals ("test#08", typeof (EvaluateException), e.GetType ());
+                               //AssertEquals ("test#09", "The table [Child] involved in more than one relation. You must explicitly mention a relation name in the expression 'parent.[ChildName]'.", e.Message);
                        }
                        
                        Rows = Child.Select ("Parent(rel).ChildName = 'Jack'");
-                       Assertion.AssertEquals ("test#10", 1, Rows.Length);
+                       AssertEquals ("test#10", 1, Rows.Length);
 
                        Rows = Child.Select ("Parent(Rel2).ChildName = 'Jack'");
-                       Assertion.AssertEquals ("test#10", 1, Rows.Length);
+                       AssertEquals ("test#10", 1, Rows.Length);
                        
                        try {
                                Mom.Select ("Parent.name  = 'John'");
                        } catch (Exception e) {
-                               Assertion.AssertEquals ("test#11", typeof (IndexOutOfRangeException), e.GetType ());
-                               Assertion.AssertEquals ("test#12", "Cannot find relation 0.", e.Message);
+                               AssertEquals ("test#11", typeof (IndexOutOfRangeException), e.GetType ());
+                               AssertEquals ("test#12", "Cannot find relation 0.", e.Message);
                        }
                        
                }
 
+               [Test]
+               public void SelectRowState()
+               {
+                       DataTable d = new DataTable();
+                       d.Columns.Add (new DataColumn ("aaa"));
+                       DataRow [] rows = d.Select (null, null, DataViewRowState.Deleted);
+                       AssertEquals(0, rows.Length);
+                       d.Rows.Add (new object [] {"bbb"});
+                       d.Rows.Add (new object [] {"bbb"});
+                       rows = d.Select (null, null, DataViewRowState.Deleted);
+                       AssertEquals(0, rows.Length);
+               }
+
                [Test]
                public void ToStringTest()
                {
@@ -684,7 +744,7 @@ namespace MonoTests.System.Data
                        
                        
                        string cmpr = dt.TableName + " + " + dt.DisplayExpression;
-                       Assertion.AssertEquals(cmpr,dt.ToString());
+                       AssertEquals(cmpr,dt.ToString());
                }
 
                [Test]
@@ -699,23 +759,23 @@ namespace MonoTests.System.Data
                        dt.Columns.Add ();
                        dt.Columns.Add ();
                        
-                       Assertion.AssertEquals ("test#01", 0, dt.PrimaryKey.Length);
+                       AssertEquals ("test#01", 0, dt.PrimaryKey.Length);
                        
                        dt.PrimaryKey = new DataColumn [] {dt.Columns [0]};
-                       Assertion.AssertEquals ("test#02", 1, dt.PrimaryKey.Length);
-                       Assertion.AssertEquals ("test#03", "Column1", dt.PrimaryKey [0].ColumnName);
+                       AssertEquals ("test#02", 1, dt.PrimaryKey.Length);
+                       AssertEquals ("test#03", "Column1", dt.PrimaryKey [0].ColumnName);
                        
                        dt.PrimaryKey = null;
-                       Assertion.AssertEquals ("test#04", 0, dt.PrimaryKey.Length);
+                       AssertEquals ("test#04", 0, dt.PrimaryKey.Length);
                        
                        Col = new DataColumn ("failed");
                        
                        try {
                                dt.PrimaryKey = new DataColumn [] {Col};
-                               Assertion.Fail ("test#05");                                     
+                               Fail ("test#05");                                       
                        } catch (Exception e) {
-                               Assertion.AssertEquals ("test#06", typeof (ArgumentException), e.GetType ());
-                               Assertion.AssertEquals ("test#07", "Column must belong to a table.", e.Message);
+                               AssertEquals ("test#06", typeof (ArgumentException), e.GetType ());
+                               AssertEquals ("test#07", "Column must belong to a table.", e.Message);
                        }
                        
                        DataTable dt2 = new DataTable ();
@@ -723,21 +783,805 @@ namespace MonoTests.System.Data
                        
                        try {
                                dt.PrimaryKey = new DataColumn [] {dt2.Columns [0]};
-                               Assertion.Fail ("test#08");
+                               Fail ("test#08");
                        } catch (Exception e) {
-                               Assertion.AssertEquals ("test#09", typeof (ArgumentException), e.GetType ());
-                               Assertion.AssertEquals ("test#10", "PrimaryKey columns do not belong to this table.", e.Message);
+                               AssertEquals ("test#09", typeof (ArgumentException), e.GetType ());
+                               AssertEquals ("test#10", "PrimaryKey columns do not belong to this table.", e.Message);
                        }
                        
-                       Assertion.AssertEquals ("test#11", 0, dt.Constraints.Count);
+                       
+                       AssertEquals ("test#11", 0, dt.Constraints.Count);
                        
                        dt.PrimaryKey = new DataColumn [] {dt.Columns [0], dt.Columns [1]};
-                       Assertion.AssertEquals ("test#12", 2, dt.PrimaryKey.Length);
-                       Assertion.AssertEquals ("test#13", 1, dt.Constraints.Count);
-                       Assertion.AssertEquals ("test#14", true, dt.Constraints [0] is UniqueConstraint);
-                       Assertion.AssertEquals ("test#15", "Column1", dt.PrimaryKey [0]);
-                       Assertion.AssertEquals ("test#16", "Column2", dt.PrimaryKey [1]);
+                       AssertEquals ("test#12", 2, dt.PrimaryKey.Length);
+                       AssertEquals ("test#13", 1, dt.Constraints.Count);
+                       AssertEquals ("test#14", true, dt.Constraints [0] is UniqueConstraint);
+                       AssertEquals ("test#15", "Column1", dt.PrimaryKey [0].ColumnName);
+                       AssertEquals ("test#16", "Column2", dt.PrimaryKey [1].ColumnName);
+                       
+               }
+               
+               [Test]
+               public void PropertyExceptions ()
+               {
+                       DataSet set = new DataSet ();
+                       DataTable table = new DataTable ();
+                       DataTable table1 =  new DataTable ();
+                       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]);
+                       set.Relations.Add (dr);
+
+                       try {
+                               table.CaseSensitive = true;
+                               table1.CaseSensitive = true;
+                               Fail ("#A01");
+                       }
+                       catch (Exception e) {
+                               if (e.GetType () != typeof (AssertionException))
+                                       AssertEquals ("#A02", "Cannot change CaseSensitive or Locale property. This change would lead to at least one DataRelation or Constraint to have different Locale or CaseSensitive settings between its related tables.",e.Message);
+                               else
+                                       Console.WriteLine (e);
+                       }
+                       try {
+                               CultureInfo cultureInfo = new CultureInfo ("en-gb");
+                               table.Locale = cultureInfo;
+                               table1.Locale = cultureInfo;
+                               Fail ("#A03");
+                       }
+                       catch (Exception e) {
+                                if (e.GetType () != typeof (AssertionException))
+                                       AssertEquals ("#A04", "Cannot change CaseSensitive or Locale property. This change would lead to at least one DataRelation or Constraint to have different Locale or CaseSensitive settings between its related tables.",e.Message);
+                               else
+                                       Console.WriteLine (e);
+                       }
+                       try {
+                               table.Prefix = "Prefix#1";
+                               Fail ("#A05");
+                       }
+                       catch (Exception e){
+                               if (e.GetType () != typeof (AssertionException))
+                                       AssertEquals ("#A06", "Prefix 'Prefix#1' is not valid, because it contains special characters.",e.Message);
+                               else
+                                       Console.WriteLine (e);
+
+                       }
+               }
+
+               [Test]
+               public void GetErrors ()
+               {
+                       DataTable table = new DataTable ();
+
+                       DataColumn col = new DataColumn ();
+                       col.ColumnName = "Id";
+                       col.DataType = Type.GetType ("System.Int32");
+                       table.Columns.Add (col);
+                                                                                                                             
+                       col = new DataColumn ();
+                       col.ColumnName = "Name";
+                       col.DataType = Type.GetType ("System.String");
+                       table.Columns.Add (col);
+                       
+                       DataRow row = table.NewRow ();
+                       row ["Id"] = 147;
+                       row ["name"] = "Abc";
+                       row.RowError = "Error#1";
+                       table.Rows.Add (row);
+
+                       AssertEquals ("#A01", 1, table.GetErrors ().Length);
+                       AssertEquals ("#A02", "Error#1", (table.GetErrors ())[0].RowError);
+               }
+               [Test]
+               public void CloneCopyTest ()
+               {
+                       DataTable table = new DataTable ();
+                       table.TableName = "Table#1";
+                       DataTable table1 = new DataTable ();
+                       table1.TableName = "Table#2";
+                
+                       table.AcceptChanges ();
+                       
+                       DataSet set = new DataSet ("Data Set#1");
+                       set.DataSetName = "Dataset#1";
+                       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);
+                
+                       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");
+                       table.Columns.Add (col);
+                       
+                       col = new DataColumn ();
+                       col.ColumnName = "Name";
+                       col.DataType = Type.GetType ("System.String");
+                       table1.Columns.Add (col);
+                       DataRow row = table.NewRow ();
+                       row ["Id"] = 147;
+                       row ["name"] = "Abc";
+                       row.RowError = "Error#1";
+                       table.Rows.Add (row);
+                                                                                                                             
+                       row = table.NewRow ();
+                       row ["Id"] = 47;
+                       row ["name"] = "Efg";
+                       table.Rows.Add (row);
+                       table.AcceptChanges ();
+                                                                                                                             
+                       table.CaseSensitive = true;
+                       table1.CaseSensitive = true;
+                       table.MinimumCapacity = 100;
+                       table.Prefix = "PrefixNo:1";
+                       table.Namespace = "Namespace#1";
+                       table.DisplayExpression = "Id / Name + (Id * Id)";
+                       DataColumn[] colArray = {table.Columns[0]};
+                       table.PrimaryKey = colArray;
+                       table.ExtendedProperties.Add ("TimeStamp", DateTime.Now);
+#if NET_1_1 // This prevents further tests after .NET 1.1.
+#else
+                       CultureInfo cultureInfo = new CultureInfo ("en-gb");
+                       table.Locale = cultureInfo;
+#endif
+
+                       row = table1.NewRow ();
+                       row ["Name"] = "Abc";
+                       row ["Id"] = 147;
+                       table1.Rows.Add (row);
+
+                       row = table1.NewRow ();
+                       row ["Id"] = 47;
+                       row ["Name"] = "Efg";
+                       table1.Rows.Add (row);
+                
+                       DataRelation dr = new DataRelation ("DR", table.Columns[0], table1.Columns[0]);
+                       set.Relations.Add (dr);
+
+                       //Testing properties of clone
+                       DataTable cloneTable = table.Clone ();
+                       AssertEquals ("#A01",true ,cloneTable.CaseSensitive);
+                       AssertEquals ("#A02", 0 , cloneTable.ChildRelations.Count);
+                       AssertEquals ("#A03", 0 , cloneTable.ParentRelations.Count);
+                       AssertEquals ("#A04", 2,  cloneTable.Columns.Count);
+                       AssertEquals ("#A05", 1, cloneTable.Constraints.Count);
+                       AssertEquals ("#A06", "Id / Name + (Id * Id)", cloneTable.DisplayExpression);
+                       AssertEquals ("#A07", 1 ,cloneTable.ExtendedProperties.Count);
+                       AssertEquals ("#A08", false ,cloneTable.HasErrors);
+#if NET_1_1
+#else
+                       AssertEquals ("#A09", 2057, cloneTable.Locale.LCID);
+#endif
+                       AssertEquals ("#A10", 100, cloneTable.MinimumCapacity);
+                       AssertEquals ("#A11","Namespace#1", cloneTable.Namespace);
+                       AssertEquals ("#A12", "PrefixNo:1",cloneTable.Prefix);
+                       AssertEquals ("#A13", "Id",  cloneTable.PrimaryKey[0].ColumnName);
+                       AssertEquals ("#A14",0 , cloneTable.Rows.Count );
+                       AssertEquals ("#A15", "Table#1", cloneTable.TableName);
+
+                       //Testing properties of copy
+                       DataTable copyTable = table.Copy ();
+                       AssertEquals ("#A16",true ,copyTable.CaseSensitive);
+                       AssertEquals ("#A17", 0 , copyTable.ChildRelations.Count);
+                       AssertEquals ("#A18", 0 , copyTable.ParentRelations.Count);
+                       AssertEquals ("#A19", 2,  copyTable.Columns.Count);
+                       AssertEquals ("#A20", 1, copyTable.Constraints.Count);
+                       AssertEquals ("#A21", "Id / Name + (Id * Id)", copyTable.DisplayExpression);
+                       AssertEquals ("#A22", 1 ,copyTable.ExtendedProperties.Count);
+                       AssertEquals ("#A23", true ,copyTable.HasErrors);
+#if NET_1_1
+#else
+                       AssertEquals ("#A24", 2057, copyTable.Locale.LCID);
+#endif
+                       AssertEquals ("#A25", 100, copyTable.MinimumCapacity);
+                       AssertEquals ("#A26","Namespace#1", copyTable.Namespace);
+                       AssertEquals ("#A27", "PrefixNo:1",copyTable.Prefix);
+                       AssertEquals ("#A28", "Id",  copyTable.PrimaryKey[0].ColumnName);
+                       AssertEquals ("#A29", 2 , copyTable.Rows.Count );
+                       AssertEquals ("#A30", "Table#1", copyTable.TableName);
+               }
+
+               [Test]
+               public void LoadDataException ()
+               {
+                       DataTable table = new DataTable ();
+                       DataColumn col = new DataColumn ();
+                       col.ColumnName = "Id";
+                       col.DataType = Type.GetType ("System.Int32");
+                       col.DefaultValue = 47;
+                       table.Columns.Add (col);
+                       UniqueConstraint uc = new UniqueConstraint ("UK1", table.Columns[0] );
+                       table.Constraints.Add (uc);
+                
+                       col = new DataColumn ();
+                       col.ColumnName = "Name";
+                       col.DataType = Type.GetType ("System.String");
+                       col.DefaultValue = "Hello";
+                       table.Columns.Add (col);
+                
+                       table.BeginLoadData();
+                       object[] row = {147, "Abc"};
+                       DataRow newRow = table.LoadDataRow (row, true);
+                
+                       object[] row1 = {147, "Efg"};
+                       DataRow newRow1 = table.LoadDataRow (row1, true);
+                                                                                                                             
+                       object[] row2 = {143, "Hij"};
+                       DataRow newRow2 = table.LoadDataRow (row2, true);
+                                                                                                                             
+                       try {
+                               table.EndLoadData ();
+                               Fail ("#A01");
+                       }
+                       catch (ConstraintException) {
+                       }
+               }
+               [Test]
+               public void Changes () //To test GetChanges and RejectChanges
+               {
+                       DataTable table = new DataTable ();
+
+                       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);
+                                                                                                                             
+                       col = new DataColumn ();
+                       col.ColumnName = "Name";
+                       col.DataType = Type.GetType ("System.String");
+                       table.Columns.Add (col);                        
+
+                       DataRow row = table.NewRow ();
+                       row ["Id"] = 147;
+                       row ["name"] = "Abc";
+                       table.Rows.Add (row);
+                       table.AcceptChanges ();
+                        
+                       row = table.NewRow ();
+                       row ["Id"] = 47;
+                       row ["name"] = "Efg";
+                       table.Rows.Add (row);
+
+                       //Testing GetChanges
+                       DataTable changesTable = table.GetChanges ();
+                       AssertEquals ("#A01", 1 ,changesTable.Rows.Count);
+                       AssertEquals ("#A02","Efg" ,changesTable.Rows[0]["Name"]);                      
+                       table.AcceptChanges ();
+                       changesTable = table.GetChanges ();
+                       try {
+                               int cnt = changesTable.Rows.Count;
+                       }
+                       catch(Exception e) {
+                               if (e.GetType () != typeof (AssertionException))
+                                       AssertEquals ("#A03",typeof(NullReferenceException) ,e.GetType ());
+                               else
+                                       Console.WriteLine (e);
+                       }
+                       
+                       //Testing RejectChanges
+                       row = table.NewRow ();
+                        row ["Id"] = 247;
+                        row ["name"] = "Hij";
+                        table.Rows.Add (row);
+
+                       (table.Rows [0])["Name"] = "AaBbCc";
+                       table.RejectChanges ();
+                       AssertEquals ("#A03", "Abc" , (table.Rows [0]) ["Name"]);
+                       AssertEquals ("#A04", 2, table.Rows.Count);
+               }
+               
+                [Test]
+                public void ImportRowTest ()
+                {
+                        // build source table
+                        DataTable src = new DataTable ();
+                        src.Columns.Add ("id", typeof (int));
+                        src.Columns.Add ("name", typeof (string));
+
+                        src.PrimaryKey = new DataColumn [] {src.Columns [0]} ;
+
+                        src.Rows.Add (new object [] { 1, "mono 1" });
+                        src.Rows.Add (new object [] { 2, "mono 2" });
+                        src.Rows.Add (new object [] { 3, "mono 3" });
+                        src.AcceptChanges ();
+
+                        src.Rows [0] [1] = "mono changed 1";  // modify 1st row
+                        src.Rows [1].Delete ();              // delete 2nd row
+                        // 3rd row is unchanged
+                        src.Rows.Add (new object [] { 4, "mono 4" }); // add 4th row
+
+                        // build target table
+                        DataTable target = new DataTable ();
+                        target.Columns.Add ("id", typeof (int));
+                        target.Columns.Add ("name", typeof (string));
+
+                        target.PrimaryKey = new DataColumn [] {target.Columns [0]} ;
+
+                        // import all rows
+                        target.ImportRow (src.Rows [0]);     // import 1st row
+                        target.ImportRow (src.Rows [1]);     // import 2nd row
+                        target.ImportRow (src.Rows [2]);     // import 3rd row
+                        target.ImportRow (src.Rows [3]);     // import 4th row
+
+                        try {
+                                target.ImportRow (src.Rows [2]); // import 3rd row again
+                                Fail ("#AA1 Should have thrown exception violativ PK");
+                        } catch (ConstraintException e) {}
+
+                        // check row states
+                        AssertEquals ("#A1", src.Rows [0].RowState, target.Rows [0].RowState);
+                        AssertEquals ("#A2", src.Rows [1].RowState, target.Rows [1].RowState);
+                        AssertEquals ("#A3", src.Rows [2].RowState, target.Rows [2].RowState);
+                        AssertEquals ("#A4", src.Rows [3].RowState, target.Rows [3].RowState);
+
+                        // check for modified row (1st row)
+                        AssertEquals ("#B1", (string) src.Rows [0] [1], (string) target.Rows [0] [1]);
+                        AssertEquals ("#B2", (string) src.Rows [0] [1, DataRowVersion.Default], (string) target.Rows [0] [1, DataRowVersion.Default]);
+                        AssertEquals ("#B3", (string) src.Rows [0] [1, DataRowVersion.Original], (string) target.Rows [0] [1, DataRowVersion.Original]);
+                        AssertEquals ("#B4", (string) src.Rows [0] [1, DataRowVersion.Current], (string) target.Rows [0] [1, DataRowVersion.Current]);
+                        AssertEquals ("#B5", false, target.Rows [0].HasVersion(DataRowVersion.Proposed));
+
+                        // check for deleted row (2nd row)
+                        AssertEquals ("#C1", (string) src.Rows [1] [1, DataRowVersion.Original], (string) target.Rows [1] [1, DataRowVersion.Original]);
+
+                        // check for unchanged row (3rd row)
+                        AssertEquals ("#D1", (string) src.Rows [2] [1], (string) target.Rows [2] [1]);
+                        AssertEquals ("#D2", (string) src.Rows [2] [1, DataRowVersion.Default], (string) target.Rows [2] [1, DataRowVersion.Default]);
+                        AssertEquals ("#D3", (string) src.Rows [2] [1, DataRowVersion.Original], (string) target.Rows [2] [1, DataRowVersion.Original]);
+                        AssertEquals ("#D4", (string) src.Rows [2] [1, DataRowVersion.Current], (string) target.Rows [2] [1, DataRowVersion.Current]);
+
+                        // check for newly added row (4th row)
+                        AssertEquals ("#E1", (string) src.Rows [3] [1], (string) target.Rows [3] [1]);
+                        AssertEquals ("#E2", (string) src.Rows [3] [1, DataRowVersion.Default], (string) target.Rows [3] [1, DataRowVersion.Default]);
+                        AssertEquals ("#E3", (string) src.Rows [3] [1, DataRowVersion.Current], (string) target.Rows [3] [1, DataRowVersion.Current]);
+                }
+
+                [Test]
+               public void ImportRowDetachedTest ()
+               {
+                       DataTable table = new DataTable ();
+                       DataColumn col = new DataColumn ();
+                       col.ColumnName = "Id";
+                       col.DataType = Type.GetType ("System.Int32");
+                       table.Columns.Add (col);
+
+                        table.PrimaryKey = new DataColumn [] {col};
+
+                        col = new DataColumn ();
+                       col.ColumnName = "Name";
+                       col.DataType = Type.GetType ("System.String");
+                       table.Columns.Add (col);
+                        
+                       DataRow row = table.NewRow ();
+                       row ["Id"] = 147;
+                       row ["name"] = "Abc";
+
+                        // keep silent as ms.net ;-), though this is not useful.
+                        table.ImportRow (row);
+
+                       //if RowState is detached, then dont import the row.
+                       AssertEquals ("#1", 0, table.Rows.Count);
+               }
+
+               [Test]
+               [Category ("NotWorking")]
+               public void ImportRowDeletedTest ()
+               {
+                       DataTable table = new DataTable ();
+                       table.Columns.Add ("col", typeof (int));
+                       table.Columns.Add ("col1", typeof (int));
+
+                       DataRow row = table.Rows.Add (new object[] {1,2});
+                       table.PrimaryKey = new DataColumn[] {table.Columns[0]};
+                       table.AcceptChanges ();
+
+                       // If row is in Deleted state, then ImportRow loads the
+                       // row.
+                       row.Delete ();
+                       table.ImportRow (row);
+                       AssertEquals ("#1", 2, table.Rows.Count);
+
+                       // Both the deleted rows shud be now gone
+                       table.AcceptChanges ();
+                       AssertEquals ("#2", 0, table.Rows.Count);
+
+                       //just add another row
+                       row = table.Rows.Add (new object[] {1,2});
+                       // no exception shud be thrown
+                       table.AcceptChanges ();
+
+                       // If row is in Deleted state, then ImportRow loads the
+                       // row and validate only on RejectChanges
+                       row.Delete ();
+                       table.ImportRow (row);
+                       AssertEquals ("#3", 2, table.Rows.Count);
+                       AssertEquals ("#4", DataRowState.Deleted, table.Rows[1].RowState);
+
+                       //FIXME : Currenty this fails.
+                       try {
+                               table.RejectChanges ();
+                               Fail ("#5");
+                       } catch (ConstraintException e) {
+                       }
+               }
+
+               [Test]
+               public void ClearReset () //To test Clear and Reset methods
+               {
+                       DataTable table = new DataTable ("table");
+                       DataTable table1 = new DataTable ("table1");
+                
+                       DataSet set = new DataSet ();
+                       set.Tables.Add (table);
+                       set.Tables.Add (table1);
+
+                        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 ();
+                       row ["Id"] = 147;
+                       row ["name"] = "Roopa";
+                       table.Rows.Add (row);
+                
+                       row = table.NewRow ();
+                       row ["Id"] = 47;
+                       row ["Name"] = "roopa";
+                       table.Rows.Add (row);
+                
+                       AssertEquals (2, table.Rows.Count);
+                       AssertEquals (1, table.ChildRelations.Count);
+                       try {
+                               table.Reset ();
+                               Fail ("#A01, should have thrown ArgumentException");
+                       }
+                        catch (ArgumentException) {
+                       }
+                       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
+                       AssertEquals ("#A09", 0, table.Constraints.Count);
+#else
+                       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 ()
+               {
+                       MemoryStream fs = new MemoryStream ();
+                       
+                       // Construct a BinaryFormatter and use it 
+                       // to serialize the data to the stream.
+                       BinaryFormatter formatter = new BinaryFormatter();
+               
+                       // Create an array with multiple elements refering to 
+                       // the one Singleton object.
+                       DataTable dt = new DataTable();
+               
+               
+                       dt.Columns.Add(new DataColumn("Id", typeof(string)));
+                       dt.Columns.Add(new DataColumn("ContactName", typeof(string)));
+                       dt.Columns.Add(new DataColumn("ContactTitle", typeof(string)));
+                       dt.Columns.Add(new DataColumn("ContactAreaCode", typeof(string)));
+                       dt.Columns.Add(new DataColumn("ContactPhone", typeof(string)));
+               
+                       DataRow loRowToAdd;
+                       loRowToAdd = dt.NewRow();
+                       loRowToAdd[0] = "a";
+                       loRowToAdd[1] = "b";
+                       loRowToAdd[2] = "c";
+                       loRowToAdd[3] = "d";
+                       loRowToAdd[4] = "e";
+                                               
+                       dt.Rows.Add(loRowToAdd);
+               
+                       DataTable[] dtarr = new DataTable[] {dt}; 
+               
+                       // Serialize the array elements.
+                       formatter.Serialize(fs, dtarr);
+               
+                       // Deserialize the array elements.
+                       fs.Position = 0;
+                       DataTable[] a2 = (DataTable[]) formatter.Deserialize(fs);
+               
+                       DataSet ds = new DataSet();
+                       ds.Tables.Add(a2[0]);
+               
+                       StringWriter sw = new StringWriter ();
+                       ds.WriteXml(sw);
+                       XmlDocument doc = new XmlDocument ();
+                       doc.LoadXml (sw.ToString ());
+                       AssertEquals (5, doc.DocumentElement.FirstChild.ChildNodes.Count);
+               }
+
+               [Test]
+               [ExpectedException (typeof (DataException))]
+               public void SetPrimaryKeyAssertsNonNull ()
+               {
+                       DataTable dt = new DataTable ("table");
+                       dt.Columns.Add ("col1");
+                       dt.Columns.Add ("col2");
+                       dt.Constraints.Add (new UniqueConstraint (dt.Columns [0]));
+                       dt.Rows.Add (new object [] {1, 3});
+                       dt.Rows.Add (new object [] {DBNull.Value, 3});
+
+                       dt.PrimaryKey = new DataColumn [] {dt.Columns [0]};
                }
 
+               [Test]
+               [ExpectedException (typeof (NoNullAllowedException))]
+               public void PrimaryKeyColumnChecksNonNull ()
+               {
+                       DataTable dt = new DataTable ("table");
+                       dt.Columns.Add ("col1");
+                       dt.Columns.Add ("col2");
+                       dt.Constraints.Add (new UniqueConstraint (dt.Columns [0]));
+                       dt.PrimaryKey = new DataColumn [] {dt.Columns [0]};
+                       dt.Rows.Add (new object [] {1, 3});
+                       dt.Rows.Add (new object [] {DBNull.Value, 3});
+               }
+
+               [Test]
+               public void PrimaryKey_CheckSetsAllowDBNull ()
+               {
+                       DataTable table = new DataTable ();
+                       DataColumn col1 = table.Columns.Add ("col1", typeof (int));
+                       DataColumn col2 = table.Columns.Add ("col2", typeof (int));
+       
+                       AssertEquals ("#1" , true, col1.AllowDBNull);
+                       AssertEquals ("#2" , true, col2.AllowDBNull);
+                       AssertEquals ("#3" , false, col2.Unique);
+                       AssertEquals ("#4" , false, col2.Unique);
+
+                       table.PrimaryKey = new DataColumn[] {col1,col2};
+                       AssertEquals ("#5" , false, col1.AllowDBNull);
+                       AssertEquals ("#6" , false, col2.AllowDBNull);
+                       // LAMESPEC or bug ?? 
+                       AssertEquals ("#7" , false, col1.Unique);
+                       AssertEquals ("#8" , false, col2.Unique);
+               }
+
+               void RowChanging (object o, DataRowChangeEventArgs e)
+               {
+                       AssertEquals ("changing.Action", rowChangingExpectedAction, e.Action);
+                       rowChangingRowChanging = true;
+               }
+
+               void RowChanged (object o, DataRowChangeEventArgs e)
+               {
+                       AssertEquals ("changed.Action", rowChangingExpectedAction, e.Action);
+                       rowChangingRowChanged = true;
+               }
+
+               bool rowChangingRowChanging, rowChangingRowChanged;
+               DataRowAction rowChangingExpectedAction;
+
+               [Test]
+               public void RowChanging ()
+               {
+                       DataTable dt = new DataTable ("table");
+                       dt.Columns.Add ("col1");
+                       dt.Columns.Add ("col2");
+                       dt.RowChanging += new DataRowChangeEventHandler (RowChanging);
+                       dt.RowChanged += new DataRowChangeEventHandler (RowChanged);
+                       rowChangingExpectedAction = DataRowAction.Add;
+                       dt.Rows.Add (new object [] {1, 2});
+                       Assert ("changing,Added", rowChangingRowChanging);
+                       Assert ("changed,Added", rowChangingRowChanged);
+                       rowChangingExpectedAction = DataRowAction.Change;
+                       dt.Rows [0] [0] = 2;
+                       Assert ("changing,Changed", rowChangingRowChanging);
+                       Assert ("changed,Changed", rowChangingRowChanged);
+               }
+
+                [Test]
+                public void CloneSubClassTest()
+                {
+                        MyDataTable dt1 = new MyDataTable();
+                        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);
+
+                        }
+                }
+
+                               [Test]
+                               public void ColumnObjectTypeTest() {
+                                       DataTable dt = new DataTable();\r
+                                       dt.Columns.Add("Series Label", typeof(SqlInt32));\r
+                                       dt.Rows.Add(new object[] {"sss"});
+                                       AssertEquals(1, dt.Rows.Count);
+                               }
+
+                public void OnRowChanging (object src, DataRowChangeEventArgs args)
+                {
+                        rowActionChanging = args.Action;
+                }
+                
+                public void OnRowChanged (object src, DataRowChangeEventArgs args)
+                {
+                        rowActionChanged = args.Action;
+                }
+                
+                                                                                                    
+        }
+                                                                                                    
+                                                                                                    
+         public  class MyDataTable:DataTable {
+                                                                                                    
+             public static int count = 0;
+                                                                                                    
+             public MyDataTable() {
+                                                                                                    
+                    count++;
+             }
+                                                                                                    
+         }
+
+       [Serializable]
+       [TestFixture]
+       public class AppDomainsAndFormatInfo
+       {
+               public void Remote ()
+               {
+                       int n = (int) Convert.ChangeType ("5", typeof (int));
+                       Assertion.AssertEquals ("n", 5, n);
+               }
+#if !TARGET_JVM
+               [Test]
+               public void NFIFromBug55978 ()
+               {
+                       AppDomain domain = AppDomain.CreateDomain ("testdomain");
+                       AppDomainsAndFormatInfo test = new AppDomainsAndFormatInfo ();
+                       test.Remote ();
+                       domain.DoCallBack (new CrossAppDomainDelegate (test.Remote));
+                       AppDomain.Unload (domain);
+               }
+#endif
+
+               [Test]
+               public void Bug55978 ()
+               {
+                       DataTable dt = new DataTable ();
+                       dt.Columns.Add ("StartDate", typeof (DateTime));
+        
+                       DataRow dr;
+                       DateTime date = DateTime.Now;
+        
+                       for (int i = 0; i < 10; i++) {
+                               dr = dt.NewRow ();
+                               dr ["StartDate"] = date.AddDays (i);
+                               dt.Rows.Add (dr);
+                       }
+        
+                       DataView dv = dt.DefaultView;
+                       dv.RowFilter = "StartDate >= '" + DateTime.Now.AddDays (2) + "' and StartDate <= '" + DateTime.Now.AddDays (4) + "'";
+                       Assertion.AssertEquals ("Table", 10, dt.Rows.Count);
+                       Assertion.AssertEquals ("View", 2, dv.Count);
+               }
        }
 }