XmlSchemaImporterTests.cs 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247
  1. //
  2. // System.Xml.Serialization.XmlSchemaImporterTests
  3. //
  4. // Author:
  5. // Gert Driesen ([email protected])
  6. // Atsushi Enomoto ([email protected])
  7. //
  8. // (C) 2005 Gert Driesen
  9. // Copyright (C) 2006-2007 Novell, Inc.
  10. //
  11. //
  12. // Permission is hereby granted, free of charge, to any person obtaining
  13. // a copy of this software and associated documentation files (the
  14. // "Software"), to deal in the Software without restriction, including
  15. // without limitation the rights to use, copy, modify, merge, publish,
  16. // distribute, sublicense, and/or sell copies of the Software, and to
  17. // permit persons to whom the Software is furnished to do so, subject to
  18. // the following conditions:
  19. //
  20. // The above copyright notice and this permission notice shall be
  21. // included in all copies or substantial portions of the Software.
  22. //
  23. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  27. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  28. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  29. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  30. //
  31. using System;
  32. using System.CodeDom;
  33. using System.CodeDom.Compiler;
  34. using System.Collections;
  35. using System.Globalization;
  36. using System.IO;
  37. using System.Xml;
  38. using System.Xml.Schema;
  39. using System.Xml.Serialization;
  40. #if !MOBILE
  41. using Microsoft.CSharp;
  42. #endif
  43. using NUnit.Framework;
  44. using MonoTests.System.Xml.TestClasses;
  45. namespace MonoTests.System.Xml.Serialization
  46. {
  47. [TestFixture]
  48. public class XmlSchemaImporterTests
  49. {
  50. private const string WsdlTypesNamespace = "http://microsoft.com/wsdl/types/";
  51. [Test]
  52. [Category ("NotWorking")]
  53. public void ImportTypeMapping_Struct ()
  54. {
  55. XmlSchemas schemas = ExportType (typeof (TimeSpan));
  56. ArrayList qnames = GetXmlQualifiedNames (schemas);
  57. Assert.AreEqual (1, qnames.Count, "#1");
  58. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  59. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  60. Assert.IsNotNull (map, "#2");
  61. Assert.AreEqual ("TimeSpan", map.ElementName, "#3");
  62. Assert.AreEqual ("NSTimeSpan", map.Namespace, "#4");
  63. Assert.AreEqual ("TimeSpan", map.TypeFullName, "#5");
  64. Assert.AreEqual ("TimeSpan", map.TypeName, "#6");
  65. }
  66. [Test]
  67. [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
  68. public void ImportTypeMapping_XsdPrimitive_AnyType ()
  69. {
  70. XmlSchemas schemas = ExportType (typeof (object));
  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 ("anyType", map.ElementName, "#3");
  77. Assert.AreEqual ("NSObject", map.Namespace, "#4");
  78. Assert.AreEqual ("System.Object", map.TypeFullName, "#5");
  79. Assert.AreEqual ("Object", map.TypeName, "#6");
  80. }
  81. [Test]
  82. public void ImportTypeMapping_XsdPrimitive_AnyURI ()
  83. {
  84. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  85. "<xs:schema xmlns:tns=\"NSAnyURI\" elementFormDefault=\"qualified\" targetNamespace=\"NSAnyURI\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  86. " <xs:element name=\"anyURI\" type=\"xs:anyURI\" />" +
  87. "</xs:schema>";
  88. XmlSchemas schemas = new XmlSchemas ();
  89. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  90. ArrayList qnames = GetXmlQualifiedNames (schemas);
  91. Assert.AreEqual (1, qnames.Count, "#1");
  92. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  93. Assert.AreEqual ("anyURI", qname.Name, "#2");
  94. Assert.AreEqual ("NSAnyURI", qname.Namespace, "#3");
  95. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  96. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  97. Assert.IsNotNull (map, "#4");
  98. Assert.AreEqual ("anyURI", map.ElementName, "#5");
  99. Assert.AreEqual ("NSAnyURI", map.Namespace, "#6");
  100. Assert.AreEqual ("System.String", map.TypeFullName, "#7");
  101. Assert.AreEqual ("String", map.TypeName, "#8");
  102. }
  103. [Test]
  104. [Category ("NotWorking")]
  105. public void ImportTypeMapping_XsdPrimitive_Base64 ()
  106. {
  107. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  108. "<xs:schema xmlns:tns=\"NSBase64\" elementFormDefault=\"qualified\" targetNamespace=\"NSBase64\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  109. " <xs:element name=\"base64\" type=\"xs:base64\" />" +
  110. "</xs:schema>";
  111. XmlSchemas schemas = new XmlSchemas ();
  112. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  113. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  114. XmlTypeMapping map = importer.ImportTypeMapping (new XmlQualifiedName ("base64", "NSBase64"));
  115. Assert.IsNotNull (map, "#1");
  116. Assert.AreEqual ("base64", map.ElementName, "#2");
  117. Assert.AreEqual ("NSBase64", map.Namespace, "#3");
  118. Assert.AreEqual ("System.String", map.TypeFullName, "#4");
  119. Assert.AreEqual ("String", map.TypeName, "#5");
  120. }
  121. [Test]
  122. public void ImportTypeMapping_XsdPrimitive_Base64Binary ()
  123. {
  124. XmlSchemas schemas = ExportType (typeof (byte[]));
  125. ArrayList qnames = GetXmlQualifiedNames (schemas);
  126. Assert.AreEqual (1, qnames.Count, "#1");
  127. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  128. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  129. Assert.IsNotNull (map, "#2");
  130. Assert.AreEqual ("base64Binary", map.ElementName, "#3");
  131. Assert.AreEqual ("NSByte[]", map.Namespace, "#4");
  132. Assert.AreEqual ("System.Byte[]", map.TypeFullName, "#5");
  133. Assert.AreEqual ("Byte[]", map.TypeName, "#6");
  134. }
  135. [Test]
  136. public void ImportTypeMapping_XsdPrimitive_Boolean ()
  137. {
  138. XmlSchemas schemas = ExportType (typeof (bool));
  139. ArrayList qnames = GetXmlQualifiedNames (schemas);
  140. Assert.AreEqual (1, qnames.Count, "#1");
  141. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  142. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  143. Assert.IsNotNull (map, "#2");
  144. Assert.AreEqual ("boolean", map.ElementName, "#3");
  145. Assert.AreEqual ("NSBoolean", map.Namespace, "#4");
  146. Assert.AreEqual ("System.Boolean", map.TypeFullName, "#5");
  147. Assert.AreEqual ("Boolean", map.TypeName, "#6");
  148. }
  149. [Test]
  150. public void ImportTypeMapping_XsdPrimitive_Byte ()
  151. {
  152. XmlSchemas schemas = ExportType (typeof (sbyte));
  153. ArrayList qnames = GetXmlQualifiedNames (schemas);
  154. Assert.AreEqual (1, qnames.Count, "#1");
  155. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  156. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  157. Assert.IsNotNull (map, "#2");
  158. Assert.AreEqual ("byte", map.ElementName, "#3");
  159. Assert.AreEqual ("NSSByte", map.Namespace, "#4");
  160. Assert.AreEqual ("System.SByte", map.TypeFullName, "#5");
  161. Assert.AreEqual ("SByte", map.TypeName, "#6");
  162. }
  163. [Test]
  164. [Category ("NotWorking")]
  165. public void ImportTypeMapping_XsdPrimitive_Char ()
  166. {
  167. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  168. "<xs:schema xmlns:tns=\"NSChar\" elementFormDefault=\"qualified\" targetNamespace=\"NSChar\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  169. " <xs:element name=\"char\" type=\"xs:char\" />" +
  170. "</xs:schema>";
  171. XmlSchemas schemas = new XmlSchemas ();
  172. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  173. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  174. XmlTypeMapping map = importer.ImportTypeMapping (new XmlQualifiedName ("char", "NSChar"));
  175. Assert.IsNotNull (map, "#A1");
  176. Assert.AreEqual ("char", map.ElementName, "#A2");
  177. Assert.AreEqual ("NSChar", map.Namespace, "#A3");
  178. Assert.AreEqual ("System.String", map.TypeFullName, "#A4");
  179. Assert.AreEqual ("String", map.TypeName, "#A5");
  180. #if ONLY_1_1
  181. schemas = ExportType (typeof (char));
  182. importer = new XmlSchemaImporter (schemas);
  183. map = importer.ImportTypeMapping (new XmlQualifiedName ("char", "NSChar"));
  184. Assert.IsNotNull (map, "#B1");
  185. Assert.AreEqual ("char", map.ElementName, "#B2");
  186. Assert.AreEqual ("NSChar", map.Namespace, "#B3");
  187. Assert.AreEqual ("System.Char", map.TypeFullName, "#B4");
  188. Assert.AreEqual ("Char", map.TypeName, "#B5");
  189. #endif
  190. }
  191. [Test]
  192. public void ImportTypeMapping_XsdPrimitive_Date ()
  193. {
  194. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  195. "<xs:schema xmlns:tns=\"NSDate\" elementFormDefault=\"qualified\" targetNamespace=\"NSDate\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  196. " <xs:element name=\"date\" type=\"xs:date\" />" +
  197. "</xs:schema>";
  198. XmlSchemas schemas = new XmlSchemas ();
  199. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  200. ArrayList qnames = GetXmlQualifiedNames (schemas);
  201. Assert.AreEqual (1, qnames.Count, "#1");
  202. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  203. Assert.AreEqual ("date", qname.Name, "#2");
  204. Assert.AreEqual ("NSDate", qname.Namespace, "#3");
  205. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  206. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  207. Assert.IsNotNull (map, "#4");
  208. Assert.AreEqual ("date", map.ElementName, "#5");
  209. Assert.AreEqual ("NSDate", map.Namespace, "#6");
  210. Assert.AreEqual ("System.DateTime", map.TypeFullName, "#7");
  211. Assert.AreEqual ("DateTime", map.TypeName, "#8");
  212. }
  213. [Test]
  214. public void ImportTypeMapping_XsdPrimitive_DateTime ()
  215. {
  216. XmlSchemas schemas = ExportType (typeof (DateTime));
  217. ArrayList qnames = GetXmlQualifiedNames (schemas);
  218. Assert.AreEqual (1, qnames.Count, "#1");
  219. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  220. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  221. Assert.IsNotNull (map, "#2");
  222. Assert.AreEqual ("dateTime", map.ElementName, "#3");
  223. Assert.AreEqual ("NSDateTime", map.Namespace, "#4");
  224. Assert.AreEqual ("System.DateTime", map.TypeFullName, "#5");
  225. Assert.AreEqual ("DateTime", map.TypeName, "#6");
  226. }
  227. [Test]
  228. public void ImportTypeMapping_XsdPrimitive_Decimal ()
  229. {
  230. XmlSchemas schemas = ExportType (typeof (decimal));
  231. ArrayList qnames = GetXmlQualifiedNames (schemas);
  232. Assert.AreEqual (1, qnames.Count, "#1");
  233. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  234. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  235. Assert.IsNotNull (map, "#2");
  236. Assert.AreEqual ("decimal", map.ElementName, "#3");
  237. Assert.AreEqual ("NSDecimal", map.Namespace, "#4");
  238. Assert.AreEqual ("System.Decimal", map.TypeFullName, "#5");
  239. Assert.AreEqual ("Decimal", map.TypeName, "#6");
  240. }
  241. [Test]
  242. public void ImportTypeMapping_XsdPrimitive_Double ()
  243. {
  244. XmlSchemas schemas = ExportType (typeof (double));
  245. ArrayList qnames = GetXmlQualifiedNames (schemas);
  246. Assert.AreEqual (1, qnames.Count, "#1");
  247. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  248. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  249. Assert.IsNotNull (map, "#2");
  250. Assert.AreEqual ("double", map.ElementName, "#3");
  251. Assert.AreEqual ("NSDouble", map.Namespace, "#4");
  252. Assert.AreEqual ("System.Double", map.TypeFullName, "#5");
  253. Assert.AreEqual ("Double", map.TypeName, "#6");
  254. }
  255. [Test]
  256. [Category ("NotWorking")]
  257. public void ImportTypeMapping_XsdPrimitive_Duration ()
  258. {
  259. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  260. "<xs:schema xmlns:tns=\"NSDuration\" elementFormDefault=\"qualified\" targetNamespace=\"NSDuration\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  261. " <xs:element name=\"duration\" type=\"xs:duration\" />" +
  262. "</xs:schema>";
  263. XmlSchemas schemas = new XmlSchemas ();
  264. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  265. ArrayList qnames = GetXmlQualifiedNames (schemas);
  266. Assert.AreEqual (1, qnames.Count, "#1");
  267. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  268. Assert.AreEqual ("duration", qname.Name, "#2");
  269. Assert.AreEqual ("NSDuration", qname.Namespace, "#3");
  270. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  271. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  272. Assert.IsNotNull (map, "#4");
  273. Assert.AreEqual ("duration", map.ElementName, "#5");
  274. Assert.AreEqual ("NSDuration", map.Namespace, "#6");
  275. Assert.AreEqual ("System.String", map.TypeFullName, "#7");
  276. Assert.AreEqual ("String", map.TypeName, "#8");
  277. }
  278. [Test]
  279. public void ImportTypeMapping_XsdPrimitive_ENTITIES ()
  280. {
  281. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  282. "<xs:schema xmlns:tns=\"NSENTITIES\" elementFormDefault=\"qualified\" targetNamespace=\"NSENTITIES\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  283. " <xs:element name=\"ENTITIES\" type=\"xs:ENTITIES\" />" +
  284. "</xs:schema>";
  285. XmlSchemas schemas = new XmlSchemas ();
  286. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  287. ArrayList qnames = GetXmlQualifiedNames (schemas);
  288. Assert.AreEqual (1, qnames.Count, "#1");
  289. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  290. Assert.AreEqual ("ENTITIES", qname.Name, "#2");
  291. Assert.AreEqual ("NSENTITIES", qname.Namespace, "#3");
  292. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  293. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  294. Assert.IsNotNull (map, "#4");
  295. Assert.AreEqual ("ENTITIES", map.ElementName, "#5");
  296. Assert.AreEqual ("NSENTITIES", map.Namespace, "#6");
  297. Assert.AreEqual ("System.String", map.TypeFullName, "#7");
  298. Assert.AreEqual ("String", map.TypeName, "#8");
  299. }
  300. [Test]
  301. public void ImportTypeMapping_XsdPrimitive_ENTITY ()
  302. {
  303. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  304. "<xs:schema xmlns:tns=\"NSENTITY\" elementFormDefault=\"qualified\" targetNamespace=\"NSENTITY\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  305. " <xs:element name=\"ENTITY\" type=\"xs:ENTITY\" />" +
  306. "</xs:schema>";
  307. XmlSchemas schemas = new XmlSchemas ();
  308. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  309. ArrayList qnames = GetXmlQualifiedNames (schemas);
  310. Assert.AreEqual (1, qnames.Count, "#1");
  311. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  312. Assert.AreEqual ("ENTITY", qname.Name, "#2");
  313. Assert.AreEqual ("NSENTITY", qname.Namespace, "#3");
  314. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  315. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  316. Assert.IsNotNull (map, "#4");
  317. Assert.AreEqual ("ENTITY", map.ElementName, "#5");
  318. Assert.AreEqual ("NSENTITY", map.Namespace, "#6");
  319. Assert.AreEqual ("System.String", map.TypeFullName, "#7");
  320. Assert.AreEqual ("String", map.TypeName, "#8");
  321. }
  322. [Test]
  323. public void ImportTypeMapping_XsdPrimitive_Float ()
  324. {
  325. XmlSchemas schemas = ExportType (typeof (float));
  326. ArrayList qnames = GetXmlQualifiedNames (schemas);
  327. Assert.AreEqual (1, qnames.Count, "#1");
  328. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  329. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  330. Assert.IsNotNull (map, "#2");
  331. Assert.AreEqual ("float", map.ElementName, "#3");
  332. Assert.AreEqual ("NSSingle", map.Namespace, "#4");
  333. Assert.AreEqual ("System.Single", map.TypeFullName, "#5");
  334. Assert.AreEqual ("Single", map.TypeName, "#6");
  335. }
  336. [Test]
  337. public void ImportTypeMapping_XsdPrimitive_GDay ()
  338. {
  339. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  340. "<xs:schema xmlns:tns=\"NSGDay\" elementFormDefault=\"qualified\" targetNamespace=\"NSGDay\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  341. " <xs:element name=\"gDay\" type=\"xs:gDay\" />" +
  342. "</xs:schema>";
  343. XmlSchemas schemas = new XmlSchemas ();
  344. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  345. ArrayList qnames = GetXmlQualifiedNames (schemas);
  346. Assert.AreEqual (1, qnames.Count, "#1");
  347. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  348. Assert.AreEqual ("gDay", qname.Name, "#2");
  349. Assert.AreEqual ("NSGDay", qname.Namespace, "#3");
  350. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  351. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  352. Assert.IsNotNull (map, "#4");
  353. Assert.AreEqual ("gDay", map.ElementName, "#5");
  354. Assert.AreEqual ("NSGDay", map.Namespace, "#6");
  355. Assert.AreEqual ("System.String", map.TypeFullName, "#7");
  356. Assert.AreEqual ("String", map.TypeName, "#8");
  357. }
  358. [Test]
  359. public void ImportTypeMapping_XsdPrimitive_GMonthDay ()
  360. {
  361. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  362. "<xs:schema xmlns:tns=\"NSGMonthDay\" elementFormDefault=\"qualified\" targetNamespace=\"NSGMonthDay\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  363. " <xs:element name=\"gMonthDay\" type=\"xs:gMonthDay\" />" +
  364. "</xs:schema>";
  365. XmlSchemas schemas = new XmlSchemas ();
  366. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  367. ArrayList qnames = GetXmlQualifiedNames (schemas);
  368. Assert.AreEqual (1, qnames.Count, "#1");
  369. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  370. Assert.AreEqual ("gMonthDay", qname.Name, "#2");
  371. Assert.AreEqual ("NSGMonthDay", qname.Namespace, "#3");
  372. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  373. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  374. Assert.IsNotNull (map, "#4");
  375. Assert.AreEqual ("gMonthDay", map.ElementName, "#5");
  376. Assert.AreEqual ("NSGMonthDay", map.Namespace, "#6");
  377. Assert.AreEqual ("System.String", map.TypeFullName, "#7");
  378. Assert.AreEqual ("String", map.TypeName, "#8");
  379. }
  380. [Test]
  381. [Category ("NotWorking")]
  382. public void ImportTypeMapping_XsdPrimitive_Guid ()
  383. {
  384. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  385. "<xs:schema xmlns:tns=\"NSGuid\" elementFormDefault=\"qualified\" targetNamespace=\"NSGuid\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  386. " <xs:element name=\"guid\" type=\"xs:guid\" />" +
  387. "</xs:schema>";
  388. XmlSchemas schemas = new XmlSchemas ();
  389. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  390. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  391. XmlTypeMapping map = importer.ImportTypeMapping (new XmlQualifiedName ("guid", "NSGuid"));
  392. Assert.IsNotNull (map, "#A1");
  393. Assert.AreEqual ("guid", map.ElementName, "#A2");
  394. Assert.AreEqual ("NSGuid", map.Namespace, "#A3");
  395. Assert.AreEqual ("System.String", map.TypeFullName, "#A4");
  396. Assert.AreEqual ("String", map.TypeName, "#A5");
  397. #if ONLY_1_1
  398. schemas = ExportType (typeof (Guid));
  399. importer = new XmlSchemaImporter (schemas);
  400. map = importer.ImportTypeMapping (new XmlQualifiedName ("guid", "NSGuid"));
  401. Assert.IsNotNull (map, "#B1");
  402. Assert.AreEqual ("guid", map.ElementName, "#B2");
  403. Assert.AreEqual ("NSGuid", map.Namespace, "#B3");
  404. Assert.AreEqual ("System.Guid", map.TypeFullName, "#B4");
  405. Assert.AreEqual ("Guid", map.TypeName, "#B5");
  406. #endif
  407. }
  408. [Test]
  409. public void ImportTypeMapping_XsdPrimitive_GYear ()
  410. {
  411. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  412. "<xs:schema xmlns:tns=\"NSGYear\" elementFormDefault=\"qualified\" targetNamespace=\"NSGYear\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  413. " <xs:element name=\"gYear\" type=\"xs:gYear\" />" +
  414. "</xs:schema>";
  415. XmlSchemas schemas = new XmlSchemas ();
  416. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  417. ArrayList qnames = GetXmlQualifiedNames (schemas);
  418. Assert.AreEqual (1, qnames.Count, "#1");
  419. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  420. Assert.AreEqual ("gYear", qname.Name, "#2");
  421. Assert.AreEqual ("NSGYear", qname.Namespace, "#3");
  422. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  423. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  424. Assert.IsNotNull (map, "#4");
  425. Assert.AreEqual ("gYear", map.ElementName, "#5");
  426. Assert.AreEqual ("NSGYear", map.Namespace, "#6");
  427. Assert.AreEqual ("System.String", map.TypeFullName, "#7");
  428. Assert.AreEqual ("String", map.TypeName, "#8");
  429. }
  430. [Test]
  431. public void ImportTypeMapping_XsdPrimitive_GYearMonth ()
  432. {
  433. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  434. "<xs:schema xmlns:tns=\"NSGYearMonth\" elementFormDefault=\"qualified\" targetNamespace=\"NSGYearMonth\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  435. " <xs:element name=\"gYearMonth\" type=\"xs:gYearMonth\" />" +
  436. "</xs:schema>";
  437. XmlSchemas schemas = new XmlSchemas ();
  438. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  439. ArrayList qnames = GetXmlQualifiedNames (schemas);
  440. Assert.AreEqual (1, qnames.Count, "#1");
  441. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  442. Assert.AreEqual ("gYearMonth", qname.Name, "#2");
  443. Assert.AreEqual ("NSGYearMonth", qname.Namespace, "#3");
  444. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  445. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  446. Assert.IsNotNull (map, "#4");
  447. Assert.AreEqual ("gYearMonth", map.ElementName, "#5");
  448. Assert.AreEqual ("NSGYearMonth", map.Namespace, "#6");
  449. Assert.AreEqual ("System.String", map.TypeFullName, "#7");
  450. Assert.AreEqual ("String", map.TypeName, "#8");
  451. }
  452. [Test]
  453. public void ImportTypeMapping_XsdPrimitive_HexBinary ()
  454. {
  455. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  456. "<xs:schema xmlns:tns=\"NSHexBinary\" elementFormDefault=\"qualified\" targetNamespace=\"NSHexBinary\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  457. " <xs:element name=\"hexBinary\" type=\"xs:hexBinary\" />" +
  458. "</xs:schema>";
  459. XmlSchemas schemas = new XmlSchemas ();
  460. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  461. ArrayList qnames = GetXmlQualifiedNames (schemas);
  462. Assert.AreEqual (1, qnames.Count, "#1");
  463. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  464. Assert.AreEqual ("hexBinary", qname.Name, "#2");
  465. Assert.AreEqual ("NSHexBinary", qname.Namespace, "#3");
  466. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  467. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  468. Assert.IsNotNull (map, "#4");
  469. Assert.AreEqual ("hexBinary", map.ElementName, "#5");
  470. Assert.AreEqual ("NSHexBinary", map.Namespace, "#6");
  471. Assert.AreEqual ("System.Byte[]", map.TypeFullName, "#7");
  472. Assert.AreEqual ("Byte[]", map.TypeName, "#8");
  473. }
  474. [Test]
  475. public void ImportTypeMapping_XsdPrimitive_IDREFS ()
  476. {
  477. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  478. "<xs:schema xmlns:tns=\"NSIDREFS\" elementFormDefault=\"qualified\" targetNamespace=\"NSIDREFS\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  479. " <xs:element name=\"IDREFS\" type=\"xs:IDREFS\" />" +
  480. "</xs:schema>";
  481. XmlSchemas schemas = new XmlSchemas ();
  482. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  483. ArrayList qnames = GetXmlQualifiedNames (schemas);
  484. Assert.AreEqual (1, qnames.Count, "#1");
  485. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  486. Assert.AreEqual ("IDREFS", qname.Name, "#2");
  487. Assert.AreEqual ("NSIDREFS", qname.Namespace, "#3");
  488. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  489. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  490. Assert.IsNotNull (map, "#4");
  491. Assert.AreEqual ("IDREFS", map.ElementName, "#5");
  492. Assert.AreEqual ("NSIDREFS", map.Namespace, "#6");
  493. Assert.AreEqual ("System.String", map.TypeFullName, "#7");
  494. Assert.AreEqual ("String", map.TypeName, "#8");
  495. }
  496. [Test]
  497. public void ImportTypeMapping_XsdPrimitive_Int ()
  498. {
  499. XmlSchemas schemas = ExportType (typeof (int));
  500. ArrayList qnames = GetXmlQualifiedNames (schemas);
  501. Assert.AreEqual (1, qnames.Count, "#1");
  502. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  503. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  504. Assert.IsNotNull (map, "#2");
  505. Assert.AreEqual ("int", map.ElementName, "#3");
  506. Assert.AreEqual ("NSInt32", map.Namespace, "#4");
  507. Assert.AreEqual ("System.Int32", map.TypeFullName, "#5");
  508. Assert.AreEqual ("Int32", map.TypeName, "#6");
  509. }
  510. [Test]
  511. public void ImportTypeMapping_XsdPrimitive_Integer ()
  512. {
  513. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  514. "<xs:schema xmlns:tns=\"NSInteger\" elementFormDefault=\"qualified\" targetNamespace=\"NSInteger\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  515. " <xs:element name=\"integer\" type=\"xs:integer\" />" +
  516. "</xs:schema>";
  517. XmlSchemas schemas = new XmlSchemas ();
  518. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  519. ArrayList qnames = GetXmlQualifiedNames (schemas);
  520. Assert.AreEqual (1, qnames.Count, "#1");
  521. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  522. Assert.AreEqual ("integer", qname.Name, "#2");
  523. Assert.AreEqual ("NSInteger", qname.Namespace, "#3");
  524. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  525. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  526. Assert.IsNotNull (map, "#4");
  527. Assert.AreEqual ("integer", map.ElementName, "#5");
  528. Assert.AreEqual ("NSInteger", map.Namespace, "#6");
  529. Assert.AreEqual ("System.String", map.TypeFullName, "#7");
  530. Assert.AreEqual ("String", map.TypeName, "#8");
  531. }
  532. [Test]
  533. public void ImportTypeMapping_XsdPrimitive_Long ()
  534. {
  535. XmlSchemas schemas = ExportType (typeof (long));
  536. ArrayList qnames = GetXmlQualifiedNames (schemas);
  537. Assert.AreEqual (1, qnames.Count, "#1");
  538. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  539. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  540. Assert.IsNotNull (map, "#2");
  541. Assert.AreEqual ("long", map.ElementName, "#3");
  542. Assert.AreEqual ("NSInt64", map.Namespace, "#4");
  543. Assert.AreEqual ("System.Int64", map.TypeFullName, "#5");
  544. Assert.AreEqual ("Int64", map.TypeName, "#6");
  545. }
  546. [Test]
  547. [Category ("NotWorking")]
  548. public void ImportTypeMapping_XsdPrimitive_Month ()
  549. {
  550. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  551. "<xs:schema xmlns:tns=\"NSMonth\" elementFormDefault=\"qualified\" targetNamespace=\"NSMonth\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  552. " <xs:element name=\"month\" type=\"xs:month\" />" +
  553. "</xs:schema>";
  554. XmlSchemas schemas = new XmlSchemas ();
  555. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  556. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  557. XmlTypeMapping map = importer.ImportTypeMapping (new XmlQualifiedName ("month", "NSMonth"));
  558. Assert.IsNotNull (map, "#4");
  559. Assert.AreEqual ("month", map.ElementName, "#5");
  560. Assert.AreEqual ("NSMonth", map.Namespace, "#6");
  561. Assert.AreEqual ("System.String", map.TypeFullName, "#7");
  562. Assert.AreEqual ("String", map.TypeName, "#8");
  563. }
  564. [Test]
  565. public void ImportTypeMapping_XsdPrimitive_QName ()
  566. {
  567. XmlSchemas schemas = ExportType (typeof (XmlQualifiedName));
  568. ArrayList qnames = GetXmlQualifiedNames (schemas);
  569. Assert.AreEqual (1, qnames.Count, "#1");
  570. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  571. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  572. Assert.IsNotNull (map, "#2");
  573. Assert.AreEqual ("QName", map.ElementName, "#3");
  574. Assert.AreEqual ("NSXmlQualifiedName", map.Namespace, "#4");
  575. Assert.AreEqual ("System.Xml.XmlQualifiedName", map.TypeFullName, "#5");
  576. Assert.AreEqual ("XmlQualifiedName", map.TypeName, "#6");
  577. }
  578. [Test]
  579. public void ImportTypeMapping_XsdPrimitive_Short ()
  580. {
  581. XmlSchemas schemas = ExportType (typeof (short));
  582. ArrayList qnames = GetXmlQualifiedNames (schemas);
  583. Assert.AreEqual (1, qnames.Count, "#1");
  584. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  585. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  586. Assert.IsNotNull (map, "#2");
  587. Assert.AreEqual ("short", map.ElementName, "#3");
  588. Assert.AreEqual ("NSInt16", map.Namespace, "#4");
  589. Assert.AreEqual ("System.Int16", map.TypeFullName, "#5");
  590. Assert.AreEqual ("Int16", map.TypeName, "#6");
  591. }
  592. [Test]
  593. public void ImportTypeMapping_XsdPrimitive_String ()
  594. {
  595. XmlSchemas schemas = ExportType (typeof (string));
  596. ArrayList qnames = GetXmlQualifiedNames (schemas);
  597. Assert.AreEqual (1, qnames.Count, "#1");
  598. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  599. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  600. Assert.IsNotNull (map, "#2");
  601. Assert.AreEqual ("string", map.ElementName, "#3");
  602. Assert.AreEqual ("NSString", map.Namespace, "#4");
  603. Assert.AreEqual ("System.String", map.TypeFullName, "#5");
  604. Assert.AreEqual ("String", map.TypeName, "#6");
  605. }
  606. [Test]
  607. public void ImportTypeMapping_XsdPrimitive_Time ()
  608. {
  609. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  610. "<xs:schema xmlns:tns=\"NSTime\" elementFormDefault=\"qualified\" targetNamespace=\"NSTime\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  611. " <xs:element name=\"time\" type=\"xs:time\" />" +
  612. "</xs:schema>";
  613. XmlSchemas schemas = new XmlSchemas ();
  614. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  615. ArrayList qnames = GetXmlQualifiedNames (schemas);
  616. Assert.AreEqual (1, qnames.Count, "#1");
  617. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  618. Assert.AreEqual ("time", qname.Name, "#2");
  619. Assert.AreEqual ("NSTime", qname.Namespace, "#3");
  620. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  621. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  622. Assert.IsNotNull (map, "#4");
  623. Assert.AreEqual ("time", map.ElementName, "#5");
  624. Assert.AreEqual ("NSTime", map.Namespace, "#6");
  625. Assert.AreEqual ("System.DateTime", map.TypeFullName, "#7");
  626. Assert.AreEqual ("DateTime", map.TypeName, "#8");
  627. }
  628. [Test]
  629. [Category ("NotWorking")]
  630. public void ImportTypeMapping_XsdPrimitive_TimeInstant ()
  631. {
  632. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  633. "<xs:schema xmlns:tns=\"NSTimeInstant\" elementFormDefault=\"qualified\" targetNamespace=\"NSTimeInstant\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  634. " <xs:element name=\"timeInstant\" type=\"xs:timeInstant\" />" +
  635. "</xs:schema>";
  636. XmlSchemas schemas = new XmlSchemas ();
  637. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  638. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  639. XmlTypeMapping map = importer.ImportTypeMapping (new XmlQualifiedName ("timeInstant", "NSTimeInstant"));
  640. Assert.IsNotNull (map, "#4");
  641. Assert.AreEqual ("timeInstant", map.ElementName, "#5");
  642. Assert.AreEqual ("NSTimeInstant", map.Namespace, "#6");
  643. Assert.AreEqual ("System.String", map.TypeFullName, "#7");
  644. Assert.AreEqual ("String", map.TypeName, "#8");
  645. }
  646. [Test]
  647. [Category ("NotWorking")]
  648. public void ImportTypeMapping_XsdPrimitive_TimePeriod ()
  649. {
  650. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  651. "<xs:schema xmlns:tns=\"NSTimePeriod\" elementFormDefault=\"qualified\" targetNamespace=\"NSTimePeriod\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
  652. " <xs:element name=\"timePeriod\" type=\"xs:timePeriod\" />" +
  653. "</xs:schema>";
  654. XmlSchemas schemas = new XmlSchemas ();
  655. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  656. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  657. XmlTypeMapping map = importer.ImportTypeMapping (new XmlQualifiedName ("timePeriod", "NSTimePeriod"));
  658. Assert.IsNotNull (map, "#4");
  659. Assert.AreEqual ("timePeriod", map.ElementName, "#5");
  660. Assert.AreEqual ("NSTimePeriod", map.Namespace, "#6");
  661. Assert.AreEqual ("System.String", map.TypeFullName, "#7");
  662. Assert.AreEqual ("String", map.TypeName, "#8");
  663. }
  664. [Test]
  665. public void ImportTypeMapping_XsdPrimitive_UnsignedByte ()
  666. {
  667. XmlSchemas schemas = ExportType (typeof (byte));
  668. ArrayList qnames = GetXmlQualifiedNames (schemas);
  669. Assert.AreEqual (1, qnames.Count, "#1");
  670. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  671. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  672. Assert.IsNotNull (map, "#2");
  673. Assert.AreEqual ("unsignedByte", map.ElementName, "#3");
  674. Assert.AreEqual ("NSByte", map.Namespace, "#4");
  675. Assert.AreEqual ("System.Byte", map.TypeFullName, "#5");
  676. Assert.AreEqual ("Byte", map.TypeName, "#6");
  677. }
  678. [Test]
  679. public void ImportTypeMapping_XsdPrimitive_UnsignedInt ()
  680. {
  681. XmlSchemas schemas = ExportType (typeof (uint));
  682. ArrayList qnames = GetXmlQualifiedNames (schemas);
  683. Assert.AreEqual (1, qnames.Count, "#1");
  684. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  685. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  686. Assert.IsNotNull (map, "#2");
  687. Assert.AreEqual ("unsignedInt", map.ElementName, "#3");
  688. Assert.AreEqual ("NSUInt32", map.Namespace, "#4");
  689. Assert.AreEqual ("System.UInt32", map.TypeFullName, "#5");
  690. Assert.AreEqual ("UInt32", map.TypeName, "#6");
  691. }
  692. [Test]
  693. public void ImportTypeMapping_XsdPrimitive_UnsignedLong ()
  694. {
  695. XmlSchemas schemas = ExportType (typeof (ulong));
  696. ArrayList qnames = GetXmlQualifiedNames (schemas);
  697. Assert.AreEqual (1, qnames.Count, "#1");
  698. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  699. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  700. Assert.IsNotNull (map, "#2");
  701. Assert.AreEqual ("unsignedLong", map.ElementName, "#3");
  702. Assert.AreEqual ("NSUInt64", map.Namespace, "#4");
  703. Assert.AreEqual ("System.UInt64", map.TypeFullName, "#5");
  704. Assert.AreEqual ("UInt64", map.TypeName, "#6");
  705. }
  706. [Test]
  707. public void ImportTypeMapping_XsdPrimitive_UnsignedShort ()
  708. {
  709. XmlSchemas schemas = ExportType (typeof (ushort));
  710. ArrayList qnames = GetXmlQualifiedNames (schemas);
  711. Assert.AreEqual (1, qnames.Count, "#1");
  712. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  713. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  714. Assert.IsNotNull (map, "#2");
  715. Assert.AreEqual ("unsignedShort", map.ElementName, "#3");
  716. Assert.AreEqual ("NSUInt16", map.Namespace, "#4");
  717. Assert.AreEqual ("System.UInt16", map.TypeFullName, "#5");
  718. Assert.AreEqual ("UInt16", map.TypeName, "#6");
  719. }
  720. #if !MOBILE
  721. [Test]
  722. public void ImportTypeMapping_EnumSimpleContent ()
  723. {
  724. string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
  725. "<s:schema xmlns:tns=\"NSDate\" elementFormDefault=\"qualified\" targetNamespace=\"NSDate\" xmlns:s=\"http://www.w3.org/2001/XMLSchema\">" +
  726. " <s:element name=\"trans\" type=\"tns:TranslationStatus\" />" +
  727. " <s:complexType name=\"TranslationStatus\">" +
  728. " <s:simpleContent>" +
  729. " <s:extension base=\"tns:StatusType\">" +
  730. " <s:attribute name=\"Language\" type=\"s:int\" use=\"required\" />" +
  731. " </s:extension>" +
  732. " </s:simpleContent>" +
  733. " </s:complexType>" +
  734. " <s:simpleType name=\"StatusType\">" +
  735. " <s:restriction base=\"s:string\">" +
  736. " <s:enumeration value=\"Untouched\" />" +
  737. " <s:enumeration value=\"Touched\" />" +
  738. " <s:enumeration value=\"Complete\" />" +
  739. " <s:enumeration value=\"None\" />" +
  740. " </s:restriction>" +
  741. " </s:simpleType>" +
  742. "</s:schema>";
  743. XmlSchemas schemas = new XmlSchemas ();
  744. schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
  745. ArrayList qnames = GetXmlQualifiedNames (schemas);
  746. Assert.AreEqual (1, qnames.Count, "#1");
  747. XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
  748. Assert.AreEqual ("trans", qname.Name, "#2");
  749. Assert.AreEqual ("NSDate", qname.Namespace, "#3");
  750. XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
  751. XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
  752. Assert.IsNotNull (map, "#4");
  753. Assert.AreEqual ("trans", map.ElementName, "#5");
  754. Assert.AreEqual ("NSDate", map.Namespace, "#6");
  755. Assert.AreEqual ("TranslationStatus", map.TypeFullName, "#7");
  756. Assert.AreEqual ("TranslationStatus", map.TypeName, "#8");
  757. CodeNamespace codeNamespace = ExportCode (map);
  758. Assert.IsNotNull (codeNamespace, "#9");
  759. CodeTypeDeclaration type = FindType (codeNamespace, "TranslationStatus");
  760. Assert.IsNotNull (type, "#10");
  761. #if NET_2_0
  762. CodeMemberProperty property = FindMember (type, "Value") as CodeMemberProperty;
  763. Assert.IsNotNull (property, "#A1");
  764. Assert.IsTrue (property.HasGet, "#A2");
  765. Assert.IsTrue (property.HasSet, "#A3");
  766. Assert.AreEqual ("StatusType", property.Type.BaseType, "#A4");
  767. CodeMemberField field = FindMember (type, "valueField") as CodeMemberField;
  768. Assert.IsNotNull (field, "#A5");
  769. Assert.AreEqual ("StatusType", field.Type.BaseType, "#A6");
  770. property = FindMember (type, "Language") as CodeMemberProperty;
  771. Assert.IsNotNull (property, "#B1");
  772. Assert.IsTrue (property.HasGet, "#B2");
  773. Assert.IsTrue (property.HasSet, "#B3");
  774. Assert.AreEqual ("System.Int32", property.Type.BaseType, "#B4");
  775. field = FindMember (type, "languageField") as CodeMemberField;
  776. Assert.IsNotNull (field, "#B5");
  777. Assert.AreEqual ("System.Int32", field.Type.BaseType, "#B6");
  778. #else
  779. CodeMemberField field = FindMember (type, "Value") as CodeMemberField;
  780. Assert.IsNotNull (field, "#A1");
  781. Assert.AreEqual ("StatusType", field.Type.BaseType, "#A2");
  782. field = FindMember (type, "Language") as CodeMemberField;
  783. Assert.IsNotNull (field, "#B1");
  784. Assert.AreEqual ("System.Int32", field.Type.BaseType, "#B2");
  785. #endif
  786. }
  787. XmlSchemaImporter CreateSchemaImporter (string xsd)
  788. {
  789. XmlSchemas s = new XmlSchemas ();
  790. XmlReader r = new XmlTextReader (xsd, XmlNodeType.Document, null);
  791. s.Add (XmlSchema.Read (r, null));
  792. return new XmlSchemaImporter (s);
  793. }
  794. [Test]
  795. public void ImportTypeMapping_NullableField ()
  796. {
  797. string xsd = @"
  798. <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
  799. <xs:element name='Root'>
  800. <xs:complexType>
  801. <xs:sequence>
  802. <xs:element name='Bar' nillable='true' type='xs:int' />
  803. </xs:sequence>
  804. <xs:attribute name='A' use='optional' type='xs:int' />
  805. </xs:complexType>
  806. </xs:element>
  807. </xs:schema>";
  808. XmlSchemaImporter imp = CreateSchemaImporter (xsd);
  809. XmlTypeMapping map = imp.ImportTypeMapping (new XmlQualifiedName ("Root"));
  810. CodeNamespace cns = ExportCode (map);
  811. #if NET_2_0
  812. CodeMemberProperty p = (CodeMemberProperty) FindMember (FindType (cns, "Root"), "Bar");
  813. Assert.AreEqual (1, p.Type.TypeArguments.Count, "2.0 #1");
  814. Assert.AreEqual ("System.Int32", p.Type.TypeArguments [0].BaseType, "2.0 #2");
  815. #else
  816. CodeMemberField f = (CodeMemberField) FindMember (FindType (cns, "Root"), "Bar");
  817. Assert.AreEqual ("System.Int32", f.Type.BaseType, "1.x #1");
  818. #endif
  819. }
  820. [Test]
  821. public void ImportMembersMapping_NullableField ()
  822. {
  823. string xsd = @"
  824. <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
  825. <xs:element name='Root'>
  826. <xs:complexType>
  827. <xs:sequence>
  828. <xs:element name='Bar' nillable='true' type='xs:int' />
  829. <xs:element name='Baz' type='xs:int' />
  830. </xs:sequence>
  831. <xs:attribute name='A' use='optional' type='xs:int' />
  832. </xs:complexType>
  833. </xs:element>
  834. </xs:schema>";
  835. XmlSchemaImporter imp = CreateSchemaImporter (xsd);
  836. XmlMembersMapping map = imp.ImportMembersMapping (new XmlQualifiedName ("Root"));
  837. Assert.AreEqual (3, map.Count, "#1");
  838. XmlMemberMapping bar = map [0];
  839. Assert.AreEqual ("Bar", bar.ElementName, "#2-1");
  840. Assert.IsFalse (bar.CheckSpecified, "#2-2");
  841. XmlMemberMapping baz = map [1];
  842. Assert.AreEqual ("Baz", baz.ElementName, "#3-1");
  843. Assert.IsFalse (baz.CheckSpecified, "#3-2");
  844. XmlMemberMapping a = map [2];
  845. Assert.AreEqual ("A", a.ElementName, "#4-1"); // ... element name?
  846. Assert.IsTrue (a.CheckSpecified, "#4-2");
  847. #if NET_2_0
  848. Assert.IsNull (map.TypeName, "#4-3"); // null at this state
  849. Assert.IsNull (map.TypeNamespace, "#4-4"); // null at this state
  850. CodeDomProvider p = new Microsoft.CSharp.CSharpCodeProvider ();
  851. Assert.AreEqual ("System.Nullable`1[System.Int32]", bar.GenerateTypeName (p), "#5-1");
  852. Assert.AreEqual ("System.Int32", baz.GenerateTypeName (p), "#5-2");
  853. var table = new Hashtable ();
  854. var exp = new XmlCodeExporter (new CodeNamespace ("foobar"), null, p, CodeGenerationOptions.None, table);
  855. exp.ExportMembersMapping (map);
  856. Assert.AreEqual (null, map.TypeName, "#5-3"); // filled after ExportExportMembersMapping().
  857. Assert.AreEqual (null, map.TypeNamespace, "#5-4"); // filled after ExportMembersMapping().
  858. // table contains some internal stuff that does not make sense in any public API.
  859. #endif
  860. }
  861. CodeNamespace ExportCode (XmlTypeMapping map)
  862. {
  863. CodeNamespace codeNamespace = new CodeNamespace ();
  864. XmlCodeExporter exp = new XmlCodeExporter (codeNamespace);
  865. exp.ExportTypeMapping (map);
  866. return codeNamespace;
  867. }
  868. CodeTypeDeclaration FindType (CodeNamespace codeNamespace, string name)
  869. {
  870. foreach (CodeTypeDeclaration t in codeNamespace.Types)
  871. if (t.Name == name)
  872. return t;
  873. return null;
  874. }
  875. CodeTypeMember FindMember (CodeTypeDeclaration type, string name)
  876. {
  877. foreach (CodeTypeMember m in type.Members)
  878. if (m.Name == name)
  879. return m;
  880. return null;
  881. }
  882. [Test]
  883. [ExpectedException (typeof (InvalidOperationException))]
  884. public void ImportTypeMappingNonExistent ()
  885. {
  886. XmlSchemas xss = new XmlSchemas ();
  887. xss.Add (new XmlSchema ());
  888. XmlSchemaImporter imp = new XmlSchemaImporter (xss);
  889. imp.ImportTypeMapping (new XmlQualifiedName ("foo"));
  890. }
  891. [Test]
  892. public void AnyTypeTopLevelElementImportsAllComplexTypes ()
  893. {
  894. string xsd = @"
  895. <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
  896. <xs:element name='Root' type='xs:anyType' />
  897. <xs:complexType name='FooType'>
  898. <xs:sequence>
  899. <xs:element name='Child1' type='xs:string' />
  900. <xs:element name='Child2' type='xs:string' />
  901. <xs:element name='Child3' type='xs:string' />
  902. </xs:sequence>
  903. </xs:complexType>
  904. <xs:complexType name='BarType' />
  905. </xs:schema>";
  906. XmlSchemas xss = new XmlSchemas ();
  907. xss.Add (XmlSchema.Read (new XmlTextReader (new StringReader (xsd)), null));
  908. XmlSchemaImporter imp = new XmlSchemaImporter (xss);
  909. CodeNamespace cns = new CodeNamespace ();
  910. XmlCodeExporter exp = new XmlCodeExporter (cns);
  911. exp.ExportTypeMapping (imp.ImportTypeMapping (new XmlQualifiedName ("Root")));
  912. bool foo = false, bar = false;
  913. foreach (CodeTypeDeclaration td in cns.Types) {
  914. if (td.Name == "FooType")
  915. foo = true;
  916. else if (td.Name == "BarType")
  917. bar = true;
  918. }
  919. Assert.IsTrue (foo, "FooType not found");
  920. Assert.IsTrue (bar, "BarType not found");
  921. }
  922. [Test]
  923. public void DefaultTypeTopLevelElementImportsAllComplexTypes ()
  924. {
  925. string xsd = @"
  926. <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
  927. <xs:element name='Root' />
  928. <xs:complexType name='FooType'>
  929. <xs:sequence>
  930. <xs:element name='Child1' type='xs:string' />
  931. <xs:element name='Child2' type='xs:string' />
  932. <xs:element name='Child3' type='xs:string' />
  933. </xs:sequence>
  934. </xs:complexType>
  935. <xs:complexType name='BarType' />
  936. </xs:schema>";
  937. XmlSchemas xss = new XmlSchemas ();
  938. xss.Add (XmlSchema.Read (new XmlTextReader (new StringReader (xsd)), null));
  939. XmlSchemaImporter imp = new XmlSchemaImporter (xss);
  940. CodeNamespace cns = new CodeNamespace ();
  941. XmlCodeExporter exp = new XmlCodeExporter (cns);
  942. exp.ExportTypeMapping (imp.ImportTypeMapping (new XmlQualifiedName ("Root")));
  943. bool foo = false, bar = false;
  944. foreach (CodeTypeDeclaration td in cns.Types) {
  945. if (td.Name == "FooType")
  946. foo = true;
  947. else if (td.Name == "BarType")
  948. bar = true;
  949. }
  950. Assert.IsTrue (foo, "FooType not found");
  951. Assert.IsTrue (bar, "BarType not found");
  952. }
  953. [Test]
  954. public void ImportComplexDerivationByExtension ()
  955. {
  956. string xsd = @"<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
  957. <xs:element name='Root' type='DerivedType' />
  958. <xs:complexType name='DerivedType'>
  959. <xs:complexContent>
  960. <xs:extension base='BaseType'>
  961. <xs:attribute name='Foo' type='xs:string' />
  962. </xs:extension>
  963. </xs:complexContent>
  964. </xs:complexType>
  965. <xs:complexType name='BaseType'>
  966. <xs:attribute name='Foo' type='xs:string' />
  967. </xs:complexType>
  968. </xs:schema>";
  969. XmlSchemaImporter imp = CreateImporter (xsd);
  970. CodeNamespace cns = new CodeNamespace ();
  971. XmlCodeExporter exp = new XmlCodeExporter (cns);
  972. exp.ExportTypeMapping (imp.ImportTypeMapping (new XmlQualifiedName ("Root")));
  973. }
  974. [Test]
  975. public void ImportSimpleSchemaType ()
  976. {
  977. string xsd = @"
  978. <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
  979. <xs:element name='a' type='b' />
  980. <xs:simpleType name='b'>
  981. <xs:restriction base='xs:string'>
  982. <xs:enumeration value='v1'/>
  983. <xs:enumeration value='v2'/>
  984. <xs:enumeration value='v3'/>
  985. </xs:restriction>
  986. </xs:simpleType>
  987. </xs:schema>";
  988. XmlSchemaImporter imp = CreateImporter (xsd);
  989. XmlTypeMapping tm = imp.ImportTypeMapping (new XmlQualifiedName ("a"));
  990. Assert.AreEqual ("a", tm.ElementName, "#1");
  991. Assert.AreEqual ("b", tm.TypeName, "#2");
  992. }
  993. [Test]
  994. public void ImportWildcardElementAsClass ()
  995. {
  996. var xss = new XmlSchemas ();
  997. xss.Add (XmlSchema.Read (XmlReader.Create ("Test/XmlFiles/xsd/670945-1.xsd"), null));
  998. xss.Add (XmlSchema.Read (XmlReader.Create ("Test/XmlFiles/xsd/670945-2.xsd"), null));
  999. var imp = new XmlSchemaImporter (xss);
  1000. var xtm = imp.ImportSchemaType (new XmlQualifiedName ("SystemDateTime", "http://www.onvif.org/ver10/schema"));
  1001. var cns = new CodeNamespace ();
  1002. var exp = new XmlCodeExporter (cns);
  1003. exp.ExportTypeMapping (xtm);
  1004. var sw = new StringWriter ();
  1005. new CSharpCodeProvider ().GenerateCodeFromNamespace (cns, sw, null);
  1006. Assert.IsTrue (sw.ToString ().IndexOf ("class SystemDateTimeExtension") > 0, "#1");
  1007. }
  1008. XmlSchemaImporter CreateImporter (params string [] schemaXmlStrings)
  1009. {
  1010. XmlSchemas xss = new XmlSchemas ();
  1011. foreach (string xsd in schemaXmlStrings)
  1012. xss.Add (XmlSchema.Read (new XmlTextReader (new StringReader (xsd)), null));
  1013. return new XmlSchemaImporter (xss);
  1014. }
  1015. #endif
  1016. private static ArrayList GetXmlQualifiedNames (XmlSchemas schemas)
  1017. {
  1018. ArrayList qnames = new ArrayList ();
  1019. foreach (XmlSchema schema in schemas) {
  1020. if (!schema.IsCompiled) schema.Compile (null);
  1021. foreach (XmlSchemaObject ob in schema.Items)
  1022. if (ob is XmlSchemaElement)
  1023. qnames.Add (((XmlSchemaElement) ob).QualifiedName);
  1024. }
  1025. return qnames;
  1026. }
  1027. private static XmlSchemas ExportType (Type type)
  1028. {
  1029. XmlReflectionImporter ri = new XmlReflectionImporter ("NS" + type.Name);
  1030. XmlSchemas schemas = new XmlSchemas ();
  1031. XmlSchemaExporter sx = new XmlSchemaExporter (schemas);
  1032. XmlTypeMapping tm = ri.ImportTypeMapping (type);
  1033. sx.ExportTypeMapping (tm);
  1034. return schemas;
  1035. }
  1036. }
  1037. }