**** Merged from MCS ****
[mono-project.git] / mcs / class / System.Data / Test / System.Data / DataSetTest.cs
blob44d65a72a7e6cb8554a689eaf86e23c0969a7091
1 // MonoTests.System.Data.DataSetTest.cs
2 //
3 // Authors:
4 // Ville Palo <vi64pa@koti.soon.fi>
5 // Martin Willemoes Hansen <mwh@sysrq.dk>
6 // Atsushi Enomoto <atsushi@ximian.com>
7 //
8 // (C) Copyright 2002 Ville Palo
9 // (C) Copyright 2003 Martin Willemoes Hansen
12 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
14 // Permission is hereby granted, free of charge, to any person obtaining
15 // a copy of this software and associated documentation files (the
16 // "Software"), to deal in the Software without restriction, including
17 // without limitation the rights to use, copy, modify, merge, publish,
18 // distribute, sublicense, and/or sell copies of the Software, and to
19 // permit persons to whom the Software is furnished to do so, subject to
20 // the following conditions:
21 //
22 // The above copyright notice and this permission notice shall be
23 // included in all copies or substantial portions of the Software.
24 //
25 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 using NUnit.Framework;
36 using System;
37 using System.Xml;
38 using System.Xml.Serialization;
39 using System.IO;
40 using System.Data;
41 using System.Data.SqlTypes;
42 using System.Globalization;
43 using System.Threading;
44 using System.Text;
46 namespace MonoTests.System.Data
48 [TestFixture]
49 public class DataSetTest : DataSetAssertion
51 string EOL = Environment.NewLine;
53 [SetUp]
54 public void GetReady()
56 Thread.CurrentThread.CurrentCulture = new CultureInfo ("fi-FI");
59 [Test]
60 public void Properties ()
62 DataSet ds = new DataSet ();
63 AssertEquals ("default namespace", String.Empty, ds.Namespace);
64 ds.Namespace = null; // setting null == setting ""
65 AssertEquals ("after setting null to namespace", String.Empty, ds.Namespace);
67 AssertEquals ("default prefix", String.Empty, ds.Prefix);
68 ds.Prefix = null; // setting null == setting ""
69 AssertEquals ("after setting null to prefix", String.Empty, ds.Prefix);
72 [Test]
73 public void ReadXmlSchema ()
75 DataSet ds = new DataSet ();
76 ds.ReadXmlSchema ("Test/System.Data/own_schema.xsd");
78 AssertEquals ("test#01", 2, ds.Tables.Count);
79 DataTable Table = ds.Tables [0];
80 AssertEquals ("test#02", "test_table", Table.TableName);
81 AssertEquals ("test#03", "", Table.Namespace);
82 AssertEquals ("test#04", 2, Table.Columns.Count);
83 AssertEquals ("test#05", 0, Table.Rows.Count);
84 AssertEquals ("test#06", false, Table.CaseSensitive);
85 AssertEquals ("test#07", 1, Table.Constraints.Count);
86 AssertEquals ("test#08", "", Table.Prefix);
88 Constraint cons = Table.Constraints [0];
89 AssertEquals ("test#09", "Constraint1", cons.ConstraintName.ToString ());
90 AssertEquals ("test#10", "Constraint1", cons.ToString ());
92 DataColumn column = Table.Columns [0];
93 AssertEquals ("test#11", true, column.AllowDBNull);
94 AssertEquals ("test#12", false, column.AutoIncrement);
95 AssertEquals ("test#13", 0L, column.AutoIncrementSeed);
96 AssertEquals ("test#14", 1L, column.AutoIncrementStep);
97 AssertEquals ("test#15", "test", column.Caption);
98 AssertEquals ("test#16", "Element", column.ColumnMapping.ToString ());
99 AssertEquals ("test#17", "first", column.ColumnName);
100 AssertEquals ("test#18", "System.String", column.DataType.ToString ());
101 AssertEquals ("test#19", "test_default_value", column.DefaultValue.ToString ());
102 AssertEquals ("test#20", false, column.DesignMode);
103 AssertEquals ("test#21", "", column.Expression);
104 AssertEquals ("test#22", 100, column.MaxLength);
105 AssertEquals ("test#23", "", column.Namespace);
106 AssertEquals ("test#24", 0, column.Ordinal);
107 AssertEquals ("test#25", "", column.Prefix);
108 AssertEquals ("test#26", false, column.ReadOnly);
109 AssertEquals ("test#27", true, column.Unique);
111 DataColumn column2 = Table.Columns [1];
112 AssertEquals ("test#28", true, column2.AllowDBNull);
113 AssertEquals ("test#29", false, column2.AutoIncrement);
114 AssertEquals ("test#30", 0L, column2.AutoIncrementSeed);
115 AssertEquals ("test#31", 1L, column2.AutoIncrementStep);
116 AssertEquals ("test#32", "second", column2.Caption);
117 AssertEquals ("test#33", "Element", column2.ColumnMapping.ToString ());
118 AssertEquals ("test#34", "second", column2.ColumnName);
119 AssertEquals ("test#35", "System.Data.SqlTypes.SqlGuid", column2.DataType.ToString ());
120 AssertEquals ("test#36", "", column2.DefaultValue.ToString ());
121 AssertEquals ("test#37", false, column2.DesignMode);
122 AssertEquals ("test#38", "", column2.Expression);
123 AssertEquals ("test#39", -1, column2.MaxLength);
124 AssertEquals ("test#40", "", column2.Namespace);
125 AssertEquals ("test#41", 1, column2.Ordinal);
126 AssertEquals ("test#42", "", column2.Prefix);
127 AssertEquals ("test#43", false, column2.ReadOnly);
128 AssertEquals ("test#44", false, column2.Unique);
130 DataTable Table2 = ds.Tables [1];
131 AssertEquals ("test#45", "second_test_table", Table2.TableName);
132 AssertEquals ("test#46", "", Table2.Namespace);
133 AssertEquals ("test#47", 1, Table2.Columns.Count);
134 AssertEquals ("test#48", 0, Table2.Rows.Count);
135 AssertEquals ("test#49", false, Table2.CaseSensitive);
136 AssertEquals ("test#50", 1, Table2.Constraints.Count);
137 AssertEquals ("test#51", "", Table2.Prefix);
139 DataColumn column3 = Table2.Columns [0];
140 AssertEquals ("test#52", true, column3.AllowDBNull);
141 AssertEquals ("test#53", false, column3.AutoIncrement);
142 AssertEquals ("test#54", 0L, column3.AutoIncrementSeed);
143 AssertEquals ("test#55", 1L, column3.AutoIncrementStep);
144 AssertEquals ("test#56", "second_first", column3.Caption);
145 AssertEquals ("test#57", "Element", column3.ColumnMapping.ToString ());
146 AssertEquals ("test#58", "second_first", column3.ColumnName);
147 AssertEquals ("test#59", "System.String", column3.DataType.ToString ());
148 AssertEquals ("test#60", "default_value", column3.DefaultValue.ToString ());
149 AssertEquals ("test#61", false, column3.DesignMode);
150 AssertEquals ("test#62", "", column3.Expression);
151 AssertEquals ("test#63", 100, column3.MaxLength);
152 AssertEquals ("test#64", "", column3.Namespace);
153 AssertEquals ("test#65", 0, column3.Ordinal);
154 AssertEquals ("test#66", "", column3.Prefix);
155 AssertEquals ("test#67", false, column3.ReadOnly);
156 AssertEquals ("test#68", true, column3.Unique);
159 [Test]
160 public void OwnWriteXmlSchema ()
162 DataSet ds = new DataSet ("test_dataset");
163 DataTable table = new DataTable ("test_table");
164 DataColumn column = new DataColumn ("first", typeof (string));
165 column.AllowDBNull = true;
166 column.DefaultValue = "test_default_value";
167 column.MaxLength = 100;
168 column.Caption = "test";
169 column.Unique = true;
170 table.Columns.Add (column);
172 DataColumn column2 = new DataColumn ("second", typeof (SqlGuid));
173 column2.ColumnMapping = MappingType.Element;
174 table.Columns.Add (column2);
175 ds.Tables.Add (table);
177 DataTable table2 = new DataTable ("second_test_table");
178 DataColumn column3 = new DataColumn ("second_first", typeof (string));
179 column3.AllowDBNull = true;
180 column3.DefaultValue = "default_value";
181 column3.MaxLength = 100;
182 column3.Unique = true;
183 table2.Columns.Add (column3);
184 ds.Tables.Add (table2);
186 TextWriter writer = new StringWriter ();
187 ds.WriteXmlSchema (writer);
189 string TextString = writer.ToString ();
190 string substring = TextString.Substring (0, TextString.IndexOf(EOL));
191 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
192 AssertEquals ("test#01", "<?xml version=\"1.0\" encoding=\"utf-16\"?>", substring);
194 substring = TextString.Substring (0, TextString.IndexOf(EOL));
195 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
196 // FIXME: modified attributes based on XmlSchema.Write difference
197 // AssertEquals ("test#02", "<xs:schema id=\"test_dataset\" xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">", substring);
198 AssertEquals ("test#02", "<xs:schema xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"test_dataset\" xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">", substring);
200 substring = TextString.Substring (0, TextString.IndexOf(EOL));
201 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
202 #if MS_NET // MS System.XML.dll + Mono System.Data.dll
203 // FIXME: modified attributes based on XmlSchema.Write difference
204 AssertEquals ("test#03", " <xs:element msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\" name=\"test_dataset\">", substring);
205 #else
206 AssertEquals ("test#03", " <xs:element name=\"test_dataset\" msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\">", substring);
207 #endif
209 substring = TextString.Substring (0, TextString.IndexOf(EOL));
210 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
211 AssertEquals ("test#04", " <xs:complexType>", substring);
213 substring = TextString.Substring (0, TextString.IndexOf(EOL));
214 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
215 AssertEquals ("test#05", " <xs:choice maxOccurs=\"unbounded\">", substring);
217 substring = TextString.Substring (0, TextString.IndexOf(EOL));
218 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
219 AssertEquals ("test#06", " <xs:element name=\"test_table\">", substring);
221 substring = TextString.Substring (0, TextString.IndexOf(EOL));
222 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
223 AssertEquals ("test#07", " <xs:complexType>", substring);
225 substring = TextString.Substring (0, TextString.IndexOf(EOL));
226 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
227 AssertEquals ("test#08", " <xs:sequence>", substring);
229 substring = TextString.Substring (0, TextString.IndexOf(EOL));
230 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
231 // FIXME: modified attributes based on XmlSchema.Write difference
232 // AssertEquals ("test#09", " <xs:element name=\"first\" msdata:Caption=\"test\" default=\"test_default_value\" minOccurs=\"0\">", substring);
233 #if MS_NET // MS System.XML.dll + Mono System.Data.dll
234 AssertEquals ("test#09", " <xs:element msdata:Caption=\"test\" minOccurs=\"0\" default=\"test_default_value\" name=\"first\">", substring);
235 #else
236 AssertEquals ("test#09", " <xs:element minOccurs=\"0\" default=\"test_default_value\" name=\"first\" msdata:Caption=\"test\">", substring);
237 #endif
239 substring = TextString.Substring (0, TextString.IndexOf(EOL));
240 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
241 AssertEquals ("test#10", " <xs:simpleType>", substring);
243 substring = TextString.Substring (0, TextString.IndexOf(EOL));
244 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
245 AssertEquals ("test#11", " <xs:restriction base=\"xs:string\">", substring);
247 substring = TextString.Substring (0, TextString.IndexOf(EOL));
248 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
249 AssertEquals ("test#12", " <xs:maxLength value=\"100\" />", substring);
251 substring = TextString.Substring (0, TextString.IndexOf(EOL));
252 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
253 AssertEquals ("test#13", " </xs:restriction>", substring);
255 substring = TextString.Substring (0, TextString.IndexOf(EOL));
256 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
257 AssertEquals ("test#14", " </xs:simpleType>", substring);
259 substring = TextString.Substring (0, TextString.IndexOf(EOL));
260 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
261 AssertEquals ("test#15", " </xs:element>", substring);
263 substring = TextString.Substring (0, TextString.IndexOf(EOL));
264 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
265 // FIXME: modified attributes based on XmlSchema.Write difference
266 // Due to the assembly version difference, this test is index-based
267 // AssertEquals ("test#16", " <xs:element name=\"second\" msdata:DataType=\"System.Data.SqlTypes.SqlGuid, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" type=\"xs:string\" minOccurs=\"0\" />", substring);
268 if (substring.IndexOf ("<xs:element") < 0)
269 Fail ("test#16: " + substring);
270 if (substring.IndexOf ("name=\"second\"") < 0)
271 Fail ("test#16: " + substring);
272 if (substring.IndexOf ("msdata:DataType=\"System.Data.SqlTypes.SqlGuid, System.Data, Version=") < 0)
273 Fail ("test#16: " + substring);
274 if (substring.IndexOf ("type=\"xs:string\"") < 0)
275 Fail ("test#16: " + substring);
276 if (substring.IndexOf ("minOccurs=\"0\"") < 0)
277 Fail ("test#16: " + substring);
279 substring = TextString.Substring (0, TextString.IndexOf(EOL));
280 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
281 AssertEquals ("test#17", " </xs:sequence>", substring);
283 substring = TextString.Substring (0, TextString.IndexOf(EOL));
284 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
285 AssertEquals ("test#18", " </xs:complexType>", substring);
287 substring = TextString.Substring (0, TextString.IndexOf(EOL));
288 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
289 AssertEquals ("test#19", " </xs:element>", substring);
291 substring = TextString.Substring (0, TextString.IndexOf(EOL));
292 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
293 AssertEquals ("test#20", " <xs:element name=\"second_test_table\">", substring);
295 substring = TextString.Substring (0, TextString.IndexOf(EOL));
296 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
297 AssertEquals ("test#21", " <xs:complexType>", substring);
299 substring = TextString.Substring (0, TextString.IndexOf(EOL));
300 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
301 AssertEquals ("test#22", " <xs:sequence>", substring);
303 substring = TextString.Substring (0, TextString.IndexOf(EOL));
304 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
305 // FIXME: modified attributes based on XmlSchema.Write difference
306 // AssertEquals ("test#23", " <xs:element name=\"second_first\" default=\"default_value\" minOccurs=\"0\">", substring);
307 AssertEquals ("test#23", " <xs:element minOccurs=\"0\" default=\"default_value\" name=\"second_first\">", substring);
309 substring = TextString.Substring (0, TextString.IndexOf(EOL));
310 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
311 AssertEquals ("test#24", " <xs:simpleType>", substring);
313 substring = TextString.Substring (0, TextString.IndexOf(EOL));
314 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
315 AssertEquals ("test#25", " <xs:restriction base=\"xs:string\">", substring);
317 substring = TextString.Substring (0, TextString.IndexOf(EOL));
318 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
319 AssertEquals ("test#26", " <xs:maxLength value=\"100\" />", substring);
321 substring = TextString.Substring (0, TextString.IndexOf(EOL));
322 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
323 AssertEquals ("test#27", " </xs:restriction>", substring);
325 substring = TextString.Substring (0, TextString.IndexOf(EOL));
326 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
327 AssertEquals ("test#28", " </xs:simpleType>", substring);
329 substring = TextString.Substring (0, TextString.IndexOf(EOL));
330 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
331 AssertEquals ("test#29", " </xs:element>", substring);
333 substring = TextString.Substring (0, TextString.IndexOf(EOL));
334 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
335 AssertEquals ("test#30", " </xs:sequence>", substring);
337 substring = TextString.Substring (0, TextString.IndexOf(EOL));
338 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
339 AssertEquals ("test#31", " </xs:complexType>", substring);
341 substring = TextString.Substring (0, TextString.IndexOf(EOL));
342 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
343 AssertEquals ("test#32", " </xs:element>", substring);
345 substring = TextString.Substring (0, TextString.IndexOf(EOL));
346 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
347 AssertEquals ("test#33", " </xs:choice>", substring);
349 substring = TextString.Substring (0, TextString.IndexOf(EOL));
350 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
351 AssertEquals ("test#34", " </xs:complexType>", substring);
353 substring = TextString.Substring (0, TextString.IndexOf(EOL));
354 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
355 AssertEquals ("test#36", " <xs:unique name=\"Constraint1\">", substring);
357 substring = TextString.Substring (0, TextString.IndexOf(EOL));
358 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
359 AssertEquals ("test#37", " <xs:selector xpath=\".//test_table\" />", substring);
361 substring = TextString.Substring (0, TextString.IndexOf(EOL));
362 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
363 AssertEquals ("test#38", " <xs:field xpath=\"first\" />", substring);
365 substring = TextString.Substring (0, TextString.IndexOf(EOL));
366 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
367 AssertEquals ("test#39", " </xs:unique>", substring);
369 substring = TextString.Substring (0, TextString.IndexOf(EOL));
370 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
371 #if MS_NET // MS System.XML.dll + Mono System.Data.dll
372 // FIXME: modified attributes based on XmlSchema.Write difference
373 AssertEquals ("test#40", " <xs:unique msdata:ConstraintName=\"Constraint1\" name=\"second_test_table_Constraint1\">", substring);
374 #else
375 AssertEquals ("test#40", " <xs:unique name=\"second_test_table_Constraint1\" msdata:ConstraintName=\"Constraint1\">", substring);
376 #endif
378 substring = TextString.Substring (0, TextString.IndexOf(EOL));
379 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
380 AssertEquals ("test#41", " <xs:selector xpath=\".//second_test_table\" />", substring);
382 substring = TextString.Substring (0, TextString.IndexOf(EOL));
383 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
384 AssertEquals ("test#42", " <xs:field xpath=\"second_first\" />", substring);
386 substring = TextString.Substring (0, TextString.IndexOf(EOL));
387 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
388 AssertEquals ("test#43", " </xs:unique>", substring);
390 substring = TextString.Substring (0, TextString.IndexOf(EOL));
391 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
392 AssertEquals ("test#44", " </xs:element>", substring);
393 AssertEquals ("test#45", "</xs:schema>", TextString);
396 [Test]
397 public void ReadWriteXml ()
399 DataSet ds = new DataSet ();
400 ds.ReadXml ("Test/System.Data/region.xml");
401 TextWriter writer = new StringWriter ();
402 ds.WriteXml (writer);
404 string TextString = writer.ToString ();
405 string substring = TextString.Substring (0, TextString.IndexOf(EOL));
406 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
407 AssertEquals ("test#01", "<Root>", substring);
409 substring = TextString.Substring (0, TextString.IndexOf(EOL));
410 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
411 AssertEquals ("test#02", " <Region>", substring);
413 substring = TextString.Substring (0, TextString.IndexOf(EOL));
414 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
415 AssertEquals ("test#03", " <RegionID>1</RegionID>", substring);
416 // Here the end of line is text markup "\n"
417 substring = TextString.Substring (0, TextString.IndexOf('\n'));
418 TextString = TextString.Substring (TextString.IndexOf('\n') + 1);
419 AssertEquals ("test#04", " <RegionDescription>Eastern", substring);
421 substring = TextString.Substring (0, TextString.IndexOf(EOL));
422 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
423 AssertEquals ("test#05", " </RegionDescription>", substring);
425 substring = TextString.Substring (0, TextString.IndexOf(EOL));
426 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
427 AssertEquals ("test#06", " </Region>", substring);
429 substring = TextString.Substring (0, TextString.IndexOf(EOL));
430 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
431 AssertEquals ("test#07", " <Region>", substring);
433 substring = TextString.Substring (0, TextString.IndexOf(EOL));
434 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
435 AssertEquals ("test#08", " <RegionID>2</RegionID>", substring);
437 // Here the end of line is text markup "\n"
438 substring = TextString.Substring (0, TextString.IndexOf('\n'));
439 TextString = TextString.Substring (TextString.IndexOf('\n') + 1);
440 AssertEquals ("test#09", " <RegionDescription>Western", substring);
442 substring = TextString.Substring (0, TextString.IndexOf(EOL));
443 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
444 AssertEquals ("test#10", " </RegionDescription>", substring);
446 substring = TextString.Substring (0, TextString.IndexOf(EOL));
447 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
448 AssertEquals ("test#11", " </Region>", substring);
450 AssertEquals ("test#11", "</Root>", TextString);
453 [Test]
454 public void ReadWriteXmlDiffGram ()
456 DataSet ds = new DataSet ();
457 // It is not a diffgram, so no data loading should be done.
458 ds.ReadXml ("Test/System.Data/region.xml", XmlReadMode.DiffGram);
459 TextWriter writer = new StringWriter ();
460 ds.WriteXml (writer);
462 string TextString = writer.ToString ();
463 AssertEquals ("test#01", "<NewDataSet />", TextString);
465 ds.WriteXml (writer, XmlWriteMode.DiffGram);
466 TextString = writer.ToString ();
468 AssertEquals ("test#02", "<NewDataSet /><diffgr:diffgram xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:diffgr=\"urn:schemas-microsoft-com:xml-diffgram-v1\" />", TextString);
471 ds = new DataSet ();
472 ds.ReadXml ("Test/System.Data/region.xml");
473 DataTable table = ds.Tables ["Region"];
474 table.Rows [0] [0] = "64";
475 ds.ReadXml ("Test/System.Data/region.xml", XmlReadMode.DiffGram);
476 ds.WriteXml (writer, XmlWriteMode.DiffGram);
478 TextString = writer.ToString ();
479 string substring = TextString.Substring (0, TextString.IndexOf(EOL));
480 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
481 AssertEquals ("test#03", "<NewDataSet /><diffgr:diffgram xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:diffgr=\"urn:schemas-microsoft-com:xml-diffgram-v1\" /><diffgr:diffgram xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:diffgr=\"urn:schemas-microsoft-com:xml-diffgram-v1\">",substring);
483 substring = TextString.Substring (0, TextString.IndexOf(EOL));
484 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
485 AssertEquals ("test#04", " <Root>", substring);
487 substring = TextString.Substring (0, TextString.IndexOf(EOL));
488 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
489 AssertEquals ("test#05", " <Region diffgr:id=\"Region1\" msdata:rowOrder=\"0\" diffgr:hasChanges=\"inserted\">", substring);
491 substring = TextString.Substring (0, TextString.IndexOf(EOL));
492 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
493 AssertEquals ("test#06", " <RegionID>64</RegionID>", substring);
495 // not EOL but literal '\n'
496 substring = TextString.Substring (0, TextString.IndexOf('\n'));
497 TextString = TextString.Substring (TextString.IndexOf('\n') + 1);
498 AssertEquals ("test#07", " <RegionDescription>Eastern", substring);
500 substring = TextString.Substring (0, TextString.IndexOf(EOL));
501 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
502 AssertEquals ("test#07", " </RegionDescription>", substring);
504 substring = TextString.Substring (0, TextString.IndexOf(EOL));
505 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
506 AssertEquals ("test#08", " </Region>", substring);
508 substring = TextString.Substring (0, TextString.IndexOf(EOL));
509 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
510 AssertEquals ("test#09", " <Region diffgr:id=\"Region2\" msdata:rowOrder=\"1\" diffgr:hasChanges=\"inserted\">", substring);
512 substring = TextString.Substring (0, TextString.IndexOf(EOL));
513 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
514 AssertEquals ("test#10", " <RegionID>2</RegionID>", substring);
516 // not EOL but literal '\n'
517 substring = TextString.Substring (0, TextString.IndexOf('\n'));
518 TextString = TextString.Substring (TextString.IndexOf('\n') + 1);
519 AssertEquals ("test#11", " <RegionDescription>Western", substring);
521 substring = TextString.Substring (0, TextString.IndexOf(EOL));
522 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
523 AssertEquals ("test#12", " </RegionDescription>", substring);
525 substring = TextString.Substring (0, TextString.IndexOf(EOL));
526 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
527 AssertEquals ("test#13", " </Region>", substring);
529 substring = TextString.Substring (0, TextString.IndexOf(EOL));
530 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
531 AssertEquals ("test#14", " </Root>", substring);
533 AssertEquals ("test#15", "</diffgr:diffgram>", TextString);
536 [Test]
537 public void WriteXmlSchema ()
539 DataSet ds = new DataSet ();
540 ds.ReadXml ("Test/System.Data/region.xml");
541 TextWriter writer = new StringWriter ();
542 ds.WriteXmlSchema (writer);
544 string TextString = writer.ToString ();
546 string substring = TextString.Substring (0, TextString.IndexOf(EOL));
547 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
548 AssertEquals ("test#01", "<?xml version=\"1.0\" encoding=\"utf-16\"?>", substring);
550 substring = TextString.Substring (0, TextString.IndexOf(EOL));
551 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
552 // FIXME: modified attributes based on XmlSchema.Write difference
553 // AssertEquals ("test#02", "<xs:schema id=\"Root\" xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">", substring);
554 AssertEquals ("test#02", "<xs:schema xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"Root\" xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">", substring);
556 substring = TextString.Substring (0, TextString.IndexOf(EOL));
557 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
558 // FIXME: modified attributes based on XmlSchema.Write difference
559 // AssertEquals ("test#03", " <xs:element name=\"Root\" msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\">", substring);
560 #if MS_NET // MS System.XML.dll + Mono System.Data.dll
561 AssertEquals ("test#03", " <xs:element msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\" name=\"Root\">", substring);
562 #else
563 AssertEquals ("test#03", " <xs:element name=\"Root\" msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\">", substring);
564 #endif
566 substring = TextString.Substring (0, TextString.IndexOf(EOL));
567 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
568 AssertEquals ("test#04", " <xs:complexType>", substring);
570 substring = TextString.Substring (0, TextString.IndexOf(EOL));
571 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
572 AssertEquals ("test#05", " <xs:choice maxOccurs=\"unbounded\">", substring);
574 substring = TextString.Substring (0, TextString.IndexOf(EOL));
575 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
576 AssertEquals ("test#06", " <xs:element name=\"Region\">", substring);
578 substring = TextString.Substring (0, TextString.IndexOf(EOL));
579 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
580 AssertEquals ("test#07", " <xs:complexType>", substring);
582 substring = TextString.Substring (0, TextString.IndexOf(EOL));
583 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
584 AssertEquals ("test#08", " <xs:sequence>", substring);
586 substring = TextString.Substring (0, TextString.IndexOf(EOL));
587 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
588 // FIXME: modified attributes based on XmlSchema.Write difference
589 // AssertEquals ("test#09", " <xs:element name=\"RegionID\" type=\"xs:string\" minOccurs=\"0\" />", substring);
590 AssertEquals ("test#09", " <xs:element minOccurs=\"0\" name=\"RegionID\" type=\"xs:string\" />", substring);
592 substring = TextString.Substring (0, TextString.IndexOf(EOL));
593 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
594 // FIXME: modified attributes based on XmlSchema.Write difference
595 // AssertEquals ("test#10", " <xs:element name=\"RegionDescription\" type=\"xs:string\" minOccurs=\"0\" />", substring);
596 AssertEquals ("test#10", " <xs:element minOccurs=\"0\" name=\"RegionDescription\" type=\"xs:string\" />", substring);
598 substring = TextString.Substring (0, TextString.IndexOf(EOL));
599 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
600 AssertEquals ("test#11", " </xs:sequence>", substring);
602 substring = TextString.Substring (0, TextString.IndexOf(EOL));
603 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
604 AssertEquals ("test#12", " </xs:complexType>", substring);
606 substring = TextString.Substring (0, TextString.IndexOf(EOL));
607 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
608 AssertEquals ("test#13", " </xs:element>", substring);
610 substring = TextString.Substring (0, TextString.IndexOf(EOL));
611 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
612 AssertEquals ("test#14", " </xs:choice>", substring);
614 substring = TextString.Substring (0, TextString.IndexOf(EOL));
615 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
616 AssertEquals ("test#15", " </xs:complexType>", substring);
618 substring = TextString.Substring (0, TextString.IndexOf(EOL));
619 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
620 AssertEquals ("test#16", " </xs:element>", substring);
622 AssertEquals ("test#17", "</xs:schema>", TextString);
625 [Test]
626 public void ReadWriteXmlSchemaIgnoreSchema ()
628 DataSet ds = new DataSet ();
629 ds.ReadXmlSchema ("Test/System.Data/store.xsd");
630 ds.ReadXml ("Test/System.Data/region.xml", XmlReadMode.IgnoreSchema);
631 TextWriter writer = new StringWriter ();
633 ds.WriteXmlSchema (writer);
634 string TextString = writer.ToString ();
636 string substring = TextString.Substring (0, TextString.IndexOf(EOL));
637 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
638 AssertEquals ("test#01", "<?xml version=\"1.0\" encoding=\"utf-16\"?>", substring);
640 substring = TextString.Substring (0, TextString.IndexOf(EOL));
641 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
642 // FIXME: modified attributes based on XmlSchema.Write difference
643 // AssertEquals ("test#02", "<xs:schema id=\"NewDataSet\" xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">", substring);
644 AssertEquals ("test#02", "<xs:schema xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"NewDataSet\" xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">", substring);
646 substring = TextString.Substring (0, TextString.IndexOf(EOL));
647 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
648 AssertEquals ("test#03", " <xs:complexType name=\"bookstoreType\">", substring);
650 substring = TextString.Substring (0, TextString.IndexOf(EOL));
651 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
652 AssertEquals ("test#04", " <xs:sequence>", substring);
654 substring = TextString.Substring (0, TextString.IndexOf(EOL));
655 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
656 AssertEquals ("test#05", " <xs:element name=\"book\" type=\"bookType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />", substring);
658 substring = TextString.Substring (0, TextString.IndexOf(EOL));
659 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
660 AssertEquals ("test#06", " </xs:sequence>", substring);
662 substring = TextString.Substring (0, TextString.IndexOf(EOL));
663 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
664 AssertEquals ("test#07", " </xs:complexType>", substring);
666 substring = TextString.Substring (0, TextString.IndexOf(EOL));
667 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
668 AssertEquals ("test#08", " <xs:complexType name=\"bookType\">", substring);
670 substring = TextString.Substring (0, TextString.IndexOf(EOL));
671 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
672 AssertEquals ("test#09", " <xs:sequence>", substring);
674 substring = TextString.Substring (0, TextString.IndexOf(EOL));
675 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
676 AssertEquals ("test#10", " <xs:element name=\"title\" type=\"xs:string\" msdata:Ordinal=\"1\" />", substring);
678 substring = TextString.Substring (0, TextString.IndexOf(EOL));
679 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
680 AssertEquals ("test#11", " <xs:element name=\"price\" type=\"xs:decimal\" msdata:Ordinal=\"2\" />", substring);
682 substring = TextString.Substring (0, TextString.IndexOf(EOL));
683 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
684 AssertEquals ("test#12", " <xs:element name=\"author\" type=\"authorName\" minOccurs=\"0\" maxOccurs=\"unbounded\" />", substring);
686 substring = TextString.Substring (0, TextString.IndexOf(EOL));
687 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
688 AssertEquals ("test#13", " </xs:sequence>", substring);
690 substring = TextString.Substring (0, TextString.IndexOf(EOL));
691 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
692 AssertEquals ("test#14", " <xs:attribute name=\"genre\" type=\"xs:string\" />", substring);
694 substring = TextString.Substring (0, TextString.IndexOf(EOL));
695 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
696 AssertEquals ("test#15", " </xs:complexType>", substring);
698 substring = TextString.Substring (0, TextString.IndexOf(EOL));
699 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
700 AssertEquals ("test#16", " <xs:complexType name=\"authorName\">", substring);
702 substring = TextString.Substring (0, TextString.IndexOf(EOL));
703 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
704 AssertEquals ("test#17", " <xs:sequence>", substring);
706 substring = TextString.Substring (0, TextString.IndexOf(EOL));
707 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
708 AssertEquals ("test#18", " <xs:element name=\"first-name\" type=\"xs:string\" />", substring);
710 substring = TextString.Substring (0, TextString.IndexOf(EOL));
711 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
712 AssertEquals ("test#19", " <xs:element name=\"last-name\" type=\"xs:string\" />", substring);
714 substring = TextString.Substring (0, TextString.IndexOf(EOL));
715 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
716 AssertEquals ("test#20", " </xs:sequence>", substring);
718 substring = TextString.Substring (0, TextString.IndexOf(EOL));
719 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
720 AssertEquals ("test#21", " </xs:complexType>", substring);
722 substring = TextString.Substring (0, TextString.IndexOf(EOL));
723 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
724 AssertEquals ("test#22", " <xs:element name=\"bookstore\" type=\"bookstoreType\" />", substring);
726 substring = TextString.Substring (0, TextString.IndexOf(EOL));
727 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
728 AssertEquals ("test#23", " <xs:element name=\"NewDataSet\" msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\">", substring);
730 substring = TextString.Substring (0, TextString.IndexOf(EOL));
731 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
732 AssertEquals ("test#24", " <xs:complexType>", substring);
734 substring = TextString.Substring (0, TextString.IndexOf(EOL));
735 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
736 AssertEquals ("test#25", " <xs:choice maxOccurs=\"unbounded\">", substring);
738 substring = TextString.Substring (0, TextString.IndexOf(EOL));
739 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
740 AssertEquals ("test#26", " <xs:element ref=\"bookstore\" />", substring);
742 substring = TextString.Substring (0, TextString.IndexOf(EOL));
743 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
744 AssertEquals ("test#27", " </xs:choice>", substring);
746 substring = TextString.Substring (0, TextString.IndexOf(EOL));
747 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
748 AssertEquals ("test#28", " </xs:complexType>", substring);
750 substring = TextString.Substring (0, TextString.IndexOf(EOL));
751 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
752 AssertEquals ("test#29", " </xs:element>", substring);
754 AssertEquals ("test#30", "</xs:schema>", TextString);
757 [Test]
758 public void ReadWriteXmlSchema ()
760 DataSet ds = new DataSet ();
761 ds.ReadXmlSchema ("Test/System.Data/store.xsd");
762 // check dataset properties before testing write
763 AssertDataSet ("ds", ds, "NewDataSet", 3, 2);
764 AssertDataTable ("tab1", ds.Tables [0], "bookstore", 1, 0, 0, 1, 1, 1);
765 AssertDataTable ("tab2", ds.Tables [1], "book", 5, 0, 1, 1, 2, 1);
766 AssertDataTable ("tab3", ds.Tables [2], "author", 3, 0, 1, 0, 1, 0);
767 // FIXME: currently order is not compatible. Use name as index
768 AssertDataRelation ("rel1", ds.Relations ["book_author"], "book_author", true, new string [] {"book_Id"}, new string [] {"book_Id"}, true, true);
769 AssertDataRelation ("rel2", ds.Relations ["bookstore_book"], "bookstore_book", true, new string [] {"bookstore_Id"}, new string [] {"bookstore_Id"}, true, true);
771 ds.ReadXml ("Test/System.Data/region.xml", XmlReadMode.InferSchema);
773 TextWriter writer = new StringWriter ();
774 ds.WriteXmlSchema (writer);
776 string TextString = writer.ToString ();
778 string substring = TextString.Substring (0, TextString.IndexOf(EOL));
779 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
780 AssertEquals ("test#01", "<?xml version=\"1.0\" encoding=\"utf-16\"?>", substring);
782 substring = TextString.Substring (0, TextString.IndexOf(EOL));
783 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
784 // FIXME: modified attributes based on XmlSchema.Write difference
785 // AssertEquals ("test#02", "<xs:schema id=\"Root\" xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">", substring);
786 #if MS_NET // MS System.XML.dll + Mono System.Data.dll
787 AssertEquals ("test#02", "<xs:schema xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"Root\" xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">", substring);
788 #else
789 AssertEquals ("test#02", "<xs:schema xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"Root\" xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">", substring);
790 #endif
792 substring = TextString.Substring (0, TextString.IndexOf(EOL));
793 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
794 AssertEquals ("test#03", " <xs:complexType name=\"bookstoreType\">", substring);
796 substring = TextString.Substring (0, TextString.IndexOf(EOL));
797 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
798 AssertEquals ("test#04", " <xs:sequence>", substring);
800 substring = TextString.Substring (0, TextString.IndexOf(EOL));
801 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
802 AssertEquals ("test#05", " <xs:element name=\"book\" type=\"bookType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />", substring);
804 substring = TextString.Substring (0, TextString.IndexOf(EOL));
805 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
806 AssertEquals ("test#06", " </xs:sequence>", substring);
808 substring = TextString.Substring (0, TextString.IndexOf(EOL));
809 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
810 AssertEquals ("test#07", " </xs:complexType>", substring);
812 substring = TextString.Substring (0, TextString.IndexOf(EOL));
813 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
814 AssertEquals ("test#08", " <xs:complexType name=\"bookType\">", substring);
816 substring = TextString.Substring (0, TextString.IndexOf(EOL));
817 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
818 AssertEquals ("test#09", " <xs:sequence>", substring);
820 substring = TextString.Substring (0, TextString.IndexOf(EOL));
821 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
822 AssertEquals ("test#10", " <xs:element name=\"title\" type=\"xs:string\" msdata:Ordinal=\"1\" />", substring);
824 substring = TextString.Substring (0, TextString.IndexOf(EOL));
825 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
826 AssertEquals ("test#11", " <xs:element name=\"price\" type=\"xs:decimal\" msdata:Ordinal=\"2\" />", substring);
828 substring = TextString.Substring (0, TextString.IndexOf(EOL));
829 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
830 AssertEquals ("test#12", " <xs:element name=\"author\" type=\"authorName\" minOccurs=\"0\" maxOccurs=\"unbounded\" />", substring);
832 substring = TextString.Substring (0, TextString.IndexOf(EOL));
833 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
834 AssertEquals ("test#13", " </xs:sequence>", substring);
836 substring = TextString.Substring (0, TextString.IndexOf(EOL));
837 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
838 AssertEquals ("test#14", " <xs:attribute name=\"genre\" type=\"xs:string\" />", substring);
840 substring = TextString.Substring (0, TextString.IndexOf(EOL));
841 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
842 AssertEquals ("test#15", " </xs:complexType>", substring);
844 substring = TextString.Substring (0, TextString.IndexOf(EOL));
845 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
846 AssertEquals ("test#16", " <xs:complexType name=\"authorName\">", substring);
848 substring = TextString.Substring (0, TextString.IndexOf(EOL));
849 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
850 AssertEquals ("test#17", " <xs:sequence>", substring);
852 substring = TextString.Substring (0, TextString.IndexOf(EOL));
853 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
854 AssertEquals ("test#18", " <xs:element name=\"first-name\" type=\"xs:string\" />", substring);
856 substring = TextString.Substring (0, TextString.IndexOf(EOL));
857 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
858 AssertEquals ("test#19", " <xs:element name=\"last-name\" type=\"xs:string\" />", substring);
860 substring = TextString.Substring (0, TextString.IndexOf(EOL));
861 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
862 AssertEquals ("test#20", " </xs:sequence>", substring);
864 substring = TextString.Substring (0, TextString.IndexOf(EOL));
865 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
866 AssertEquals ("test#21", " </xs:complexType>", substring);
868 substring = TextString.Substring (0, TextString.IndexOf(EOL));
869 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
870 AssertEquals ("test#22", " <xs:element name=\"bookstore\" type=\"bookstoreType\" />", substring);
872 substring = TextString.Substring (0, TextString.IndexOf(EOL));
873 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
874 AssertEquals ("test#23", " <xs:element name=\"Root\" msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\">", substring);
876 substring = TextString.Substring (0, TextString.IndexOf(EOL));
877 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
878 AssertEquals ("test#24", " <xs:complexType>", substring);
880 substring = TextString.Substring (0, TextString.IndexOf(EOL));
881 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
882 AssertEquals ("test#25", " <xs:choice maxOccurs=\"unbounded\">", substring);
884 substring = TextString.Substring (0, TextString.IndexOf(EOL));
885 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
886 AssertEquals ("test#26", " <xs:element ref=\"bookstore\" />", substring);
888 substring = TextString.Substring (0, TextString.IndexOf(EOL));
889 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
890 AssertEquals ("test#27", " <xs:element name=\"Region\">", substring);
892 substring = TextString.Substring (0, TextString.IndexOf(EOL));
893 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
894 AssertEquals ("test#28", " <xs:complexType>", substring);
896 substring = TextString.Substring (0, TextString.IndexOf(EOL));
897 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
898 AssertEquals ("test#29", " <xs:sequence>", substring);
900 substring = TextString.Substring (0, TextString.IndexOf(EOL));
901 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
902 AssertEquals ("test#30", " <xs:element name=\"RegionID\" type=\"xs:string\" minOccurs=\"0\" />", substring);
904 substring = TextString.Substring (0, TextString.IndexOf(EOL));
905 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
906 AssertEquals ("test#31", " <xs:element name=\"RegionDescription\" type=\"xs:string\" minOccurs=\"0\" />", substring);
908 substring = TextString.Substring (0, TextString.IndexOf(EOL));
909 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
910 AssertEquals ("test#32", " </xs:sequence>", substring);
912 substring = TextString.Substring (0, TextString.IndexOf(EOL));
913 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
914 AssertEquals ("test#33", " </xs:complexType>", substring);
916 substring = TextString.Substring (0, TextString.IndexOf(EOL));
917 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
918 AssertEquals ("test#34", " </xs:element>", substring);
920 substring = TextString.Substring (0, TextString.IndexOf(EOL));
921 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
922 AssertEquals ("test#35", " </xs:choice>", substring);
924 substring = TextString.Substring (0, TextString.IndexOf(EOL));
925 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
926 AssertEquals ("test#36", " </xs:complexType>", substring);
928 substring = TextString.Substring (0, TextString.IndexOf(EOL));
929 TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
930 AssertEquals ("test#37", " </xs:element>", substring);
932 AssertEquals ("test#38", "</xs:schema>", TextString);
935 [Test]
936 public void WriteDifferentNamespaceSchema ()
938 // I modified attribute order that is no worth testing.
940 string schema = @"<?xml version='1.0' encoding='utf-16'?>
941 <xs:schema id='NewDataSet' targetNamespace='urn:bar' xmlns:mstns='urn:bar' xmlns='urn:bar' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' attributeFormDefault='qualified' elementFormDefault='qualified' xmlns:app1='urn:baz' xmlns:app2='urn:foo'>
942 <!--ATTENTION: This schema contains references to other imported schemas-->
943 <xs:import namespace='urn:baz' schemaLocation='_app1.xsd' />
944 <xs:import namespace='urn:foo' schemaLocation='_app2.xsd' />
945 <xs:element name='NewDataSet' msdata:IsDataSet='true' msdata:Locale='fi-FI'>
946 <xs:complexType>
947 <xs:choice maxOccurs='unbounded'>
948 <xs:element ref='app2:NS1Table' />
949 <xs:element name='NS2Table'>
950 <xs:complexType>
951 </xs:complexType>
952 </xs:element>
953 </xs:choice>
954 </xs:complexType>
955 </xs:element>
956 </xs:schema>";
958 #if MS_NET // MS System.XML.dll + Mono System.Data.dll
959 string schema = @"<?xml version='1.0' encoding='utf-16'?>
960 <xs:schema xmlns:mstns='urn:bar' xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' xmlns:app1='urn:baz' xmlns:app2='urn:foo' xmlns='urn:bar' attributeFormDefault='qualified' elementFormDefault='qualified' targetNamespace='urn:bar' id='NewDataSet' xmlns='' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
961 <xs:import schemaLocation='_app1.xsd' namespace='urn:baz' />
962 <xs:import schemaLocation='_app2.xsd' namespace='urn:foo' />
963 <xs:element msdata:IsDataSet='true' msdata:Locale='fi-FI' name='NewDataSet'>
964 <xs:complexType>
965 <xs:choice maxOccurs='unbounded'>
966 <xs:element ref='app2:NS1Table' />
967 <xs:element name='NS2Table'>
968 <xs:complexType />
969 </xs:element>
970 </xs:choice>
971 </xs:complexType>
972 </xs:element>
973 </xs:schema>";
974 #else
975 string schema = @"<?xml version='1.0' encoding='utf-16'?>
976 <xs:schema xmlns:app1='urn:baz' xmlns:app2='urn:foo' xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' xmlns:mstns='urn:bar' id='NewDataSet' elementFormDefault='qualified' attributeFormDefault='qualified' targetNamespace='urn:bar' xmlns='' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns='urn:bar'>
977 <!--ATTENTION: This schema contains references to other imported schemas-->
978 <xs:import namespace='urn:baz' schemaLocation='_app1.xsd' />
979 <xs:import namespace='urn:foo' schemaLocation='_app2.xsd' />
980 <xs:element name='NewDataSet' msdata:IsDataSet='true' msdata:Locale='fi-FI'>
981 <xs:complexType>
982 <xs:choice maxOccurs='unbounded'>
983 <xs:element ref='app2:NS1Table' />
984 <xs:element name='NS2Table'>
985 <xs:complexType>
986 </xs:complexType>
987 </xs:element>
988 </xs:choice>
989 </xs:complexType>
990 </xs:element>
991 </xs:schema>";
992 #endif
994 DataSet ds = new DataSet();
995 DataTable dt = new DataTable ();
996 dt.TableName = "NS1Table";
997 dt.Namespace = "urn:foo";
998 dt.Columns.Add ("column1");
999 dt.Columns.Add ("column2");
1000 dt.Columns [1].Namespace = "urn:baz";
1001 ds.Tables.Add (dt);
1002 DataTable dt2 = new DataTable ();
1003 dt2.TableName = "NS2Table";
1004 dt2.Namespace = "urn:bar";
1005 ds.Tables.Add (dt2);
1006 ds.Namespace = "urn:bar";
1007 StringWriter sw = new StringWriter ();
1008 XmlTextWriter xw = new XmlTextWriter (sw);
1009 xw.Formatting = Formatting.Indented;
1010 xw.QuoteChar = '\'';
1011 ds.WriteXmlSchema (xw);
1012 AssertEquals (schema, sw.ToString ().Replace ("\r\n", "\n"));
1015 [Test]
1016 public void IgnoreColumnEmptyNamespace ()
1018 DataColumn col = new DataColumn ("TEST");
1019 col.Namespace = "urn:foo";
1020 Console.WriteLine (col.Namespace == "");
1021 DataSet ds = new DataSet ("DS");
1022 ds.Namespace = "urn:foo";
1023 DataTable dt = new DataTable ("tab");
1024 ds.Tables.Add (dt);
1025 dt.Columns.Add (col);
1026 dt.Rows.Add (new object [] {"test"});
1027 StringWriter sw = new StringWriter ();
1028 ds.WriteXml (new XmlTextWriter (sw));
1029 string xml = @"<DS xmlns=""urn:foo""><tab><TEST>test</TEST></tab></DS>";
1030 AssertEquals (xml, sw.ToString ());
1033 [Test]
1034 public void SerializeDataSet ()
1036 // see GetReady() for current culture
1037 // string xml = "<?xml version='1.0' encoding='utf-16'?><DataSet><xs:schema id='DS' xmlns='' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:msdata='urn:schemas-microsoft-com:xml-msdata'><xs:element name='DS' msdata:IsDataSet='true' msdata:Locale='fi-FI'><xs:complexType><xs:choice maxOccurs='unbounded' /></xs:complexType></xs:element></xs:schema><diffgr:diffgram xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' xmlns:diffgr='urn:schemas-microsoft-com:xml-diffgram-v1' /></DataSet>";
1038 // Modified attribute order from MS result
1039 #if MS_NET // MS System.XML.dll + Mono System.Data.dll
1040 string xml = "<?xml version='1.0' encoding='utf-16'?><DataSet><xs:schema xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' id='DS' xmlns='' xmlns:xs='http://www.w3.org/2001/XMLSchema'><xs:element msdata:IsDataSet='true' msdata:Locale='fi-FI' name='DS'><xs:complexType><xs:choice maxOccurs='unbounded' /></xs:complexType></xs:element></xs:schema><diffgr:diffgram xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' xmlns:diffgr='urn:schemas-microsoft-com:xml-diffgram-v1' /></DataSet>";
1041 #else
1042 string xml = "<?xml version='1.0' encoding='utf-16'?><DataSet><xs:schema xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' id='DS' xmlns='' xmlns:xs='http://www.w3.org/2001/XMLSchema'><xs:element name='DS' msdata:IsDataSet='true' msdata:Locale='fi-FI'><xs:complexType><xs:choice maxOccurs='unbounded' /></xs:complexType></xs:element></xs:schema><diffgr:diffgram xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' xmlns:diffgr='urn:schemas-microsoft-com:xml-diffgram-v1' /></DataSet>";
1043 #endif
1044 DataSet ds = new DataSet ();
1045 ds.DataSetName = "DS";
1046 XmlSerializer ser = new XmlSerializer (typeof (DataSet));
1047 StringWriter sw = new StringWriter ();
1048 XmlTextWriter xw = new XmlTextWriter (sw);
1049 xw.QuoteChar = '\'';
1050 ser.Serialize (xw, ds);
1051 AssertEquals (xml, sw.ToString ());
1054 [Test]
1055 public void CloneCopy ()
1057 DataTable table = new DataTable ("pTable"); DataTable table1 = new DataTable ("cTable"); DataSet set = new DataSet ();
1059 set.Tables.Add (table);
1060 set.Tables.Add (table1); DataColumn col = new DataColumn ();
1061 col.ColumnName = "Id";
1062 col.DataType = Type.GetType ("System.Int32");
1063 table.Columns.Add (col);
1064 UniqueConstraint uc = new UniqueConstraint ("UK1", table.Columns[0] );
1065 table.Constraints.Add (uc);
1067 col = new DataColumn ();
1068 col.ColumnName = "Name";
1069 col.DataType = Type.GetType ("System.String");
1070 table.Columns.Add (col);
1072 col = new DataColumn ();
1073 col.ColumnName = "Id";
1074 col.DataType = Type.GetType ("System.Int32");
1075 table1.Columns.Add (col);
1077 col = new DataColumn ();
1078 col.ColumnName = "Name";
1079 col.DataType = Type.GetType ("System.String");
1080 table1.Columns.Add (col);
1081 ForeignKeyConstraint fc = new ForeignKeyConstraint ("FK1", table.Columns[0], table1.Columns[0] );
1082 table1.Constraints.Add (fc);
1085 DataRow row = table.NewRow ();
1087 row ["Id"] = 147;
1088 row ["name"] = "Row1";
1089 row.RowError = "Error#1";
1090 table.Rows.Add (row);
1092 row = table1.NewRow ();
1093 row ["Id"] = 147;
1094 row ["Name"] = "Row1";
1095 table1.Rows.Add (row);
1097 //Setting properties of DataSet
1098 set.CaseSensitive = true;
1099 set.DataSetName = "My DataSet";
1100 set.EnforceConstraints = false;
1101 set.Namespace = "Namespace#1";
1102 set.Prefix = "Prefix:1";
1103 DataRelation dr = new DataRelation ("DR", table.Columns [0],table1.Columns [0]);
1104 set.Relations.Add (dr);
1105 set.ExtendedProperties.Add ("TimeStamp", DateTime.Now);
1106 CultureInfo cultureInfo = new CultureInfo( "ar-SA" );
1107 set.Locale = cultureInfo;
1109 //Testing Copy ()
1110 DataSet copySet = set.Copy ();
1111 AssertEquals ("#A01", set.CaseSensitive, copySet.CaseSensitive);
1112 AssertEquals ("#A02", set.DataSetName, copySet.DataSetName);
1113 AssertEquals ("#A03", set.EnforceConstraints, copySet.EnforceConstraints);
1114 AssertEquals ("#A04", set.HasErrors, copySet.HasErrors);
1115 AssertEquals ("#A05", set.Namespace, copySet.Namespace);
1116 AssertEquals ("#A06", set.Prefix, copySet.Prefix);
1117 AssertEquals ("#A07", set.Relations.Count, copySet.Relations.Count);
1118 AssertEquals ("#A08", set.Tables.Count, copySet.Tables.Count);
1119 AssertEquals ("#A09", set.ExtendedProperties ["TimeStamp"], copySet.ExtendedProperties ["TimeStamp"]);
1120 for (int i = 0;i < copySet.Tables.Count; i++) {
1121 AssertEquals ("#A10", set.Tables [i].Rows.Count, copySet.Tables [i].Rows.Count);
1122 AssertEquals ("#A11", set.Tables [i].Columns.Count, copySet.Tables [i].Columns.Count);
1124 //Testing Clone ()
1125 copySet = set.Clone ();
1126 AssertEquals ("#A12", set.CaseSensitive, copySet.CaseSensitive);
1127 AssertEquals ("#A13", set.DataSetName, copySet.DataSetName);
1128 AssertEquals ("#A14", set.EnforceConstraints, copySet.EnforceConstraints);
1129 AssertEquals ("#A15", false, copySet.HasErrors);
1130 AssertEquals ("#A16", set.Namespace, copySet.Namespace);
1131 AssertEquals ("#A17", set.Prefix, copySet.Prefix);
1132 AssertEquals ("#A18", set.Relations.Count, copySet.Relations.Count);
1133 AssertEquals ("#A19", set.Tables.Count, copySet.Tables.Count);
1134 AssertEquals ("#A20", set.ExtendedProperties ["TimeStamp"], copySet.ExtendedProperties ["TimeStamp"]);
1135 for (int i = 0;i < copySet.Tables.Count; i++) {
1136 AssertEquals ("#A21", 0, copySet.Tables [i].Rows.Count);
1137 AssertEquals ("#A22", set.Tables [i].Columns.Count, copySet.Tables [i].Columns.Count);
1142 [Test]
1143 public void WriteNestedTableXml ()
1145 string xml = @"<NewDataSet>
1146 <tab1>
1147 <ident>1</ident>
1148 <name>hoge</name>
1149 <tab2>
1150 <timestamp>2004-05-05</timestamp>
1151 </tab2>
1152 </tab1>
1153 <tab1>
1154 <ident>2</ident>
1155 <name>fuga</name>
1156 <tab2>
1157 <timestamp>2004-05-06</timestamp>
1158 </tab2>
1159 </tab1>
1160 </NewDataSet>";
1161 DataSet ds = new DataSet ();
1162 DataTable dt = new DataTable ("tab1");
1163 dt.Columns.Add ("ident");
1164 dt.Columns.Add ("name");
1165 dt.Rows.Add (new object [] {"1", "hoge"});
1166 dt.Rows.Add (new object [] {"2", "fuga"});
1167 DataTable dt2 = new DataTable ("tab2");
1168 dt2.Columns.Add ("idref");
1169 dt2.Columns [0].ColumnMapping = MappingType.Hidden;
1170 dt2.Columns.Add ("timestamp");
1171 dt2.Rows.Add (new object [] {"1", "2004-05-05"});
1172 dt2.Rows.Add (new object [] {"2", "2004-05-06"});
1173 ds.Tables.Add (dt);
1174 ds.Tables.Add (dt2);
1175 DataRelation rel = new DataRelation ("rel", dt.Columns [0], dt2.Columns [0]);
1176 rel.Nested = true;
1177 ds.Relations.Add (rel);
1178 StringWriter sw = new StringWriter ();
1179 ds.WriteXml (sw);
1180 AssertEquals (xml, sw.ToString ().Replace ("\r\n", "\n"));
1183 [Test]
1184 public void WriteXmlToStream ()
1186 string xml = "<set><table1><col1>sample text</col1><col2/></table1><table2 attr='value'><col3>sample text 2</col3></table2></set>";
1187 DataSet ds = new DataSet ();
1188 ds.ReadXml (new StringReader (xml));
1189 MemoryStream ms = new MemoryStream ();
1190 ds.WriteXml (ms);
1191 MemoryStream ms2 = new MemoryStream (ms.ToArray ());
1192 StreamReader sr = new StreamReader (ms2, Encoding.UTF8);
1193 string result = @"<set>
1194 <table1>
1195 <col1>sample text</col1>
1196 <col2 />
1197 </table1>
1198 <table2 attr=""value"">
1199 <col3>sample text 2</col3>
1200 </table2>
1201 </set>";
1202 AssertEquals (result, sr.ReadToEnd ().Replace ("\r\n", "\n"));
1205 [Test]
1206 public void WtiteXmlEncodedXml ()
1208 string xml = @"<an_x0020_example_x0020_dataset.>
1209 <WOW_x0021__x0020_that_x0027_s_x0020_nasty...>
1210 <URL_x0020_is_x0020_http_x003A__x002F__x002F_www.go-mono.com>content string.</URL_x0020_is_x0020_http_x003A__x002F__x002F_www.go-mono.com>
1211 </WOW_x0021__x0020_that_x0027_s_x0020_nasty...>
1212 </an_x0020_example_x0020_dataset.>";
1213 DataSet ds = new DataSet ("an example dataset.");
1214 ds.Tables.Add (new DataTable ("WOW! that's nasty..."));
1215 ds.Tables [0].Columns.Add ("URL is http://www.go-mono.com");
1216 ds.Tables [0].Rows.Add (new object [] {"content string."});
1217 StringWriter sw = new StringWriter ();
1218 ds.WriteXml (sw);
1219 AssertEquals (xml, sw.ToString ().Replace ("\r\n", "\n"));
1222 [Test]
1223 public void ReadWriteXml2 ()
1225 string xml = "<FullTextResponse><Domains><AvailResponse info='y' name='novell-ximian-group' /><AvailResponse info='n' name='ximian' /></Domains></FullTextResponse>";
1226 DataSet ds = new DataSet ();
1227 ds.ReadXml (new StringReader (xml));
1228 AssertDataSet ("ds", ds, "FullTextResponse", 2, 1);
1229 DataTable dt = ds.Tables [0];
1230 AssertDataTable ("dt1", dt, "Domains", 1, 1, 0, 1, 1, 1);
1231 dt = ds.Tables [1];
1232 AssertDataTable ("dt2", dt, "AvailResponse", 3, 2, 1, 0, 1, 0);
1233 StringWriter sw = new StringWriter ();
1234 XmlTextWriter xtw = new XmlTextWriter (sw);
1235 xtw.QuoteChar = '\'';
1236 ds.WriteXml (xtw);
1237 AssertEquals (xml, sw.ToString ());
1240 [Test]
1241 public void DeserializeModifiedDataSet ()
1243 // Serialization begins
1244 DataSet prevDs = new DataSet ();
1245 DataTable dt = prevDs.Tables.Add ();
1246 dt.Columns.Add(new DataColumn("Id", typeof(string)));
1248 DataRow dr = dt.NewRow();
1249 dr [0] = "a";
1250 dt.Rows.Add (dr);
1251 prevDs.AcceptChanges ();
1252 dr = prevDs.Tables[0].Rows[0];
1253 dr [0] = "b";
1255 XmlSerializer serializer = new XmlSerializer (typeof (DataSet));
1256 StringWriter sw = new StringWriter ();
1257 XmlTextWriter xw = new XmlTextWriter (sw);
1258 xw.QuoteChar = '\'';
1259 serializer.Serialize (xw, prevDs);
1261 // Deserialization begins
1262 StringReader sr = new StringReader (sw.ToString ());
1263 XmlTextReader reader = new XmlTextReader (sr);
1264 XmlSerializer serializer1 = new XmlSerializer (typeof (DataSet));
1265 DataSet ds = serializer1.Deserialize (reader) as DataSet;
1266 AssertEquals ("deserialization after modification does not give original values",
1267 prevDs.Tables[0].Rows [0][0,DataRowVersion.Original].ToString (),
1268 ds.Tables[0].Rows [0][0,DataRowVersion.Original].ToString ());
1269 AssertEquals ("deserialization after modification oes not give current values",
1270 prevDs.Tables[0].Rows [0][0,DataRowVersion.Current].ToString (),
1271 ds.Tables[0].Rows [0][0,DataRowVersion.Current].ToString ());
1274 /// <summary>
1275 /// Test for testing DataSet.Clear method with foriegn key relations
1276 /// This is expected to clear all the related datatable rows also
1277 /// </summary>
1278 [Test]
1279 public void DataSetClearTest ()
1281 DataSet ds = new DataSet ();
1282 DataTable parent = ds.Tables.Add ("Parent");
1283 DataTable child = ds.Tables.Add ("Child");
1285 parent.Columns.Add ("id", typeof (int));
1286 child.Columns.Add ("ref_id", typeof(int));
1288 child.Constraints.Add (new ForeignKeyConstraint ("fk_constraint", parent.Columns [0], child.Columns [0]));
1290 DataRow dr = parent.NewRow ();
1291 dr [0] = 1;
1292 parent.Rows.Add (dr);
1293 dr.AcceptChanges ();
1295 dr = child.NewRow ();
1296 dr [0] = 1;
1297 child.Rows.Add (dr);
1298 dr.AcceptChanges ();
1300 try {
1301 ds.Clear (); // this should clear all the rows in parent & child tables
1302 } catch (Exception e) {
1303 throw (new Exception ("Exception should not have been thrown at Clear method" + e.ToString ()));
1305 Assertion.AssertEquals ("parent table rows should not exist!", 0, parent.Rows.Count);
1306 Assertion.AssertEquals ("child table rows should not exist!", 0, child.Rows.Count);
1309 [Test]
1310 public void CloneSubClassTest()
1312 MyDataSet ds1 = new MyDataSet();
1313 MyDataSet ds = (MyDataSet)(ds1.Clone());
1314 AssertEquals("A#01",2,MyDataSet.count);
1320 public class MyDataSet:DataSet {
1322 public static int count = 0;
1324 public MyDataSet() {
1326 count++;