Resolve "you are registering twice the same counter address" warning on Windows Relea...
[mono.git] / mcs / class / System.Data / Test / System.Xml / XmlDataDocumentTest.cs
1 //
2 // XmlDataDocumentTestTest.cs - NUnit Test Cases for  XmlDataDocument
3 //
4 // Authors:
5 //   Ville Palo (vi64pa@koti.soon.fi)
6 //   Martin Willemoes Hansen (mwh@sysrq.dk)
7 //
8 // (C) 2002 Ville Palo
9 // (C) 2003 Martin Willemoes Hansen
10 // 
11
12 //
13 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
14 //
15 // Permission is hereby granted, free of charge, to any person obtaining
16 // a copy of this software and associated documentation files (the
17 // "Software"), to deal in the Software without restriction, including
18 // without limitation the rights to use, copy, modify, merge, publish,
19 // distribute, sublicense, and/or sell copies of the Software, and to
20 // permit persons to whom the Software is furnished to do so, subject to
21 // the following conditions:
22 // 
23 // The above copyright notice and this permission notice shall be
24 // included in all copies or substantial portions of the Software.
25 // 
26 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
30 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
31 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
32 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 //
34
35 using System;
36 using System.Data;
37 using System.Globalization;
38 using System.IO;
39 using System.Threading;
40 using System.Xml;
41 using System.Xml.XPath;
42
43 using NUnit.Framework;
44
45 namespace MonoTests.System.Data.Xml
46 {
47         [TestFixture]
48         public class XmlDataDocumentTest : DataSetAssertion {
49
50                 static string EOL = "\n";
51
52                 private CultureInfo originalCulture;
53
54                 [SetUp]
55                 public void SetUp ()
56                 {
57                         originalCulture = Thread.CurrentThread.CurrentCulture;
58                         Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
59                 }
60
61                 [TearDown]
62                 public void TearDown ()
63                 {
64                         Thread.CurrentThread.CurrentCulture = originalCulture;
65                 }
66
67                 [Test]
68                 public void NewInstance ()
69                 {
70                         XmlDataDocument doc = new XmlDataDocument ();
71                         AssertDataSet ("#1", doc.DataSet, "NewDataSet", 0, 0);
72                         Assert.IsFalse (doc.DataSet.EnforceConstraints);
73                         XmlElement el = doc.CreateElement ("TEST");
74                         AssertDataSet ("#2", doc.DataSet, "NewDataSet", 0, 0);
75                         Assert.IsNull (doc.GetRowFromElement (el));
76                         doc.AppendChild (el);
77                         AssertDataSet ("#3", doc.DataSet, "NewDataSet", 0, 0);
78
79                         DataSet ds = new DataSet ();
80                         doc = new XmlDataDocument (ds);
81                         Assert.IsTrue (doc.DataSet.EnforceConstraints);
82                 }
83
84                 [Test]
85                 public void SimpleLoad ()
86                 {
87                         string xml001 = "<root/>";
88                         XmlDataDocument doc = new XmlDataDocument ();
89                         DataSet ds = new DataSet ();
90                         ds.InferXmlSchema (new StringReader (xml001), null);
91                         doc.LoadXml (xml001);
92
93                         string xml002 = "<root><child/></root>";
94                         doc = new XmlDataDocument ();
95                         ds = new DataSet ();
96                         ds.InferXmlSchema (new StringReader (xml002), null);
97                         doc.LoadXml (xml002);
98
99                         string xml003 = "<root><col1>test</col1><col1></col1></root>";
100                         doc = new XmlDataDocument ();
101                         ds = new DataSet ();
102                         ds.InferXmlSchema (new StringReader (xml003), null);
103                         doc.LoadXml (xml003);
104
105                         string xml004 = "<set><tab1><col1>test</col1><col1>test2</col1></tab1><tab2><col2>test3</col2><col2>test4</col2></tab2></set>";
106                         doc = new XmlDataDocument ();
107                         ds = new DataSet ();
108                         ds.InferXmlSchema (new StringReader (xml004), null);
109                         doc.LoadXml (xml004);
110                 }
111
112                 [Test]
113                 public void CloneNode ()
114                 {
115                         XmlDataDocument doc = new XmlDataDocument ();
116                         
117                         doc.DataSet.ReadXmlSchema ("Test/System.Xml/region.xsd");
118                         doc.Load ("Test/System.Xml/region.xml");
119                 
120                         XmlDataDocument doc2 = (XmlDataDocument)doc.CloneNode (false);
121                         
122                         Assert.AreEqual (0, doc2.ChildNodes.Count, "#I01");
123                         Assert.AreEqual ("<?xml version=\"1.0\" encoding=\"utf-16\"?>", doc2.DataSet.GetXmlSchema ().Substring (0, 39), "#I02");
124                         
125                         doc2 = (XmlDataDocument)doc.CloneNode (true);
126                         
127                         Assert.AreEqual (2, doc2.ChildNodes.Count, "#I03");
128                         Assert.AreEqual ("<?xml version=\"1.0\" encoding=\"utf-16\"?>", doc2.DataSet.GetXmlSchema ().Substring (0, 39), "#I04");
129                         
130                         doc.DataSet.Tables [0].Rows [0][0] = "64";
131               
132                         Assert.AreEqual ("1", doc2.DataSet.Tables [0].Rows [0][0].ToString (), "#I05");
133                 }
134
135                 [Test]
136                 public void EditingXmlTree ()
137                 {       
138                         XmlDataDocument doc = new XmlDataDocument ();
139                         doc.DataSet.ReadXmlSchema ("Test/System.Xml/region.xsd");
140                         doc.Load ("Test/System.Xml/region.xml");
141
142                         XmlElement Element = doc.GetElementFromRow (doc.DataSet.Tables [0].Rows [1]);
143                         Element.FirstChild.InnerText = "64";
144                         Assert.AreEqual ("64", doc.DataSet.Tables [0].Rows [1] [0], "test#01");
145                         
146                         DataSet Set = new DataSet ();
147                         Set.ReadXml ("Test/System.Xml/region.xml");
148                         doc = new XmlDataDocument (Set);
149                         
150                         Element = doc.GetElementFromRow (doc.DataSet.Tables [0].Rows [1]);
151                         Assert.IsNotNull (Element);
152                         
153                         try {
154                                 Element.FirstChild.InnerText = "64";
155                                 Assert.Fail ("test#02");
156                         } catch (InvalidOperationException) {
157                         }
158                         
159                         Assert.AreEqual ("2", doc.DataSet.Tables [0].Rows [1] [0], "test#05");
160                         
161                         Set.EnforceConstraints = false;
162                         Element.FirstChild.InnerText = "64";
163                         Assert.AreEqual ("64", doc.DataSet.Tables [0].Rows [1] [0], "test#06");
164                 }
165                 
166                 [Test]
167                 public void EditingDataSet ()
168                 {
169                         string xml = "<Root><Region><RegionID>1</RegionID><RegionDescription>Eastern" + Environment.NewLine + "   </RegionDescription></Region><Region><RegionID>2</RegionID><RegionDescription>Western" + Environment.NewLine + "   </RegionDescription></Region><Region><RegionID>3</RegionID><RegionDescription>Northern" + Environment.NewLine + "   </RegionDescription></Region><Region><RegionID>4</RegionID><RegionDescription>Southern" + Environment.NewLine + "   </RegionDescription></Region><MoreData><Column1>12</Column1><Column2>Hi There</Column2></MoreData><MoreData><Column1>12</Column1><Column2>Hi There</Column2></MoreData></Root>";
170
171                         XmlReader Reader = new XmlTextReader ("Test/System.Xml/region.xml");
172                         XmlDataDocument Doc = new XmlDataDocument ();
173                         Doc.DataSet.ReadXml (Reader);
174                         StringWriter sw = new StringWriter ();
175                         XmlTextWriter xw = new XmlTextWriter (sw);
176                         Doc.DataSet.WriteXml (xw);
177                         string s = sw.ToString ();
178                         Assert.AreEqual (xml, s, "#1");
179                         Assert.AreEqual (xml, Doc.InnerXml, "#2");
180                         Assert.AreEqual ("EndOfFile", Reader.ReadState.ToString (), "test#01");
181
182                         DataSet Set = Doc.DataSet;
183                         Assert.AreEqual ("2", Set.Tables [0].Rows [1] [0], "test#01.5");
184                         Set.Tables [0].Rows [1] [0] = "64";
185                         Assert.AreEqual ("64", Doc.FirstChild.FirstChild.NextSibling.FirstChild.InnerText, "test#02");
186                 }
187                 
188                 [Test]
189                 public void CreateElement1 ()
190                 {
191                         XmlDataDocument doc = new XmlDataDocument ();
192                         doc.DataSet.ReadXmlSchema ("Test/System.Xml/region.xsd");
193                         doc.Load ("Test/System.Xml/region.xml");
194                         
195                         XmlElement Element = doc.CreateElement ("prefix", "localname", "namespaceURI");
196                         Assert.AreEqual ("prefix", Element.Prefix, "test#01");
197                         Assert.AreEqual ("localname", Element.LocalName, "test#02");
198                         Assert.AreEqual ("namespaceURI", Element.NamespaceURI, "test#03");
199                         doc.ImportNode (Element, false);
200                         
201                         TextWriter text = new StringWriter ();
202                         doc.Save(text);
203
204                         string substring = string.Empty;
205                         string TextString = text.ToString ();
206
207                         substring = TextString.Substring (0, TextString.IndexOf("\n"));
208                         TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
209
210                         substring = TextString.Substring (0, TextString.IndexOf("\n"));
211                         TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
212                         Assert.IsTrue (substring.IndexOf ("<Root>") != -1, "test#05");
213
214                         substring = TextString.Substring (0, TextString.IndexOf("\n"));
215                         TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
216                         Assert.IsTrue (substring.IndexOf ("  <Region>") != -1, "test#06");
217
218                         substring = TextString.Substring (0, TextString.IndexOf("\n"));
219                         TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
220                         Assert.IsTrue (substring.IndexOf ("    <RegionID>1</RegionID>") != -1, "test#07");
221
222                         for (int i = 0; i < 26; i++) {
223                                 substring = TextString.Substring (0, TextString.IndexOf("\n"));
224                                 TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
225                         }
226
227                         substring = TextString.Substring (0, TextString.Length);
228                         Assert.IsTrue (substring.IndexOf ("</Root>") != -1, "test#08");
229                 }
230
231                 [Test]
232                 public void CreateElement2 ()
233                 {
234                         XmlDataDocument doc = new XmlDataDocument ();
235                         doc.DataSet.ReadXmlSchema ("Test/System.Xml/region.xsd");
236                         doc.Load ("Test/System.Xml/region.xml");
237
238                         XmlElement Element = doc.CreateElement ("ElementName");
239                         Assert.AreEqual (string.Empty, Element.Prefix, "test#01");
240                         Assert.AreEqual ("ElementName", Element.LocalName, "test#02");
241                         Assert.AreEqual (string.Empty, Element.NamespaceURI, "test#03");
242
243                         Element = doc.CreateElement ("prefix:ElementName");
244                         Assert.AreEqual ("prefix", Element.Prefix, "test#04");
245                         Assert.AreEqual ("ElementName", Element.LocalName, "test#05");
246                         Assert.AreEqual (string.Empty, Element.NamespaceURI, "test#06");
247                 }
248
249                 [Test]
250                 public void CreateElement3 ()
251                 {
252                         XmlDataDocument doc = new XmlDataDocument ();
253                         doc.DataSet.ReadXmlSchema ("Test/System.Xml/region.xsd");
254                         doc.Load ("Test/System.Xml/region.xml");
255                         
256                         XmlElement Element = doc.CreateElement ("ElementName", "namespace");
257                         Assert.AreEqual (string.Empty, Element.Prefix, "test#01");
258                         Assert.AreEqual ("ElementName", Element.LocalName, "test#02");
259                         Assert.AreEqual ("namespace", Element.NamespaceURI, "test#03");
260                         
261                         Element = doc.CreateElement ("prefix:ElementName", "namespace");
262                         Assert.AreEqual ("prefix", Element.Prefix, "test#04");
263                         Assert.AreEqual ("ElementName", Element.LocalName, "test#05");
264                         Assert.AreEqual ("namespace", Element.NamespaceURI, "test#06");
265                 }
266
267                 [Test]
268                 public void Navigator ()
269                 {
270                         XmlDataDocument doc = new XmlDataDocument ();
271                         doc.DataSet.ReadXmlSchema ("Test/System.Xml/region.xsd");
272                         doc.Load ("Test/System.Xml/region.xml");
273
274                         XPathNavigator Nav = doc.CreateNavigator ();
275                         
276                         Nav.MoveToRoot ();
277                         Nav.MoveToFirstChild ();
278
279                         Assert.AreEqual ("Root", Nav.Name.ToString (), "test#01");
280                         Assert.AreEqual (string.Empty, Nav.NamespaceURI.ToString (), "test#02");
281                         Assert.AreEqual ("False", Nav.IsEmptyElement.ToString (), "test#03");
282                         Assert.AreEqual ("Element", Nav.NodeType.ToString (), "test#04");
283                         Assert.AreEqual (string.Empty, Nav.Prefix, "test#05");
284                         
285                         Nav.MoveToFirstChild ();
286                         Nav.MoveToNext ();
287                         Assert.AreEqual ("Region", Nav.Name.ToString (), "test#06");
288                         
289                         Assert.AreEqual ("2Western", Nav.Value.Substring(0, Nav.Value.IndexOf (EOL)), "test#07");
290                         Nav.MoveToFirstChild ();
291                         Assert.AreEqual ("2", Nav.Value, "test#08");
292                         Nav.MoveToRoot ();
293                         Assert.AreEqual ("Root", Nav.NodeType.ToString (), "test#09");
294                 }
295
296                 // Test constructor
297                 [Test]
298                 public void Test1()
299                 {
300                         //Create an XmlDataDocument.
301                         XmlDataDocument doc = new XmlDataDocument();
302
303                         //Load the schema file.
304                         doc.DataSet.ReadXmlSchema("Test/System.Xml/store.xsd"); 
305                         //Load the XML data.
306                         doc.Load("Test/System.Xml/2books.xml");
307                         
308                         //Update the price on the first book using the DataSet methods.
309                         DataTable books = doc.DataSet.Tables["book"];
310                         books.Rows[0]["price"] = "12.95";
311                         
312                         //string outstring = "";
313                         TextWriter text = new StringWriter ();
314                         text.NewLine = "\n";
315                         doc.Save(text);
316
317                         //str.Read (bytes, 0, (int)str.Length);
318                         //String OutString = new String (bytes);
319
320                         string TextString = text.ToString ();
321                         string substring = TextString.Substring (0, TextString.IndexOf(EOL));
322                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
323                         Assert.IsTrue (substring.IndexOf ("<?xml version=\"1.0\" encoding=\"utf-16\"?>") == 0, "#A01");
324
325                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
326                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
327                         Assert.IsTrue (substring.IndexOf ("<!--sample XML fragment-->") != -1, "#A02");
328
329                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
330                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
331                         Assert.IsTrue (substring.IndexOf ("<bookstore>") != -1, "#A03");
332                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
333                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
334                         Assert.IsTrue (substring.IndexOf ("  <book genre=\"novel\" ISBN=\"10-861003-324\">") != -1, "#A04");
335
336                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
337                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
338                         Assert.IsTrue (substring.IndexOf ("    <title>The Handmaid's Tale</title>") != -1, "#A05");
339
340                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
341                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
342                         Assert.AreEqual ("    <price>12.95</price>", substring, "#A06");
343
344                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
345                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
346                         Assert.IsTrue (substring.IndexOf ("  </book>") != -1, "#A07");
347
348                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
349                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
350                         Assert.IsTrue (substring.IndexOf ("  <book genre=\"novel\" ISBN=\"1-861001-57-5\">") != -1, "#A08");
351
352                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
353                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
354                         Assert.IsTrue (substring.IndexOf ("    <title>Pride And Prejudice</title>") != -1, "#A09");
355
356                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
357                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
358                         Assert.IsTrue (substring.IndexOf ("    <price>24.95</price>") != -1, "#A10");
359
360                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
361                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
362                         Assert.IsTrue (substring.IndexOf ("  </book>") != -1, "#A11");
363
364                         substring = TextString;
365                         Assert.IsTrue (substring.IndexOf ("</bookstore>") != -1, "#A12");
366                 }
367
368                 // Test public fields
369                 [Test]
370                 public void Test2()
371                 {
372                         DataSet RegionDS = new DataSet ();
373                         DataRow RegionRow;
374                         RegionDS.ReadXmlSchema ("Test/System.Xml/region.xsd");
375                         Assert.AreEqual (1, RegionDS.Tables.Count, "Was read correct?");
376                         XmlDataDocument DataDoc = new XmlDataDocument (RegionDS);
377                         DataDoc.Load("Test/System.Xml/region.xml" );
378
379                         RegionRow = RegionDS.Tables[0].Rows[0];
380
381                         RegionDS.AcceptChanges ();
382                         RegionRow["RegionDescription"] = "Reeeeeaalllly Far East!";
383                         RegionDS.AcceptChanges ();
384
385                         TextWriter text = new StringWriter ();
386                         text.NewLine = "\n";
387                         DataDoc.Save (text);
388                         string TextString = text.ToString ();
389                         string substring = TextString.Substring (0, TextString.IndexOf(EOL));
390                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
391
392                         //Assert.AreEqual ("<?xml version=\"1.0\" encoding=\"utf-16\" standalone=\"yes\"?>", substring, "#B01");
393
394                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
395                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
396                         Assert.AreEqual ("<Root>", substring, "#B02");
397
398                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
399                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
400                         Assert.IsTrue (substring.IndexOf ("  <Region>") != -1, "#B03");
401
402                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
403                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
404                         Assert.IsTrue (substring.IndexOf ("    <RegionID>1</RegionID>") != -1, "#B04");
405
406                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
407                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
408                         Assert.AreEqual ("    <RegionDescription>Reeeeeaalllly Far East!</RegionDescription>", substring, "#B05");
409
410                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
411                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
412                         Assert.IsTrue (substring.IndexOf ("  </Region>") != -1, "#B06");
413
414                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
415                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
416                         Assert.IsTrue (substring.IndexOf ("  <Region>") != -1, "#B07");
417
418                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
419                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
420                         Assert.IsTrue (substring.IndexOf ("    <RegionID>2</RegionID>") != -1, "#B08");
421
422                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
423                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
424                         Assert.IsTrue (substring.IndexOf ("    <RegionDescription>Western") != -1, "#B09");
425
426                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
427                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
428                         Assert.IsTrue (substring.IndexOf ("   </RegionDescription>") != -1, "#B10");
429
430                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
431                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
432                         Assert.IsTrue (substring.IndexOf ("  </Region>") != -1, "#B11");
433
434                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
435                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
436                         Assert.IsTrue (substring.IndexOf ("  <Region>") != -1, "#B12");
437
438                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
439                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
440                         Assert.IsTrue (substring.IndexOf ("    <RegionID>3</RegionID>") != -1, "#B13");
441
442                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
443                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
444                         Assert.IsTrue (substring.IndexOf ("    <RegionDescription>Northern") != -1, "#B14");
445
446                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
447                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
448                         Assert.IsTrue (substring.IndexOf ("   </RegionDescription>") != -1, "#B15");
449
450                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
451                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
452                         Assert.IsTrue (substring.IndexOf ("  </Region>") != -1, "#B16");
453
454                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
455                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
456                         Assert.IsTrue (substring.IndexOf ("  <Region>") != -1, "#B17");
457
458                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
459                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
460                         Assert.IsTrue (substring.IndexOf ("    <RegionID>4</RegionID>") != -1, "#B18");
461
462                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
463                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
464                         Assert.IsTrue (substring.IndexOf ("    <RegionDescription>Southern") != -1, "#B19");
465
466                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
467                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
468                         Assert.IsTrue (substring.IndexOf ("   </RegionDescription>") != -1, "#B20");
469
470                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
471                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
472                         Assert.IsTrue (substring.IndexOf ("  </Region>") != -1, "#B21");
473
474                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
475                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
476                         Assert.IsTrue (substring.IndexOf ("  <MoreData>") != -1, "#B22");
477
478                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
479                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
480                         Assert.IsTrue (substring.IndexOf ("    <Column1>12</Column1>") != -1, "#B23");
481
482                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
483                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
484                         Assert.IsTrue (substring.IndexOf ("    <Column2>Hi There</Column2>") != -1, "#B24");
485
486                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
487                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
488                         Assert.IsTrue (substring.IndexOf ("  </MoreData>") != -1, "#B25");
489
490                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
491                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
492                         Assert.IsTrue (substring.IndexOf ("  <MoreData>") != -1, "#B26");
493
494                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
495                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
496                         Assert.IsTrue (substring.IndexOf ("    <Column1>12</Column1>") != -1, "#B27");
497
498                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
499                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
500                         Assert.IsTrue (substring.IndexOf ("    <Column2>Hi There</Column2>") != -1, "#B28");
501
502                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
503                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
504                         Assert.IsTrue (substring.IndexOf ("  </MoreData>") != -1, "#B29");
505                 }
506
507                 [Test]
508                 public void Test3()
509                 {
510                         XmlDataDocument DataDoc = new XmlDataDocument ();
511                         DataSet dataset = DataDoc.DataSet;
512                         dataset.ReadXmlSchema ("Test/System.Xml/region.xsd");
513                         DataDoc.Load("Test/System.Xml/region.xml" );
514
515                         DataDoc.GetElementsByTagName ("Region") [0].RemoveAll ();
516
517                         TextWriter text = new StringWriter ();
518                         text.NewLine = "\n";
519                         dataset.WriteXml (text);
520                         //DataDoc.Save (text);
521                         string TextString = text.ToString ();
522                         string substring = TextString.Substring (0, TextString.IndexOf(EOL));
523                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
524
525                         Assert.IsTrue (substring.IndexOf ("<Root>") != -1, "#C01");
526
527                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
528                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
529                         Assert.AreEqual ("  <Region />", substring, "#C02");
530
531                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
532                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
533                         Assert.AreEqual ("  <Region>", substring, "#C03");
534
535                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
536                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
537                         Assert.AreEqual ("    <RegionID>2</RegionID>", substring, "#C04");
538
539                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
540                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
541                         // Regardless of NewLine value, original xml contains CR
542                         // (but in the context of XML spec, it should be normalized)
543                         Assert.AreEqual ("    <RegionDescription>Western", substring, "#C05");
544
545                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
546                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
547                         Assert.IsTrue (substring.IndexOf ("   </RegionDescription>") != -1, "#C06");
548
549                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
550                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
551                         Assert.AreEqual ("  </Region>", substring, "#C07");
552
553                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
554                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
555                         Assert.IsTrue (substring.IndexOf ("  <Region>") != -1, "#C08");
556
557                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
558                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
559                         Assert.IsTrue (substring.IndexOf ("    <RegionID>3</RegionID>") != -1, "#C09");
560
561                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
562                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
563                         // Regardless of NewLine value, original xml contains CR
564                         // (but in the context of XML spec, it should be normalized)
565                         Assert.AreEqual ("    <RegionDescription>Northern", substring, "#C10");
566
567                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
568                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
569                         Assert.IsTrue (substring.IndexOf ("   </RegionDescription>") != -1, "#C11");
570
571                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
572                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
573                         Assert.IsTrue (substring.IndexOf ("  </Region>") != -1, "#C12");
574
575                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
576                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
577                         Assert.IsTrue (substring.IndexOf ("  <Region>") != -1, "#C13");
578
579                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
580                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
581                         Assert.IsTrue (substring.IndexOf ("    <RegionID>4</RegionID>") != -1, "#C14");
582
583                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
584                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
585                         Assert.IsTrue (substring.IndexOf ("    <RegionDescription>Southern") != -1, "#C15");
586
587                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
588                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
589                         Assert.IsTrue (substring.IndexOf ("   </RegionDescription>") != -1, "#C16");
590
591                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
592                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
593                         Assert.IsTrue (substring.IndexOf ("  </Region>") != -1, "#C17");
594
595                         substring = TextString.Substring (0, TextString.Length);
596                         Assert.IsTrue (substring.IndexOf ("</Root>") != -1, "#C18");
597                 }
598
599                 [Test]
600                 public void Test4 ()
601                 {
602                         DataSet RegionDS = new DataSet ();
603
604                         RegionDS.ReadXmlSchema ("Test/System.Xml/region.xsd");
605                         XmlDataDocument DataDoc = new XmlDataDocument (RegionDS);
606                         DataDoc.Load ("Test/System.Xml/region.xml");
607                         Assert.IsTrue (RegionDS.EnforceConstraints);
608                         DataTable table = DataDoc.DataSet.Tables ["Region"];
609                         DataRow newRow = table.NewRow ();
610                         newRow [0] = "new row";
611                         newRow [1] = "new description";
612
613                         table.Rows.Add (newRow);
614
615                         TextWriter text = new StringWriter ();
616                         text.NewLine = "\n";
617                         DataDoc.Save (text);
618                         string TextString = text.ToString ();
619                         string substring = TextString.Substring (0, TextString.IndexOf(EOL));
620                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
621
622                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
623                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
624                         Assert.IsTrue (substring.IndexOf ("<Root>") != -1, "#F02");
625
626                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
627                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
628                         Assert.IsTrue (substring.IndexOf ("  <Region>") != -1, "#F03");
629
630                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
631                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
632                         Assert.IsTrue (substring.IndexOf ("    <RegionID>1</RegionID>") != -1, "#F04");
633
634                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
635                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
636                         // Regardless of NewLine value, original xml contains CR
637                         // (but in the context of XML spec, it should be normalized)
638                         Assert.AreEqual ("    <RegionDescription>Eastern", substring, "#F05");
639
640                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
641                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
642                         Assert.AreEqual ("   </RegionDescription>", substring, "#F06");
643
644                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
645                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
646                         Assert.IsTrue (substring.IndexOf ("  </Region>") != -1, "#F07");
647
648                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
649                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
650                         Assert.IsTrue (substring.IndexOf ("  <Region>") != -1, "#F08");
651
652                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
653                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
654                         Assert.IsTrue (substring.IndexOf ("    <RegionID>2</RegionID>") != -1, "#F09");
655
656                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
657                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
658                         Assert.IsTrue (substring.IndexOf ("    <RegionDescription>Western") != -1, "#F10");
659
660                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
661                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
662                         Assert.IsTrue (substring.IndexOf ("   </RegionDescription>") != -1, "#F11");
663
664                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
665                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
666                         Assert.IsTrue (substring.IndexOf ("  </Region>") != -1, "#F12");
667
668                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
669                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
670                         Assert.IsTrue (substring.IndexOf ("  <Region>") != -1, "#F13");
671
672                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
673                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
674                         Assert.IsTrue (substring.IndexOf ("    <RegionID>3</RegionID>") != -1, "#F14");
675
676                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
677                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
678                         Assert.IsTrue (substring.IndexOf ("    <RegionDescription>Northern") != -1, "#F15");
679
680                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
681                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
682                         Assert.IsTrue (substring.IndexOf ("   </RegionDescription>") != -1, "#F16");
683
684                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
685                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
686                         Assert.IsTrue (substring.IndexOf ("  </Region>") != -1, "#F17");
687
688                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
689                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
690                         Assert.IsTrue (substring.IndexOf ("  <Region>") != -1, "#F18");
691
692                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
693                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
694                         Assert.IsTrue (substring.IndexOf ("    <RegionID>4</RegionID>") != -1, "#F19");
695
696                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
697                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
698                         // Regardless of NewLine value, original xml contains CR
699                         // (but in the context of XML spec, it should be normalized)
700                         Assert.AreEqual ("    <RegionDescription>Southern", substring, "#F20");
701
702                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
703                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
704                         Assert.IsTrue (substring.IndexOf ("   </RegionDescription>") != -1, "#F21");
705
706                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
707                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
708                         Assert.IsTrue (substring.IndexOf ("  </Region>") != -1, "#F22");
709
710                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
711                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
712                         Assert.IsTrue (substring.IndexOf ("  <MoreData>") != -1, "#F23");
713
714                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
715                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
716                         Assert.IsTrue (substring.IndexOf ("    <Column1>12</Column1>") != -1, "#F24");
717
718                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
719                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
720                         Assert.IsTrue (substring.IndexOf ("    <Column2>Hi There</Column2>") != -1, "#F25");
721
722                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
723                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
724                         Assert.IsTrue (substring.IndexOf ("  </MoreData>") != -1, "#F26");
725
726                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
727                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
728                         Assert.IsTrue (substring.IndexOf ("  <MoreData>") != -1, "#F27");
729
730                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
731                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
732                         Assert.IsTrue (substring.IndexOf ("    <Column1>12</Column1>") != -1, "#F28");
733
734                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
735                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
736                         Assert.IsTrue (substring.IndexOf ("    <Column2>Hi There</Column2>") != -1, "#F29");
737
738                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
739                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
740                         Assert.IsTrue (substring.IndexOf ("  </MoreData>") != -1, "#F30");
741
742                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
743                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
744                         Assert.IsTrue (substring.IndexOf ("  <Region>") != -1, "#F31");
745
746                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
747                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
748                         Assert.IsTrue (substring.IndexOf ("    <RegionID>new row</RegionID>") != -1, "#F32");
749
750                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
751                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
752                         Assert.IsTrue (substring.IndexOf ("    <RegionDescription>new description</RegionDescription>") != -1, "#F33");
753
754                         substring = TextString.Substring (0, TextString.IndexOf(EOL));
755                         TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
756                         Assert.IsTrue (substring.IndexOf ("  </Region>") != -1, "#F34");
757
758                         substring = TextString.Substring (0, TextString.Length);
759                         Assert.IsTrue (substring.IndexOf ("</Root>") != -1, "#F35");
760                 }
761
762                 [Test]
763                 public void Test5 ()
764                 {
765                         DataSet RegionDS = new DataSet ();
766
767                         RegionDS.ReadXmlSchema ("Test/System.Xml/region.xsd");
768                         XmlDataDocument DataDoc = new XmlDataDocument (RegionDS);
769                         DataDoc.Load("Test/System.Xml/region.xml" );
770                         try {
771                                 DataDoc.DocumentElement.AppendChild (DataDoc.DocumentElement.FirstChild);
772                                 Assert.Fail ("#G01");
773                         } catch (InvalidOperationException e) {
774                                 Assert.AreEqual (typeof (InvalidOperationException), e.GetType (), "#G02");
775                                 Assert.AreEqual ("Please set DataSet.EnforceConstraints == false before trying to edit " +
776                                                       "XmlDataDocument using XML operations.", e.Message, "#G03");
777                                 DataDoc.DataSet.EnforceConstraints = false;
778                         }
779                         XmlElement newNode = DataDoc.CreateElement ("Region");
780                         XmlElement newChildNode = DataDoc.CreateElement ("RegionID");
781                         newChildNode.InnerText = "64";
782                         XmlElement newChildNode2 = DataDoc.CreateElement ("RegionDescription");
783                         newChildNode2.InnerText = "test node";
784                         newNode.AppendChild (newChildNode);
785                         newNode.AppendChild (newChildNode2);
786                         DataDoc.DocumentElement.AppendChild (newNode);
787                         TextWriter text = new StringWriter ();
788                         
789                         //DataDoc.Save (text);
790                         DataDoc.DataSet.WriteXml(text);
791                         string TextString = text.ToString ();
792                         string substring = TextString.Substring (0, TextString.IndexOf("\n"));
793                         TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
794                         
795                         for (int i = 0; i < 21; i++) {
796                                 substring = TextString.Substring (0, TextString.IndexOf("\n"));
797                                 TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
798                         }
799                         Assert.IsTrue (substring.IndexOf ("  <Region>") != -1, "#G04");
800
801                         substring = TextString.Substring (0, TextString.IndexOf("\n"));
802                         TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
803                         Assert.IsTrue (substring.IndexOf ("    <RegionID>64</RegionID>") != -1, "#G05");
804
805                         substring = TextString.Substring (0, TextString.IndexOf("\n"));
806                         TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
807                         Assert.IsTrue (substring.IndexOf ("    <RegionDescription>test node</RegionDescription>") != -1, "#G06");
808
809                         substring = TextString.Substring (0, TextString.IndexOf("\n"));
810                         TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
811                         Assert.IsTrue (substring.IndexOf ("  </Region>") != -1, "#G07");
812
813                         substring = TextString.Substring (0, TextString.Length);
814                         Assert.IsTrue (substring.IndexOf ("</Root>") != -1, "#G08");
815                 }
816
817                 [Test]
818                 public void Test6 ()
819                 {
820                         DataSet RegionDS = new DataSet ();
821
822                         RegionDS.ReadXmlSchema ("Test/System.Xml/region.xsd");
823                         XmlDataDocument DataDoc = new XmlDataDocument (RegionDS);
824                         DataDoc.Load("Test/System.Xml/region.xml" );
825                         DataDoc.DataSet.EnforceConstraints = false;
826
827                         XmlElement newNode = DataDoc.CreateElement ("Region");
828                         XmlElement newChildNode = DataDoc.CreateElement ("RegionID");
829
830                         newChildNode.InnerText = "64";
831                         XmlElement newChildNode2 = null;
832                         try {
833                                 newChildNode2 = DataDoc.CreateElement ("something else");
834                                 Assert.Fail ("#H01");
835                         } catch (XmlException) {
836                         }
837                         newChildNode2 = DataDoc.CreateElement ("something_else");
838
839                         newChildNode2.InnerText = "test node";
840
841                         newNode.AppendChild (newChildNode);
842                         newNode.AppendChild (newChildNode2);
843                         DataDoc.DocumentElement.AppendChild (newNode);
844                         
845                         TextWriter text = new StringWriter ();
846                         
847                         //DataDoc.Save (text);
848                         DataDoc.DataSet.WriteXml(text);
849                         string TextString = text.ToString ();
850                         string substring = TextString.Substring (0, TextString.IndexOf("\n") - 1);
851                         TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
852                         
853                         for (int i = 0; i < 21; i++) {
854                                 substring = TextString.Substring (0, TextString.IndexOf("\n"));
855                                 TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
856                         }
857
858                         Assert.IsTrue (substring.IndexOf ("  <Region>") != -1, "#H03");
859
860                         substring = TextString.Substring (0, TextString.IndexOf("\n"));
861                         TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
862                         Assert.IsTrue (substring.IndexOf ("    <RegionID>64</RegionID>") != -1, "#H04");
863
864                         substring = TextString.Substring (0, TextString.IndexOf("\n") );
865                         TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
866                         Assert.IsTrue (substring.IndexOf ("  </Region>") != -1, "#H05");
867
868                         substring = TextString.Substring (0, TextString.Length);
869                         Assert.IsTrue (substring.IndexOf ("</Root>") != -1, "#H06");
870                 }
871
872                 [Test]
873                 public void GetElementFromRow ()
874                 {
875                         XmlDataDocument doc = new XmlDataDocument ();
876                         doc.DataSet.ReadXmlSchema ("Test/System.Xml/region.xsd");
877                         doc.Load ("Test/System.Xml/region.xml");
878                         DataTable table = doc.DataSet.Tables ["Region"];
879
880                         XmlElement element = doc.GetElementFromRow (table.Rows [2]);
881                         Assert.AreEqual ("Region", element.Name, "#D01");
882                         Assert.AreEqual ("3", element ["RegionID"].InnerText, "#D02");
883
884                         try {
885                                 element = doc.GetElementFromRow (table.Rows [4]);
886                                 Assert.Fail ("#D03");
887                         } catch (IndexOutOfRangeException e) {
888                                 Assert.AreEqual (typeof (IndexOutOfRangeException), e.GetType (), "#D04");
889                                 Assert.AreEqual ("There is no row at position 4.", e.Message, "#D05");
890                         }
891                 }
892
893                 [Test]
894                 public void GetRowFromElement ()
895                 {
896                         XmlDataDocument doc = new XmlDataDocument ();
897                         doc.DataSet.ReadXmlSchema ("Test/System.Xml/region.xsd");
898                         doc.Load ("Test/System.Xml/region.xml");
899                         XmlElement root = doc.DocumentElement;
900
901                         DataRow row = doc.GetRowFromElement((XmlElement)root.FirstChild);
902
903                         Assert.AreEqual ("1", row [0], "#E01");
904
905                         row = doc.GetRowFromElement((XmlElement)root.ChildNodes [2]);
906                         Assert.AreEqual ("3", row [0], "#E02");
907                 }
908         }
909 }