XmlSchemaImporterTests.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455
  1. //
  2. // System.Xml.Serialization.XmlSchemaImporterTests
  3. //
  4. // Author:
  5. // Gert Driesen ([email protected])
  6. //
  7. // (C) 2005 Novell
  8. //
  9. using System;
  10. using System.Collections;
  11. using System.Globalization;
  12. using System.IO;
  13. using System.Xml;
  14. using System.Xml.Schema;
  15. using System.Xml.Serialization;
  16. using NUnit.Framework;
  17. using MonoTests.System.Xml.TestClasses;
  18. namespace MonoTests.System.XmlSerialization
  19. {
  20. [TestFixture]
  21. public class XmlSchemaImporterTests
  22. {
  23. [Test]
  24. [Category ("NotWorking")]
  25. public void ImportTypeMapping_Struct ()
  26. {
  27. XmlSchemas schemas = ExportType (typeof (TimeSpan));
  28. ArrayList qnames = GetXmlQualifiedNames (schemas);
  29. Assert.AreEqual (1, qnames.Count, "#1");
  30. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  31. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  32. Assert.IsNotNull (map, "#2");
  33. Assert.AreEqual ("TimeSpan", map.ElementName, "#3");
  34. Assert.AreEqual ("NSTimeSpan", map.Namespace, "#4");
  35. Assert.AreEqual ("TimeSpan", map.TypeFullName, "#5");
  36. Assert.AreEqual ("TimeSpan", map.TypeName, "#6");
  37. }
  38. [Test]
  39. [Category ("NotWorking")]
  40. public void ImportTypeMapping_XsdPrimitive_AnyType ()
  41. {
  42. XmlSchemas schemas = ExportType (typeof (object));
  43. ArrayList qnames = GetXmlQualifiedNames (schemas);
  44. Assert.AreEqual (1, qnames.Count, "#1");
  45. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  46. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  47. Assert.IsNotNull (map, "#2");
  48. Assert.AreEqual ("anyType", map.ElementName, "#3");
  49. Assert.AreEqual ("NSObject", map.Namespace, "#4");
  50. Assert.AreEqual ("System.Object", map.TypeFullName, "#5");
  51. Assert.AreEqual ("Object", map.TypeName, "#6");
  52. }
  53. [Test]
  54. public void ImportTypeMapping_XsdPrimitive_Boolean ()
  55. {
  56. XmlSchemas schemas = ExportType (typeof (bool));
  57. ArrayList qnames = GetXmlQualifiedNames (schemas);
  58. Assert.AreEqual (1, qnames.Count, "#1");
  59. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  60. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  61. Assert.IsNotNull (map, "#2");
  62. Assert.AreEqual ("boolean", map.ElementName, "#3");
  63. Assert.AreEqual ("NSBoolean", map.Namespace, "#4");
  64. Assert.AreEqual ("System.Boolean", map.TypeFullName, "#5");
  65. Assert.AreEqual ("Boolean", map.TypeName, "#6");
  66. }
  67. [Test]
  68. public void ImportTypeMapping_XsdPrimitive_Short ()
  69. {
  70. XmlSchemas schemas = ExportType (typeof (short));
  71. ArrayList qnames = GetXmlQualifiedNames (schemas);
  72. Assert.AreEqual (1, qnames.Count, "#1");
  73. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  74. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  75. Assert.IsNotNull (map, "#2");
  76. Assert.AreEqual ("short", map.ElementName, "#3");
  77. Assert.AreEqual ("NSInt16", map.Namespace, "#4");
  78. Assert.AreEqual ("System.Int16", map.TypeFullName, "#5");
  79. Assert.AreEqual ("Int16", map.TypeName, "#6");
  80. }
  81. [Test]
  82. public void ImportTypeMapping_XsdPrimitive_UnsignedShort ()
  83. {
  84. XmlSchemas schemas = ExportType (typeof (ushort));
  85. ArrayList qnames = GetXmlQualifiedNames (schemas);
  86. Assert.AreEqual (1, qnames.Count, "#1");
  87. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  88. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  89. Assert.IsNotNull (map, "#2");
  90. Assert.AreEqual ("unsignedShort", map.ElementName, "#3");
  91. Assert.AreEqual ("NSUInt16", map.Namespace, "#4");
  92. Assert.AreEqual ("System.UInt16", map.TypeFullName, "#5");
  93. Assert.AreEqual ("UInt16", map.TypeName, "#6");
  94. }
  95. [Test]
  96. public void ImportTypeMapping_XsdPrimitive_Int ()
  97. {
  98. XmlSchemas schemas = ExportType (typeof (int));
  99. ArrayList qnames = GetXmlQualifiedNames (schemas);
  100. Assert.AreEqual (1, qnames.Count, "#1");
  101. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  102. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  103. Assert.IsNotNull (map, "#2");
  104. Assert.AreEqual ("int", map.ElementName, "#3");
  105. Assert.AreEqual ("NSInt32", map.Namespace, "#4");
  106. Assert.AreEqual ("System.Int32", map.TypeFullName, "#5");
  107. Assert.AreEqual ("Int32", map.TypeName, "#6");
  108. }
  109. [Test]
  110. public void ImportTypeMapping_XsdPrimitive_UnsignedInt ()
  111. {
  112. XmlSchemas schemas = ExportType (typeof (uint));
  113. ArrayList qnames = GetXmlQualifiedNames (schemas);
  114. Assert.AreEqual (1, qnames.Count, "#1");
  115. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  116. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  117. Assert.IsNotNull (map, "#2");
  118. Assert.AreEqual ("unsignedInt", map.ElementName, "#3");
  119. Assert.AreEqual ("NSUInt32", map.Namespace, "#4");
  120. Assert.AreEqual ("System.UInt32", map.TypeFullName, "#5");
  121. Assert.AreEqual ("UInt32", map.TypeName, "#6");
  122. }
  123. [Test]
  124. public void ImportTypeMapping_XsdPrimitive_Long ()
  125. {
  126. XmlSchemas schemas = ExportType (typeof (long));
  127. ArrayList qnames = GetXmlQualifiedNames (schemas);
  128. Assert.AreEqual (1, qnames.Count, "#1");
  129. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  130. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  131. Assert.IsNotNull (map, "#2");
  132. Assert.AreEqual ("long", map.ElementName, "#3");
  133. Assert.AreEqual ("NSInt64", map.Namespace, "#4");
  134. Assert.AreEqual ("System.Int64", map.TypeFullName, "#5");
  135. Assert.AreEqual ("Int64", map.TypeName, "#6");
  136. }
  137. [Test]
  138. public void ImportTypeMapping_XsdPrimitive_UnsignedLong ()
  139. {
  140. XmlSchemas schemas = ExportType (typeof (ulong));
  141. ArrayList qnames = GetXmlQualifiedNames (schemas);
  142. Assert.AreEqual (1, qnames.Count, "#1");
  143. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  144. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  145. Assert.IsNotNull (map, "#2");
  146. Assert.AreEqual ("unsignedLong", map.ElementName, "#3");
  147. Assert.AreEqual ("NSUInt64", map.Namespace, "#4");
  148. Assert.AreEqual ("System.UInt64", map.TypeFullName, "#5");
  149. Assert.AreEqual ("UInt64", map.TypeName, "#6");
  150. }
  151. [Test]
  152. public void ImportTypeMapping_XsdPrimitive_Float ()
  153. {
  154. XmlSchemas schemas = ExportType (typeof (float));
  155. ArrayList qnames = GetXmlQualifiedNames (schemas);
  156. Assert.AreEqual (1, qnames.Count, "#1");
  157. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  158. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  159. Assert.IsNotNull (map, "#2");
  160. Assert.AreEqual ("float", map.ElementName, "#3");
  161. Assert.AreEqual ("NSSingle", map.Namespace, "#4");
  162. Assert.AreEqual ("System.Single", map.TypeFullName, "#5");
  163. Assert.AreEqual ("Single", map.TypeName, "#6");
  164. }
  165. [Test]
  166. public void ImportTypeMapping_XsdPrimitive_Double ()
  167. {
  168. XmlSchemas schemas = ExportType (typeof (double));
  169. ArrayList qnames = GetXmlQualifiedNames (schemas);
  170. Assert.AreEqual (1, qnames.Count, "#1");
  171. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  172. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  173. Assert.IsNotNull (map, "#2");
  174. Assert.AreEqual ("double", map.ElementName, "#3");
  175. Assert.AreEqual ("NSDouble", map.Namespace, "#4");
  176. Assert.AreEqual ("System.Double", map.TypeFullName, "#5");
  177. Assert.AreEqual ("Double", map.TypeName, "#6");
  178. }
  179. [Test]
  180. public void ImportTypeMapping_XsdPrimitive_DateTime ()
  181. {
  182. XmlSchemas schemas = ExportType (typeof (DateTime));
  183. ArrayList qnames = GetXmlQualifiedNames (schemas);
  184. Assert.AreEqual (1, qnames.Count, "#1");
  185. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  186. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  187. Assert.IsNotNull (map, "#2");
  188. Assert.AreEqual ("dateTime", map.ElementName, "#3");
  189. Assert.AreEqual ("NSDateTime", map.Namespace, "#4");
  190. Assert.AreEqual ("System.DateTime", map.TypeFullName, "#5");
  191. Assert.AreEqual ("DateTime", map.TypeName, "#6");
  192. }
  193. [Test]
  194. public void ImportTypeMapping_XsdPrimitive_Decimal ()
  195. {
  196. XmlSchemas schemas = ExportType (typeof (decimal));
  197. ArrayList qnames = GetXmlQualifiedNames (schemas);
  198. Assert.AreEqual (1, qnames.Count, "#1");
  199. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  200. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  201. Assert.IsNotNull (map, "#2");
  202. Assert.AreEqual ("decimal", map.ElementName, "#3");
  203. Assert.AreEqual ("NSDecimal", map.Namespace, "#4");
  204. Assert.AreEqual ("System.Decimal", map.TypeFullName, "#5");
  205. Assert.AreEqual ("Decimal", map.TypeName, "#6");
  206. }
  207. [Test]
  208. public void ImportTypeMapping_XsdPrimitive_QName ()
  209. {
  210. XmlSchemas schemas = ExportType (typeof (XmlQualifiedName));
  211. ArrayList qnames = GetXmlQualifiedNames (schemas);
  212. Assert.AreEqual (1, qnames.Count, "#1");
  213. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  214. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  215. Assert.IsNotNull (map, "#2");
  216. Assert.AreEqual ("QName", map.ElementName, "#3");
  217. Assert.AreEqual ("NSXmlQualifiedName", map.Namespace, "#4");
  218. Assert.AreEqual ("System.Xml.XmlQualifiedName", map.TypeFullName, "#5");
  219. Assert.AreEqual ("XmlQualifiedName", map.TypeName, "#6");
  220. }
  221. [Test]
  222. public void ImportTypeMapping_XsdPrimitive_String ()
  223. {
  224. XmlSchemas schemas = ExportType (typeof (string));
  225. ArrayList qnames = GetXmlQualifiedNames (schemas);
  226. Assert.AreEqual (1, qnames.Count, "#1");
  227. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  228. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  229. Assert.IsNotNull (map, "#2");
  230. Assert.AreEqual ("string", map.ElementName, "#3");
  231. Assert.AreEqual ("NSString", map.Namespace, "#4");
  232. Assert.AreEqual ("System.String", map.TypeFullName, "#5");
  233. Assert.AreEqual ("String", map.TypeName, "#6");
  234. }
  235. [Test]
  236. [Category ("NotWorking")]
  237. public void ImportTypeMapping_XsdPrimitive_Guid ()
  238. {
  239. XmlSchemas schemas = ExportType (typeof (Guid));
  240. ArrayList qnames = GetXmlQualifiedNames (schemas);
  241. Assert.AreEqual (1, qnames.Count, "#1");
  242. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  243. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  244. Assert.IsNotNull (map, "#2");
  245. Assert.AreEqual ("int", map.ElementName, "#3");
  246. Assert.AreEqual ("NSInt32", map.Namespace, "#4");
  247. Assert.AreEqual ("System.Int32", map.TypeFullName, "#5");
  248. Assert.AreEqual ("Int32", map.TypeName, "#6");
  249. }
  250. [Test]
  251. public void ImportTypeMapping_XsdPrimitive_UnsignedByte ()
  252. {
  253. XmlSchemas schemas = ExportType (typeof (byte));
  254. ArrayList qnames = GetXmlQualifiedNames (schemas);
  255. Assert.AreEqual (1, qnames.Count, "#1");
  256. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  257. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  258. Assert.IsNotNull (map, "#2");
  259. Assert.AreEqual ("unsignedByte", map.ElementName, "#3");
  260. Assert.AreEqual ("NSByte", map.Namespace, "#4");
  261. Assert.AreEqual ("System.Byte", map.TypeFullName, "#5");
  262. Assert.AreEqual ("Byte", map.TypeName, "#6");
  263. }
  264. [Test]
  265. public void ImportTypeMapping_XsdPrimitive_Byte ()
  266. {
  267. XmlSchemas schemas = ExportType (typeof (sbyte));
  268. ArrayList qnames = GetXmlQualifiedNames (schemas);
  269. Assert.AreEqual (1, qnames.Count, "#1");
  270. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  271. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  272. Assert.IsNotNull (map, "#2");
  273. Assert.AreEqual ("byte", map.ElementName, "#3");
  274. Assert.AreEqual ("NSSByte", map.Namespace, "#4");
  275. Assert.AreEqual ("System.SByte", map.TypeFullName, "#5");
  276. Assert.AreEqual ("SByte", map.TypeName, "#6");
  277. }
  278. [Test]
  279. [Category ("NotWorking")]
  280. public void ImportTypeMapping_XsdPrimitive_Char ()
  281. {
  282. XmlSchemas schemas = ExportType (typeof (char));
  283. ArrayList qnames = GetXmlQualifiedNames (schemas);
  284. Assert.AreEqual (1, qnames.Count, "#1");
  285. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  286. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  287. Assert.IsNotNull (map, "#2");
  288. Assert.AreEqual ("int", map.ElementName, "#3");
  289. Assert.AreEqual ("NSChar", map.Namespace, "#4");
  290. Assert.AreEqual ("System.Int32", map.TypeFullName, "#5");
  291. Assert.AreEqual ("Int32", map.TypeName, "#6");
  292. }
  293. [Test]
  294. public void ImportTypeMapping_XsdPrimitive_Base64Binary ()
  295. {
  296. XmlSchemas schemas = ExportType (typeof (byte[]));
  297. ArrayList qnames = GetXmlQualifiedNames (schemas);
  298. Assert.AreEqual (1, qnames.Count, "#1");
  299. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  300. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  301. Assert.IsNotNull (map, "#2");
  302. Assert.AreEqual ("base64Binary", map.ElementName, "#3");
  303. Assert.AreEqual ("NSByte[]", map.Namespace, "#4");
  304. Assert.AreEqual ("System.Byte[]", map.TypeFullName, "#5");
  305. Assert.AreEqual ("Byte[]", map.TypeName, "#6");
  306. }
  307. [Test]
  308. [Category ("NotWorking")]
  309. public void ImportTypeMapping_XsdPrimitive_Duration ()
  310. {
  311. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  312. "<xs:schema xmlns:tns=\"NSDuration\" elementFormDefault=\"qualified\" targetNamespace=\"NSDuration\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  313. " <xs:element name=\"duration\" type=\"xs:duration\" />" +
  314. "</xs:schema>";
  315. XmlSchemas schemas = new XmlSchemas ();
  316. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  317. ArrayList qnames = GetXmlQualifiedNames (schemas);
  318. Assert.AreEqual (1, qnames.Count, "#1");
  319. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  320. Assert.AreEqual ("duration", qname.Name, "#2");
  321. Assert.AreEqual ("NSDuration", qname.Namespace, "#3");
  322. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  323. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  324. Assert.IsNotNull (map, "#4");
  325. Assert.AreEqual ("duration", map.ElementName, "#5");
  326. Assert.AreEqual ("NSDuration", map.Namespace, "#6");
  327. Assert.AreEqual ("System.String", map.TypeFullName, "#7");
  328. Assert.AreEqual ("String", map.TypeName, "#8");
  329. }
  330. [Test]
  331. [Category ("NotWorking")]
  332. public void ImportTypeMapping_XsdPrimitive_Date ()
  333. {
  334. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  335. "<xs:schema xmlns:tns=\"NSDate\" elementFormDefault=\"qualified\" targetNamespace=\"NSDate\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  336. " <xs:element name=\"date\" type=\"xs:date\" />" +
  337. "</xs:schema>";
  338. XmlSchemas schemas = new XmlSchemas ();
  339. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  340. ArrayList qnames = GetXmlQualifiedNames (schemas);
  341. Assert.AreEqual (1, qnames.Count, "#1");
  342. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  343. Assert.AreEqual ("date", qname.Name, "#2");
  344. Assert.AreEqual ("NSDate", qname.Namespace, "#3");
  345. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  346. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  347. Assert.IsNotNull (map, "#4");
  348. Assert.AreEqual ("date", map.ElementName, "#5");
  349. Assert.AreEqual ("NSDate", map.Namespace, "#6");
  350. Assert.AreEqual ("System.DateTime", map.TypeFullName, "#7");
  351. Assert.AreEqual ("DateTime", map.TypeName, "#8");
  352. }
  353. private static XmlSchemas ExportType (Type type)
  354. {
  355. XmlReflectionImporter ri = new XmlReflectionImporter ("NS" + type.Name);
  356. XmlSchemas schemas = new XmlSchemas ();
  357. XmlSchemaExporter sx = new XmlSchemaExporter (schemas);
  358. XmlTypeMapping tm = ri.ImportTypeMapping (type);
  359. sx.ExportTypeMapping (tm);
  360. return schemas;
  361. }
  362. private static ArrayList GetXmlQualifiedNames (XmlSchemas schemas)
  363. {
  364. ArrayList qnames = new ArrayList ();
  365. foreach (XmlSchema schema in schemas) {
  366. if (!schema.IsCompiled) schema.Compile (null);
  367. foreach (XmlSchemaObject ob in schema.Items)
  368. if (ob is XmlSchemaElement)
  369. qnames.Add (((XmlSchemaElement) ob).QualifiedName);
  370. }
  371. return qnames;
  372. }
  373. }
  374. }