This commit was manufactured by cvs2svn to create branch 'mono-1-0'.
[mono.git] / mcs / class / System.XML / Test / System.Xml / XsdValidatingReaderTests.cs
1 //\r
2 // MonoTests.System.Xml.XsdValidatingReaderTests.cs\r
3 //\r
4 // Author:\r
5 //      Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>\r
6 //\r
7 // (C)2003 Atsushi Enomoto\r
8 //\r
9 using System;\r
10 using System.Xml;\r
11 using System.Xml.Schema;\r
12 using NUnit.Framework;\r
13 \r
14 namespace MonoTests.System.Xml\r
15 {\r
16         [TestFixture]\r
17         public class XsdValidatingReaderTests : Assertion\r
18         {\r
19                 public XsdValidatingReaderTests ()\r
20                 {\r
21                 }\r
22 \r
23                 XmlReader xtr;\r
24                 XmlValidatingReader xvr;\r
25 \r
26                 private XmlValidatingReader PrepareXmlReader (string xml)\r
27                 {\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
32 \r
33                         return new XmlValidatingReader (reader);\r
34                 }\r
35 \r
36                 [Test]\r
37                 public void TestEmptySchema ()\r
38                 {\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
43                 }\r
44 \r
45                 [Test]\r
46                 public void TestSimpleValidation ()\r
47                 {\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
53                         elem.Name = "root";\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
58                         xvr.Read ();    // EOF\r
59 \r
60                         xml = "<hoge/>";\r
61                         xvr = PrepareXmlReader (xml);\r
62                         xvr.Schemas.Add (schema);\r
63                         try {\r
64                                 xvr.Read ();\r
65                                 Fail ();\r
66                         } catch (XmlSchemaException) {\r
67                         }\r
68 \r
69                         xml = "<hoge xmlns='urn:foo' />";\r
70                         xvr = PrepareXmlReader (xml);\r
71                         xvr.Schemas.Add (schema);\r
72                         try {\r
73                                 xvr.Read ();\r
74                                 Fail ();\r
75                         } catch (XmlSchemaException) {\r
76                         }\r
77                 }\r
78 \r
79                 [Test]\r
80                 public void TestReadTypedValueSimple ()\r
81                 {\r
82                         string xml = "<root>12</root>";\r
83                         XmlSchema schema = new XmlSchema ();\r
84                         XmlSchemaElement elem = new XmlSchemaElement ();\r
85                         elem.Name = "root";\r
86                         elem.SchemaTypeName = new XmlQualifiedName ("integer", XmlSchema.Namespace);\r
87                         schema.Items.Add (elem);\r
88 \r
89                         // Lap 1:\r
90                         \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
96                         AssertNull (o);\r
97 \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
104                         AssertNotNull (o);\r
105                         AssertEquals (typeof (decimal), o.GetType ());\r
106                         decimal n = (decimal) o;\r
107                         AssertEquals (12, n);\r
108                         Assert (!xvr.EOF);\r
109                         AssertEquals ("root", xvr.Name);\r
110                         AssertNull (xvr.SchemaType);    // EndElement's type\r
111 \r
112                         // Lap 2:\r
113 \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
125                         AssertNull (o);\r
126                 }\r
127 \r
128                 [Test]\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
131                 {\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
152                 }\r
153 \r
154                 [Test]\r
155                 public void TestReadTypedAttributeValue ()\r
156                 {\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
168 \r
169                         xvr = PrepareXmlReader (xml);\r
170                         xvr.Schemas.Add (schema);\r
171                         xvr.Read ();\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
182                         int n = (int) o;\r
183                         AssertEquals (12, n);\r
184                         Assert (xvr.ReadAttributeValue ());     // can read = seems not proceed.\r
185                 }\r
186         }\r
187 }\r