2 // XmlDataDocumentTestTest.cs - NUnit Test Cases for XmlDataDocument
5 // Ville Palo (vi64pa@koti.soon.fi)
6 // Martin Willemoes Hansen (mwh@sysrq.dk)
9 // (C) 2003 Martin Willemoes Hansen
13 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
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:
23 // The above copyright notice and this permission notice shall be
24 // included in all copies or substantial portions of the Software.
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.
37 using System.Globalization;
39 using System.Threading;
41 using System.Xml.XPath;
43 using NUnit.Framework;
45 namespace MonoTests.System.Data.Xml
48 public class XmlDataDocumentTest : DataSetAssertion {
50 static string EOL = "\n";
52 private CultureInfo originalCulture;
57 originalCulture = Thread.CurrentThread.CurrentCulture;
58 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
62 public void TearDown ()
64 Thread.CurrentThread.CurrentCulture = originalCulture;
68 public void NewInstance ()
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));
77 AssertDataSet ("#3", doc.DataSet, "NewDataSet", 0, 0);
79 DataSet ds = new DataSet ();
80 doc = new XmlDataDocument (ds);
81 Assert.IsTrue (doc.DataSet.EnforceConstraints);
85 public void SimpleLoad ()
87 string xml001 = "<root/>";
88 XmlDataDocument doc = new XmlDataDocument ();
89 DataSet ds = new DataSet ();
90 ds.InferXmlSchema (new StringReader (xml001), null);
93 string xml002 = "<root><child/></root>";
94 doc = new XmlDataDocument ();
96 ds.InferXmlSchema (new StringReader (xml002), null);
99 string xml003 = "<root><col1>test</col1><col1></col1></root>";
100 doc = new XmlDataDocument ();
102 ds.InferXmlSchema (new StringReader (xml003), null);
103 doc.LoadXml (xml003);
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 ();
108 ds.InferXmlSchema (new StringReader (xml004), null);
109 doc.LoadXml (xml004);
113 public void CloneNode ()
115 XmlDataDocument doc = new XmlDataDocument ();
117 doc.DataSet.ReadXmlSchema ("Test/System.Xml/region.xsd");
118 doc.Load ("Test/System.Xml/region.xml");
120 XmlDataDocument doc2 = (XmlDataDocument)doc.CloneNode (false);
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");
125 doc2 = (XmlDataDocument)doc.CloneNode (true);
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");
130 doc.DataSet.Tables [0].Rows [0][0] = "64";
132 Assert.AreEqual ("1", doc2.DataSet.Tables [0].Rows [0][0].ToString (), "#I05");
136 public void EditingXmlTree ()
138 XmlDataDocument doc = new XmlDataDocument ();
139 doc.DataSet.ReadXmlSchema ("Test/System.Xml/region.xsd");
140 doc.Load ("Test/System.Xml/region.xml");
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");
146 DataSet Set = new DataSet ();
147 Set.ReadXml ("Test/System.Xml/region.xml");
148 doc = new XmlDataDocument (Set);
150 Element = doc.GetElementFromRow (doc.DataSet.Tables [0].Rows [1]);
151 Assert.IsNotNull (Element);
154 Element.FirstChild.InnerText = "64";
155 Assert.Fail ("test#02");
156 } catch (InvalidOperationException) {
159 Assert.AreEqual ("2", doc.DataSet.Tables [0].Rows [1] [0], "test#05");
161 Set.EnforceConstraints = false;
162 Element.FirstChild.InnerText = "64";
163 Assert.AreEqual ("64", doc.DataSet.Tables [0].Rows [1] [0], "test#06");
167 public void EditingDataSet ()
169 string xml = "<Root><Region><RegionID>1</RegionID><RegionDescription>Eastern\r\n </RegionDescription></Region><Region><RegionID>2</RegionID><RegionDescription>Western\r\n </RegionDescription></Region><Region><RegionID>3</RegionID><RegionDescription>Northern\r\n </RegionDescription></Region><Region><RegionID>4</RegionID><RegionDescription>Southern\r\n </RegionDescription></Region><MoreData><Column1>12</Column1><Column2>Hi There</Column2></MoreData><MoreData><Column1>12</Column1><Column2>Hi There</Column2></MoreData></Root>";
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");
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");
189 public void CreateElement1 ()
191 XmlDataDocument doc = new XmlDataDocument ();
192 doc.DataSet.ReadXmlSchema ("Test/System.Xml/region.xsd");
193 doc.Load ("Test/System.Xml/region.xml");
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);
201 TextWriter text = new StringWriter ();
204 string substring = string.Empty;
205 string TextString = text.ToString ();
207 substring = TextString.Substring (0, TextString.IndexOf("\n"));
208 TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
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");
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");
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");
222 for (int i = 0; i < 26; i++) {
223 substring = TextString.Substring (0, TextString.IndexOf("\n"));
224 TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
227 substring = TextString.Substring (0, TextString.Length);
228 Assert.IsTrue (substring.IndexOf ("</Root>") != -1, "test#08");
232 public void CreateElement2 ()
234 XmlDataDocument doc = new XmlDataDocument ();
235 doc.DataSet.ReadXmlSchema ("Test/System.Xml/region.xsd");
236 doc.Load ("Test/System.Xml/region.xml");
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");
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");
250 public void CreateElement3 ()
252 XmlDataDocument doc = new XmlDataDocument ();
253 doc.DataSet.ReadXmlSchema ("Test/System.Xml/region.xsd");
254 doc.Load ("Test/System.Xml/region.xml");
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");
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");
268 public void Navigator ()
270 XmlDataDocument doc = new XmlDataDocument ();
271 doc.DataSet.ReadXmlSchema ("Test/System.Xml/region.xsd");
272 doc.Load ("Test/System.Xml/region.xml");
274 XPathNavigator Nav = doc.CreateNavigator ();
277 Nav.MoveToFirstChild ();
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");
285 Nav.MoveToFirstChild ();
287 Assert.AreEqual ("Region", Nav.Name.ToString (), "test#06");
289 Assert.AreEqual ("2Western", Nav.Value.Substring(0, Nav.Value.IndexOf ("\n") - 1), "test#07");
290 Nav.MoveToFirstChild ();
291 Assert.AreEqual ("2", Nav.Value, "test#08");
293 Assert.AreEqual ("Root", Nav.NodeType.ToString (), "test#09");
300 //Create an XmlDataDocument.
301 XmlDataDocument doc = new XmlDataDocument();
303 //Load the schema file.
304 doc.DataSet.ReadXmlSchema("Test/System.Xml/store.xsd");
306 doc.Load("Test/System.Xml/2books.xml");
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";
312 //string outstring = "";
313 TextWriter text = new StringWriter ();
317 //str.Read (bytes, 0, (int)str.Length);
318 //String OutString = new String (bytes);
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
364 substring = TextString;
365 Assert.IsTrue (substring.IndexOf ("</bookstore>") != -1, "#A12");
368 // Test public fields
372 DataSet RegionDS = new DataSet ();
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" );
379 RegionRow = RegionDS.Tables[0].Rows[0];
381 RegionDS.AcceptChanges ();
382 RegionRow["RegionDescription"] = "Reeeeeaalllly Far East!";
383 RegionDS.AcceptChanges ();
385 TextWriter text = new StringWriter ();
388 string TextString = text.ToString ();
389 string substring = TextString.Substring (0, TextString.IndexOf(EOL));
390 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
392 //Assert.AreEqual ("<?xml version=\"1.0\" encoding=\"utf-16\" standalone=\"yes\"?>", substring, "#B01");
394 substring = TextString.Substring (0, TextString.IndexOf(EOL));
395 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
396 Assert.AreEqual ("<Root>", substring, "#B02");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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" );
515 DataDoc.GetElementsByTagName ("Region") [0].RemoveAll ();
517 TextWriter text = new StringWriter ();
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);
525 Assert.IsTrue (substring.IndexOf ("<Root>") != -1, "#C01");
527 substring = TextString.Substring (0, TextString.IndexOf(EOL));
528 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
529 Assert.AreEqual (" <Region />", substring, "#C02");
531 substring = TextString.Substring (0, TextString.IndexOf(EOL));
532 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
533 Assert.AreEqual (" <Region>", substring, "#C03");
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");
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\r", substring, "#C05");
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");
549 substring = TextString.Substring (0, TextString.IndexOf(EOL));
550 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
551 Assert.AreEqual (" </Region>", substring, "#C07");
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");
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");
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\r", substring, "#C10");
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");
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");
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");
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");
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");
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");
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");
595 substring = TextString.Substring (0, TextString.Length);
596 Assert.IsTrue (substring.IndexOf ("</Root>") != -1, "#C18");
602 DataSet RegionDS = new DataSet ();
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";
613 table.Rows.Add (newRow);
615 TextWriter text = new StringWriter ();
618 string TextString = text.ToString ();
619 string substring = TextString.Substring (0, TextString.IndexOf(EOL));
620 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
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");
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");
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");
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\r", substring, "#F05");
640 substring = TextString.Substring (0, TextString.IndexOf(EOL));
641 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
642 Assert.AreEqual (" </RegionDescription>", substring, "#F06");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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\r", substring, "#F20");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
758 substring = TextString.Substring (0, TextString.Length);
759 Assert.IsTrue (substring.IndexOf ("</Root>") != -1, "#F35");
765 DataSet RegionDS = new DataSet ();
767 RegionDS.ReadXmlSchema ("Test/System.Xml/region.xsd");
768 XmlDataDocument DataDoc = new XmlDataDocument (RegionDS);
769 DataDoc.Load("Test/System.Xml/region.xml" );
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;
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 ();
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);
795 for (int i = 0; i < 21; i++) {
796 substring = TextString.Substring (0, TextString.IndexOf("\n"));
797 TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
799 Assert.IsTrue (substring.IndexOf (" <Region>") != -1, "#G04");
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");
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");
809 substring = TextString.Substring (0, TextString.IndexOf("\n"));
810 TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
811 Assert.IsTrue (substring.IndexOf (" </Region>") != -1, "#G07");
813 substring = TextString.Substring (0, TextString.Length);
814 Assert.IsTrue (substring.IndexOf ("</Root>") != -1, "#G08");
820 DataSet RegionDS = new DataSet ();
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;
827 XmlElement newNode = DataDoc.CreateElement ("Region");
828 XmlElement newChildNode = DataDoc.CreateElement ("RegionID");
830 newChildNode.InnerText = "64";
831 XmlElement newChildNode2 = null;
833 newChildNode2 = DataDoc.CreateElement ("something else");
834 Assert.Fail ("#H01");
835 } catch (XmlException) {
837 newChildNode2 = DataDoc.CreateElement ("something_else");
839 newChildNode2.InnerText = "test node";
841 newNode.AppendChild (newChildNode);
842 newNode.AppendChild (newChildNode2);
843 DataDoc.DocumentElement.AppendChild (newNode);
845 TextWriter text = new StringWriter ();
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);
853 for (int i = 0; i < 21; i++) {
854 substring = TextString.Substring (0, TextString.IndexOf("\n"));
855 TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
858 Assert.IsTrue (substring.IndexOf (" <Region>") != -1, "#H03");
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");
864 substring = TextString.Substring (0, TextString.IndexOf("\n") );
865 TextString = TextString.Substring (TextString.IndexOf("\n") + 1);
866 Assert.IsTrue (substring.IndexOf (" </Region>") != -1, "#H05");
868 substring = TextString.Substring (0, TextString.Length);
869 Assert.IsTrue (substring.IndexOf ("</Root>") != -1, "#H06");
873 public void GetElementFromRow ()
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"];
880 XmlElement element = doc.GetElementFromRow (table.Rows [2]);
881 Assert.AreEqual ("Region", element.Name, "#D01");
882 Assert.AreEqual ("3", element ["RegionID"].InnerText, "#D02");
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");
894 public void GetRowFromElement ()
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;
901 DataRow row = doc.GetRowFromElement((XmlElement)root.FirstChild);
903 Assert.AreEqual ("1", row [0], "#E01");
905 row = doc.GetRowFromElement((XmlElement)root.ChildNodes [2]);
906 Assert.AreEqual ("3", row [0], "#E02");