XmlSchemaTests.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. //
  2. // System.Xml.XmlSchema.cs
  3. //
  4. // Author:
  5. // Atsushi Enomoto <[email protected]>
  6. //
  7. // (C) 2002 Atsushi Enomoto
  8. //
  9. using System;
  10. using System.Xml;
  11. using System.Xml.Schema;
  12. using NUnit.Framework;
  13. namespace MonoTests.System.Xml
  14. {
  15. [TestFixture]
  16. public class XmlSchemaTests : Assertion
  17. {
  18. private XmlSchema GetSchema (string path)
  19. {
  20. return XmlSchema.Read (new XmlTextReader (path), null);
  21. }
  22. private XmlQualifiedName QName (string name, string ns)
  23. {
  24. return new XmlQualifiedName (name, ns);
  25. }
  26. private void AssertElement (XmlSchemaElement element,
  27. string name, XmlQualifiedName refName, string id,
  28. XmlQualifiedName schemaTypeName, XmlSchemaType schemaType)
  29. {
  30. AssertNotNull (element);
  31. AssertEquals (name, element.Name);
  32. AssertEquals (refName, element.RefName);
  33. AssertEquals (id, element.Id);
  34. AssertEquals (schemaTypeName, element.SchemaTypeName);
  35. AssertEquals (schemaType, element.SchemaType);
  36. }
  37. private void AssertElementEx (XmlSchemaElement element,
  38. XmlSchemaDerivationMethod block, XmlSchemaDerivationMethod final,
  39. string defaultValue, string fixedValue,
  40. XmlSchemaForm form, bool isAbstract, bool isNillable,
  41. XmlQualifiedName substGroup)
  42. {
  43. AssertNotNull (element);
  44. AssertEquals (block, element.Block);
  45. AssertEquals (final, element.Final);
  46. AssertEquals (defaultValue, element.DefaultValue);
  47. AssertEquals (fixedValue, element.FixedValue);
  48. AssertEquals (form, element.Form);
  49. AssertEquals (isAbstract, element.IsAbstract);
  50. AssertEquals (isNillable, element.IsNillable);
  51. AssertEquals (substGroup, element.SubstitutionGroup);
  52. }
  53. private void AssertCompiledComplexType (XmlSchemaComplexType cType,
  54. XmlQualifiedName name,
  55. int attributesCount, int attributeUsesCount,
  56. bool existsAny, Type contentModelType,
  57. bool hasContentTypeParticle,
  58. XmlSchemaContentType contentType)
  59. {
  60. AssertNotNull (cType);
  61. AssertEquals (name.Name, cType.Name);
  62. AssertEquals (name, cType.QualifiedName);
  63. AssertEquals (attributesCount, cType.Attributes.Count);
  64. AssertEquals (attributeUsesCount, cType.AttributeUses.Count);
  65. Assert (existsAny == (cType.AttributeWildcard != null));
  66. if (contentModelType == null)
  67. AssertNull (cType.ContentModel);
  68. else
  69. AssertEquals (contentModelType, cType.ContentModel.GetType ());
  70. AssertEquals (hasContentTypeParticle, cType.ContentTypeParticle != null);
  71. AssertEquals (contentType, cType.ContentType);
  72. }
  73. private void AssertCompiledComplexContentExtension (XmlSchemaComplexContentExtension xccx,
  74. int attributeCount, bool hasAnyAttribute, XmlQualifiedName baseTypeName)
  75. {
  76. AssertNotNull (xccx);
  77. AssertEquals (attributeCount, xccx.Attributes.Count);
  78. AssertEquals (hasAnyAttribute, xccx.AnyAttribute != null);
  79. AssertEquals (baseTypeName, xccx.BaseTypeName);
  80. AssertNotNull (xccx.Particle);
  81. }
  82. private void AssertCompiledElement (XmlSchemaElement element,
  83. XmlQualifiedName name, object elementType)
  84. {
  85. AssertNotNull (element);
  86. AssertEquals (name, element.QualifiedName);
  87. AssertEquals (elementType, element.ElementType);
  88. }
  89. [Test]
  90. public void TestRead ()
  91. {
  92. XmlSchema schema = GetSchema ("XmlFiles/xsd/1.xsd");
  93. AssertEquals (6, schema.Items.Count);
  94. bool fooValidated = false;
  95. bool barValidated = false;
  96. string ns = "urn:bar";
  97. foreach (XmlSchemaObject obj in schema.Items) {
  98. XmlSchemaElement element = obj as XmlSchemaElement;
  99. if (element == null)
  100. continue;
  101. if (element.Name == "Foo") {
  102. AssertElement (element, "Foo",
  103. XmlQualifiedName.Empty, null,
  104. QName ("string", XmlSchema.Namespace), null);
  105. fooValidated = true;
  106. }
  107. if (element.Name == "Bar") {
  108. AssertElement (element, "Bar",
  109. XmlQualifiedName.Empty, null, QName ("FugaType", ns), null);
  110. barValidated = true;
  111. }
  112. }
  113. Assert (fooValidated);
  114. Assert (barValidated);
  115. }
  116. [Test]
  117. public void TestCompile ()
  118. {
  119. XmlQualifiedName qname;
  120. XmlSchemaComplexContentExtension xccx;
  121. XmlSchemaComplexType cType;
  122. XmlSchemaSequence seq;
  123. XmlSchema schema = GetSchema ("XmlFiles/xsd/1.xsd");
  124. schema.Compile (null);
  125. string ns = "urn:bar";
  126. // HogeType
  127. qname = QName ("HogeType", ns);
  128. cType = schema.SchemaTypes [qname] as XmlSchemaComplexType;
  129. AssertNotNull (cType);
  130. AssertNull (cType.ContentModel);
  131. AssertCompiledComplexType (cType, qname, 0, 0,
  132. false, null, true, XmlSchemaContentType.ElementOnly);
  133. seq = cType.ContentTypeParticle as XmlSchemaSequence;
  134. AssertNotNull (seq);
  135. AssertEquals (2, seq.Items.Count);
  136. XmlSchemaElement refFoo = seq.Items [0] as XmlSchemaElement;
  137. AssertCompiledElement (refFoo, QName ("Foo", ns),
  138. ((XmlSchemaElement) schema.Elements [QName ("Foo", ns)]).ElementType);
  139. // FugaType
  140. qname = QName ("FugaType", ns);
  141. cType = schema.SchemaTypes [qname] as XmlSchemaComplexType;
  142. AssertNotNull (cType);
  143. xccx = cType.ContentModel.Content as XmlSchemaComplexContentExtension;
  144. AssertCompiledComplexContentExtension (
  145. xccx, 0, false, QName ("HogeType", ns));
  146. AssertCompiledComplexType (cType, qname, 0, 0,
  147. false, typeof (XmlSchemaComplexContent),
  148. true, XmlSchemaContentType.ElementOnly);
  149. AssertNotNull (cType.BaseSchemaType);
  150. seq = xccx.Particle as XmlSchemaSequence;
  151. AssertNotNull (seq);
  152. AssertEquals (1, seq.Items.Count);
  153. XmlSchemaElement refBaz = seq.Items [0] as XmlSchemaElement;
  154. AssertNotNull (refBaz);
  155. AssertCompiledElement (refBaz, QName ("Baz", ""),
  156. ((XmlSchemaElement) schema.Elements [QName ("Foo", ns)]).ElementType);
  157. qname = QName ("Bar", ns);
  158. XmlSchemaElement element = schema.Elements [qname] as XmlSchemaElement;
  159. AssertCompiledElement (element, qname, cType);
  160. }
  161. }
  162. }