DiffLoader didn't handle encoded name and caused mismatch between .NET.
authorAtsushi Eno <atsushi@ximian.com>
Thu, 1 Sep 2011 00:49:36 +0000 (17:49 -0700)
committerAtsushi Eno <atsushi@ximian.com>
Thu, 1 Sep 2011 00:49:36 +0000 (17:49 -0700)
mcs/class/System.Data/System.Data/XmlDiffLoader.cs
mcs/class/System.Data/Test/System.Data/DataSetTest.cs

index 00c19bec659dcc90e224bad11577bb492661adde..7f91d8a89396e0aef49b13250899d919ad005beb 100644 (file)
@@ -351,6 +351,7 @@ namespace System.Data {
 
                DataTable GetTable (string name)
                {
+                       name = XmlConvert.DecodeName (name);
                        if (DSet != null) 
                                return DSet.Tables [name];
                        else if (name == table.TableName) 
index 3ea16fd7b3785ae92e8dc0ba68dfc38bf6719922..1d96305e35b704d5770b0b687941b126c6fe4ff9 100644 (file)
@@ -2571,6 +2571,30 @@ namespace MonoTests.System.Data
                        Assert.AreEqual (2, dsLoad.Tables[2].Columns.Count, "T3-Columns");
                }
 
+               [Test]
+               public void ReadDiff ()
+               {
+                       DataSet dsTest = new DataSet ("MonoTouchTest");
+                       var dt = new DataTable ("123");
+                       dt.Columns.Add (new DataColumn ("Value1"));
+                       dt.Columns.Add (new DataColumn ("Value2"));
+                       dsTest.Tables.Add (dt);
+                       dsTest.ReadXml (new StringReader (@"
+<diffgr:diffgram
+   xmlns:msdata='urn:schemas-microsoft-com:xml-msdata'
+   xmlns:diffgr='urn:schemas-microsoft-com:xml-diffgram-v1'>
+  <MonoTouchTest>
+    <_x0031_23 diffgr:id='1231' msdata:rowOrder='0'>
+      <Value1>Row1Value1</Value1>
+      <Value2>Row1Value2</Value2>
+    </_x0031_23>
+  </MonoTouchTest>
+</diffgr:diffgram>
+"));
+                       Assert.AreEqual ("123", dsTest.Tables [0].TableName, "#1");
+                       Assert.AreEqual (1, dsTest.Tables [0].Rows.Count, "#2");
+               }
+
                private void CompareTables (DataSet dsLoad) {
                        Assert.AreEqual (ds.Tables.Count, dsLoad.Tables.Count, "NumTables");
                        for (int tc = 0; tc < dsLoad.Tables.Count; tc++) {