2 // MonoTests.System.Xml.XsdValidatingReaderTests.cs
\r
5 // Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
\r
7 // (C)2003 Atsushi Enomoto
\r
11 using System.Xml.Schema;
\r
12 using NUnit.Framework;
\r
14 namespace MonoTests.System.Xml
\r
17 public class XsdValidatingReaderTests : Assertion
\r
19 public XsdValidatingReaderTests ()
\r
24 XmlValidatingReader xvr;
\r
26 private XmlValidatingReader PrepareXmlReader (string xml)
\r
28 XmlReader reader = new XmlTextReader (xml, XmlNodeType.Document, null);
\r
29 // XmlDocument doc = new XmlDocument ();
\r
30 // doc.LoadXml (xml);
\r
31 // XmlReader reader = new XmlNodeReader (doc);
\r
33 return new XmlValidatingReader (reader);
\r
37 public void TestEmptySchema ()
\r
39 string xml = "<root/>";
\r
40 xvr = PrepareXmlReader (xml);
\r
41 xvr.ValidationType = ValidationType.Schema;
\r
42 xvr.Read (); // Is is missing schema component.
\r
46 public void TestSimpleValidation ()
\r
48 string xml = "<root/>";
\r
49 xvr = PrepareXmlReader (xml);
\r
50 AssertEquals (ValidationType.Auto, xvr.ValidationType);
\r
51 XmlSchema schema = new XmlSchema ();
\r
52 XmlSchemaElement elem = new XmlSchemaElement ();
\r
54 schema.Items.Add (elem);
\r
55 xvr.Schemas.Add (schema);
\r
56 xvr.Read (); // root
\r
57 AssertEquals (ValidationType.Auto, xvr.ValidationType);
\r
61 xvr = PrepareXmlReader (xml);
\r
62 xvr.Schemas.Add (schema);
\r
66 } catch (XmlSchemaException) {
\r
69 xml = "<hoge xmlns='urn:foo' />";
\r
70 xvr = PrepareXmlReader (xml);
\r
71 xvr.Schemas.Add (schema);
\r
75 } catch (XmlSchemaException) {
\r
80 public void TestReadTypedValueSimple ()
\r
82 string xml = "<root>12</root>";
\r
83 XmlSchema schema = new XmlSchema ();
\r
84 XmlSchemaElement elem = new XmlSchemaElement ();
\r
86 elem.SchemaTypeName = new XmlQualifiedName ("integer", XmlSchema.Namespace);
\r
87 schema.Items.Add (elem);
\r
91 xvr = PrepareXmlReader (xml);
\r
92 xvr.Schemas.Add (schema);
\r
93 // Read directly from root.
\r
94 object o = xvr.ReadTypedValue ();
\r
95 AssertEquals (ReadState.Initial, xvr.ReadState);
\r
98 xvr.Read (); // element root
\r
99 AssertEquals (XmlNodeType.Element, xvr.NodeType);
\r
100 AssertNotNull (xvr.SchemaType);
\r
101 Assert (xvr.SchemaType is XmlSchemaDatatype);
\r
102 o = xvr.ReadTypedValue (); // read "12"
\r
103 AssertEquals (XmlNodeType.EndElement, xvr.NodeType);
\r
105 AssertEquals (typeof (decimal), o.GetType ());
\r
106 decimal n = (decimal) o;
\r
107 AssertEquals (12, n);
\r
109 AssertEquals ("root", xvr.Name);
\r
110 AssertNull (xvr.SchemaType); // EndElement's type
\r
114 xvr = PrepareXmlReader (xml);
\r
115 xvr.Schemas.Add (schema);
\r
116 xvr.Read (); // root
\r
117 XmlSchemaDatatype dt = xvr.SchemaType as XmlSchemaDatatype;
\r
118 AssertNotNull (dt);
\r
119 AssertEquals (typeof (decimal), dt.ValueType);
\r
120 AssertEquals (XmlTokenizedType.None, dt.TokenizedType);
\r
121 xvr.Read (); // text "12"
\r
122 AssertNull (xvr.SchemaType);
\r
123 o = xvr.ReadTypedValue ();
\r
124 // ReadTypedValue is different from ReadString().
\r
129 [Ignore ("XML Schema validator should not be available for validating non namespace-aware XmlReader that handled colon as a name character")]
\r
130 public void TestNamespacesFalse ()
\r
132 // This tests if Namespaces=false is specified, then
\r
133 // the reader's NamespaceURI should be always string.Empty and
\r
134 // validation should be done against such schema that has target ns as "".
\r
135 string xml = "<x:root xmlns:x='urn:foo' />";
\r
136 xvr = PrepareXmlReader (xml);
\r
137 xvr.Namespaces = false;
\r
138 AssertEquals (ValidationType.Auto, xvr.ValidationType);
\r
139 XmlSchema schema = new XmlSchema ();
\r
140 schema.TargetNamespace = "urn:foo";
\r
141 XmlSchemaElement elem = new XmlSchemaElement ();
\r
142 elem.Name = "root";
\r
143 schema.Items.Add (elem);
\r
144 xvr.Schemas.Add (schema);
\r
145 xvr.Read (); // root
\r
146 Assert (!xvr.Namespaces);
\r
147 AssertEquals ("x:root", xvr.Name);
\r
148 // LocalName may contain colons.
\r
149 AssertEquals ("x:root", xvr.LocalName);
\r
150 // NamespaceURI is not supplied.
\r
151 AssertEquals ("", xvr.NamespaceURI);
\r
155 public void TestReadTypedAttributeValue ()
\r
157 string xml = "<root attr='12'></root>";
\r
158 XmlSchema schema = new XmlSchema ();
\r
159 XmlSchemaElement elem = new XmlSchemaElement ();
\r
160 elem.Name = "root";
\r
161 XmlSchemaComplexType ct = new XmlSchemaComplexType ();
\r
162 XmlSchemaAttribute attr = new XmlSchemaAttribute ();
\r
163 attr.Name = "attr";
\r
164 attr.SchemaTypeName = new XmlQualifiedName ("int", XmlSchema.Namespace);
\r
165 ct.Attributes.Add (attr);
\r
166 elem.SchemaType = ct;
\r
167 schema.Items.Add (elem);
\r
169 xvr = PrepareXmlReader (xml);
\r
170 xvr.Schemas.Add (schema);
\r
172 AssertEquals ("root", xvr.Name);
\r
173 Assert (xvr.MoveToNextAttribute ()); // attr
\r
174 AssertEquals ("attr", xvr.Name);
\r
175 XmlSchemaDatatype dt = xvr.SchemaType as XmlSchemaDatatype;
\r
176 AssertNotNull (dt);
\r
177 AssertEquals (typeof (int), dt.ValueType);
\r
178 AssertEquals (XmlTokenizedType.None, dt.TokenizedType);
\r
179 object o = xvr.ReadTypedValue ();
\r
180 AssertEquals (XmlNodeType.Attribute, xvr.NodeType);
\r
181 AssertEquals (typeof (int), o.GetType ());
\r
183 AssertEquals (12, n);
\r
184 Assert (xvr.ReadAttributeValue ()); // can read = seems not proceed.
\r