XmlDataDocumentTest2.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. //
  2. // XmlDataDocumentTest2.cs
  3. //
  4. // Author:
  5. // Atsushi Enomoto <[email protected]>
  6. //
  7. // (C)2004 Novell Inc.
  8. //
  9. using System;
  10. using System.Data;
  11. using System.Xml;
  12. using NUnit.Framework;
  13. namespace MonoTests.System.Xml
  14. {
  15. [TestFixture]
  16. public class XmlDataDocumentTest2 : Assertion
  17. {
  18. string xml = "<NewDataSet><table><row><col1>1</col1><col2>2</col2></row></table></NewDataSet>";
  19. [Test]
  20. [ExpectedException (typeof (ArgumentException))]
  21. public void TestCtorNullArgs ()
  22. {
  23. new XmlDataDocument (null);
  24. }
  25. [Test]
  26. public void TestDefaultCtor ()
  27. {
  28. XmlDataDocument doc = new XmlDataDocument ();
  29. AssertNotNull (doc.DataSet);
  30. AssertEquals ("NewDataSet", doc.DataSet.DataSetName);
  31. }
  32. [Test]
  33. [ExpectedException (typeof (InvalidOperationException))]
  34. public void TestMultipleLoadError ()
  35. {
  36. DataSet ds = new DataSet ();
  37. ds.ReadXml (new XmlTextReader (xml, XmlNodeType.Document, null));
  38. // If there is already data element, Load() fails.
  39. XmlDataDocument doc = new XmlDataDocument (ds);
  40. doc.LoadXml (xml);
  41. }
  42. [Test]
  43. public void TestMultipleLoadNoError ()
  44. {
  45. DataSet ds = new DataSet ();
  46. DataTable dt = new DataTable ();
  47. dt.Columns.Add ("col1");
  48. ds.Tables.Add (dt);
  49. XmlDataDocument doc = new XmlDataDocument (ds);
  50. doc.LoadXml (xml);
  51. }
  52. [Test]
  53. [ExpectedException (typeof (ArgumentException))]
  54. public void TestMultipleDataDocFromDataSet ()
  55. {
  56. DataSet ds = new DataSet ();
  57. XmlDataDocument doc = new XmlDataDocument (ds);
  58. XmlDataDocument doc2 = new XmlDataDocument (ds);
  59. }
  60. [Test]
  61. public void TestLoadXml ()
  62. {
  63. XmlDataDocument doc = new XmlDataDocument ();
  64. doc.LoadXml ("<NewDataSet><TestTable><TestRow><TestColumn>1</TestColumn></TestRow></TestTable></NewDataSet>");
  65. }
  66. [Test]
  67. public void TestCreateElementAndRow ()
  68. {
  69. DataSet ds = new DataSet ("set");
  70. DataTable dt = new DataTable ("tab1");
  71. dt.Columns.Add ("col1");
  72. dt.Columns.Add ("col2");
  73. ds.Tables.Add (dt);
  74. DataTable dt2 = new DataTable ("child");
  75. dt2.Columns.Add ("ref");
  76. dt2.Columns.Add ("val");
  77. ds.Tables.Add (dt2);
  78. DataRelation rel = new DataRelation ("rel",
  79. dt.Columns [0], dt2.Columns [0]);
  80. rel.Nested = true;
  81. ds.Relations.Add (rel);
  82. XmlDataDocument doc = new XmlDataDocument (ds);
  83. doc.LoadXml ("<set><tab1><col1>1</col1><col2/><child><ref>1</ref><val>aaa</val></child></tab1></set>");
  84. AssertEquals (1, ds.Tables [0].Rows.Count);
  85. AssertEquals (1, ds.Tables [1].Rows.Count);
  86. // document element - no mapped row
  87. XmlElement el = doc.DocumentElement;
  88. AssertNull (doc.GetRowFromElement (el));
  89. // tab1 element - has mapped row
  90. el = el.FirstChild as XmlElement;
  91. DataRow row = doc.GetRowFromElement (el);
  92. AssertNotNull (row);
  93. AssertEquals (DataRowState.Added, row.RowState);
  94. // col1 - it is column. no mapped row
  95. el = el.FirstChild as XmlElement;
  96. row = doc.GetRowFromElement (el);
  97. AssertNull (row);
  98. // col2 - it is column. np mapped row
  99. el = el.NextSibling as XmlElement;
  100. row = doc.GetRowFromElement (el);
  101. AssertNull (row);
  102. // child - has mapped row
  103. el = el.NextSibling as XmlElement;
  104. row = doc.GetRowFromElement (el);
  105. AssertNotNull (row);
  106. AssertEquals (DataRowState.Added, row.RowState);
  107. // created (detached) table 1 element (used later)
  108. el = doc.CreateElement ("tab1");
  109. row = doc.GetRowFromElement (el);
  110. AssertEquals (DataRowState.Detached, row.RowState);
  111. AssertEquals (1, dt.Rows.Count); // not added yet
  112. // adding a node before setting EnforceConstraints
  113. // raises an error
  114. try {
  115. doc.DocumentElement.AppendChild (el);
  116. Fail ("Invalid Operation should occur; EnforceConstraints prevents addition.");
  117. } catch (InvalidOperationException) {
  118. }
  119. // try again...
  120. ds.EnforceConstraints = false;
  121. AssertEquals (1, dt.Rows.Count); // not added yet
  122. doc.DocumentElement.AppendChild (el);
  123. AssertEquals (2, dt.Rows.Count); // added
  124. row = doc.GetRowFromElement (el);
  125. AssertEquals (DataRowState.Added, row.RowState); // changed
  126. // Irrelevant element
  127. XmlElement el2 = doc.CreateElement ("hoge");
  128. row = doc.GetRowFromElement (el2);
  129. AssertNull (row);
  130. // created table 2 element (used later)
  131. el = doc.CreateElement ("child");
  132. row = doc.GetRowFromElement (el);
  133. AssertEquals (DataRowState.Detached, row.RowState);
  134. // Adding it to irrelevant element performs no row state change.
  135. AssertEquals (1, dt2.Rows.Count); // not added yet
  136. el2.AppendChild (el);
  137. AssertEquals (1, dt2.Rows.Count); // still not added
  138. row = doc.GetRowFromElement (el);
  139. AssertEquals (DataRowState.Detached, row.RowState); // still detached here
  140. }
  141. }
  142. }