1 // MonoTests.System.Data.DataSetTest.cs
4 // Ville Palo <vi64pa@koti.soon.fi>
5 // Martin Willemoes Hansen <mwh@sysrq.dk>
6 // Atsushi Enomoto <atsushi@ximian.com>
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:
22 // The above copyright notice and this permission notice shall be
23 // included in all copies or substantial portions of the Software.
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
;
38 using System
.Xml
.Serialization
;
41 using System
.Data
.SqlTypes
;
42 using System
.Globalization
;
43 using System
.Threading
;
46 namespace MonoTests
.System
.Data
49 public class DataSetTest
: DataSetAssertion
51 string EOL
= Environment
.NewLine
;
54 public void GetReady()
56 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("fi-FI");
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
);
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
);
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
);
206 AssertEquals ("test#03", " <xs:element name=\"test_dataset\" msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\">", substring
);
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
);
236 AssertEquals ("test#09", " <xs:element minOccurs=\"0\" default=\"test_default_value\" name=\"first\" msdata:Caption=\"test\">", substring
);
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
);
375 AssertEquals ("test#40", " <xs:unique name=\"second_test_table_Constraint1\" msdata:ConstraintName=\"Constraint1\">", substring
);
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
);
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
);
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
);
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
);
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
);
563 AssertEquals ("test#03", " <xs:element name=\"Root\" msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\">", substring
);
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
);
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
);
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
);
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
);
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
);
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'>
947 <xs:choice maxOccurs='unbounded'>
948 <xs:element ref='app2:NS1Table' />
949 <xs:element name='NS2Table'>
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'>
965 <xs:choice maxOccurs='unbounded'>
966 <xs:element ref='app2:NS1Table' />
967 <xs:element name='NS2Table'>
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'>
982 <xs:choice maxOccurs='unbounded'>
983 <xs:element ref='app2:NS1Table' />
984 <xs:element name='NS2Table'>
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";
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"));
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");
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 ());
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>";
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>";
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 ());
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 ();
1088 row
["name"] = "Row1";
1089 row
.RowError
= "Error#1";
1090 table
.Rows
.Add (row
);
1092 row
= table1
.NewRow ();
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
;
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
);
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
);
1143 public void WriteNestedTableXml ()
1145 string xml
= @"<NewDataSet>
1150 <timestamp>2004-05-05</timestamp>
1157 <timestamp>2004-05-06</timestamp>
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"}
);
1174 ds
.Tables
.Add (dt2
);
1175 DataRelation rel
= new DataRelation ("rel", dt
.Columns
[0], dt2
.Columns
[0]);
1177 ds
.Relations
.Add (rel
);
1178 StringWriter sw
= new StringWriter ();
1180 AssertEquals (xml
, sw
.ToString ().Replace ("\r\n", "\n"));
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 ();
1191 MemoryStream ms2
= new MemoryStream (ms
.ToArray ());
1192 StreamReader sr
= new StreamReader (ms2
, Encoding
.UTF8
);
1193 string result
= @"<set>
1195 <col1>sample text</col1>
1198 <table2 attr=""value"">
1199 <col3>sample text 2</col3>
1202 AssertEquals (result
, sr
.ReadToEnd ().Replace ("\r\n", "\n"));
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 ();
1219 AssertEquals (xml
, sw
.ToString ().Replace ("\r\n", "\n"));
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);
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
= '\'';
1237 AssertEquals (xml
, sw
.ToString ());
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();
1251 prevDs
.AcceptChanges ();
1252 dr
= prevDs
.Tables
[0].Rows
[0];
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 ());
1275 /// Test for testing DataSet.Clear method with foriegn key relations
1276 /// This is expected to clear all the related datatable rows also
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 ();
1292 parent
.Rows
.Add (dr
);
1293 dr
.AcceptChanges ();
1295 dr
= child
.NewRow ();
1297 child
.Rows
.Add (dr
);
1298 dr
.AcceptChanges ();
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
);
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() {