PageRenderTime 65ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 0ms

/mcs/class/System.Runtime.Serialization/Test/System.Runtime.Serialization/XmlObjectSerializerTest.cs

https://bitbucket.org/danipen/mono
C# | 2223 lines | 1869 code | 276 blank | 78 comment | 0 complexity | 41cef6c9c3f0ec7c46ceb5bb6e3e545d MD5 | raw file
Possible License(s): Unlicense, Apache-2.0, LGPL-2.0, MPL-2.0-no-copyleft-exception, CC-BY-SA-3.0, GPL-2.0

Large files files are truncated, but you can click here to view the full file

  1. //
  2. // XmlObjectSerializerTest.cs
  3. //
  4. // Author:
  5. // Atsushi Enomoto <atsushi@ximian.com>
  6. // Ankit Jain <JAnkit@novell.com>
  7. //
  8. // Copyright (C) 2005 Novell, Inc. http://www.novell.com
  9. //
  10. // Permission is hereby granted, free of charge, to any person obtaining
  11. // a copy of this software and associated documentation files (the
  12. // "Software"), to deal in the Software without restriction, including
  13. // without limitation the rights to use, copy, modify, merge, publish,
  14. // distribute, sublicense, and/or sell copies of the Software, and to
  15. // permit persons to whom the Software is furnished to do so, subject to
  16. // the following conditions:
  17. //
  18. // The above copyright notice and this permission notice shall be
  19. // included in all copies or substantial portions of the Software.
  20. //
  21. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  22. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  23. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  24. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  25. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  26. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  27. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  28. //
  29. //
  30. // This test code contains tests for both DataContractSerializer and
  31. // NetDataContractSerializer. The code could be mostly common.
  32. //
  33. using System;
  34. using System.Collections;
  35. using System.Collections.Generic;
  36. using System.Collections.ObjectModel;
  37. using System.Data;
  38. using System.IO;
  39. using System.Linq;
  40. using System.Net;
  41. using System.Runtime.Serialization;
  42. using System.Text;
  43. using System.Xml;
  44. using System.Xml.Schema;
  45. using System.Xml.Serialization;
  46. using NUnit.Framework;
  47. [assembly: ContractNamespace ("http://www.u2u.be/samples/wcf/2009", ClrNamespace = "U2U.DataContracts")] // bug #599889
  48. namespace MonoTests.System.Runtime.Serialization
  49. {
  50. [TestFixture]
  51. public class DataContractSerializerTest
  52. {
  53. static readonly XmlWriterSettings settings;
  54. static DataContractSerializerTest ()
  55. {
  56. settings = new XmlWriterSettings ();
  57. settings.OmitXmlDeclaration = true;
  58. }
  59. [DataContract]
  60. class Sample1
  61. {
  62. [DataMember]
  63. public string Member1;
  64. }
  65. [Test]
  66. [ExpectedException (typeof (ArgumentNullException))]
  67. public void ConstructorTypeNull ()
  68. {
  69. new DataContractSerializer (null);
  70. }
  71. [Test]
  72. public void ConstructorKnownTypesNull ()
  73. {
  74. // null knownTypes is allowed. Though the property is filled.
  75. Assert.IsNotNull (new DataContractSerializer (typeof (Sample1), null).KnownTypes, "#1");
  76. Assert.IsNotNull (new DataContractSerializer (typeof (Sample1), "Foo", String.Empty, null).KnownTypes, "#2");
  77. Assert.IsNotNull (new DataContractSerializer (typeof (Sample1), new XmlDictionary ().Add ("Foo"), XmlDictionaryString.Empty, null).KnownTypes, "#3");
  78. }
  79. [Test]
  80. [ExpectedException (typeof (ArgumentNullException))]
  81. public void ConstructorNameNull ()
  82. {
  83. new DataContractSerializer (typeof (Sample1), null, String.Empty);
  84. }
  85. [Test]
  86. [ExpectedException (typeof (ArgumentNullException))]
  87. public void ConstructorNamespaceNull ()
  88. {
  89. new DataContractSerializer (typeof (Sample1), "foo", null);
  90. }
  91. [Test]
  92. [ExpectedException (typeof (ArgumentOutOfRangeException))]
  93. public void ConstructorNegativeMaxObjects ()
  94. {
  95. new DataContractSerializer (typeof (Sample1), null,
  96. -1, false, false, null);
  97. }
  98. [Test]
  99. public void ConstructorMisc ()
  100. {
  101. new DataContractSerializer (typeof (GlobalSample1));
  102. }
  103. [Test]
  104. public void WriteObjectContent ()
  105. {
  106. StringWriter sw = new StringWriter ();
  107. using (XmlWriter xw = XmlWriter.Create (sw, settings)) {
  108. DataContractSerializer ser =
  109. new DataContractSerializer (typeof (string));
  110. xw.WriteStartElement ("my-element");
  111. ser.WriteObjectContent (xw, "TEST STRING");
  112. xw.WriteEndElement ();
  113. }
  114. Assert.AreEqual ("<my-element>TEST STRING</my-element>",
  115. sw.ToString ());
  116. }
  117. [Test]
  118. public void WriteObjectToStream ()
  119. {
  120. DataContractSerializer ser =
  121. new DataContractSerializer (typeof (int));
  122. MemoryStream sw = new MemoryStream ();
  123. ser.WriteObject (sw, 1);
  124. string expected = "<int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">1</int>";
  125. byte[] buf = sw.ToArray ();
  126. Assert.AreEqual (expected, Encoding.UTF8.GetString (buf, 0, buf.Length));
  127. }
  128. [Test]
  129. public void ReadObjectFromStream ()
  130. {
  131. DataContractSerializer ser =
  132. new DataContractSerializer (typeof (int));
  133. string expected = "<int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">1</int>";
  134. byte[] buf = Encoding.UTF8.GetBytes (expected);
  135. MemoryStream sw = new MemoryStream (buf);
  136. object res = ser.ReadObject (sw);
  137. Assert.AreEqual (1, res);
  138. }
  139. // int
  140. [Test]
  141. public void SerializeInt ()
  142. {
  143. DataContractSerializer ser =
  144. new DataContractSerializer (typeof (int));
  145. SerializeInt (ser, "<int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">1</int>");
  146. }
  147. [Test]
  148. [Category ("NotWorking")]
  149. public void NetSerializeInt ()
  150. {
  151. NetDataContractSerializer ser =
  152. new NetDataContractSerializer ();
  153. // z:Assembly="0" ???
  154. SerializeInt (ser, String.Format ("<int z:Type=\"System.Int32\" z:Assembly=\"0\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\" xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">1</int>", typeof (int).Assembly.FullName));
  155. }
  156. void SerializeInt (XmlObjectSerializer ser, string expected)
  157. {
  158. StringWriter sw = new StringWriter ();
  159. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  160. ser.WriteObject (w, 1);
  161. }
  162. Assert.AreEqual (expected, sw.ToString ());
  163. }
  164. // pass typeof(DCEmpty), serialize int
  165. [Test]
  166. public void SerializeIntForDCEmpty ()
  167. {
  168. DataContractSerializer ser =
  169. new DataContractSerializer (typeof (DCEmpty));
  170. // tricky!
  171. SerializeIntForDCEmpty (ser, "<DCEmpty xmlns:d1p1=\"http://www.w3.org/2001/XMLSchema\" i:type=\"d1p1:int\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\">1</DCEmpty>");
  172. }
  173. void SerializeIntForDCEmpty (XmlObjectSerializer ser, string expected)
  174. {
  175. StringWriter sw = new StringWriter ();
  176. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  177. ser.WriteObject (w, 1);
  178. }
  179. XmlComparer.AssertAreEqual (expected, sw.ToString ());
  180. }
  181. // DCEmpty
  182. [Test]
  183. public void SerializeEmptyClass ()
  184. {
  185. DataContractSerializer ser =
  186. new DataContractSerializer (typeof (DCEmpty));
  187. SerializeEmptyClass (ser, "<DCEmpty xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\" />");
  188. }
  189. [Test]
  190. [Category ("NotWorking")]
  191. public void NetSerializeEmptyClass ()
  192. {
  193. NetDataContractSerializer ser =
  194. new NetDataContractSerializer ();
  195. SerializeEmptyClass (ser, String.Format ("<DCEmpty xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" z:Id=\"1\" z:Type=\"MonoTests.System.Runtime.Serialization.DCEmpty\" z:Assembly=\"{0}\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\" />", this.GetType ().Assembly.FullName));
  196. }
  197. void SerializeEmptyClass (XmlObjectSerializer ser, string expected)
  198. {
  199. StringWriter sw = new StringWriter ();
  200. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  201. ser.WriteObject (w, new DCEmpty ());
  202. }
  203. Assert.AreEqual (expected, sw.ToString ());
  204. }
  205. // DCEmpty
  206. [Test]
  207. public void SerializeEmptyNoNSClass ()
  208. {
  209. var ser = new DataContractSerializer (typeof (DCEmptyNoNS));
  210. SerializeEmptyNoNSClass (ser, "<DCEmptyNoNS xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" />");
  211. }
  212. void SerializeEmptyNoNSClass (XmlObjectSerializer ser, string expected)
  213. {
  214. var sw = new StringWriter ();
  215. using (var w = XmlWriter.Create (sw, settings)) {
  216. ser.WriteObject (w, new DCEmptyNoNS ());
  217. }
  218. Assert.AreEqual (expected, sw.ToString ());
  219. }
  220. // string (primitive)
  221. [Test]
  222. public void SerializePrimitiveString ()
  223. {
  224. XmlObjectSerializer ser =
  225. new DataContractSerializer (typeof (string));
  226. SerializePrimitiveString (ser, "<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">TEST</string>");
  227. }
  228. [Test]
  229. [Category ("NotWorking")]
  230. public void NetSerializePrimitiveString ()
  231. {
  232. XmlObjectSerializer ser = new NetDataContractSerializer ();
  233. SerializePrimitiveString (ser, "<string z:Type=\"System.String\" z:Assembly=\"0\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\" xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">TEST</string>");
  234. }
  235. void SerializePrimitiveString (XmlObjectSerializer ser, string expected)
  236. {
  237. StringWriter sw = new StringWriter ();
  238. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  239. ser.WriteObject (w, "TEST");
  240. }
  241. Assert.AreEqual (expected, sw.ToString ());
  242. }
  243. // QName (primitive but ...)
  244. [Test]
  245. [Ignore ("These tests would not make any sense right now since it's populated prefix is not testable.")]
  246. public void SerializePrimitiveQName ()
  247. {
  248. XmlObjectSerializer ser =
  249. new DataContractSerializer (typeof (XmlQualifiedName));
  250. SerializePrimitiveQName (ser, "<z:QName xmlns:d7=\"urn:foo\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\">d7:foo</z:QName>");
  251. }
  252. [Test]
  253. [Ignore ("These tests would not make any sense right now since it's populated prefix is not testable.")]
  254. public void NetSerializePrimitiveQName ()
  255. {
  256. XmlObjectSerializer ser = new NetDataContractSerializer ();
  257. SerializePrimitiveQName (ser, "<z:QName z:Type=\"System.Xml.XmlQualifiedName\" z:Assembly=\"System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" xmlns:d7=\"urn:foo\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\">d7:foo</z:QName>");
  258. }
  259. void SerializePrimitiveQName (XmlObjectSerializer ser, string expected)
  260. {
  261. StringWriter sw = new StringWriter ();
  262. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  263. ser.WriteObject (w, new XmlQualifiedName ("foo", "urn:foo"));
  264. }
  265. Assert.AreEqual (expected, sw.ToString ());
  266. }
  267. // DCSimple1
  268. [Test]
  269. public void SerializeSimpleClass1 ()
  270. {
  271. DataContractSerializer ser =
  272. new DataContractSerializer (typeof (DCSimple1));
  273. SerializeSimpleClass1 (ser, "<DCSimple1 xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\"><Foo>TEST</Foo></DCSimple1>");
  274. }
  275. [Test]
  276. [ExpectedException (typeof (SerializationException))]
  277. public void SerializeSimpleXml ()
  278. {
  279. DataContractSerializer ser =
  280. new DataContractSerializer (typeof (SimpleXml));
  281. SerializeSimpleClass1 (ser, @"<simple i:type=""d1p1:DCSimple1"" xmlns:d1p1=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><d1p1:Foo>TEST</d1p1:Foo></simple>");
  282. }
  283. [Test]
  284. [Category ("NotWorking")]
  285. public void NetSerializeSimpleClass1 ()
  286. {
  287. NetDataContractSerializer ser =
  288. new NetDataContractSerializer ();
  289. SerializeSimpleClass1 (ser, String.Format ("<DCSimple1 xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" z:Id=\"1\" z:Type=\"MonoTests.System.Runtime.Serialization.DCSimple1\" z:Assembly=\"{0}\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\"><Foo z:Id=\"2\">TEST</Foo></DCSimple1>", this.GetType ().Assembly.FullName));
  290. }
  291. void SerializeSimpleClass1 (XmlObjectSerializer ser, string expected)
  292. {
  293. StringWriter sw = new StringWriter ();
  294. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  295. ser.WriteObject (w, new DCSimple1 ());
  296. }
  297. Console.WriteLine(sw.ToString());
  298. Assert.AreEqual (expected, sw.ToString ());
  299. }
  300. // NonDC (behavior changed in 3.5/SP1; not it's not rejected)
  301. [Test]
  302. public void SerializeNonDC ()
  303. {
  304. DataContractSerializer ser = new DataContractSerializer (typeof (NonDC));
  305. var sw = new StringWriter ();
  306. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  307. ser.WriteObject (w, new NonDC ());
  308. }
  309. Assert.AreEqual ("<NonDC xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization'><Whee>whee!</Whee></NonDC>".Replace ('\'', '"'), sw.ToString ());
  310. }
  311. // DCHasNonDC
  312. [Test]
  313. public void SerializeDCHasNonDC ()
  314. {
  315. DataContractSerializer ser = new DataContractSerializer (typeof (DCHasNonDC));
  316. var sw = new StringWriter ();
  317. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  318. ser.WriteObject (w, new DCHasNonDC ());
  319. }
  320. Assert.AreEqual ("<DCHasNonDC xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization'><Hoge><Whee>whee!</Whee></Hoge></DCHasNonDC>".Replace ('\'', '"'), sw.ToString ());
  321. }
  322. // DCHasSerializable
  323. [Test]
  324. // DCHasSerializable itself is DataContract and has a field
  325. // whose type is not contract but serializable.
  326. public void SerializeSimpleSerializable1 ()
  327. {
  328. DataContractSerializer ser = new DataContractSerializer (typeof (DCHasSerializable));
  329. StringWriter sw = new StringWriter ();
  330. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  331. ser.WriteObject (w, new DCHasSerializable ());
  332. }
  333. Assert.AreEqual ("<DCHasSerializable xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\"><Ser><Doh>doh!</Doh></Ser></DCHasSerializable>", sw.ToString ());
  334. }
  335. [Test]
  336. public void SerializeDCWithName ()
  337. {
  338. DataContractSerializer ser = new DataContractSerializer (typeof (DCWithName));
  339. StringWriter sw = new StringWriter ();
  340. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  341. ser.WriteObject (w, new DCWithName ());
  342. }
  343. Assert.AreEqual ("<Foo xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\"><FooMember>value</FooMember></Foo>", sw.ToString ());
  344. }
  345. [Test]
  346. public void SerializeDCWithEmptyName1 ()
  347. {
  348. DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEmptyName));
  349. StringWriter sw = new StringWriter ();
  350. DCWithEmptyName dc = new DCWithEmptyName ();
  351. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  352. try {
  353. ser.WriteObject (w, dc);
  354. } catch (InvalidDataContractException) {
  355. return;
  356. }
  357. }
  358. Assert.Fail ("Expected InvalidDataContractException");
  359. }
  360. [Test]
  361. [Category ("NotWorking")]
  362. public void SerializeDCWithEmptyName2 ()
  363. {
  364. DataContractSerializer ser = new DataContractSerializer (typeof (DCWithName));
  365. StringWriter sw = new StringWriter ();
  366. /* DataContractAttribute.Name == "", not valid */
  367. DCWithEmptyName dc = new DCWithEmptyName ();
  368. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  369. try {
  370. ser.WriteObject (w, dc);
  371. } catch (InvalidDataContractException) {
  372. return;
  373. }
  374. }
  375. Assert.Fail ("Expected InvalidDataContractException");
  376. }
  377. [Test]
  378. [Category ("NotWorking")]
  379. public void SerializeDCWithNullName ()
  380. {
  381. DataContractSerializer ser = new DataContractSerializer (typeof (DCWithNullName));
  382. StringWriter sw = new StringWriter ();
  383. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  384. try {
  385. /* DataContractAttribute.Name == "", not valid */
  386. ser.WriteObject (w, new DCWithNullName ());
  387. } catch (InvalidDataContractException) {
  388. return;
  389. }
  390. }
  391. Assert.Fail ("Expected InvalidDataContractException");
  392. }
  393. [Test]
  394. public void SerializeDCWithEmptyNamespace1 ()
  395. {
  396. DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEmptyNamespace));
  397. StringWriter sw = new StringWriter ();
  398. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  399. ser.WriteObject (w, new DCWithEmptyNamespace ());
  400. }
  401. }
  402. // Wrapper.DCWrapped
  403. [Test]
  404. public void SerializeWrappedClass ()
  405. {
  406. DataContractSerializer ser =
  407. new DataContractSerializer (typeof (Wrapper.DCWrapped));
  408. SerializeWrappedClass (ser, "<Wrapper.DCWrapped xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\" />");
  409. }
  410. [Test]
  411. [Category ("NotWorking")]
  412. public void NetSerializeWrappedClass ()
  413. {
  414. NetDataContractSerializer ser =
  415. new NetDataContractSerializer ();
  416. SerializeWrappedClass (ser, String.Format ("<Wrapper.DCWrapped xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" z:Id=\"1\" z:Type=\"MonoTests.System.Runtime.Serialization.Wrapper+DCWrapped\" z:Assembly=\"{0}\" xmlns:z=\"http://schemas.microsoft.com/2003/10/Serialization/\" xmlns=\"http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization\" />", this.GetType ().Assembly.FullName));
  417. }
  418. void SerializeWrappedClass (XmlObjectSerializer ser, string expected)
  419. {
  420. StringWriter sw = new StringWriter ();
  421. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  422. ser.WriteObject (w, new Wrapper.DCWrapped ());
  423. }
  424. Assert.AreEqual (expected, sw.ToString ());
  425. }
  426. [Test]
  427. /* old code
  428. // CollectionContainer : Items must have a setter.
  429. [ExpectedException (typeof (InvalidDataContractException))]
  430. [Category ("NotWorking")]
  431. */
  432. public void SerializeReadOnlyCollectionMember ()
  433. {
  434. DataContractSerializer ser =
  435. new DataContractSerializer (typeof (CollectionContainer));
  436. StringWriter sw = new StringWriter ();
  437. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  438. ser.WriteObject (w, null);
  439. }
  440. Assert.AreEqual ("<CollectionContainer i:nil='true' xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization' />".Replace ('\'', '"'), sw.ToString (), "#1");
  441. sw = new StringWriter ();
  442. var c = new CollectionContainer ();
  443. c.Items.Add ("foo");
  444. c.Items.Add ("bar");
  445. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  446. ser.WriteObject (w, c);
  447. }
  448. Assert.AreEqual ("<CollectionContainer xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization'><Items xmlns:d2p1='http://schemas.microsoft.com/2003/10/Serialization/Arrays'><d2p1:string>foo</d2p1:string><d2p1:string>bar</d2p1:string></Items></CollectionContainer>".Replace ('\'', '"'), sw.ToString (), "#2");
  449. }
  450. // DataCollectionContainer : Items must have a setter.
  451. [Test]
  452. //[ExpectedException (typeof (InvalidDataContractException))]
  453. public void SerializeReadOnlyDataCollectionMember ()
  454. {
  455. DataContractSerializer ser =
  456. new DataContractSerializer (typeof (DataCollectionContainer));
  457. StringWriter sw = new StringWriter ();
  458. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  459. ser.WriteObject (w, null);
  460. }
  461. Assert.AreEqual ("<DataCollectionContainer i:nil='true' xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization' />".Replace ('\'', '"'), sw.ToString (), "#1");
  462. sw = new StringWriter ();
  463. var c = new DataCollectionContainer ();
  464. c.Items.Add ("foo");
  465. c.Items.Add ("bar");
  466. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  467. ser.WriteObject (w, c);
  468. }
  469. // LAMESPEC: this is bogus behavior. .NET serializes
  470. // System.String as "string" without overriding its
  471. // element namespace, but then it must be regarded as
  472. // in parent's namespace. What if there already is an
  473. // element definition for "string" with the same
  474. // namespace?
  475. Assert.AreEqual ("<DataCollectionContainer xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization'><Items><string>foo</string><string>bar</string></Items></DataCollectionContainer>".Replace ('\'', '"'), sw.ToString (), "#2");
  476. }
  477. [Test]
  478. public void SerializeGuid ()
  479. {
  480. DataContractSerializer ser = new DataContractSerializer (typeof (Guid));
  481. StringWriter sw = new StringWriter ();
  482. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  483. ser.WriteObject (w, Guid.Empty);
  484. }
  485. Assert.AreEqual (
  486. "<guid xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">00000000-0000-0000-0000-000000000000</guid>",
  487. sw.ToString ());
  488. }
  489. [Test]
  490. public void SerializeEnum ()
  491. {
  492. DataContractSerializer ser = new DataContractSerializer (typeof (Colors));
  493. StringWriter sw = new StringWriter ();
  494. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  495. ser.WriteObject (w, new Colors ());
  496. }
  497. Assert.AreEqual (
  498. @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">Red</Colors>",
  499. sw.ToString ());
  500. }
  501. [Test]
  502. public void SerializeEnum2 ()
  503. {
  504. DataContractSerializer ser = new DataContractSerializer (typeof (Colors));
  505. StringWriter sw = new StringWriter ();
  506. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  507. ser.WriteObject (w, 0);
  508. }
  509. XmlComparer.AssertAreEqual (
  510. @"<Colors xmlns:d1p1=""http://www.w3.org/2001/XMLSchema"" i:type=""d1p1:int"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">0</Colors>",
  511. sw.ToString ());
  512. }
  513. [Test]
  514. public void SerializeEnumWithDC ()
  515. {
  516. DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
  517. StringWriter sw = new StringWriter ();
  518. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  519. ser.WriteObject (w, new ColorsWithDC ());
  520. }
  521. Assert.AreEqual (
  522. @"<_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">_Red</_ColorsWithDC>",
  523. sw.ToString ());
  524. }
  525. [Test]
  526. public void SerializeEnumWithNoDC ()
  527. {
  528. DataContractSerializer ser = new DataContractSerializer (typeof (ColorsEnumMemberNoDC));
  529. StringWriter sw = new StringWriter ();
  530. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  531. ser.WriteObject (w, new ColorsEnumMemberNoDC ());
  532. }
  533. Assert.AreEqual (
  534. @"<ColorsEnumMemberNoDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">Red</ColorsEnumMemberNoDC>",
  535. sw.ToString ());
  536. }
  537. [Test]
  538. public void SerializeEnumWithDC2 ()
  539. {
  540. DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
  541. StringWriter sw = new StringWriter ();
  542. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  543. ser.WriteObject (w, 3);
  544. }
  545. XmlComparer.AssertAreEqual (
  546. @"<_ColorsWithDC xmlns:d1p1=""http://www.w3.org/2001/XMLSchema"" i:type=""d1p1:int"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">3</_ColorsWithDC>",
  547. sw.ToString ());
  548. }
  549. [Test]
  550. [ExpectedException (typeof (SerializationException))]
  551. public void SerializeEnumWithDCInvalid ()
  552. {
  553. DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
  554. StringWriter sw = new StringWriter ();
  555. ColorsWithDC cdc = ColorsWithDC.Blue;
  556. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  557. ser.WriteObject (w, cdc);
  558. }
  559. }
  560. [Test]
  561. public void SerializeDCWithEnum ()
  562. {
  563. DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEnum));
  564. StringWriter sw = new StringWriter ();
  565. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  566. ser.WriteObject (w, new DCWithEnum ());
  567. }
  568. Assert.AreEqual (
  569. @"<DCWithEnum xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><_colors>Red</_colors></DCWithEnum>",
  570. sw.ToString ());
  571. }
  572. [Test]
  573. public void SerializeDCWithTwoEnums ()
  574. {
  575. DataContractSerializer ser = new DataContractSerializer (typeof (DCWithTwoEnums));
  576. StringWriter sw = new StringWriter ();
  577. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  578. DCWithTwoEnums e = new DCWithTwoEnums ();
  579. e.colors = Colors.Blue;
  580. e.colors2 = Colors.Green;
  581. ser.WriteObject (w, e);
  582. }
  583. Assert.AreEqual (
  584. @"<DCWithTwoEnums xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><colors>Blue</colors><colors2>Green</colors2></DCWithTwoEnums>",
  585. sw.ToString ());
  586. }
  587. [Test]
  588. public void SerializeNestingDC2 ()
  589. {
  590. DataContractSerializer ser = new DataContractSerializer (typeof (NestingDC2));
  591. StringWriter sw = new StringWriter ();
  592. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  593. NestingDC2 e = new NestingDC2 ();
  594. e.Field = new NestedDC2 ("Something");
  595. ser.WriteObject (w, e);
  596. }
  597. Assert.AreEqual (
  598. @"<NestingDC2 xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""test2""><Field xmlns:d2p1=""test1""><d2p1:Name>Something</d2p1:Name></Field></NestingDC2>",
  599. sw.ToString ());
  600. }
  601. [Test]
  602. public void SerializeNestingDC ()
  603. {
  604. DataContractSerializer ser = new DataContractSerializer (typeof (NestingDC));
  605. StringWriter sw = new StringWriter ();
  606. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  607. NestingDC e = new NestingDC ();
  608. e.Field1 = new NestedDC ("test1");
  609. e.Field2 = new NestedDC ("test2");
  610. ser.WriteObject (w, e);
  611. }
  612. Assert.AreEqual (
  613. @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><Field1><Name>test1</Name></Field1><Field2><Name>test2</Name></Field2></NestingDC>",
  614. sw.ToString ());
  615. sw = new StringWriter ();
  616. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  617. NestingDC e = new NestingDC ();
  618. ser.WriteObject (w, e);
  619. }
  620. Assert.AreEqual (
  621. @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><Field1 i:nil=""true"" /><Field2 i:nil=""true"" /></NestingDC>",
  622. sw.ToString ());
  623. }
  624. [Test]
  625. public void SerializeDerivedDC ()
  626. {
  627. DataContractSerializer ser = new DataContractSerializer (typeof (DerivedDC));
  628. StringWriter sw = new StringWriter ();
  629. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  630. DerivedDC e = new DerivedDC ();
  631. ser.WriteObject (w, e);
  632. }
  633. Assert.AreEqual (
  634. @"<DerivedDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""Derived""><baseVal xmlns=""Base"">0</baseVal><derivedVal>0</derivedVal></DerivedDC>",
  635. sw.ToString ());
  636. }
  637. [Test]
  638. public void SerializerDCArray ()
  639. {
  640. DataContractSerializer ser = new DataContractSerializer (typeof (DCWithEnum []));
  641. StringWriter sw = new StringWriter ();
  642. DCWithEnum [] arr = new DCWithEnum [2];
  643. arr [0] = new DCWithEnum (); arr [0].colors = Colors.Red;
  644. arr [1] = new DCWithEnum (); arr [1].colors = Colors.Green;
  645. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  646. ser.WriteObject (w, arr);
  647. }
  648. XmlComparer.AssertAreEqual (
  649. @"<ArrayOfDCWithEnum xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><DCWithEnum><_colors>Red</_colors></DCWithEnum><DCWithEnum><_colors>Green</_colors></DCWithEnum></ArrayOfDCWithEnum>",
  650. sw.ToString ());
  651. }
  652. [Test]
  653. public void SerializerDCArray2 ()
  654. {
  655. List<Type> known = new List<Type> ();
  656. known.Add (typeof (DCWithEnum));
  657. known.Add (typeof (DCSimple1));
  658. DataContractSerializer ser = new DataContractSerializer (typeof (object []), known);
  659. StringWriter sw = new StringWriter ();
  660. object [] arr = new object [2];
  661. arr [0] = new DCWithEnum (); ((DCWithEnum)arr [0]).colors = Colors.Red;
  662. arr [1] = new DCSimple1 (); ((DCSimple1) arr [1]).Foo = "hello";
  663. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  664. ser.WriteObject (w, arr);
  665. }
  666. XmlComparer.AssertAreEqual (
  667. @"<ArrayOfanyType xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.microsoft.com/2003/10/Serialization/Arrays""><anyType xmlns:d2p1=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"" i:type=""d2p1:DCWithEnum""><d2p1:_colors>Red</d2p1:_colors></anyType><anyType xmlns:d2p1=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"" i:type=""d2p1:DCSimple1""><d2p1:Foo>hello</d2p1:Foo></anyType></ArrayOfanyType>",
  668. sw.ToString ());
  669. }
  670. [Test]
  671. public void SerializerDCArray3 ()
  672. {
  673. DataContractSerializer ser = new DataContractSerializer (typeof (int []));
  674. StringWriter sw = new StringWriter ();
  675. int [] arr = new int [2];
  676. arr [0] = 1; arr [1] = 2;
  677. using (XmlWriter w = XmlWriter.Create (sw, settings)) {
  678. ser.WriteObject (w, arr);
  679. }
  680. XmlComparer.AssertAreEqual (
  681. @"<ArrayOfint xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.microsoft.com/2003/10/Serialization/Arrays""><int>1</int><int>2</int></ArrayOfint>",
  682. sw.ToString ());
  683. }
  684. [Test]
  685. public void SerializeNonDCArray ()
  686. {
  687. DataContractSerializer ser = new DataContractSerializer (typeof (SerializeNonDCArrayType));
  688. StringWriter sw = new StringWriter ();
  689. using (XmlWriter xw = XmlWriter.Create (sw, settings)) {
  690. ser.WriteObject (xw, new SerializeNonDCArrayType ());
  691. }
  692. Assert.AreEqual (@"<SerializeNonDCArrayType xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><IPAddresses /></SerializeNonDCArrayType>",
  693. sw.ToString ());
  694. }
  695. [Test]
  696. public void SerializeNonDCArrayItems ()
  697. {
  698. DataContractSerializer ser = new DataContractSerializer (typeof (SerializeNonDCArrayType));
  699. StringWriter sw = new StringWriter ();
  700. using (XmlWriter xw = XmlWriter.Create (sw, settings)) {
  701. SerializeNonDCArrayType obj = new SerializeNonDCArrayType ();
  702. obj.IPAddresses = new NonDCItem [] {new NonDCItem () { Data = new int [] {1, 2, 3, 4} } };
  703. ser.WriteObject (xw, obj);
  704. }
  705. XmlDocument doc = new XmlDocument ();
  706. doc.LoadXml (sw.ToString ());
  707. XmlNamespaceManager nsmgr = new XmlNamespaceManager (doc.NameTable);
  708. nsmgr.AddNamespace ("s", "http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization");
  709. nsmgr.AddNamespace ("n", "http://schemas.datacontract.org/2004/07/System.Net");
  710. nsmgr.AddNamespace ("a", "http://schemas.microsoft.com/2003/10/Serialization/Arrays");
  711. Assert.AreEqual (1, doc.SelectNodes ("/s:SerializeNonDCArrayType/s:IPAddresses/s:NonDCItem", nsmgr).Count, "#1");
  712. XmlElement el = doc.SelectSingleNode ("/s:SerializeNonDCArrayType/s:IPAddresses/s:NonDCItem/s:Data", nsmgr) as XmlElement;
  713. Assert.IsNotNull (el, "#3");
  714. Assert.AreEqual (4, el.SelectNodes ("a:int", nsmgr).Count, "#4");
  715. }
  716. [Test]
  717. public void DeserializeEnum ()
  718. {
  719. Colors c = Deserialize<Colors> (
  720. @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">Red</Colors>");
  721. Assert.AreEqual (Colors.Red, c, "#de2");
  722. }
  723. [Test]
  724. public void DeserializeEnum2 ()
  725. {
  726. Colors c = Deserialize<Colors> (
  727. @"<Colors xmlns:d1p1=""http://www.w3.org/2001/XMLSchema"" i:type=""d1p1:int"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">1</Colors>",
  728. typeof (int));
  729. Assert.AreEqual (Colors.Green, c, "#de4");
  730. }
  731. [Test]
  732. [ExpectedException (typeof (SerializationException))]
  733. public void DeserializeEnumInvalid1 ()
  734. {
  735. Deserialize<Colors> (
  736. @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""></Colors>");
  737. }
  738. [Test]
  739. [ExpectedException (typeof (SerializationException))]
  740. public void DeserializeEnumInvalid2 ()
  741. {
  742. Deserialize<Colors> (
  743. @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""/>");
  744. }
  745. [Test]
  746. [ExpectedException (typeof (SerializationException))]
  747. public void DeserializeEnumInvalid3 ()
  748. {
  749. //"red" instead of "Red"
  750. Deserialize<Colors> (
  751. @"<Colors xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">red</Colors>");
  752. }
  753. [Test]
  754. public void DeserializeEnumFlags ()
  755. {
  756. Deserialize<Colors2> (
  757. @"<Colors2 xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""/>");
  758. }
  759. [Test]
  760. public void DeserializeEnumWithDC ()
  761. {
  762. ColorsWithDC cdc = Deserialize<ColorsWithDC> (
  763. @"<_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">_Red</_ColorsWithDC>");
  764. Assert.AreEqual (ColorsWithDC.Red, cdc, "#de6");
  765. }
  766. [Test]
  767. [ExpectedException (typeof (SerializationException))]
  768. public void DeserializeEnumWithDCInvalid ()
  769. {
  770. Deserialize<ColorsWithDC> (
  771. @"<_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">NonExistant</_ColorsWithDC>");
  772. }
  773. [Test]
  774. public void DeserializeDCWithEnum ()
  775. {
  776. DCWithEnum dc = Deserialize<DCWithEnum> (
  777. @"<DCWithEnum xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><_colors>Red</_colors></DCWithEnum>");
  778. Assert.AreEqual (Colors.Red, dc.colors, "#de8");
  779. }
  780. [Test]
  781. public void DeserializeNestingDC ()
  782. {
  783. NestingDC dc = Deserialize<NestingDC> (
  784. @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><Field1><Name>test1</Name></Field1><Field2><Name>test2</Name></Field2></NestingDC>");
  785. Assert.IsNotNull (dc.Field1, "#N1: Field1 should not be null.");
  786. Assert.IsNotNull (dc.Field2, "#N2: Field2 should not be null.");
  787. Assert.AreEqual ("test1", dc.Field1.Name, "#1");
  788. Assert.AreEqual ("test2", dc.Field2.Name, "#2");
  789. }
  790. [Test]
  791. public void DeserializeNestingDC2 ()
  792. {
  793. NestingDC2 dc = Deserialize<NestingDC2> (
  794. @"<NestingDC2 xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""test2""><Field xmlns:d2p1=""test1""><d2p1:Name>Something</d2p1:Name></Field></NestingDC2>");
  795. Assert.IsNotNull (dc.Field, "#N1: Field should not be null.");
  796. Assert.AreEqual ("Something", dc.Field.Name, "#N2");
  797. }
  798. [Test]
  799. public void DeserializeDerivedDC ()
  800. {
  801. DerivedDC dc = Deserialize<DerivedDC> (
  802. @"<DerivedDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""Derived""><baseVal xmlns=""Base"">1</baseVal><derivedVal>2</derivedVal></DerivedDC>");
  803. Assert.AreEqual (1, dc.baseVal, "#N1");
  804. Assert.AreEqual (2, dc.derivedVal, "#N2");
  805. }
  806. [Test]
  807. public void DeserializeTwice ()
  808. {
  809. string xml =
  810. @"<any><_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">_Red</_ColorsWithDC> <_ColorsWithDC xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">_Red</_ColorsWithDC></any>";
  811. DataContractSerializer ser = new DataContractSerializer (typeof (ColorsWithDC));
  812. XmlReader xr = XmlReader.Create (new StringReader (xml), new XmlReaderSettings ());
  813. xr.ReadStartElement ();
  814. object o = ser.ReadObject (xr);
  815. Assert.AreEqual (typeof (ColorsWithDC), o.GetType (), "#de5");
  816. ColorsWithDC cdc = (ColorsWithDC) o;
  817. Assert.AreEqual (ColorsWithDC.Red, o, "#de6");
  818. o = ser.ReadObject (xr);
  819. Assert.AreEqual (typeof (ColorsWithDC), o.GetType (), "#de5");
  820. cdc = (ColorsWithDC) o;
  821. Assert.AreEqual (ColorsWithDC.Red, o, "#de6");
  822. Assert.AreEqual (XmlNodeType.EndElement, xr.NodeType, "#de6");
  823. Assert.AreEqual ("any", xr.LocalName, "#de6");
  824. xr.ReadEndElement ();
  825. }
  826. [Test]
  827. public void DeserializeEmptyNestingDC ()
  828. {
  829. NestingDC dc = Deserialize<NestingDC> (
  830. @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""></NestingDC>");
  831. Assert.IsNotNull (dc, "#A0: The object should not be null.");
  832. Assert.IsNull (dc.Field1, "#A1: Field1 should be null.");
  833. Assert.IsNull (dc.Field2, "#A2: Field2 should be null.");
  834. dc = Deserialize<NestingDC> (
  835. @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""/>");
  836. Assert.IsNotNull (dc, "#B0: The object should not be null.");
  837. Assert.IsNull (dc.Field1, "#B1: Field1 should be null.");
  838. Assert.IsNull (dc.Field2, "#B2: Field2 should be null.");
  839. dc = Deserialize<NestingDC> (
  840. @"<NestingDC xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><Field1 i:nil=""true"" /><Field2 i:nil=""true"" /></NestingDC>");
  841. Assert.IsNotNull (dc, "#B0: The object should not be null.");
  842. Assert.IsNull (dc.Field1, "#B1: Field1 should be null.");
  843. Assert.IsNull (dc.Field2, "#B2: Field2 should be null.");
  844. }
  845. [Test]
  846. [ExpectedException (typeof (SerializationException))]
  847. public void DeserializeEmptyDCWithTwoEnums ()
  848. {
  849. Deserialize<DCWithTwoEnums> (
  850. @"<DCWithTwoEnums xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><colors i:nil=""true""/><colors2 i:nil=""true""/></DCWithTwoEnums>");
  851. }
  852. [Test]
  853. public void DeserializeDCWithNullableEnum ()
  854. {
  855. DCWithNullableEnum dc = Deserialize<DCWithNullableEnum> (
  856. @"<DCWithNullableEnum xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><colors i:nil=""true""/></DCWithNullableEnum>");
  857. Assert.IsNull (dc.colors, "#B1: Field should be null.");
  858. }
  859. [Test]
  860. public void DeserializeDCWithTwoEnums ()
  861. {
  862. DCWithTwoEnums dc = Deserialize<DCWithTwoEnums> (
  863. @"<DCWithTwoEnums xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><colors>Blue</colors><colors2>Green</colors2></DCWithTwoEnums>");
  864. Assert.AreEqual (Colors.Blue, dc.colors, "#0");
  865. Assert.AreEqual (Colors.Green, dc.colors2, "#1");
  866. }
  867. [Test]
  868. public void DeserializerDCArray ()
  869. {
  870. DCWithEnum [] dcArray = Deserialize<DCWithEnum []> (
  871. @"<ArrayOfDCWithEnum xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><DCWithEnum><_colors>Red</_colors></DCWithEnum><DCWithEnum><_colors>Green</_colors></DCWithEnum></ArrayOfDCWithEnum>");
  872. Assert.AreEqual (2, dcArray.Length, "#N1");
  873. Assert.AreEqual (Colors.Red, dcArray [0].colors, "#N2");
  874. Assert.AreEqual (Colors.Green, dcArray [1].colors, "#N3");
  875. }
  876. [Test]
  877. public void DeserializerDCArray2 ()
  878. {
  879. string xml =
  880. @"<ArrayOfanyType xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.microsoft.com/2003/10/Serialization/Arrays""><anyType xmlns:d2p1=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"" i:type=""d2p1:DCWithEnum""><d2p1:_colors>Red</d2p1:_colors></anyType><anyType xmlns:d2p1=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"" i:type=""d2p1:DCSimple1""><d2p1:Foo>hello</d2p1:Foo></anyType></ArrayOfanyType>";
  881. List<Type> known = new List<Type> ();
  882. known.Add (typeof (DCWithEnum));
  883. known.Add (typeof (DCSimple1));
  884. DataContractSerializer ser = new DataContractSerializer (typeof (object []), known);
  885. XmlReader xr = XmlReader.Create (new StringReader (xml));
  886. object [] dc = (object []) ser.ReadObject (xr);
  887. Assert.AreEqual (2, dc.Length, "#N1");
  888. Assert.AreEqual (typeof (DCWithEnum), dc [0].GetType (), "#N2");
  889. DCWithEnum dc0 = (DCWithEnum) dc [0];
  890. Assert.AreEqual (Colors.Red, dc0.colors, "#N3");
  891. Assert.AreEqual (typeof (DCSimple1), dc [1].GetType (), "#N4");
  892. DCSimple1 dc1 = (DCSimple1) dc [1];
  893. Assert.AreEqual ("hello", dc1.Foo, "#N4");
  894. }
  895. [Test]
  896. public void DeserializerDCArray3 ()
  897. {
  898. int [] intArray = Deserialize<int []> (
  899. @"<ArrayOfint xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.microsoft.com/2003/10/Serialization/Arrays""><int>1</int><int>2</int></ArrayOfint>");
  900. Assert.AreEqual (2, intArray.Length, "#N0");
  901. Assert.AreEqual (1, intArray [0], "#N1");
  902. Assert.AreEqual (2, intArray [1], "#N2");
  903. }
  904. [Test]
  905. public void ReadObjectNoVerifyObjectName ()
  906. {
  907. string xml = @"<any><Member1 xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization1"">bar1</Member1><Member1 xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization2"">bar2</Member1><Member1 xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization"">bar</Member1></any>";
  908. VerifyObjectNameTestData res = (VerifyObjectNameTestData)new DataContractSerializer (typeof (VerifyObjectNameTestData))
  909. .ReadObject (XmlReader.Create (new StringReader (xml)), false);
  910. Assert.AreEqual ("bar", res.GetMember());
  911. }
  912. [Test]
  913. public void ReadObjectVerifyObjectName ()
  914. {
  915. string xml = @"<VerifyObjectNameTestData xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization""><Member1>bar</Member1></VerifyObjectNameTestData>";
  916. VerifyObjectNameTestData res = (VerifyObjectNameTestData)new DataContractSerializer (typeof (VerifyObjectNameTestData))
  917. .ReadObject (XmlReader.Create (new StringReader (xml)));
  918. Assert.AreEqual ("bar", res.GetMember());
  919. }
  920. [Test]
  921. [ExpectedException (typeof (SerializationException))]
  922. public void ReadObjectWrongNamespace ()
  923. {
  924. string xml = @"<VerifyObjectNameTestData xmlns=""http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization2""><Member1>bar</Member1></VerifyObjectNameTestData>";
  925. new DataContractSerializer (typeof (VerifyObjectNameTestData))
  926. .ReadObject (XmlReader.Create (new StringReader (xml)));
  927. }
  928. [Test]
  929. public void ReferenceSerialization ()
  930. {
  931. var dc = new DataContractSerializer (typeof (ReferenceWrapper));
  932. var t = new ReferenceType ();
  933. StringWriter sw = new StringWriter ();
  934. using (var xw = XmlWriter.Create (sw)) {
  935. xw.WriteStartElement ("z", "root", "http://schemas.microsoft.com/2003/10/Serialization/");
  936. dc.WriteObject (xw, new ReferenceWrapper () {T = t, T2 = t});
  937. xw.WriteEndElement ();
  938. }
  939. string xml = @"<?xml version='1.0' encoding='utf-16'?><z:root xmlns:z='http://schemas.microsoft.com/2003/10/Serialization/'><ReferenceWrapper xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MonoTests.System.Runtime.Serialization'><T z:Id='i1'><F>x</F></T><T2 z:Ref='i1' /></ReferenceWrapper></z:root>";
  940. Assert.AreEqual (xml.Replace ('\'', '"'), sw.ToString (), "#1");
  941. ReferenceWrapper w;
  942. using (XmlReader r = XmlReader.Create (new StringReader (xml)))
  943. {
  944. r.ReadStartElement ();
  945. w = (ReferenceWrapper) dc.ReadObject (r);
  946. r.ReadEndElement ();
  947. }
  948. Assert.AreEqual (w.T, w.T2, "#2");
  949. }
  950. [Test]
  951. public void GenericSerialization ()
  952. {
  953. var sw = new StringWriter ();
  954. var ser = new DataContractSerializer (typeof (Foo<string,int,int>));
  955. using (var xw = XmlWriter.Create (sw))
  956. ser.WriteObject (xw, new Foo<string,int,int> () {Field = "f"
  957. });
  958. var s = sw.ToString ();
  959. var ret = (Foo<string,int,int>) ser.ReadObject (XmlReader.Create (new StringReader (s)));
  960. Assert.AreEqual ("f", ret.Field);
  961. }
  962. [Test]
  963. public void GenericCollectionSerialization ()
  964. {
  965. var l = new MyList ();
  966. l.Add ("foo");
  967. l.Add ("bar");
  968. var ds = new DataContractSerializer (typeof (MyList));
  969. var sw = new StringWriter ();
  970. using (var xw = XmlWriter.Create (sw))
  971. ds.WriteObject (xw, l);
  972. l = (MyList) ds.ReadObject (XmlReader.Create (new StringReader (sw.ToString ())));
  973. Assert.AreEqual (2, l.Count);
  974. }
  975. [Test]
  976. public void GenericListOfKeyValuePairSerialization ()
  977. {
  978. string xml = @"<?xml version='1.0' encoding='utf-16'?><ArrayOfKeyValuePairOfstringstring xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/System.Collections.Generic'><KeyValuePairOfstringstring><key>foo</key><value>bar</value></KeyValuePairOfstringstring></ArrayOfKeyValuePairOfstringstring>".Replace ('\'', '"');
  979. var ds = new DataContractSerializer (typeof (List<KeyValuePair<string,string>>));
  980. var d = new List<KeyValuePair<string,string>> ();
  981. d.Add (new KeyValuePair<string,string> ("foo", "bar"));
  982. var sw = new StringWriter ();
  983. using (var xw = XmlWriter.Create (sw))
  984. ds.WriteObject (xw, d);
  985. Assert.AreEqual (xml, sw.ToString (), "#1");
  986. d = (List<KeyValuePair<string,string>>) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
  987. Assert.AreEqual (1, d.Count, "#2");
  988. Assert.AreEqual ("bar", d [0].Value, "#3");
  989. }
  990. [Test]
  991. public void GenericListOfDictionaryEntrySerialization ()
  992. {
  993. string xml = @"<?xml version='1.0' encoding='utf-16'?><ArrayOfDictionaryEntry xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/System.Collections'><DictionaryEntry><_key xmlns:d3p1='http://www.w3.org/2001/XMLSchema' i:type='d3p1:string'>foo</_key><_value xmlns:d3p1='http://www.w3.org/2001/XMLSchema' i:type='d3p1:string'>bar</_value></DictionaryEntry></ArrayOfDictionaryEntry>".Replace ('\'', '"');
  994. var ds = new DataContractSerializer (typeof (List<DictionaryEntry>));
  995. var d = new List<DictionaryEntry> ();
  996. d.Add (new DictionaryEntry ("foo", "bar"));
  997. var sw = new StringWriter ();
  998. using (var xw = XmlWriter.Create (sw))
  999. ds.WriteObject (xw, d);
  1000. Assert.AreEqual (xml, sw.ToString (), "#1");
  1001. Assert.IsTrue (sw.ToString ().IndexOf ("i:type") >= 0);
  1002. d = (List<DictionaryEntry>) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
  1003. Assert.AreEqual (1, d.Count, "#2");
  1004. Assert.AreEqual ("bar", d [0].Value, "#3");
  1005. }
  1006. [Test]
  1007. public void GenericDictionarySerialization ()
  1008. {
  1009. string xml = @"<?xml version='1.0' encoding='utf-16'?><ArrayOfKeyValueOfstringstring xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.microsoft.com/2003/10/Serialization/Arrays'><KeyValueOfstringstring><Key>foo</Key><Value>bar</Value></KeyValueOfstringstring></ArrayOfKeyValueOfstringstring>".Replace ('\'', '"');
  1010. var ds = new DataContractSerializer (typeof (Dictionary<string,string>));
  1011. var d = new Dictionary<string,string> ();
  1012. d ["foo"] = "bar";
  1013. var sw = new StringWriter ();
  1014. using (var xw = XmlWriter.Create (sw))
  1015. ds.WriteObject (xw, d);
  1016. Assert.AreEqual (xml, sw.ToString (), "#1");
  1017. d = (Dictionary<string,string>) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
  1018. Assert.AreEqual (1, d.Count, "#2");
  1019. Assert.AreEqual ("bar", d ["foo"], "#3");
  1020. }
  1021. [Test]
  1022. public void HashtableSerialization ()
  1023. {
  1024. string xml = @"<?xml version='1.0' encoding='utf-16'?><ArrayOfKeyValueOfanyTypeanyType xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.microsoft.com/2003/10/Serialization/Arrays'><KeyValueOfanyTypeanyType><Key xmlns:d3p1='http://www.w3.org/2001/XMLSchema' i:type='d3p1:string'>foo</Key><Value xmlns:d3p1='http://www.w3.org/2001/XMLSchema' i:type='d3p1:string'>bar</Value></KeyValueOfanyTypeanyType></ArrayOfKeyValueOfanyTypeanyType>".Replace ('\'', '"');
  1025. var ds = new DataContractSerializer (typeof (Hashtable));
  1026. var d = new Hashtable ();
  1027. d ["foo"] = "bar";
  1028. var sw = new StringWriter ();
  1029. using (var xw = XmlWriter.Create (sw))
  1030. ds.WriteObject (xw, d);
  1031. Assert.AreEqual (xml, sw.ToString (), "#1");
  1032. d = (Hashtable) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
  1033. Assert.AreEqual (1, d.Count, "#2");
  1034. Assert.AreEqual ("bar", d ["foo"], "#3");
  1035. }
  1036. [Test]
  1037. public void CollectionContarctDictionarySerialization ()
  1038. {
  1039. string xml = @"<?xml version='1.0' encoding='utf-16'?><NAME xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='urn:foo'><ITEM><KEY>foo</KEY><VALUE>bar</VALUE></ITEM></NAME>".Replace ('\'', '"');
  1040. var ds = new DataContractSerializer (typeof (MyDictionary<string,string>));
  1041. var d = new MyDictionary<string,string> ();
  1042. d ["foo"] = "bar";
  1043. var sw = new StringWriter ();
  1044. using (var xw = XmlWriter.Create (sw))
  1045. ds.WriteObject (xw, d);
  1046. Assert.AreEqual (xml, sw.ToString (), "#1");
  1047. d = (MyDictionary<string,string>) ds.ReadObject (XmlReader.Create (new StringReader (xml)));
  1048. Assert.AreEqual (1, d.Count, "#2");
  1049. Assert.AreEqual ("bar", d ["foo"], "#3");
  1050. }
  1051. [Test]
  1052. public void SerializeInterfaceCollection ()
  1053. {
  1054. var ser = new DataContractSerializer (typeof (InterfaceCollectionType));
  1055. var sw = new StringWriter ();
  1056. var obj = new InterfaceCollectionType ();
  1057. using (var xw = XmlWriter.Create (sw))
  1058. ser.WriteObject (xw, obj);
  1059. using (var xr = XmlReader.Create (new StringReader (sw.ToString ()))) {
  1060. obj = (InterfaceCollectionType) ser.ReadObject (xr);
  1061. Assert.IsNull (obj.Array, "#1");
  1062. }
  1063. sw = new StringWriter ();
  1064. obj.Array = new List<int> ();
  1065. obj.Array.Add (5);
  1066. using (var xw = XmlWriter.Create (sw))
  1067. ser.WriteObject (xw, obj);
  1068. using (var xr = XmlReader.Create (new StringReader (sw.ToString ()))) {
  1069. obj = (InterfaceCollectionType) ser.ReadObject (xr);
  1070. Assert.AreEqual (5, obj.Array [0], "#2");
  1071. }
  1072. }
  1073. [Test]
  1074. public void EmptyChildren ()

Large files files are truncated, but you can click here to view the full file