2009-06-26 Robert Jordan <robertj@gmx.net>
[mono.git] / mcs / class / System.XML / Test / System.Xml / XsdParticleValidationTests.cs
1 //\r
2 // MonoTests.System.Xml.XsdParticleValidationTests.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 #if NET_2_0\r
15 using ValidationException = System.Xml.Schema.XmlSchemaValidationException;\r
16 #else\r
17 using ValidationException = System.Xml.Schema.XmlSchemaException;\r
18 #endif\r
19 \r
20 namespace MonoTests.System.Xml\r
21 {\r
22 //      using XmlValidatingReader = XmlTextReader;\r
23 \r
24         [TestFixture]\r
25         public class XsdParticleValidationTests\r
26         {\r
27                 XmlSchema schema;\r
28                 XmlReader xr;\r
29                 XmlValidatingReader xvr;\r
30 \r
31                 private void PrepareReader1 (string xsdUrl, string xml)\r
32                 {\r
33                         schema = XmlSchema.Read (new XmlTextReader ("Test/XmlFiles/XsdValidation/" + xsdUrl), null);\r
34                         xr = new XmlTextReader (xml, XmlNodeType.Document, null);\r
35                         xvr = new XmlValidatingReader (xr);\r
36                         xvr.Schemas.Add (schema);\r
37 //                      xvr = xr as XmlValidatingReader;\r
38                 }\r
39 \r
40                 [Test]\r
41                 public void ValidateRootElementOnlyValid ()\r
42                 {\r
43                         PrepareReader1 ("1.xsd", "<root xmlns='urn:foo' />");\r
44                         xvr.Read ();\r
45                         PrepareReader1 ("1.xsd", "<root xmlns='urn:foo'></root>");\r
46                         xvr.Read ();\r
47                         xvr.Read ();\r
48                 }\r
49 \r
50                 [Test]\r
51 #if NET_2_0\r
52                 [Category ("NotDotNet")]\r
53                 // MS.NET throws XmlSchemaException, not -ValidationException.\r
54 #endif\r
55                 [ExpectedException (typeof (ValidationException))]\r
56                 public void ValidateRootElementOnlyInvalid ()\r
57                 {\r
58                         PrepareReader1 ("1.xsd", "<invalid xmlns='urn:foo' />");\r
59                         xvr.Read ();\r
60                 }\r
61 \r
62                 [Test]\r
63                 [ExpectedException (typeof (ValidationException))]\r
64                 public void ValidateRootElementOnlyInvalid2 ()\r
65                 {\r
66                         PrepareReader1 ("1.xsd", "<root xmlns='urn:foo'><invalid_child/></root>");\r
67                         xvr.Read ();\r
68                         xvr.Read ();\r
69                 }\r
70 \r
71                 [Test]\r
72                 public void ValidateElementContainsElementValid1 ()\r
73                 {\r
74                         PrepareReader1 ("2.xsd", "<root xmlns='urn:foo'><child/></root>");\r
75                         while (!xvr.EOF)\r
76                                 xvr.Read ();\r
77                 }\r
78 \r
79                 [Test]\r
80                 public void ValidateElementContainsElementValid2 ()\r
81                 {\r
82                         PrepareReader1 ("2.xsd", "<root xmlns='urn:foo'><child/><child/></root>");\r
83                         while (!xvr.EOF)\r
84                                 xvr.Read ();\r
85                 }\r
86 \r
87                 [Test]\r
88                 [ExpectedException (typeof (ValidationException))]\r
89                 public void ValidateElementContainsElementInvalid1 ()\r
90                 {\r
91                         PrepareReader1 ("2.xsd", "<root xmlns='urn:foo'></root>");\r
92                         while (!xvr.EOF)\r
93                                 xvr.Read ();\r
94                 }\r
95 \r
96                 [Test]\r
97                 [ExpectedException (typeof (ValidationException))]\r
98                 public void ValidateElementContainsElementInvalid2 ()\r
99                 {\r
100                         PrepareReader1 ("2.xsd", "<root xmlns='urn:foo'><child/><child/><child/></root>");\r
101                         while (!xvr.EOF)\r
102                                 xvr.Read ();\r
103                 }\r
104 \r
105                 [Test]\r
106                 public void ValidateSequenceValid ()\r
107                 {\r
108                         PrepareReader1 ("3.xsd", "<root xmlns='urn:foo'><child1/><child2/></root>");\r
109                         while (!xvr.EOF)\r
110                                 xvr.Read ();\r
111 \r
112                         PrepareReader1 ("3.xsd", "<root xmlns='urn:foo'><child1/><child2/><child1/><child2/></root>");\r
113                         while (!xvr.EOF)\r
114                                 xvr.Read ();\r
115                 }\r
116 \r
117                 [Test]\r
118                 [ExpectedException (typeof (ValidationException))]\r
119                 public void ValidateSequenceInvalid1 ()\r
120                 {\r
121                         PrepareReader1 ("3.xsd", "<root xmlns='urn:foo'></root>");\r
122                         while (!xvr.EOF)\r
123                                 xvr.Read ();\r
124                 }\r
125 \r
126                 [Test]\r
127                 [ExpectedException (typeof (ValidationException))]\r
128                 public void ValidateSequenceInvalid2 ()\r
129                 {\r
130                         PrepareReader1 ("3.xsd", "<root xmlns='urn:foo'><child1/></root>");\r
131                         while (!xvr.EOF)\r
132                                 xvr.Read ();\r
133                 }\r
134 \r
135                 [Test]\r
136                 [ExpectedException (typeof (ValidationException))]\r
137                 public void ValidateSequenceInvalid3 ()\r
138                 {\r
139                         PrepareReader1 ("3.xsd", "<root xmlns='urn:foo'><child1/><child2/><child1/></root>");\r
140                         while (!xvr.EOF)\r
141                                 xvr.Read ();\r
142                 }\r
143 \r
144                 [Test]\r
145                 [ExpectedException (typeof (ValidationException))]\r
146                 public void ValidateSequenceInvalid4 ()\r
147                 {\r
148                         PrepareReader1 ("3.xsd", "<root xmlns='urn:foo'><child1/><child2/><child1/><child2/><child1/></root>");\r
149                         while (!xvr.EOF)\r
150                                 xvr.Read ();\r
151                 }\r
152 \r
153                 [Test]\r
154                 [ExpectedException (typeof (ValidationException))]\r
155                 public void ValidateSequenceInvalid5 ()\r
156                 {\r
157                         PrepareReader1 ("3.xsd", "<root xmlns='urn:foo'><child1/><child2/><child1/><child2/><child1/><child2/></root>");\r
158                         while (!xvr.EOF)\r
159                                 xvr.Read ();\r
160                 }\r
161 \r
162                 [Test]\r
163                 public void ValidateChoiceValid ()\r
164                 {\r
165                         PrepareReader1 ("4.xsd", "<root xmlns='urn:foo'><child1/></root>");\r
166                         while (!xvr.EOF)\r
167                                 xvr.Read ();\r
168 \r
169                         PrepareReader1 ("4.xsd", "<root xmlns='urn:foo'><child2/></root>");\r
170                         while (!xvr.EOF)\r
171                                 xvr.Read ();\r
172 \r
173                         PrepareReader1 ("4.xsd", "<root xmlns='urn:foo'><child1/><child2/></root>");\r
174                         while (!xvr.EOF)\r
175                                 xvr.Read ();\r
176 \r
177                         PrepareReader1 ("4.xsd", "<root xmlns='urn:foo'><child2/><child2/></root>");\r
178                         while (!xvr.EOF)\r
179                                 xvr.Read ();\r
180 \r
181                         PrepareReader1 ("4.xsd", "<root xmlns='urn:foo'><child2/><child2/><child2/><child2/></root>");\r
182                         while (!xvr.EOF)\r
183                                 xvr.Read ();\r
184 \r
185                         PrepareReader1 ("4.xsd", "<root xmlns='urn:foo'><child2/><child2/><child1/></root>");\r
186                         while (!xvr.EOF)\r
187                                 xvr.Read ();\r
188 \r
189                         PrepareReader1 ("4.xsd", "<root xmlns='urn:foo'></root>");\r
190                         while (!xvr.EOF)\r
191                                 xvr.Read ();\r
192 \r
193                 }\r
194 \r
195                 [Test]\r
196                 [ExpectedException (typeof (ValidationException))]\r
197                 public void ValidateChoiceInvalid1 ()\r
198                 {\r
199                         PrepareReader1 ("4.xsd", "<root xmlns='urn:foo'><child1/><child1/><child1/></root>");\r
200                         while (!xvr.EOF)\r
201                                 xvr.Read ();\r
202                 }\r
203 \r
204                 [Test]\r
205                 [ExpectedException (typeof (ValidationException))]\r
206                 public void ValidateChoiceInvalid2 ()\r
207                 {\r
208                         PrepareReader1 ("3.xsd", "<root xmlns='urn:foo'><child2/><child2/><child2/><child2/><child2/></root>");\r
209                         while (!xvr.EOF)\r
210                                 xvr.Read ();\r
211                 }\r
212 \r
213                 [Test]\r
214                 [ExpectedException (typeof (ValidationException))]\r
215                 public void ValidateChoiceInvalid3 ()\r
216                 {\r
217                         PrepareReader1 ("3.xsd", "<root xmlns='urn:foo'><child2/><child2/><child2/><child1/></root>");\r
218                         while (!xvr.EOF)\r
219                                 xvr.Read ();\r
220                 }\r
221 \r
222                 [Test]\r
223                 [ExpectedException (typeof (ValidationException))]\r
224                 public void ValidateChoiceInvalid4 ()\r
225                 {\r
226                         PrepareReader1 ("3.xsd", "<root xmlns='urn:foo'><child1/><child2/><child2/><child2/></root>");\r
227                         while (!xvr.EOF)\r
228                                 xvr.Read ();\r
229                 }\r
230 \r
231         }\r
232 }\r