| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078 |
- // MonoTests.System.Data.DataSetTest.cs
- //
- // Authors:
- // Ville Palo <[email protected]>
- // Martin Willemoes Hansen <[email protected]>
- // Atsushi Enomoto <[email protected]>
- //
- // (C) Copyright 2002 Ville Palo
- // (C) Copyright 2003 Martin Willemoes Hansen
- //
- // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to
- // permit persons to whom the Software is furnished to do so, subject to
- // the following conditions:
- //
- // The above copyright notice and this permission notice shall be
- // included in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- //
- using NUnit.Framework;
- using System;
- using System.Xml;
- using System.Xml.Serialization;
- using System.IO;
- using System.Data;
- using System.Data.SqlTypes;
- using System.Globalization;
- using System.Threading;
- using System.Text;
- using AssertType = NUnit.Framework.Assert;
- namespace MonoTests.System.Data
- {
- [TestFixture]
- public class DataSetTest : DataSetAssertion
- {
- string EOL = Environment.NewLine;
- CultureInfo currentCultureBackup;
- [SetUp]
- public void GetReady()
- {
- currentCultureBackup = Thread.CurrentThread.CurrentCulture;
- Thread.CurrentThread.CurrentCulture = new CultureInfo ("fi-FI");
- }
- [TearDown]
- public void Teardown ()
- {
- Thread.CurrentThread.CurrentCulture = currentCultureBackup;
- }
- [Test]
- public void Properties ()
- {
- DataSet ds = new DataSet ();
- AssertEquals ("default namespace", String.Empty, ds.Namespace);
- ds.Namespace = null; // setting null == setting ""
- AssertEquals ("after setting null to namespace", String.Empty, ds.Namespace);
- AssertEquals ("default prefix", String.Empty, ds.Prefix);
- ds.Prefix = null; // setting null == setting ""
- AssertEquals ("after setting null to prefix", String.Empty, ds.Prefix);
- }
- [Test]
- public void ReadXmlSchema ()
- {
- DataSet ds = new DataSet ();
- ds.ReadXmlSchema ("Test/System.Data/own_schema.xsd");
-
- AssertEquals ("test#01", 2, ds.Tables.Count);
- DataTable Table = ds.Tables [0];
- AssertEquals ("test#02", "test_table", Table.TableName);
- AssertEquals ("test#03", "", Table.Namespace);
- AssertEquals ("test#04", 2, Table.Columns.Count);
- AssertEquals ("test#05", 0, Table.Rows.Count);
- AssertEquals ("test#06", false, Table.CaseSensitive);
- AssertEquals ("test#07", 1, Table.Constraints.Count);
- AssertEquals ("test#08", "", Table.Prefix);
-
- Constraint cons = Table.Constraints [0];
- AssertEquals ("test#09", "Constraint1", cons.ConstraintName.ToString ());
- AssertEquals ("test#10", "Constraint1", cons.ToString ());
-
- DataColumn column = Table.Columns [0];
- AssertEquals ("test#11", true, column.AllowDBNull);
- AssertEquals ("test#12", false, column.AutoIncrement);
- AssertEquals ("test#13", 0L, column.AutoIncrementSeed);
- AssertEquals ("test#14", 1L, column.AutoIncrementStep);
- AssertEquals ("test#15", "test", column.Caption);
- AssertEquals ("test#16", "Element", column.ColumnMapping.ToString ());
- AssertEquals ("test#17", "first", column.ColumnName);
- AssertEquals ("test#18", "System.String", column.DataType.ToString ());
- AssertEquals ("test#19", "test_default_value", column.DefaultValue.ToString ());
- AssertEquals ("test#20", false, column.DesignMode);
- AssertEquals ("test#21", "", column.Expression);
- AssertEquals ("test#22", 100, column.MaxLength);
- AssertEquals ("test#23", "", column.Namespace);
- AssertEquals ("test#24", 0, column.Ordinal);
- AssertEquals ("test#25", "", column.Prefix);
- AssertEquals ("test#26", false, column.ReadOnly);
- AssertEquals ("test#27", true, column.Unique);
-
- DataColumn column2 = Table.Columns [1];
- AssertEquals ("test#28", true, column2.AllowDBNull);
- AssertEquals ("test#29", false, column2.AutoIncrement);
- AssertEquals ("test#30", 0L, column2.AutoIncrementSeed);
- AssertEquals ("test#31", 1L, column2.AutoIncrementStep);
- AssertEquals ("test#32", "second", column2.Caption);
- AssertEquals ("test#33", "Element", column2.ColumnMapping.ToString ());
- AssertEquals ("test#34", "second", column2.ColumnName);
- AssertEquals ("test#35", "System.Data.SqlTypes.SqlGuid", column2.DataType.ToString ());
- AssertEquals ("test#36", "", column2.DefaultValue.ToString ());
- AssertEquals ("test#37", false, column2.DesignMode);
- AssertEquals ("test#38", "", column2.Expression);
- AssertEquals ("test#39", -1, column2.MaxLength);
- AssertEquals ("test#40", "", column2.Namespace);
- AssertEquals ("test#41", 1, column2.Ordinal);
- AssertEquals ("test#42", "", column2.Prefix);
- AssertEquals ("test#43", false, column2.ReadOnly);
- AssertEquals ("test#44", false, column2.Unique);
-
- DataTable Table2 = ds.Tables [1];
- AssertEquals ("test#45", "second_test_table", Table2.TableName);
- AssertEquals ("test#46", "", Table2.Namespace);
- AssertEquals ("test#47", 1, Table2.Columns.Count);
- AssertEquals ("test#48", 0, Table2.Rows.Count);
- AssertEquals ("test#49", false, Table2.CaseSensitive);
- AssertEquals ("test#50", 1, Table2.Constraints.Count);
- AssertEquals ("test#51", "", Table2.Prefix);
-
- DataColumn column3 = Table2.Columns [0];
- AssertEquals ("test#52", true, column3.AllowDBNull);
- AssertEquals ("test#53", false, column3.AutoIncrement);
- AssertEquals ("test#54", 0L, column3.AutoIncrementSeed);
- AssertEquals ("test#55", 1L, column3.AutoIncrementStep);
- AssertEquals ("test#56", "second_first", column3.Caption);
- AssertEquals ("test#57", "Element", column3.ColumnMapping.ToString ());
- AssertEquals ("test#58", "second_first", column3.ColumnName);
- AssertEquals ("test#59", "System.String", column3.DataType.ToString ());
- AssertEquals ("test#60", "default_value", column3.DefaultValue.ToString ());
- AssertEquals ("test#61", false, column3.DesignMode);
- AssertEquals ("test#62", "", column3.Expression);
- AssertEquals ("test#63", 100, column3.MaxLength);
- AssertEquals ("test#64", "", column3.Namespace);
- AssertEquals ("test#65", 0, column3.Ordinal);
- AssertEquals ("test#66", "", column3.Prefix);
- AssertEquals ("test#67", false, column3.ReadOnly);
- AssertEquals ("test#68", true, column3.Unique);
- }
- [Test]
- public void OwnWriteXmlSchema ()
- {
- DataSet ds = new DataSet ("test_dataset");
- DataTable table = new DataTable ("test_table");
- DataColumn column = new DataColumn ("first", typeof (string));
- column.AllowDBNull = true;
- column.DefaultValue = "test_default_value";
- column.MaxLength = 100;
- column.Caption = "test";
- column.Unique = true;
- table.Columns.Add (column);
- DataColumn column2 = new DataColumn ("second", typeof (SqlGuid));
- column2.ColumnMapping = MappingType.Element;
- table.Columns.Add (column2);
- ds.Tables.Add (table);
-
- DataTable table2 = new DataTable ("second_test_table");
- DataColumn column3 = new DataColumn ("second_first", typeof (string));
- column3.AllowDBNull = true;
- column3.DefaultValue = "default_value";
- column3.MaxLength = 100;
- column3.Unique = true;
- table2.Columns.Add (column3);
- ds.Tables.Add (table2);
- TextWriter writer = new StringWriter ();
- ds.WriteXmlSchema (writer);
- string TextString = GetNormalizedSchema (writer.ToString ());
- // string TextString = writer.ToString ();
- string substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#01", "<?xml version=\"1.0\" encoding=\"utf-16\"?>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // 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);
- AssertEquals ("test#02", "<xs:schema id=\"test_dataset\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#03", " <xs:element name=\"test_dataset\" msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\">", substring);
- AssertEquals ("test#03", " <xs:element msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\" name=\"test_dataset\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#04", " <xs:complexType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#05", " <xs:choice maxOccurs=\"unbounded\">", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#06", " <xs:element name=\"test_table\">", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#07", " <xs:complexType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#08", " <xs:sequence>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#09", " <xs:element name=\"first\" msdata:Caption=\"test\" default=\"test_default_value\" minOccurs=\"0\">", substring);
- AssertEquals ("test#09", " <xs:element default=\"test_default_value\" minOccurs=\"0\" msdata:Caption=\"test\" name=\"first\">", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#10", " <xs:simpleType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#11", " <xs:restriction base=\"xs:string\">", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#12", " <xs:maxLength value=\"100\" />", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#13", " </xs:restriction>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#14", " </xs:simpleType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#15", " </xs:element>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // 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);
- #if NET_2_0
- AssertEquals ("test#16", " <xs:element minOccurs=\"0\" msdata:DataType=\"System.Data.SqlTypes.SqlGuid, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" name=\"second\" type=\"xs:string\" />", substring);
- #else
- AssertEquals ("test#16", " <xs:element minOccurs=\"0\" msdata:DataType=\"System.Data.SqlTypes.SqlGuid, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" name=\"second\" type=\"xs:string\" />", substring);
- #endif
- if (substring.IndexOf ("<xs:element") < 0)
- Fail ("test#16: " + substring);
- if (substring.IndexOf ("name=\"second\"") < 0)
- Fail ("test#16: " + substring);
- if (substring.IndexOf ("msdata:DataType=\"System.Data.SqlTypes.SqlGuid, System.Data, Version=") < 0)
- Fail ("test#16: " + substring);
- if (substring.IndexOf ("type=\"xs:string\"") < 0)
- Fail ("test#16: " + substring);
- if (substring.IndexOf ("minOccurs=\"0\"") < 0)
- Fail ("test#16: " + substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#17", " </xs:sequence>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#18", " </xs:complexType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#19", " </xs:element>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#20", " <xs:element name=\"second_test_table\">", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#21", " <xs:complexType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#22", " <xs:sequence>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#23", " <xs:element name=\"second_first\" default=\"default_value\" minOccurs=\"0\">", substring);
- AssertEquals ("test#23", " <xs:element default=\"default_value\" minOccurs=\"0\" name=\"second_first\">", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#24", " <xs:simpleType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#25", " <xs:restriction base=\"xs:string\">", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#26", " <xs:maxLength value=\"100\" />", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#27", " </xs:restriction>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#28", " </xs:simpleType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#29", " </xs:element>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#30", " </xs:sequence>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#31", " </xs:complexType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#32", " </xs:element>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#33", " </xs:choice>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#34", " </xs:complexType>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#36", " <xs:unique name=\"Constraint1\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#37", " <xs:selector xpath=\".//test_table\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#38", " <xs:field xpath=\"first\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#39", " </xs:unique>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#40", " <xs:unique name=\"second_test_table_Constraint1\" msdata:ConstraintName=\"Constraint1\">", substring);
- AssertEquals ("test#40", " <xs:unique msdata:ConstraintName=\"Constraint1\" name=\"second_test_table_Constraint1\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#41", " <xs:selector xpath=\".//second_test_table\" />", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#42", " <xs:field xpath=\"second_first\" />", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#43", " </xs:unique>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#44", " </xs:element>", substring);
- AssertEquals ("test#45", "</xs:schema>", TextString);
- }
-
- [Test]
- public void ReadWriteXml ()
- {
- DataSet ds = new DataSet ();
- ds.ReadXml ("Test/System.Data/region.xml");
- TextWriter writer = new StringWriter ();
- ds.WriteXml (writer);
-
- string TextString = writer.ToString ();
- string substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#01", "<Root>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#02", " <Region>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#03", " <RegionID>1</RegionID>", substring);
- // Here the end of line is text markup "\n"
- substring = TextString.Substring (0, TextString.IndexOf('\n'));
- TextString = TextString.Substring (TextString.IndexOf('\n') + 1);
- AssertEquals ("test#04", " <RegionDescription>Eastern", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#05", " </RegionDescription>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#06", " </Region>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#07", " <Region>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#08", " <RegionID>2</RegionID>", substring);
- // Here the end of line is text markup "\n"
- substring = TextString.Substring (0, TextString.IndexOf('\n'));
- TextString = TextString.Substring (TextString.IndexOf('\n') + 1);
- AssertEquals ("test#09", " <RegionDescription>Western", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#10", " </RegionDescription>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#11", " </Region>", substring);
- AssertEquals ("test#11", "</Root>", TextString);
- }
- [Test]
- public void ReadWriteXmlDiffGram ()
- {
- DataSet ds = new DataSet ();
- // It is not a diffgram, so no data loading should be done.
- ds.ReadXml ("Test/System.Data/region.xml", XmlReadMode.DiffGram);
- TextWriter writer = new StringWriter ();
- ds.WriteXml (writer);
-
- string TextString = writer.ToString ();
- AssertEquals ("test#01", "<NewDataSet />", TextString);
- ds.WriteXml (writer, XmlWriteMode.DiffGram);
- TextString = writer.ToString ();
-
- AssertEquals ("test#02", "<NewDataSet /><diffgr:diffgram xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:diffgr=\"urn:schemas-microsoft-com:xml-diffgram-v1\" />", TextString);
-
- ds = new DataSet ();
- ds.ReadXml ("Test/System.Data/region.xml");
- DataTable table = ds.Tables ["Region"];
- table.Rows [0] [0] = "64";
- ds.ReadXml ("Test/System.Data/region.xml", XmlReadMode.DiffGram);
- ds.WriteXml (writer, XmlWriteMode.DiffGram);
-
- TextString = writer.ToString ();
- string substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- 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);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#04", " <Root>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#05", " <Region diffgr:id=\"Region1\" msdata:rowOrder=\"0\" diffgr:hasChanges=\"inserted\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#06", " <RegionID>64</RegionID>", substring);
- // not EOL but literal '\n'
- substring = TextString.Substring (0, TextString.IndexOf('\n'));
- TextString = TextString.Substring (TextString.IndexOf('\n') + 1);
- AssertEquals ("test#07", " <RegionDescription>Eastern", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#07", " </RegionDescription>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#08", " </Region>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#09", " <Region diffgr:id=\"Region2\" msdata:rowOrder=\"1\" diffgr:hasChanges=\"inserted\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#10", " <RegionID>2</RegionID>", substring);
- // not EOL but literal '\n'
- substring = TextString.Substring (0, TextString.IndexOf('\n'));
- TextString = TextString.Substring (TextString.IndexOf('\n') + 1);
- AssertEquals ("test#11", " <RegionDescription>Western", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#12", " </RegionDescription>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#13", " </Region>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#14", " </Root>", substring);
-
- AssertEquals ("test#15", "</diffgr:diffgram>", TextString);
- }
- [Test]
- public void WriteXmlSchema ()
- {
- DataSet ds = new DataSet ();
- ds.ReadXml ("Test/System.Data/region.xml");
- TextWriter writer = new StringWriter ();
- ds.WriteXmlSchema (writer);
-
- string TextString = GetNormalizedSchema (writer.ToString ());
- // string TextString = writer.ToString ();
-
- string substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#01", "<?xml version=\"1.0\" encoding=\"utf-16\"?>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // 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);
- AssertEquals ("test#02", "<xs:schema id=\"Root\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#03", " <xs:element name=\"Root\" msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\">", substring);
- AssertEquals ("test#03", " <xs:element msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\" name=\"Root\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#04", " <xs:complexType>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#05", " <xs:choice maxOccurs=\"unbounded\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#06", " <xs:element name=\"Region\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#07", " <xs:complexType>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#08", " <xs:sequence>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#09", " <xs:element name=\"RegionID\" type=\"xs:string\" minOccurs=\"0\" />", substring);
- AssertEquals ("test#09", " <xs:element minOccurs=\"0\" name=\"RegionID\" type=\"xs:string\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#10", " <xs:element name=\"RegionDescription\" type=\"xs:string\" minOccurs=\"0\" />", substring);
- AssertEquals ("test#10", " <xs:element minOccurs=\"0\" name=\"RegionDescription\" type=\"xs:string\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#11", " </xs:sequence>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#12", " </xs:complexType>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#13", " </xs:element>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#14", " </xs:choice>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#15", " </xs:complexType>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#16", " </xs:element>", substring);
- AssertEquals ("test#17", "</xs:schema>", TextString);
- }
-
- [Test]
- [Ignore ("MS behavior is far from consistent to be regarded as a reference implementation.")]
- // MS ReadXmlSchema() is too inconsistent to regard as a
- // reference implementation. To find the reason why, try to
- // read store2.xsd and store4.xsd, write and compare for each
- // DataSet property.
- public void ReadWriteXmlSchemaIgnoreSchema ()
- {
- DataSet ds = new DataSet ();
- ds.ReadXmlSchema ("Test/System.Data/store.xsd");
- AssertDataSet ("read DataSet", ds, "NewDataSet", 3, 2);
- AssertDataTable ("read bookstore table", ds.Tables [0], "bookstore", 1, 0, 0, 1, 1, 1);
- AssertDataTable ("read book table", ds.Tables [1], "book", 5, 0, 1, 1, 2, 1);
- ds.ReadXml ("Test/System.Data/region.xml", XmlReadMode.IgnoreSchema);
- TextWriter writer = new StringWriter ();
-
- ds.WriteXmlSchema (writer);
- string TextString = GetNormalizedSchema (writer.ToString ());
- // string TextString = writer.ToString ();
-
- string substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#01", "<?xml version=\"1.0\" encoding=\"utf-16\"?>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // 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);
- AssertEquals ("test#02", "<xs:schema id=\"NewDataSet\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#03", " <xs:complexType name=\"bookstoreType\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#04", " <xs:sequence>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#05", " <xs:element name=\"book\" type=\"bookType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />", substring);
- AssertEquals ("test#05", " <xs:element maxOccurs=\"unbounded\" minOccurs=\"0\" name=\"book\" type=\"bookType\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#06", " </xs:sequence>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#07", " </xs:complexType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#08", " <xs:complexType name=\"bookType\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#09", " <xs:sequence>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#10", " <xs:element name=\"title\" type=\"xs:string\" msdata:Ordinal=\"1\" />", substring);
-
- AssertEquals ("test#10", " <xs:element msdata:Ordinal=\"1\" name=\"title\" type=\"xs:string\" />", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#11", " <xs:element name=\"price\" type=\"xs:decimal\" msdata:Ordinal=\"2\" />", substring);
- AssertEquals ("test#11", " <xs:element msdata:Ordinal=\"2\" name=\"price\" type=\"xs:decimal\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#12", " <xs:element name=\"author\" type=\"authorName\" minOccurs=\"0\" maxOccurs=\"unbounded\" />", substring);
- AssertEquals ("test#12", " <xs:element maxOccurs=\"unbounded\" minOccurs=\"0\" name=\"author\" type=\"authorName\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#13", " </xs:sequence>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#14", " <xs:attribute name=\"genre\" type=\"xs:string\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#15", " </xs:complexType>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#16", " <xs:complexType name=\"authorName\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#17", " <xs:sequence>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#18", " <xs:element name=\"first-name\" type=\"xs:string\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#19", " <xs:element name=\"last-name\" type=\"xs:string\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#20", " </xs:sequence>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#21", " </xs:complexType>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#22", " <xs:element name=\"bookstore\" type=\"bookstoreType\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#23", " <xs:element name=\"NewDataSet\" msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\">", substring);
- AssertEquals ("test#23", " <xs:element msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\" name=\"NewDataSet\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#24", " <xs:complexType>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#25", " <xs:choice maxOccurs=\"unbounded\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#26", " <xs:element ref=\"bookstore\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#27", " </xs:choice>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#28", " </xs:complexType>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#29", " </xs:element>", substring);
- AssertEquals ("test#30", "</xs:schema>", TextString);
- }
-
- [Test]
- [Ignore ("MS behavior is far from consistent to be regarded as a reference implementation.")]
- // See comments on ReadWriteXmlSchemaIgnoreSchema().
- public void ReadWriteXmlSchema ()
- {
- DataSet ds = new DataSet ();
- ds.ReadXmlSchema ("Test/System.Data/store.xsd");
- // check dataset properties before testing write
- AssertDataSet ("ds", ds, "NewDataSet", 3, 2);
- AssertDataTable ("tab1", ds.Tables [0], "bookstore", 1, 0, 0, 1, 1, 1);
- AssertDataTable ("tab2", ds.Tables [1], "book", 5, 0, 1, 1, 2, 1);
- AssertDataTable ("tab3", ds.Tables [2], "author", 3, 0, 1, 0, 1, 0);
- // FIXME: currently order is not compatible. Use name as index
- AssertDataRelation ("rel1", ds.Relations ["book_author"], "book_author", true, new string [] {"book_Id"}, new string [] {"book_Id"}, true, true);
- AssertDataRelation ("rel2", ds.Relations ["bookstore_book"], "bookstore_book", true, new string [] {"bookstore_Id"}, new string [] {"bookstore_Id"}, true, true);
- ds.ReadXml ("Test/System.Data/region.xml", XmlReadMode.InferSchema);
- TextWriter writer = new StringWriter ();
- ds.WriteXmlSchema (writer);
-
- string TextString = GetNormalizedSchema (writer.ToString ());
- // string TextString = writer.ToString ();
-
- string substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#01", "<?xml version=\"1.0\" encoding=\"utf-16\"?>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // 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);
- AssertEquals ("test#02", "<xs:schema id=\"Root\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#03", " <xs:complexType name=\"bookstoreType\">", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#04", " <xs:sequence>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#05", " <xs:element name=\"book\" type=\"bookType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />", substring);
- AssertEquals ("test#05", " <xs:element maxOccurs=\"unbounded\" minOccurs=\"0\" name=\"book\" type=\"bookType\" />", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#06", " </xs:sequence>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#07", " </xs:complexType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#08", " <xs:complexType name=\"bookType\">", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#09", " <xs:sequence>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#10", " <xs:element name=\"title\" type=\"xs:string\" msdata:Ordinal=\"1\" />", substring);
- AssertEquals ("test#10", " <xs:element msdata:Ordinal=\"1\" name=\"title\" type=\"xs:string\" />", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#11", " <xs:element name=\"price\" type=\"xs:decimal\" msdata:Ordinal=\"2\" />", substring);
- AssertEquals ("test#11", " <xs:element msdata:Ordinal=\"2\" name=\"price\" type=\"xs:decimal\" />", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#12", " <xs:element name=\"author\" type=\"authorName\" minOccurs=\"0\" maxOccurs=\"unbounded\" />", substring);
- AssertEquals ("test#12", " <xs:element maxOccurs=\"unbounded\" minOccurs=\"0\" name=\"author\" type=\"authorName\" />", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#13", " </xs:sequence>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#14", " <xs:attribute name=\"genre\" type=\"xs:string\" />", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#15", " </xs:complexType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#16", " <xs:complexType name=\"authorName\">", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#17", " <xs:sequence>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#18", " <xs:element name=\"first-name\" type=\"xs:string\" />", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#19", " <xs:element name=\"last-name\" type=\"xs:string\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#20", " </xs:sequence>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#21", " </xs:complexType>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#22", " <xs:element name=\"bookstore\" type=\"bookstoreType\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#23", " <xs:element name=\"Root\" msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\">", substring);
- AssertEquals ("test#23", " <xs:element msdata:IsDataSet=\"true\" msdata:Locale=\"fi-FI\" name=\"Root\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#24", " <xs:complexType>", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#25", " <xs:choice maxOccurs=\"unbounded\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#26", " <xs:element ref=\"bookstore\" />", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#27", " <xs:element name=\"Region\">", substring);
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#28", " <xs:complexType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#29", " <xs:sequence>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#30", " <xs:element name=\"RegionID\" type=\"xs:string\" minOccurs=\"0\" />", substring);
- AssertEquals ("test#30", " <xs:element minOccurs=\"0\" name=\"RegionID\" type=\"xs:string\" />", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- // This is original DataSet.WriteXmlSchema() output
- // AssertEquals ("test#31", " <xs:element name=\"RegionDescription\" type=\"xs:string\" minOccurs=\"0\" />", substring);
- AssertEquals ("test#31", " <xs:element minOccurs=\"0\" name=\"RegionDescription\" type=\"xs:string\" />", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#32", " </xs:sequence>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#33", " </xs:complexType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#34", " </xs:element>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#35", " </xs:choice>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#36", " </xs:complexType>", substring);
-
- substring = TextString.Substring (0, TextString.IndexOf(EOL));
- TextString = TextString.Substring (TextString.IndexOf(EOL) + EOL.Length);
- AssertEquals ("test#37", " </xs:element>", substring);
- AssertEquals ("test#38", "</xs:schema>", TextString);
- }
- [Test]
- [Category ("NotWorking")]
- public void WriteDifferentNamespaceSchema ()
- {
- string schema = @"<?xml version='1.0' encoding='utf-16'?>
- <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'>
- <!--ATTENTION: This schema contains references to other imported schemas-->
- <xs:import namespace='urn:baz' schemaLocation='_app1.xsd' />
- <xs:import namespace='urn:foo' schemaLocation='_app2.xsd' />
- <xs:element name='NewDataSet' msdata:IsDataSet='true' msdata:Locale='fi-FI'>
- <xs:complexType>
- <xs:choice maxOccurs='unbounded'>
- <xs:element ref='app2:NS1Table' />
- <xs:element name='NS2Table'>
- <xs:complexType>
- </xs:complexType>
- </xs:element>
- </xs:choice>
- </xs:complexType>
- </xs:element>
- </xs:schema>";
- DataSet ds = new DataSet();
- DataTable dt = new DataTable ();
- dt.TableName = "NS1Table";
- dt.Namespace = "urn:foo";
- dt.Columns.Add ("column1");
- dt.Columns.Add ("column2");
- dt.Columns [1].Namespace = "urn:baz";
- ds.Tables.Add (dt);
- DataTable dt2 = new DataTable ();
- dt2.TableName = "NS2Table";
- dt2.Namespace = "urn:bar";
- ds.Tables.Add (dt2);
- ds.Namespace = "urn:bar";
- StringWriter sw = new StringWriter ();
- XmlTextWriter xw = new XmlTextWriter (sw);
- xw.Formatting = Formatting.Indented;
- xw.QuoteChar = '\'';
- ds.WriteXmlSchema (xw);
- string result = sw.ToString ();
- AssertEquals (schema, result.Replace ("\r\n", "\n"));
- }
- [Test]
- public void IgnoreColumnEmptyNamespace ()
- {
- DataColumn col = new DataColumn ("TEST");
- col.Namespace = "urn:foo";
- DataSet ds = new DataSet ("DS");
- ds.Namespace = "urn:foo";
- DataTable dt = new DataTable ("tab");
- ds.Tables.Add (dt);
- dt.Columns.Add (col);
- dt.Rows.Add (new object [] {"test"});
- StringWriter sw = new StringWriter ();
- ds.WriteXml (new XmlTextWriter (sw));
- string xml = @"<DS xmlns=""urn:foo""><tab><TEST>test</TEST></tab></DS>";
- AssertEquals (xml, sw.ToString ());
- }
- [Test]
- public void SerializeDataSet ()
- {
- // see GetReady() for current culture
- 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>";
- DataSet ds = new DataSet ();
- ds.DataSetName = "DS";
- XmlSerializer ser = new XmlSerializer (typeof (DataSet));
- StringWriter sw = new StringWriter ();
- XmlTextWriter xw = new XmlTextWriter (sw);
- xw.QuoteChar = '\'';
- ser.Serialize (xw, ds);
- string result = sw.ToString ();
- AssertEquals (xml, result.Replace ("\r\n", "\n"));
- }
- // bug #70961
- [Test]
- public void SerializeDataSet2 ()
- {
- DataSet quota = new DataSet ("Quota");
- // Dimension
- DataTable dt = new DataTable ("Dimension");
- quota.Tables.Add (dt);
- dt.Columns.Add ("Number", typeof(int));
- dt.Columns ["Number"].AllowDBNull = false;
- dt.Columns ["Number"].ColumnMapping = MappingType.Attribute;
- dt.Columns.Add ("Title", typeof(string));
- dt.Columns ["Title"].AllowDBNull = false;
- dt.Columns ["Title"].ColumnMapping =
- MappingType.Attribute;
- dt.Rows.Add (new object [] {0, "Hospitals"});
- dt.Rows.Add (new object [] {1, "Doctors"});
- dt.Constraints.Add ("PK_Dimension", dt.Columns ["Number"], true);
- quota.AcceptChanges ();
- XmlSerializer ser = new XmlSerializer (quota.GetType ());
- StringWriter sw = new StringWriter ();
- ser.Serialize (sw, quota);
- DataSet ds = (DataSet) ser.Deserialize (new StringReader (sw.ToString ()));
- }
- // bug #68007
- public void SerializeDataSet3 ()
- {
- string xml = @"<?xml version=""1.0"" encoding=""utf-8""?><DataSet><xs:schema id=""Example"" xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata""><xs:element name=""Example"" msdata:IsDataSet=""true""><xs:complexType><xs:choice maxOccurs=""unbounded""><xs:element name=""Packages""><xs:complexType><xs:attribute name=""ID"" type=""xs:int"" use=""required"" /><xs:attribute name=""ShipDate"" type=""xs:dateTime"" /><xs:attribute name=""Message"" type=""xs:string"" /><xs:attribute name=""Handlers"" type=""xs:int"" /></xs:complexType></xs:element></xs:choice></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""><Example><Packages diffgr:id=""Packages1"" msdata:rowOrder=""0"" ID=""0"" ShipDate=""2004-10-11T17:46:18.6962302-05:00"" Message=""Received with no breakage!"" Handlers=""3"" /><Packages diffgr:id=""Packages2"" msdata:rowOrder=""1"" ID=""1"" /></Example></diffgr:diffgram></DataSet>";
- DataSet ds = new DataSet ("Example");
- // Add a DataTable
- DataTable dt = new DataTable ("Packages");
- ds.Tables.Add (dt);
- // Add an ID DataColumn w/ ColumnMapping = MappingType.Attribute
- dt.Columns.Add (new DataColumn ("ID", typeof(int), "",
- MappingType.Attribute));
- dt.Columns ["ID"].AllowDBNull = false;
- // Add a nullable DataColumn w/ ColumnMapping = MappingType.Attribute
- dt.Columns.Add (new DataColumn ("ShipDate",
- typeof (DateTime), "", MappingType.Attribute));
- dt.Columns ["ShipDate"].AllowDBNull = true;
- // Add a nullable DataColumn w/ ColumnMapping = MappingType.Attribute
- dt.Columns.Add (new DataColumn ("Message",
- typeof (string), "", MappingType.Attribute));
- dt.Columns ["Message"].AllowDBNull = true;
- // Add a nullable DataColumn w/ ColumnMapping = MappingType.Attribute
- dt.Columns.Add (new DataColumn ("Handlers",
- typeof (int), "", MappingType.Attribute));
- dt.Columns ["Handlers"].AllowDBNull = true;
- // Add a non-null value row
- DataRow newRow = dt.NewRow();
- newRow ["ID"] = 0;
- newRow ["ShipDate"] = DateTime.Now;
- newRow ["Message"] = "Received with no breakage!";
- newRow ["Handlers"] = 3;
- dt.Rows.Add (newRow);
- // Add a null value row
- newRow = dt.NewRow ();
- newRow ["ID"] = 1;
- newRow ["ShipDate"] = DBNull.Value;
- newRow ["Message"] = DBNull.Value;
- newRow ["Handlers"] = DBNull.Value;
- dt.Rows.Add (newRow);
- ds.AcceptChanges ();
- XmlSerializer ser = new XmlSerializer (ds.GetType());
- StringWriter sw = new StringWriter ();
- ser.Serialize (sw, ds);
- string result = sw.ToString ();
- AssertEquals (xml, result);
- }
- [Test]
- public void DeserializeDataSet ()
- {
- string xml = @"<DataSet>
- <diffgr:diffgram xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' xmlns:diffgr='urn:schemas-microsoft-com:xml-diffgram-v1'>
- <Quota>
- <Dimension diffgr:id='Dimension1' msdata:rowOrder='0' Number='0' Title='Hospitals' />
- <Dimension diffgr:id='Dimension2' msdata:rowOrder='1' Number='1' Title='Doctors' />
- </Quota>
- </diffgr:diffgram>
- </DataSet>";
- XmlSerializer ser = new XmlSerializer (typeof (DataSet));
- ser.Deserialize (new XmlTextReader (
- xml, XmlNodeType.Document, null));
- }
- /* To be added
- [Test]
- public void WriteDiffReadAutoWriteSchema ()
- {
- DataSet ds = new DataSet ();
- ds.Tables.Add ("Table1");
- ds.Tables.Add ("Table2");
- ds.Tables [0].Columns.Add ("Column1_1");
- ds.Tables [0].Columns.Add ("Column1_2");
- ds.Tables [0].Columns.Add ("Column1_3");
- ds.Tables [1].Columns.Add ("Column2_1");
- ds.Tables [1].Columns.Add ("Column2_2");
- ds.Tables [1].Columns.Add ("Column2_3");
- ds.Tables [0].Rows.Add (new object [] {"ppp", "www", "xxx"});
- // save as diffgram
- StringWriter sw = new StringWriter ();
- ds.WriteXml (sw, XmlWriteMode.DiffGram);
- string xml = sw.ToString ();
- string result = new StreamReader ("Test/System.Data/DataSetReadXmlTest1.xml", Encoding.ASCII).ReadToEnd ();
- AssertEquals ("#01", result, xml);
- // load diffgram above
- ds.ReadXml (new StringReader (sw.ToString ()));
- sw = new StringWriter ();
- ds.WriteXml (sw, XmlWriteMode.WriteSchema);
- xml = sw.ToString ();
- result = new StreamReader ("Test/System.Data/DataSetReadXmlTest2.xml", Encoding.ASCII).ReadToEnd ();
- AssertEquals ("#02", result, xml);
- }
- */
- [Test]
- public void CloneCopy ()
- {
- DataTable table = new DataTable ("pTable"); DataTable table1 = new DataTable ("cTable"); DataSet set = new DataSet ();
-
- set.Tables.Add (table);
- set.Tables.Add (table1); DataColumn col = new DataColumn ();
- col.ColumnName = "Id";
- col.DataType = Type.GetType ("System.Int32");
- table.Columns.Add (col);
- UniqueConstraint uc = new UniqueConstraint ("UK1", table.Columns[0] );
- table.Constraints.Add (uc);
-
- col = new DataColumn ();
- col.ColumnName = "Name";
- col.DataType = Type.GetType ("System.String");
- table.Columns.Add (col);
-
- col = new DataColumn ();
- col.ColumnName = "Id";
- col.DataType = Type.GetType ("System.Int32");
- table1.Columns.Add (col);
-
- col = new DataColumn ();
- col.ColumnName = "Name";
- col.DataType = Type.GetType ("System.String");
- table1.Columns.Add (col);
- ForeignKeyConstraint fc = new ForeignKeyConstraint ("FK1", table.Columns[0], table1.Columns[0] );
- table1.Constraints.Add (fc);
-
-
- DataRow row = table.NewRow ();
-
- row ["Id"] = 147;
- row ["name"] = "Row1";
- row.RowError = "Error#1";
- table.Rows.Add (row);
-
- row = table1.NewRow ();
- row ["Id"] = 147;
- row ["Name"] = "Row1";
- table1.Rows.Add (row);
-
- //Setting properties of DataSet
- set.CaseSensitive = true;
- set.DataSetName = "My DataSet";
- set.EnforceConstraints = false;
- set.Namespace = "Namespace#1";
- set.Prefix = "Prefix:1";
- DataRelation dr = new DataRelation ("DR", table.Columns [0],table1.Columns [0]);
- set.Relations.Add (dr);
- set.ExtendedProperties.Add ("TimeStamp", DateTime.Now);
- CultureInfo cultureInfo = new CultureInfo( "ar-SA" );
- set.Locale = cultureInfo;
-
- //Testing Copy ()
- DataSet copySet = set.Copy ();
- AssertEquals ("#A01", set.CaseSensitive, copySet.CaseSensitive);
- AssertEquals ("#A02", set.DataSetName, copySet.DataSetName);
- AssertEquals ("#A03", set.EnforceConstraints, copySet.EnforceConstraints);
- AssertEquals ("#A04", set.HasErrors, copySet.HasErrors);
- AssertEquals ("#A05", set.Namespace, copySet.Namespace);
- AssertEquals ("#A06", set.Prefix, copySet.Prefix);
- AssertEquals ("#A07", set.Relations.Count, copySet.Relations.Count);
- AssertEquals ("#A08", set.Tables.Count, copySet.Tables.Count);
- AssertEquals ("#A09", set.ExtendedProperties ["TimeStamp"], copySet.ExtendedProperties ["TimeStamp"]);
- for (int i = 0;i < copySet.Tables.Count; i++) {
- AssertEquals ("#A10", set.Tables [i].Rows.Count, copySet.Tables [i].Rows.Count);
- AssertEquals ("#A11", set.Tables [i].Columns.Count, copySet.Tables [i].Columns.Count);
- }
- //Testing Clone ()
- copySet = set.Clone ();
- AssertEquals ("#A12", set.CaseSensitive, copySet.CaseSensitive);
- AssertEquals ("#A13", set.DataSetName, copySet.DataSetName);
- AssertEquals ("#A14", set.EnforceConstraints, copySet.EnforceConstraints);
- AssertEquals ("#A15", false, copySet.HasErrors);
- AssertEquals ("#A16", set.Namespace, copySet.Namespace);
- AssertEquals ("#A17", set.Prefix, copySet.Prefix);
- AssertEquals ("#A18", set.Relations.Count, copySet.Relations.Count);
- AssertEquals ("#A19", set.Tables.Count, copySet.Tables.Count);
- AssertEquals ("#A20", set.ExtendedProperties ["TimeStamp"], copySet.ExtendedProperties ["TimeStamp"]);
- for (int i = 0;i < copySet.Tables.Count; i++) {
- AssertEquals ("#A21", 0, copySet.Tables [i].Rows.Count);
- AssertEquals ("#A22", set.Tables [i].Columns.Count, copySet.Tables [i].Columns.Count);
- }
- }
- [Test]
- public void CloneCopy2 ()
- {
- DataSet ds = new DataSet ();
- ds.ReadXmlSchema ("Test/System.Data/store.xsd");
- ds.Clone ();
- }
- [Test]
- public void WriteNestedTableXml ()
- {
- string xml = @"<NewDataSet>
- <tab1>
- <ident>1</ident>
- <name>hoge</name>
- <tab2>
- <timestamp>2004-05-05</timestamp>
- </tab2>
- </tab1>
- <tab1>
- <ident>2</ident>
- <name>fuga</name>
- <tab2>
- <timestamp>2004-05-06</timestamp>
- </tab2>
- </tab1>
- </NewDataSet>";
- DataSet ds = new DataSet ();
- DataTable dt = new DataTable ("tab1");
- dt.Columns.Add ("ident");
- dt.Columns.Add ("name");
- dt.Rows.Add (new object [] {"1", "hoge"});
- dt.Rows.Add (new object [] {"2", "fuga"});
- DataTable dt2 = new DataTable ("tab2");
- dt2.Columns.Add ("idref");
- dt2.Columns [0].ColumnMapping = MappingType.Hidden;
- dt2.Columns.Add ("timestamp");
- dt2.Rows.Add (new object [] {"1", "2004-05-05"});
- dt2.Rows.Add (new object [] {"2", "2004-05-06"});
- ds.Tables.Add (dt);
- ds.Tables.Add (dt2);
- DataRelation rel = new DataRelation ("rel", dt.Columns [0], dt2.Columns [0]);
- rel.Nested = true;
- ds.Relations.Add (rel);
- StringWriter sw = new StringWriter ();
- ds.WriteXml (sw);
- AssertEquals (xml, sw.ToString ().Replace ("\r\n", "\n"));
- }
- [Test]
- public void WriteXmlToStream ()
- {
- string xml = "<set><table1><col1>sample text</col1><col2/></table1><table2 attr='value'><col3>sample text 2</col3></table2></set>";
- DataSet ds = new DataSet ();
- ds.ReadXml (new StringReader (xml));
- MemoryStream ms = new MemoryStream ();
- ds.WriteXml (ms);
- MemoryStream ms2 = new MemoryStream (ms.ToArray ());
- StreamReader sr = new StreamReader (ms2, Encoding.UTF8);
- string result = @"<set>
- <table1>
- <col1>sample text</col1>
- <col2 />
- </table1>
- <table2 attr=""value"">
- <col3>sample text 2</col3>
- </table2>
- </set>";
- AssertEquals (result, sr.ReadToEnd ().Replace ("\r\n", "\n"));
- }
- [Test]
- public void WtiteXmlEncodedXml ()
- {
- string xml = @"<an_x0020_example_x0020_dataset.>
- <WOW_x0021__x0020_that_x0027_s_x0020_nasty...>
- <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>
- </WOW_x0021__x0020_that_x0027_s_x0020_nasty...>
- </an_x0020_example_x0020_dataset.>";
- DataSet ds = new DataSet ("an example dataset.");
- ds.Tables.Add (new DataTable ("WOW! that's nasty..."));
- ds.Tables [0].Columns.Add ("URL is http://www.go-mono.com");
- ds.Tables [0].Rows.Add (new object [] {"content string."});
- StringWriter sw = new StringWriter ();
- ds.WriteXml (sw);
- AssertEquals (xml, sw.ToString ().Replace ("\r\n", "\n"));
- }
- [Test]
- public void ReadWriteXml2 ()
- {
- string xml = "<FullTextResponse><Domains><AvailResponse info='y' name='novell-ximian-group' /><AvailResponse info='n' name='ximian' /></Domains></FullTextResponse>";
- DataSet ds = new DataSet ();
- ds.ReadXml (new StringReader (xml));
- AssertDataSet ("ds", ds, "FullTextResponse", 2, 1);
- DataTable dt = ds.Tables [0];
- AssertDataTable ("dt1", dt, "Domains", 1, 1, 0, 1, 1, 1);
- dt = ds.Tables [1];
- AssertDataTable ("dt2", dt, "AvailResponse", 3, 2, 1, 0, 1, 0);
- StringWriter sw = new StringWriter ();
- XmlTextWriter xtw = new XmlTextWriter (sw);
- xtw.QuoteChar = '\'';
- ds.WriteXml (xtw);
- AssertEquals (xml, sw.ToString ());
- }
- // bug #53959.
- [Test]
- public void ReadWriteXml3 ()
- {
- string input = @"<FullTextResponse>
- <Domains>
- <AvailResponse info='y' name='novell-ximian-group' />
- <AvailResponse info='n' name='ximian' />
- </Domains>
- </FullTextResponse>";
- DataSet ds = new DataSet ();
- ds.ReadXml (new StringReader (input));
- StringWriter sw = new StringWriter ();
- XmlTextWriter xtw = new XmlTextWriter (sw);
- xtw.Formatting = Formatting.Indented;
- xtw.QuoteChar = '\'';
- ds.WriteXml (xtw);
- xtw.Flush ();
- AssertEquals (input, sw.ToString ().Replace ("\r\n", "\n"));
- }
- [Test] // bug #60469
- public void WriteXmlSchema2 ()
- {
- string xml = @"<myDataSet xmlns='NetFrameWork'><myTable><id>0</id><item>item 0</item></myTable><myTable><id>1</id><item>item 1</item></myTable><myTable><id>2</id><item>item 2</item></myTable><myTable><id>3</id><item>item 3</item></myTable><myTable><id>4</id><item>item 4</item></myTable><myTable><id>5</id><item>item 5</item></myTable><myTable><id>6</id><item>item 6</item></myTable><myTable><id>7</id><item>item 7</item></myTable><myTable><id>8</id><item>item 8</item></myTable><myTable><id>9</id><item>item 9</item></myTable></myDataSet>";
- string schema = @"<?xml version='1.0' encoding='utf-16'?>
- <xs:schema id='myDataSet' targetNamespace='NetFrameWork' xmlns:mstns='NetFrameWork' xmlns='NetFrameWork' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' attributeFormDefault='qualified' elementFormDefault='qualified'>
- <xs:element name='myDataSet' msdata:IsDataSet='true' msdata:Locale='fi-FI'>
- <xs:complexType>
- <xs:choice maxOccurs='unbounded'>
- <xs:element name='myTable'>
- <xs:complexType>
- <xs:sequence>
- <xs:element name='id' msdata:AutoIncrement='true' type='xs:int' minOccurs='0' />
- <xs:element name='item' type='xs:string' minOccurs='0' />
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:choice>
- </xs:complexType>
- </xs:element>
- </xs:schema>";
- DataSet OriginalDataSet = new DataSet ("myDataSet");
- OriginalDataSet.Namespace= "NetFrameWork";
- DataTable myTable = new DataTable ("myTable");
- DataColumn c1 = new DataColumn ("id", typeof (int));
- c1.AutoIncrement = true;
- DataColumn c2 = new DataColumn ("item");
- myTable.Columns.Add (c1);
- myTable.Columns.Add (c2);
- OriginalDataSet.Tables.Add (myTable);
- // Add ten rows.
- DataRow newRow;
- for(int i = 0; i < 10; i++) {
- newRow = myTable.NewRow ();
- newRow ["item"] = "item " + i;
- myTable.Rows.Add (newRow);
- }
- OriginalDataSet.AcceptChanges ();
- StringWriter sw = new StringWriter ();
- XmlTextWriter xtw = new XmlTextWriter (sw);
- xtw.QuoteChar = '\'';
- OriginalDataSet.WriteXml (xtw);
- string result = sw.ToString ();
- AssertEquals (xml, result);
- sw = new StringWriter ();
- xtw = new XmlTextWriter (sw);
- xtw.Formatting = Formatting.Indented;
- OriginalDataSet.WriteXmlSchema (xtw);
- result = sw.ToString ();
- result = result.Replace ("\r\n", "\n").Replace ('"', '\'');
- AssertEquals (schema, result);
- }
- // bug #66366
- [Test]
- public void WriteXmlSchema3 ()
- {
- string xmlschema = @"<?xml version=""1.0"" encoding=""utf-16""?>
- <xs:schema id=""ExampleDataSet"" xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"">
- <xs:element name=""ExampleDataSet"" msdata:IsDataSet=""true"" msdata:Locale=""fi-FI"">
- <xs:complexType>
- <xs:choice maxOccurs=""unbounded"">
- <xs:element name=""ExampleDataTable"">
- <xs:complexType>
- <xs:attribute name=""PrimaryKeyColumn"" type=""xs:int"" use=""required"" />
- </xs:complexType>
- </xs:element>
- </xs:choice>
- </xs:complexType>
- <xs:unique name=""PK_ExampleDataTable"" msdata:PrimaryKey=""true"">
- <xs:selector xpath="".//ExampleDataTable"" />
- <xs:field xpath=""@PrimaryKeyColumn"" />
- </xs:unique>
- </xs:element>
- </xs:schema>";
- DataSet ds = new DataSet ("ExampleDataSet");
- ds.Tables.Add (new DataTable ("ExampleDataTable"));
- ds.Tables ["ExampleDataTable"].Columns.Add (
- new DataColumn ("PrimaryKeyColumn", typeof(int), "", MappingType.Attribute));
- ds.Tables ["ExampleDataTable"].Columns ["PrimaryKeyColumn"].AllowDBNull = false;
- ds.Tables ["ExampleDataTable"].Constraints.Add (
- "PK_ExampleDataTable",
- ds.Tables ["ExampleDataTable"].Columns ["PrimaryKeyColumn"],
- true);
- ds.AcceptChanges ();
- StringWriter sw = new StringWriter ();
- ds.WriteXmlSchema (sw);
- string result = sw.ToString ();
- AssertEquals (xmlschema, result.Replace ("\r\n", "\n"));
- }
- // bug #67792.
- [Test]
- public void WriteXmlSchema4 ()
- {
- string xmlschema = @"<?xml version=""1.0"" encoding=""utf-16""?>
- <xs:schema id=""Example"" xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"">
- <xs:element name=""Example"" msdata:IsDataSet=""true"" msdata:Locale=""fi-FI"">
- <xs:complexType>
- <xs:choice maxOccurs=""unbounded"">
- <xs:element name=""MyType"">
- <xs:complexType>
- <xs:attribute name=""ID"" type=""xs:int"" use=""required"" />
- <xs:attribute name=""Desc"" type=""xs:string"" />
- </xs:complexType>
- </xs:element>
- </xs:choice>
- </xs:complexType>
- </xs:element>
- </xs:schema>";
- DataSet ds = new DataSet ("Example");
- // Add MyType DataTable
- DataTable dt = new DataTable ("MyType");
- ds.Tables.Add (dt);
- dt.Columns.Add (new DataColumn ("ID", typeof(int), "",
- MappingType.Attribute));
- dt.Columns ["ID"].AllowDBNull = false;
- dt.Columns.Add (new DataColumn ("Desc", typeof
- (string), "", MappingType.Attribute));
- ds.AcceptChanges ();
- StringWriter sw = new StringWriter ();
- ds.WriteXmlSchema (sw);
- string result = sw.ToString ();
- AssertEquals (xmlschema, result.Replace ("\r\n", "\n"));
- }
- // bug # 68432
- [Test]
- [Category ("NotWorking")]
- public void WriteXmlSchema5 ()
- {
- string xmlschema = @"<?xml version=""1.0"" encoding=""utf-16""?>
- <xs:schema id=""Example"" xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"">
- <xs:element name=""Example"" msdata:IsDataSet=""true"" msdata:Locale=""fi-FI"">
- <xs:complexType>
- <xs:choice maxOccurs=""unbounded"">
- <xs:element name=""StandAlone"">
- <xs:complexType>
- <xs:attribute name=""ID"" type=""xs:int"" use=""required"" />
- <xs:attribute name=""Desc"" type=""xs:string"" use=""required"" />
- </xs:complexType>
- </xs:element>
- <xs:element name=""Dimension"">
- <xs:complexType>
- <xs:attribute name=""Number"" msdata:ReadOnly=""true"" type=""xs:int"" use=""required"" />
- <xs:attribute name=""Title"" type=""xs:string"" use=""required"" />
- </xs:complexType>
- </xs:element>
- <xs:element name=""Element"">
- <xs:complexType>
- <xs:attribute name=""Dimension"" msdata:ReadOnly=""true"" type=""xs:int"" use=""required"" />
- <xs:attribute name=""Number"" msdata:ReadOnly=""true"" type=""xs:int"" use=""required"" />
- <xs:attribute name=""Title"" type=""xs:string"" use=""required"" />
- </xs:complexType>
- </xs:element>
- </xs:choice>
- </xs:complexType>
- <xs:unique name=""PK_Dimension"" msdata:PrimaryKey=""true"">
- <xs:selector xpath="".//Dimension"" />
- <xs:field xpath=""@Number"" />
- </xs:unique>
- <xs:unique name=""PK_Element"" msdata:PrimaryKey=""true"">
- <xs:selector xpath="".//Element"" />
- <xs:field xpath=""@Dimension"" />
- <xs:field xpath=""@Number"" />
- </xs:unique>
- <xs:keyref name=""FK_Element_To_Dimension"" refer=""PK_Dimension"">
- <xs:selector xpath="".//Element"" />
- <xs:field xpath=""@Dimension"" />
- </xs:keyref>
- </xs:element>
- </xs:schema>";
- DataSet ds = new DataSet("Example");
- // Add a DataTable with no ReadOnly columns
- DataTable dt1 = new DataTable ("StandAlone");
- ds.Tables.Add (dt1);
- // Add a ReadOnly column
- dt1.Columns.Add (new DataColumn ("ID", typeof(int), "",
- MappingType.Attribute));
- dt1.Columns ["ID"].AllowDBNull = false;
- dt1.Columns.Add (new DataColumn ("Desc", typeof
- (string), "", MappingType.Attribute));
- dt1.Columns ["Desc"].AllowDBNull = false;
- // Add related DataTables with ReadOnly columns
- DataTable dt2 = new DataTable ("Dimension");
- ds.Tables.Add (dt2);
- dt2.Columns.Add (new DataColumn ("Number", typeof
- (int), "", MappingType.Attribute));
- dt2.Columns ["Number"].AllowDBNull = false;
- dt2.Columns ["Number"].ReadOnly = true;
- dt2.Columns.Add (new DataColumn ("Title", typeof
- (string), "", MappingType.Attribute));
- dt2.Columns ["Title"].AllowDBNull = false;
- dt2.Constraints.Add ("PK_Dimension", dt2.Columns ["Number"], true);
- DataTable dt3 = new DataTable ("Element");
- ds.Tables.Add(dt3);
-
- dt3.Columns.Add (new DataColumn ("Dimension", typeof
- (int), "", MappingType.Attribute));
- dt3.Columns ["Dimension"].AllowDBNull = false;
- dt3.Columns ["Dimension"].ReadOnly = true;
- dt3.Columns.Add (new DataColumn ("Number", typeof
- (int), "", MappingType.Attribute));
- dt3.Columns ["Number"].AllowDBNull = false;
- dt3.Columns ["Number"].ReadOnly = true;
- dt3.Columns.Add (new DataColumn ("Title", typeof
- (string), "", MappingType.Attribute));
- dt3.Columns ["Title"].AllowDBNull = false;
- dt3.Constraints.Add ("PK_Element", new DataColumn[] {
- dt3.Columns ["Dimension"],
- dt3.Columns ["Number"] }, true);
- ds.Relations.Add ("FK_Element_To_Dimension",
- dt2.Columns ["Number"], dt3.Columns["Dimension"]);
- ds.AcceptChanges ();
- StringWriter sw = new StringWriter ();
- ds.WriteXmlSchema (sw);
- string result = sw.ToString ();
- AssertEquals (xmlschema, result.Replace ("\r\n", "\n"));
- }
- // bug #67793
- [Test]
- public void WriteXmlSchema6 ()
- {
- string xmlschema = @"<?xml version=""1.0"" encoding=""utf-16""?>
- <xs:schema id=""Example"" xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"">
- <xs:element name=""Example"" msdata:IsDataSet=""true"" msdata:Locale=""fi-FI"">
- <xs:complexType>
- <xs:choice maxOccurs=""unbounded"">
- <xs:element name=""MyType"">
- <xs:complexType>
- <xs:attribute name=""Desc"">
- <xs:simpleType>
- <xs:restriction base=""xs:string"">
- <xs:maxLength value=""32"" />
- </xs:restriction>
- </xs:simpleType>
- </xs:attribute>
- </xs:complexType>
- </xs:element>
- </xs:choice>
- </xs:complexType>
- </xs:element>
- </xs:schema>";
- DataSet ds = new DataSet("Example");
- // Add MyType DataTable
- ds.Tables.Add ("MyType");
- ds.Tables ["MyType"].Columns.Add (new DataColumn(
- "Desc", typeof (string), "", MappingType.Attribute));
- ds.Tables ["MyType"].Columns ["Desc"].MaxLength = 32;
- ds.AcceptChanges ();
- StringWriter sw = new StringWriter ();
- ds.WriteXmlSchema (sw);
- string result = sw.ToString ();
- AssertEquals (xmlschema, result.Replace ("\r\n", "\n"));
- }
- // bug #68008
- [Test]
- public void WriteXmlSchema7 ()
- {
- DataSet ds = new DataSet ();
- DataTable dt = new DataTable ("table");
- dt.Columns.Add ("col1");
- dt.Columns.Add ("col2");
- ds.Tables.Add (dt);
- dt.Rows.Add (new object [] {"foo", "bar"});
- StringWriter sw = new StringWriter ();
- ds.WriteXmlSchema (sw);
- Assert (sw.ToString ().IndexOf ("xmlns=\"\"") > 0);
- }
- // bug #61233
- [Test]
- public void WriteXmlExtendedProperties ()
- {
- string xml = @"<?xml version=""1.0"" encoding=""utf-16""?>
- <xs:schema id=""NewDataSet"" xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"" xmlns:msprop=""urn:schemas-microsoft-com:xml-msprop"">
- <xs:element name=""NewDataSet"" msdata:IsDataSet=""true"" msdata:Locale=""fi-FI"" msprop:version=""version 2.1"">
- <xs:complexType>
- <xs:choice maxOccurs=""unbounded"">
- <xs:element name=""Foo"">
- <xs:complexType>
- <xs:sequence>
- <xs:element name=""col1"" type=""xs:string"" minOccurs=""0"" />
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:choice>
- </xs:complexType>
- </xs:element>
- </xs:schema>";
- DataSet ds = new DataSet ();
- ds.ExtendedProperties ["version"] = "version 2.1";
- DataTable dt = new DataTable ("Foo");
- dt.Columns.Add ("col1");
- dt.Rows.Add (new object [] {"foo"});
- ds.Tables.Add (dt);
- StringWriter sw = new StringWriter ();
- ds.WriteXmlSchema (sw);
- string result = sw.ToString ();
- AssertEquals (xml, result.Replace ("\r\n", "\n"));
- }
- [Test]
- [Category ("NotWorking")]
- public void WriteXmlModeSchema ()
- {
- // This is the MS output of WriteXmlSchema().
- string xml = @"<Example>
- <xs:schema id=""Example"" xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"">
- <xs:element name=""Example"" msdata:IsDataSet=""true"" msdata:Locale=""fi-FI"">
- <xs:complexType>
- <xs:choice maxOccurs=""unbounded"">
- <xs:element name=""Dimension"">
- <xs:complexType>
- <xs:sequence>
- <xs:element name=""Number"" type=""xs:int"" />
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- <xs:element name=""Element"">
- <xs:complexType>
- <xs:sequence>
- <xs:element name=""Dimension"" type=""xs:int"" />
- <xs:element name=""Number"" type=""xs:int"" />
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:choice>
- </xs:complexType>
- <xs:unique name=""PK_Dimension"" msdata:PrimaryKey=""true"">
- <xs:selector xpath="".//Dimension"" />
- <xs:field xpath=""Number"" />
- </xs:unique>
- <xs:unique name=""PK_Element"" msdata:PrimaryKey=""true"">
- <xs:selector xpath="".//Element"" />
- <xs:field xpath=""Dimension"" />
- <xs:field xpath=""Number"" />
- </xs:unique>
- <xs:keyref name=""FK_Element_To_Dimension"" refer=""PK_Dimension"">
- <xs:selector xpath="".//Element"" />
- <xs:field xpath=""Dimension"" />
- </xs:keyref>
- </xs:element>
- </xs:schema>
- <Dimension>
- <Number>0</Number>
- </Dimension>
- <Dimension>
- <Number>1</Number>
- </Dimension>
- <Element>
- <Dimension>0</Dimension>
- <Number>0</Number>
- </Element>
- <Element>
- <Dimension>0</Dimension>
- <Number>1</Number>
- </Element>
- <Element>
- <Dimension>0</Dimension>
- <Number>2</Number>
- </Element>
- <Element>
- <Dimension>0</Dimension>
- <Number>3</Number>
- </Element>
- <Element>
- <Dimension>1</Dimension>
- <Number>0</Number>
- </Element>
- <Element>
- <Dimension>1</Dimension>
- <Number>1</Number>
- </Element>
- </Example>";
- DataSet ds = new DataSet("Example");
- // Dimension DataTable
- DataTable dt1 = new DataTable ("Dimension");
- ds.Tables.Add (dt1);
- dt1.Columns.Add (new DataColumn ("Number", typeof (int)));
- dt1.Columns ["Number"].AllowDBNull = false;
- dt1.Constraints.Add ("PK_Dimension", dt1.Columns ["Number"], true);
- // Element DataTable
- DataTable dt2 = new DataTable ("Element");
- ds.Tables.Add (dt2);
- dt2.Columns.Add (new DataColumn ("Dimension", typeof (int)));
- dt2.Columns ["Dimension"].AllowDBNull = false;
- dt2.Columns.Add (new DataColumn ("Number", typeof (int)));
- dt2.Columns ["Number"].AllowDBNull = false;
- dt2.Constraints.Add ("PK_Element", new DataColumn[] {
- dt2.Columns ["Dimension"],
- dt2.Columns ["Number"] },
- true);
-
- // Add DataRelations
- ds.Relations.Add ("FK_Element_To_Dimension",
- dt1.Columns ["Number"],
- dt2.Columns ["Dimension"], true);
- // Add 2 Dimensions
- for (int i = 0; i < 2; i++) {
- DataRow newRow = dt1.NewRow ();
- newRow ["Number"] = i;
- dt1.Rows.Add (newRow);
- }
- // Dimension 0 => 4 Elements
- for (int i = 0; i < 4; i++) {
- DataRow newRow = dt2.NewRow();
- newRow ["Dimension"] = 0;
- newRow ["Number"] = i;
- dt2.Rows.Add (newRow);
- }
- // Dimension 1 => 2 Elements
- for (int i = 0; i < 2; i++) {
- DataRow newRow = dt2.NewRow();
- newRow ["Dimension"] = 1;
- newRow ["Number"] = i;
- dt2.Rows.Add (newRow);
- }
- ds.AcceptChanges ();
- StringWriter sw = new StringWriter ();
- ds.WriteXml(sw, XmlWriteMode.WriteSchema);
- string result = sw.ToString ();
- AssertEquals (xml, result.Replace ("\r\n", "\n"));
- }
- [Test]
- public void DeserializeModifiedDataSet ()
- {
- // Serialization begins
- DataSet prevDs = new DataSet ();
- DataTable dt = prevDs.Tables.Add ();
- dt.Columns.Add(new DataColumn("Id", typeof(string)));
-
- DataRow dr = dt.NewRow();
- dr [0] = "a";
- dt.Rows.Add (dr);
- prevDs.AcceptChanges ();
- dr = prevDs.Tables[0].Rows[0];
- dr [0] = "b";
-
- XmlSerializer serializer = new XmlSerializer (typeof (DataSet));
- StringWriter sw = new StringWriter ();
- XmlTextWriter xw = new XmlTextWriter (sw);
- xw.QuoteChar = '\'';
- serializer.Serialize (xw, prevDs);
- // Deserialization begins
- StringReader sr = new StringReader (sw.ToString ());
- XmlTextReader reader = new XmlTextReader (sr);
- XmlSerializer serializer1 = new XmlSerializer (typeof (DataSet));
- DataSet ds = serializer1.Deserialize (reader) as DataSet;
- AssertEquals ("deserialization after modification does not give original values",
- prevDs.Tables[0].Rows [0][0,DataRowVersion.Original].ToString (),
- ds.Tables[0].Rows [0][0,DataRowVersion.Original].ToString ());
- AssertEquals ("deserialization after modification oes not give current values",
- prevDs.Tables[0].Rows [0][0,DataRowVersion.Current].ToString (),
- ds.Tables[0].Rows [0][0,DataRowVersion.Current].ToString ());
- }
- /// <summary>
- /// Test for testing DataSet.Clear method with foriegn key relations
- /// This is expected to clear all the related datatable rows also
- /// </summary>
- [Test]
- public void DataSetClearTest ()
- {
- DataSet ds = new DataSet ();
- DataTable parent = ds.Tables.Add ("Parent");
- DataTable child = ds.Tables.Add ("Child");
-
- parent.Columns.Add ("id", typeof (int));
- child.Columns.Add ("ref_id", typeof(int));
-
- child.Constraints.Add (new ForeignKeyConstraint ("fk_constraint", parent.Columns [0], child.Columns [0]));
-
- DataRow dr = parent.NewRow ();
- dr [0] = 1;
- parent.Rows.Add (dr);
- dr.AcceptChanges ();
-
- dr = child.NewRow ();
- dr [0] = 1;
- child.Rows.Add (dr);
- dr.AcceptChanges ();
-
- try {
- ds.Clear (); // this should clear all the rows in parent & child tables
- } catch (Exception e) {
- throw (new Exception ("Exception should not have been thrown at Clear method" + e.ToString ()));
- }
- Assertion.AssertEquals ("parent table rows should not exist!", 0, parent.Rows.Count);
- Assertion.AssertEquals ("child table rows should not exist!", 0, child.Rows.Count);
- }
- [Test]
- public void CloneSubClassTest()
- {
- MyDataSet ds1 = new MyDataSet();
- MyDataSet ds = (MyDataSet)(ds1.Clone());
- AssertEquals("A#01",2,MyDataSet.count);
- }
- #region DataSet.GetChanges Tests
- public void GetChanges_Relations_DifferentRowStatesTest ()
- {
- DataSet ds = new DataSet ("ds");
- DataTable parent = ds.Tables.Add ("parent");
- DataTable child = ds.Tables.Add ("child");
-
- parent.Columns.Add ("id", typeof (int));
- parent.Columns.Add ("name", typeof (string));
-
- child.Columns.Add ("id", typeof (int));
- child.Columns.Add ("parent", typeof (int));
- child.Columns.Add ("name", typeof (string));
- parent.Rows.Add (new object [] { 1, "mono parent 1" } );
- parent.Rows.Add (new object [] { 2, "mono parent 2" } );
- parent.Rows.Add (new object [] { 3, "mono parent 3" } );
- parent.Rows.Add (new object [] { 4, "mono parent 4" } );
- parent.AcceptChanges ();
- child.Rows.Add (new object [] { 1, 1, "mono child 1" } );
- child.Rows.Add (new object [] { 2, 2, "mono child 2" } );
- child.Rows.Add (new object [] { 3, 3, "mono child 3" } );
- child.AcceptChanges ();
- DataRelation relation = ds.Relations.Add ("parent_child",
- parent.Columns ["id"],
- child.Columns ["parent"]);
-
- // modify the parent and get changes
- child.Rows [1]["parent"] = 4;
- DataSet changes = ds.GetChanges ();
- DataRow row = changes.Tables ["parent"].Rows[0];
- AssertType.AreEqual ((int) parent.Rows [3][0], (int) row [0], "#RT1");
- AssertType.AreEqual (1, changes.Tables ["parent"].Rows.Count, "#RT2 only get parent row with current version");
- ds.RejectChanges ();
- // delete a child row and get changes.
- child.Rows [0].Delete ();
- changes = ds.GetChanges ();
-
- AssertType.AreEqual (changes.Tables.Count, 2, "#RT3 Should import parent table as well");
- AssertType.AreEqual (1, changes.Tables ["parent"].Rows.Count, "#RT4 only get parent row with original version");
- AssertType.AreEqual (1, (int) changes.Tables ["parent"].Rows [0][0], "#RT5 parent row based on original version");
- }
- #endregion // DataSet.GetChanges Tests
- [Test]
- public void RuleTest ()
- {
- DataSet ds = new DataSet ("testds");
- DataTable parent = ds.Tables.Add ("parent");
- DataTable child = ds.Tables.Add ("child");
-
- parent.Columns.Add ("id", typeof (int));
- parent.Columns.Add ("name", typeof (string));
- parent.PrimaryKey = new DataColumn [] {parent.Columns ["id"]} ;
- child.Columns.Add ("id", typeof (int));
- child.Columns.Add ("parent", typeof (int));
- child.Columns.Add ("name", typeof (string));
- child.PrimaryKey = new DataColumn [] {child.Columns ["id"]} ;
- DataRelation relation = ds.Relations.Add ("parent_child",
- parent.Columns ["id"],
- child.Columns ["parent"]);
- parent.Rows.Add (new object [] {1, "mono test 1"});
- parent.Rows.Add (new object [] {2, "mono test 2"});
- parent.Rows.Add (new object [] {3, "mono test 3"});
-
- child.Rows.Add (new object [] {1, 1, "mono child test 1"});
- child.Rows.Add (new object [] {2, 2, "mono child test 2"});
- child.Rows.Add (new object [] {3, 3, "mono child test 3"});
-
- ds.AcceptChanges ();
-
- parent.Rows [0] ["name"] = "mono changed test 1";
-
- Assertion.AssertEquals ("#RT1 child should not be modified",
- DataRowState.Unchanged,
- parent.Rows [0].GetChildRows (relation) [0].RowState);
- ds.RejectChanges ();
- parent.Rows [0] ["id"] = "4";
-
- DataRow childRow = parent.Rows [0].GetChildRows (relation) [0];
- Assertion.AssertEquals ("#RT2 child should be modified",
- DataRowState.Modified,
- childRow.RowState);
- Assertion.AssertEquals ("#RT3 child should point to modified row",
- 4,
- (int) childRow ["parent"]);
- }
-
- }
- public class MyDataSet:DataSet {
- public static int count = 0;
-
- public MyDataSet() {
- count++;
- }
-
- }
-
- }
|