root / trunk / Libraries / Json40r2 / Source / Src / Newtonsoft.Json.Tests / JsonValidatingReaderTests.cs @ 0eea575a
History | View | Annotate | Download (40.4 kB)
1 | d78cbf09 | Panagiotis Kanavos | using System; |
---|---|---|---|
2 | d78cbf09 | Panagiotis Kanavos | using System.Collections.Generic; |
3 | d78cbf09 | Panagiotis Kanavos | using System.IO; |
4 | d78cbf09 | Panagiotis Kanavos | using System.Linq; |
5 | d78cbf09 | Panagiotis Kanavos | using System.Text; |
6 | d78cbf09 | Panagiotis Kanavos | using NUnit.Framework; |
7 | d78cbf09 | Panagiotis Kanavos | using System.Xml; |
8 | d78cbf09 | Panagiotis Kanavos | using System.Xml.Schema; |
9 | d78cbf09 | Panagiotis Kanavos | using Newtonsoft.Json.Schema; |
10 | d78cbf09 | Panagiotis Kanavos | |
11 | d78cbf09 | Panagiotis Kanavos | namespace Newtonsoft.Json.Tests |
12 | d78cbf09 | Panagiotis Kanavos | { |
13 | d78cbf09 | Panagiotis Kanavos | public class JsonValidatingReaderTests : TestFixtureBase |
14 | d78cbf09 | Panagiotis Kanavos | { |
15 | d78cbf09 | Panagiotis Kanavos | [Test] |
16 | d78cbf09 | Panagiotis Kanavos | public void CheckInnerReader() |
17 | d78cbf09 | Panagiotis Kanavos | { |
18 | d78cbf09 | Panagiotis Kanavos | string json = "{'name':'James','hobbies':['pie','cake']}"; |
19 | d78cbf09 | Panagiotis Kanavos | JsonReader reader = new JsonTextReader(new StringReader(json)); |
20 | d78cbf09 | Panagiotis Kanavos | |
21 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader validatingReader = new JsonValidatingReader(reader); |
22 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(reader, validatingReader.Reader); |
23 | d78cbf09 | Panagiotis Kanavos | } |
24 | d78cbf09 | Panagiotis Kanavos | |
25 | d78cbf09 | Panagiotis Kanavos | [Test] |
26 | d78cbf09 | Panagiotis Kanavos | public void ValidateTypes() |
27 | d78cbf09 | Panagiotis Kanavos | { |
28 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
29 | d78cbf09 | Panagiotis Kanavos | ""description"":""A person"", |
30 | d78cbf09 | Panagiotis Kanavos | ""type"":""object"", |
31 | d78cbf09 | Panagiotis Kanavos | ""properties"": |
32 | d78cbf09 | Panagiotis Kanavos | { |
33 | d78cbf09 | Panagiotis Kanavos | ""name"":{""type"":""string""}, |
34 | d78cbf09 | Panagiotis Kanavos | ""hobbies"": |
35 | d78cbf09 | Panagiotis Kanavos | { |
36 | d78cbf09 | Panagiotis Kanavos | ""type"":""array"", |
37 | d78cbf09 | Panagiotis Kanavos | ""items"": {""type"":""string""} |
38 | d78cbf09 | Panagiotis Kanavos | } |
39 | d78cbf09 | Panagiotis Kanavos | } |
40 | d78cbf09 | Panagiotis Kanavos | }"; |
41 | d78cbf09 | Panagiotis Kanavos | |
42 | d78cbf09 | Panagiotis Kanavos | string json = @"{'name':""James"",'hobbies':[""pie"",'cake']}"; |
43 | d78cbf09 | Panagiotis Kanavos | |
44 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
45 | d78cbf09 | Panagiotis Kanavos | |
46 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
47 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
48 | d78cbf09 | Panagiotis Kanavos | JsonSchema schema = JsonSchema.Parse(schemaJson); |
49 | d78cbf09 | Panagiotis Kanavos | reader.Schema = schema; |
50 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(schema, reader.Schema); |
51 | d78cbf09 | Panagiotis Kanavos | |
52 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(0, reader.Depth); |
53 | d78cbf09 | Panagiotis Kanavos | |
54 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
55 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartObject, reader.TokenType); |
56 | d78cbf09 | Panagiotis Kanavos | |
57 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
58 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
59 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("name", reader.Value.ToString()); |
60 | d78cbf09 | Panagiotis Kanavos | |
61 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(1, reader.Depth); |
62 | d78cbf09 | Panagiotis Kanavos | |
63 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
64 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
65 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("James", reader.Value.ToString()); |
66 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(typeof(string), reader.ValueType); |
67 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual('"', reader.QuoteChar); |
68 | d78cbf09 | Panagiotis Kanavos | |
69 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
70 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
71 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("hobbies", reader.Value.ToString()); |
72 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual('\'', reader.QuoteChar); |
73 | d78cbf09 | Panagiotis Kanavos | |
74 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
75 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
76 | d78cbf09 | Panagiotis Kanavos | |
77 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
78 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
79 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("pie", reader.Value.ToString()); |
80 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual('"', reader.QuoteChar); |
81 | d78cbf09 | Panagiotis Kanavos | |
82 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
83 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
84 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("cake", reader.Value.ToString()); |
85 | d78cbf09 | Panagiotis Kanavos | |
86 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
87 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndArray, reader.TokenType); |
88 | d78cbf09 | Panagiotis Kanavos | |
89 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
90 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndObject, reader.TokenType); |
91 | d78cbf09 | Panagiotis Kanavos | |
92 | d78cbf09 | Panagiotis Kanavos | Assert.IsNull(validationEventArgs); |
93 | d78cbf09 | Panagiotis Kanavos | } |
94 | d78cbf09 | Panagiotis Kanavos | |
95 | d78cbf09 | Panagiotis Kanavos | [Test] |
96 | d78cbf09 | Panagiotis Kanavos | public void ValidateUnrestrictedArray() |
97 | d78cbf09 | Panagiotis Kanavos | { |
98 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
99 | d78cbf09 | Panagiotis Kanavos | ""type"":""array"" |
100 | d78cbf09 | Panagiotis Kanavos | }"; |
101 | d78cbf09 | Panagiotis Kanavos | |
102 | d78cbf09 | Panagiotis Kanavos | string json = "['pie','cake',['nested1','nested2'],{'nestedproperty1':1.1,'nestedproperty2':[null]}]"; |
103 | d78cbf09 | Panagiotis Kanavos | |
104 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
105 | d78cbf09 | Panagiotis Kanavos | |
106 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
107 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
108 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
109 | d78cbf09 | Panagiotis Kanavos | |
110 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
111 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
112 | d78cbf09 | Panagiotis Kanavos | |
113 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
114 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
115 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("pie", reader.Value.ToString()); |
116 | d78cbf09 | Panagiotis Kanavos | |
117 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
118 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
119 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("cake", reader.Value.ToString()); |
120 | d78cbf09 | Panagiotis Kanavos | |
121 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
122 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
123 | d78cbf09 | Panagiotis Kanavos | |
124 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
125 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
126 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("nested1", reader.Value.ToString()); |
127 | d78cbf09 | Panagiotis Kanavos | |
128 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
129 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
130 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("nested2", reader.Value.ToString()); |
131 | d78cbf09 | Panagiotis Kanavos | |
132 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
133 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndArray, reader.TokenType); |
134 | d78cbf09 | Panagiotis Kanavos | |
135 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
136 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartObject, reader.TokenType); |
137 | d78cbf09 | Panagiotis Kanavos | |
138 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
139 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
140 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("nestedproperty1", reader.Value.ToString()); |
141 | d78cbf09 | Panagiotis Kanavos | |
142 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
143 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Float, reader.TokenType); |
144 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(1.1, reader.Value); |
145 | d78cbf09 | Panagiotis Kanavos | |
146 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
147 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
148 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("nestedproperty2", reader.Value.ToString()); |
149 | d78cbf09 | Panagiotis Kanavos | |
150 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
151 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
152 | d78cbf09 | Panagiotis Kanavos | |
153 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
154 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Null, reader.TokenType); |
155 | d78cbf09 | Panagiotis Kanavos | |
156 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
157 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndArray, reader.TokenType); |
158 | d78cbf09 | Panagiotis Kanavos | |
159 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
160 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndObject, reader.TokenType); |
161 | d78cbf09 | Panagiotis Kanavos | |
162 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
163 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndArray, reader.TokenType); |
164 | d78cbf09 | Panagiotis Kanavos | |
165 | d78cbf09 | Panagiotis Kanavos | Assert.IsNull(validationEventArgs); |
166 | d78cbf09 | Panagiotis Kanavos | } |
167 | d78cbf09 | Panagiotis Kanavos | |
168 | d78cbf09 | Panagiotis Kanavos | [Test] |
169 | d78cbf09 | Panagiotis Kanavos | public void StringLessThanMinimumLength() |
170 | d78cbf09 | Panagiotis Kanavos | { |
171 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
172 | d78cbf09 | Panagiotis Kanavos | ""type"":""string"", |
173 | d78cbf09 | Panagiotis Kanavos | ""minLength"":5, |
174 | d78cbf09 | Panagiotis Kanavos | ""maxLength"":50, |
175 | d78cbf09 | Panagiotis Kanavos | }"; |
176 | d78cbf09 | Panagiotis Kanavos | |
177 | d78cbf09 | Panagiotis Kanavos | string json = "'pie'"; |
178 | d78cbf09 | Panagiotis Kanavos | |
179 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
180 | d78cbf09 | Panagiotis Kanavos | |
181 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
182 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
183 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
184 | d78cbf09 | Panagiotis Kanavos | |
185 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
186 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
187 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("String 'pie' is less than minimum length of 5. Line 1, position 5.", validationEventArgs.Message); |
188 | d78cbf09 | Panagiotis Kanavos | |
189 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
190 | d78cbf09 | Panagiotis Kanavos | } |
191 | d78cbf09 | Panagiotis Kanavos | |
192 | d78cbf09 | Panagiotis Kanavos | [Test] |
193 | d78cbf09 | Panagiotis Kanavos | public void StringGreaterThanMaximumLength() |
194 | d78cbf09 | Panagiotis Kanavos | { |
195 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
196 | d78cbf09 | Panagiotis Kanavos | ""type"":""string"", |
197 | d78cbf09 | Panagiotis Kanavos | ""minLength"":5, |
198 | d78cbf09 | Panagiotis Kanavos | ""maxLength"":10 |
199 | d78cbf09 | Panagiotis Kanavos | }"; |
200 | d78cbf09 | Panagiotis Kanavos | |
201 | d78cbf09 | Panagiotis Kanavos | string json = "'The quick brown fox jumps over the lazy dog.'"; |
202 | d78cbf09 | Panagiotis Kanavos | |
203 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
204 | d78cbf09 | Panagiotis Kanavos | |
205 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
206 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
207 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
208 | d78cbf09 | Panagiotis Kanavos | |
209 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
210 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
211 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("String 'The quick brown fox jumps over the lazy dog.' exceeds maximum length of 10. Line 1, position 46.", validationEventArgs.Message); |
212 | d78cbf09 | Panagiotis Kanavos | |
213 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
214 | d78cbf09 | Panagiotis Kanavos | } |
215 | d78cbf09 | Panagiotis Kanavos | |
216 | d78cbf09 | Panagiotis Kanavos | [Test] |
217 | d78cbf09 | Panagiotis Kanavos | public void StringIsNotInEnum() |
218 | d78cbf09 | Panagiotis Kanavos | { |
219 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
220 | d78cbf09 | Panagiotis Kanavos | ""type"":""array"", |
221 | d78cbf09 | Panagiotis Kanavos | ""items"":{ |
222 | d78cbf09 | Panagiotis Kanavos | ""type"":""string"", |
223 | d78cbf09 | Panagiotis Kanavos | ""enum"":[""one"",""two""] |
224 | d78cbf09 | Panagiotis Kanavos | }, |
225 | d78cbf09 | Panagiotis Kanavos | ""maxItems"":3 |
226 | d78cbf09 | Panagiotis Kanavos | }"; |
227 | d78cbf09 | Panagiotis Kanavos | |
228 | d78cbf09 | Panagiotis Kanavos | string json = "['one','two','THREE']"; |
229 | d78cbf09 | Panagiotis Kanavos | |
230 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
231 | d78cbf09 | Panagiotis Kanavos | |
232 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
233 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
234 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
235 | d78cbf09 | Panagiotis Kanavos | |
236 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
237 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
238 | d78cbf09 | Panagiotis Kanavos | |
239 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
240 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
241 | d78cbf09 | Panagiotis Kanavos | |
242 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
243 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
244 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
245 | d78cbf09 | Panagiotis Kanavos | |
246 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
247 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
248 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(@"Value ""THREE"" is not defined in enum. Line 1, position 20.", validationEventArgs.Message); |
249 | d78cbf09 | Panagiotis Kanavos | |
250 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
251 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndArray, reader.TokenType); |
252 | d78cbf09 | Panagiotis Kanavos | |
253 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
254 | d78cbf09 | Panagiotis Kanavos | } |
255 | d78cbf09 | Panagiotis Kanavos | |
256 | d78cbf09 | Panagiotis Kanavos | [Test] |
257 | d78cbf09 | Panagiotis Kanavos | public void StringDoesNotMatchPattern() |
258 | d78cbf09 | Panagiotis Kanavos | { |
259 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
260 | d78cbf09 | Panagiotis Kanavos | ""type"":""string"", |
261 | d78cbf09 | Panagiotis Kanavos | ""pattern"":""foo"" |
262 | d78cbf09 | Panagiotis Kanavos | }"; |
263 | d78cbf09 | Panagiotis Kanavos | |
264 | d78cbf09 | Panagiotis Kanavos | string json = "'The quick brown fox jumps over the lazy dog.'"; |
265 | d78cbf09 | Panagiotis Kanavos | |
266 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
267 | d78cbf09 | Panagiotis Kanavos | |
268 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
269 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
270 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
271 | d78cbf09 | Panagiotis Kanavos | |
272 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
273 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
274 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("String 'The quick brown fox jumps over the lazy dog.' does not match regex pattern 'foo'. Line 1, position 46.", validationEventArgs.Message); |
275 | d78cbf09 | Panagiotis Kanavos | |
276 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
277 | d78cbf09 | Panagiotis Kanavos | } |
278 | d78cbf09 | Panagiotis Kanavos | |
279 | d78cbf09 | Panagiotis Kanavos | [Test] |
280 | d78cbf09 | Panagiotis Kanavos | public void IntegerGreaterThanMaximumValue() |
281 | d78cbf09 | Panagiotis Kanavos | { |
282 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
283 | d78cbf09 | Panagiotis Kanavos | ""type"":""integer"", |
284 | d78cbf09 | Panagiotis Kanavos | ""maximum"":5 |
285 | d78cbf09 | Panagiotis Kanavos | }"; |
286 | d78cbf09 | Panagiotis Kanavos | |
287 | d78cbf09 | Panagiotis Kanavos | string json = "10"; |
288 | d78cbf09 | Panagiotis Kanavos | |
289 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
290 | d78cbf09 | Panagiotis Kanavos | |
291 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
292 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
293 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
294 | d78cbf09 | Panagiotis Kanavos | |
295 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
296 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Integer, reader.TokenType); |
297 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Integer 10 exceeds maximum value of 5. Line 1, position 2.", validationEventArgs.Message); |
298 | d78cbf09 | Panagiotis Kanavos | |
299 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
300 | d78cbf09 | Panagiotis Kanavos | } |
301 | d78cbf09 | Panagiotis Kanavos | |
302 | d78cbf09 | Panagiotis Kanavos | [Test] |
303 | d78cbf09 | Panagiotis Kanavos | [ExpectedException(typeof(JsonSchemaException), ExpectedMessage = "Integer 10 exceeds maximum value of 5. Line 1, position 2.")] |
304 | d78cbf09 | Panagiotis Kanavos | public void ThrowExceptionWhenNoValidationEventHandler() |
305 | d78cbf09 | Panagiotis Kanavos | { |
306 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
307 | d78cbf09 | Panagiotis Kanavos | ""type"":""integer"", |
308 | d78cbf09 | Panagiotis Kanavos | ""maximum"":5 |
309 | d78cbf09 | Panagiotis Kanavos | }"; |
310 | d78cbf09 | Panagiotis Kanavos | |
311 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader("10"))); |
312 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
313 | d78cbf09 | Panagiotis Kanavos | |
314 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
315 | d78cbf09 | Panagiotis Kanavos | } |
316 | d78cbf09 | Panagiotis Kanavos | |
317 | d78cbf09 | Panagiotis Kanavos | [Test] |
318 | d78cbf09 | Panagiotis Kanavos | public void IntegerLessThanMinimumValue() |
319 | d78cbf09 | Panagiotis Kanavos | { |
320 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
321 | d78cbf09 | Panagiotis Kanavos | ""type"":""integer"", |
322 | d78cbf09 | Panagiotis Kanavos | ""minimum"":5 |
323 | d78cbf09 | Panagiotis Kanavos | }"; |
324 | d78cbf09 | Panagiotis Kanavos | |
325 | d78cbf09 | Panagiotis Kanavos | string json = "1"; |
326 | d78cbf09 | Panagiotis Kanavos | |
327 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
328 | d78cbf09 | Panagiotis Kanavos | |
329 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
330 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
331 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
332 | d78cbf09 | Panagiotis Kanavos | |
333 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
334 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Integer, reader.TokenType); |
335 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Integer 1 is less than minimum value of 5. Line 1, position 1.", validationEventArgs.Message); |
336 | d78cbf09 | Panagiotis Kanavos | |
337 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
338 | d78cbf09 | Panagiotis Kanavos | } |
339 | d78cbf09 | Panagiotis Kanavos | |
340 | d78cbf09 | Panagiotis Kanavos | [Test] |
341 | d78cbf09 | Panagiotis Kanavos | public void IntegerIsNotInEnum() |
342 | d78cbf09 | Panagiotis Kanavos | { |
343 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
344 | d78cbf09 | Panagiotis Kanavos | ""type"":""array"", |
345 | d78cbf09 | Panagiotis Kanavos | ""items"":{ |
346 | d78cbf09 | Panagiotis Kanavos | ""type"":""integer"", |
347 | d78cbf09 | Panagiotis Kanavos | ""enum"":[1,2] |
348 | d78cbf09 | Panagiotis Kanavos | }, |
349 | d78cbf09 | Panagiotis Kanavos | ""maxItems"":3 |
350 | d78cbf09 | Panagiotis Kanavos | }"; |
351 | d78cbf09 | Panagiotis Kanavos | |
352 | d78cbf09 | Panagiotis Kanavos | string json = "[1,2,3]"; |
353 | d78cbf09 | Panagiotis Kanavos | |
354 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
355 | d78cbf09 | Panagiotis Kanavos | |
356 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
357 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
358 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
359 | d78cbf09 | Panagiotis Kanavos | |
360 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
361 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
362 | d78cbf09 | Panagiotis Kanavos | |
363 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
364 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Integer, reader.TokenType); |
365 | d78cbf09 | Panagiotis Kanavos | |
366 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
367 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Integer, reader.TokenType); |
368 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
369 | d78cbf09 | Panagiotis Kanavos | |
370 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
371 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Integer, reader.TokenType); |
372 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(@"Value 3 is not defined in enum. Line 1, position 7.", validationEventArgs.Message); |
373 | d78cbf09 | Panagiotis Kanavos | |
374 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
375 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndArray, reader.TokenType); |
376 | d78cbf09 | Panagiotis Kanavos | |
377 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
378 | d78cbf09 | Panagiotis Kanavos | } |
379 | d78cbf09 | Panagiotis Kanavos | |
380 | d78cbf09 | Panagiotis Kanavos | [Test] |
381 | d78cbf09 | Panagiotis Kanavos | public void FloatGreaterThanMaximumValue() |
382 | d78cbf09 | Panagiotis Kanavos | { |
383 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
384 | d78cbf09 | Panagiotis Kanavos | ""type"":""number"", |
385 | d78cbf09 | Panagiotis Kanavos | ""maximum"":5 |
386 | d78cbf09 | Panagiotis Kanavos | }"; |
387 | d78cbf09 | Panagiotis Kanavos | |
388 | d78cbf09 | Panagiotis Kanavos | string json = "10.0"; |
389 | d78cbf09 | Panagiotis Kanavos | |
390 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
391 | d78cbf09 | Panagiotis Kanavos | |
392 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
393 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
394 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
395 | d78cbf09 | Panagiotis Kanavos | |
396 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
397 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Float, reader.TokenType); |
398 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Float 10.0 exceeds maximum value of 5. Line 1, position 4.", validationEventArgs.Message); |
399 | d78cbf09 | Panagiotis Kanavos | |
400 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
401 | d78cbf09 | Panagiotis Kanavos | } |
402 | d78cbf09 | Panagiotis Kanavos | |
403 | d78cbf09 | Panagiotis Kanavos | [Test] |
404 | d78cbf09 | Panagiotis Kanavos | public void FloatLessThanMinimumValue() |
405 | d78cbf09 | Panagiotis Kanavos | { |
406 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
407 | d78cbf09 | Panagiotis Kanavos | ""type"":""number"", |
408 | d78cbf09 | Panagiotis Kanavos | ""minimum"":5 |
409 | d78cbf09 | Panagiotis Kanavos | }"; |
410 | d78cbf09 | Panagiotis Kanavos | |
411 | d78cbf09 | Panagiotis Kanavos | string json = "1.1"; |
412 | d78cbf09 | Panagiotis Kanavos | |
413 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
414 | d78cbf09 | Panagiotis Kanavos | |
415 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
416 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
417 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
418 | d78cbf09 | Panagiotis Kanavos | |
419 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
420 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Float, reader.TokenType); |
421 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Float 1.1 is less than minimum value of 5. Line 1, position 3.", validationEventArgs.Message); |
422 | d78cbf09 | Panagiotis Kanavos | |
423 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
424 | d78cbf09 | Panagiotis Kanavos | } |
425 | d78cbf09 | Panagiotis Kanavos | |
426 | d78cbf09 | Panagiotis Kanavos | [Test] |
427 | d78cbf09 | Panagiotis Kanavos | public void FloatIsNotInEnum() |
428 | d78cbf09 | Panagiotis Kanavos | { |
429 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
430 | d78cbf09 | Panagiotis Kanavos | ""type"":""array"", |
431 | d78cbf09 | Panagiotis Kanavos | ""items"":{ |
432 | d78cbf09 | Panagiotis Kanavos | ""type"":""number"", |
433 | d78cbf09 | Panagiotis Kanavos | ""enum"":[1.1,2.2] |
434 | d78cbf09 | Panagiotis Kanavos | }, |
435 | d78cbf09 | Panagiotis Kanavos | ""maxItems"":3 |
436 | d78cbf09 | Panagiotis Kanavos | }"; |
437 | d78cbf09 | Panagiotis Kanavos | |
438 | d78cbf09 | Panagiotis Kanavos | string json = "[1.1,2.2,3.0]"; |
439 | d78cbf09 | Panagiotis Kanavos | |
440 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
441 | d78cbf09 | Panagiotis Kanavos | |
442 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
443 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
444 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
445 | d78cbf09 | Panagiotis Kanavos | |
446 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
447 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
448 | d78cbf09 | Panagiotis Kanavos | |
449 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
450 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Float, reader.TokenType); |
451 | d78cbf09 | Panagiotis Kanavos | |
452 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
453 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Float, reader.TokenType); |
454 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
455 | d78cbf09 | Panagiotis Kanavos | |
456 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
457 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Float, reader.TokenType); |
458 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(@"Value 3.0 is not defined in enum. Line 1, position 13.", validationEventArgs.Message); |
459 | d78cbf09 | Panagiotis Kanavos | |
460 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
461 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndArray, reader.TokenType); |
462 | d78cbf09 | Panagiotis Kanavos | |
463 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
464 | d78cbf09 | Panagiotis Kanavos | } |
465 | d78cbf09 | Panagiotis Kanavos | |
466 | d78cbf09 | Panagiotis Kanavos | [Test] |
467 | d78cbf09 | Panagiotis Kanavos | public void FloatExceedsMaxDecimalPlaces() |
468 | d78cbf09 | Panagiotis Kanavos | { |
469 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
470 | d78cbf09 | Panagiotis Kanavos | ""type"":""array"", |
471 | d78cbf09 | Panagiotis Kanavos | ""items"":{ |
472 | d78cbf09 | Panagiotis Kanavos | ""type"":""number"", |
473 | d78cbf09 | Panagiotis Kanavos | ""divisibleBy"":0.1 |
474 | d78cbf09 | Panagiotis Kanavos | } |
475 | d78cbf09 | Panagiotis Kanavos | }"; |
476 | d78cbf09 | Panagiotis Kanavos | |
477 | d78cbf09 | Panagiotis Kanavos | string json = "[1.1,2.2,4.001]"; |
478 | d78cbf09 | Panagiotis Kanavos | |
479 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
480 | d78cbf09 | Panagiotis Kanavos | |
481 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
482 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
483 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
484 | d78cbf09 | Panagiotis Kanavos | |
485 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
486 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
487 | d78cbf09 | Panagiotis Kanavos | |
488 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
489 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Float, reader.TokenType); |
490 | d78cbf09 | Panagiotis Kanavos | |
491 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
492 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Float, reader.TokenType); |
493 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
494 | d78cbf09 | Panagiotis Kanavos | |
495 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
496 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Float, reader.TokenType); |
497 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(@"Float 4.001 is not evenly divisible by 0.1. Line 1, position 15.", validationEventArgs.Message); |
498 | d78cbf09 | Panagiotis Kanavos | |
499 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
500 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndArray, reader.TokenType); |
501 | d78cbf09 | Panagiotis Kanavos | |
502 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
503 | d78cbf09 | Panagiotis Kanavos | } |
504 | d78cbf09 | Panagiotis Kanavos | |
505 | d78cbf09 | Panagiotis Kanavos | [Test] |
506 | d78cbf09 | Panagiotis Kanavos | public void NullNotInEnum() |
507 | d78cbf09 | Panagiotis Kanavos | { |
508 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
509 | d78cbf09 | Panagiotis Kanavos | ""type"":""array"", |
510 | d78cbf09 | Panagiotis Kanavos | ""items"":{ |
511 | d78cbf09 | Panagiotis Kanavos | ""type"":""null"", |
512 | d78cbf09 | Panagiotis Kanavos | ""enum"":[] |
513 | d78cbf09 | Panagiotis Kanavos | }, |
514 | d78cbf09 | Panagiotis Kanavos | ""maxItems"":3 |
515 | d78cbf09 | Panagiotis Kanavos | }"; |
516 | d78cbf09 | Panagiotis Kanavos | |
517 | d78cbf09 | Panagiotis Kanavos | string json = "[null]"; |
518 | d78cbf09 | Panagiotis Kanavos | |
519 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
520 | d78cbf09 | Panagiotis Kanavos | |
521 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
522 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
523 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
524 | d78cbf09 | Panagiotis Kanavos | |
525 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
526 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
527 | d78cbf09 | Panagiotis Kanavos | |
528 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
529 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Null, reader.TokenType); |
530 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(@"Value null is not defined in enum. Line 1, position 5.", validationEventArgs.Message); |
531 | d78cbf09 | Panagiotis Kanavos | |
532 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
533 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndArray, reader.TokenType); |
534 | d78cbf09 | Panagiotis Kanavos | |
535 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
536 | d78cbf09 | Panagiotis Kanavos | } |
537 | d78cbf09 | Panagiotis Kanavos | |
538 | d78cbf09 | Panagiotis Kanavos | [Test] |
539 | d78cbf09 | Panagiotis Kanavos | public void BooleanNotInEnum() |
540 | d78cbf09 | Panagiotis Kanavos | { |
541 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
542 | d78cbf09 | Panagiotis Kanavos | ""type"":""array"", |
543 | d78cbf09 | Panagiotis Kanavos | ""items"":{ |
544 | d78cbf09 | Panagiotis Kanavos | ""type"":""boolean"", |
545 | d78cbf09 | Panagiotis Kanavos | ""enum"":[true] |
546 | d78cbf09 | Panagiotis Kanavos | }, |
547 | d78cbf09 | Panagiotis Kanavos | ""maxItems"":3 |
548 | d78cbf09 | Panagiotis Kanavos | }"; |
549 | d78cbf09 | Panagiotis Kanavos | |
550 | d78cbf09 | Panagiotis Kanavos | string json = "[true,false]"; |
551 | d78cbf09 | Panagiotis Kanavos | |
552 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
553 | d78cbf09 | Panagiotis Kanavos | |
554 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
555 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
556 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
557 | d78cbf09 | Panagiotis Kanavos | |
558 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
559 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
560 | d78cbf09 | Panagiotis Kanavos | |
561 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
562 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Boolean, reader.TokenType); |
563 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
564 | d78cbf09 | Panagiotis Kanavos | |
565 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
566 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Boolean, reader.TokenType); |
567 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(@"Value false is not defined in enum. Line 1, position 11.", validationEventArgs.Message); |
568 | d78cbf09 | Panagiotis Kanavos | |
569 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
570 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndArray, reader.TokenType); |
571 | d78cbf09 | Panagiotis Kanavos | |
572 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
573 | d78cbf09 | Panagiotis Kanavos | } |
574 | d78cbf09 | Panagiotis Kanavos | |
575 | d78cbf09 | Panagiotis Kanavos | [Test] |
576 | d78cbf09 | Panagiotis Kanavos | public void ArrayCountGreaterThanMaximumItems() |
577 | d78cbf09 | Panagiotis Kanavos | { |
578 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
579 | d78cbf09 | Panagiotis Kanavos | ""type"":""array"", |
580 | d78cbf09 | Panagiotis Kanavos | ""minItems"":2, |
581 | d78cbf09 | Panagiotis Kanavos | ""maxItems"":3 |
582 | d78cbf09 | Panagiotis Kanavos | }"; |
583 | d78cbf09 | Panagiotis Kanavos | |
584 | d78cbf09 | Panagiotis Kanavos | string json = "[null,null,null,null]"; |
585 | d78cbf09 | Panagiotis Kanavos | |
586 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
587 | d78cbf09 | Panagiotis Kanavos | |
588 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
589 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
590 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
591 | d78cbf09 | Panagiotis Kanavos | |
592 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
593 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
594 | d78cbf09 | Panagiotis Kanavos | |
595 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
596 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Null, reader.TokenType); |
597 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
598 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Null, reader.TokenType); |
599 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
600 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Null, reader.TokenType); |
601 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
602 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Null, reader.TokenType); |
603 | d78cbf09 | Panagiotis Kanavos | |
604 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
605 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndArray, reader.TokenType); |
606 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Array item count 4 exceeds maximum count of 3. Line 1, position 21.", validationEventArgs.Message); |
607 | d78cbf09 | Panagiotis Kanavos | |
608 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
609 | d78cbf09 | Panagiotis Kanavos | } |
610 | d78cbf09 | Panagiotis Kanavos | |
611 | d78cbf09 | Panagiotis Kanavos | [Test] |
612 | d78cbf09 | Panagiotis Kanavos | public void ArrayCountLessThanMinimumItems() |
613 | d78cbf09 | Panagiotis Kanavos | { |
614 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
615 | d78cbf09 | Panagiotis Kanavos | ""type"":""array"", |
616 | d78cbf09 | Panagiotis Kanavos | ""minItems"":2, |
617 | d78cbf09 | Panagiotis Kanavos | ""maxItems"":3 |
618 | d78cbf09 | Panagiotis Kanavos | }"; |
619 | d78cbf09 | Panagiotis Kanavos | |
620 | d78cbf09 | Panagiotis Kanavos | string json = "[null]"; |
621 | d78cbf09 | Panagiotis Kanavos | |
622 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
623 | d78cbf09 | Panagiotis Kanavos | |
624 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
625 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
626 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
627 | d78cbf09 | Panagiotis Kanavos | |
628 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
629 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
630 | d78cbf09 | Panagiotis Kanavos | |
631 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
632 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Null, reader.TokenType); |
633 | d78cbf09 | Panagiotis Kanavos | |
634 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
635 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndArray, reader.TokenType); |
636 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Array item count 1 is less than minimum count of 2. Line 1, position 6.", validationEventArgs.Message); |
637 | d78cbf09 | Panagiotis Kanavos | |
638 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
639 | d78cbf09 | Panagiotis Kanavos | } |
640 | d78cbf09 | Panagiotis Kanavos | |
641 | d78cbf09 | Panagiotis Kanavos | [Test] |
642 | d78cbf09 | Panagiotis Kanavos | public void InvalidDataType() |
643 | d78cbf09 | Panagiotis Kanavos | { |
644 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
645 | d78cbf09 | Panagiotis Kanavos | ""type"":""string"", |
646 | d78cbf09 | Panagiotis Kanavos | ""minItems"":2, |
647 | d78cbf09 | Panagiotis Kanavos | ""maxItems"":3, |
648 | d78cbf09 | Panagiotis Kanavos | ""items"":{} |
649 | d78cbf09 | Panagiotis Kanavos | }"; |
650 | d78cbf09 | Panagiotis Kanavos | |
651 | d78cbf09 | Panagiotis Kanavos | string json = "[null,null,null,null]"; |
652 | d78cbf09 | Panagiotis Kanavos | |
653 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
654 | d78cbf09 | Panagiotis Kanavos | |
655 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
656 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
657 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
658 | d78cbf09 | Panagiotis Kanavos | |
659 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
660 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
661 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(@"Invalid type. Expected String but got Array. Line 1, position 1.", validationEventArgs.Message); |
662 | d78cbf09 | Panagiotis Kanavos | |
663 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
664 | d78cbf09 | Panagiotis Kanavos | } |
665 | d78cbf09 | Panagiotis Kanavos | |
666 | d78cbf09 | Panagiotis Kanavos | [Test] |
667 | d78cbf09 | Panagiotis Kanavos | public void StringDisallowed() |
668 | d78cbf09 | Panagiotis Kanavos | { |
669 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
670 | d78cbf09 | Panagiotis Kanavos | ""type"":""array"", |
671 | d78cbf09 | Panagiotis Kanavos | ""items"":{ |
672 | d78cbf09 | Panagiotis Kanavos | ""disallow"":[""number""] |
673 | d78cbf09 | Panagiotis Kanavos | }, |
674 | d78cbf09 | Panagiotis Kanavos | ""maxItems"":3 |
675 | d78cbf09 | Panagiotis Kanavos | }"; |
676 | d78cbf09 | Panagiotis Kanavos | |
677 | d78cbf09 | Panagiotis Kanavos | string json = "['pie',1.1]"; |
678 | d78cbf09 | Panagiotis Kanavos | |
679 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
680 | d78cbf09 | Panagiotis Kanavos | |
681 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
682 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
683 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
684 | d78cbf09 | Panagiotis Kanavos | |
685 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
686 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
687 | d78cbf09 | Panagiotis Kanavos | |
688 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
689 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
690 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
691 | d78cbf09 | Panagiotis Kanavos | |
692 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
693 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Float, reader.TokenType); |
694 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(@"Type Float is disallowed. Line 1, position 11.", validationEventArgs.Message); |
695 | d78cbf09 | Panagiotis Kanavos | |
696 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
697 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndArray, reader.TokenType); |
698 | d78cbf09 | Panagiotis Kanavos | |
699 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
700 | d78cbf09 | Panagiotis Kanavos | } |
701 | d78cbf09 | Panagiotis Kanavos | |
702 | d78cbf09 | Panagiotis Kanavos | [Test] |
703 | d78cbf09 | Panagiotis Kanavos | public void MissingRequiredProperties() |
704 | d78cbf09 | Panagiotis Kanavos | { |
705 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
706 | d78cbf09 | Panagiotis Kanavos | ""description"":""A person"", |
707 | d78cbf09 | Panagiotis Kanavos | ""type"":""object"", |
708 | d78cbf09 | Panagiotis Kanavos | ""properties"": |
709 | d78cbf09 | Panagiotis Kanavos | { |
710 | d78cbf09 | Panagiotis Kanavos | ""name"":{""type"":""string""}, |
711 | d78cbf09 | Panagiotis Kanavos | ""hobbies"":{""type"":""string"",""required"":true}, |
712 | d78cbf09 | Panagiotis Kanavos | ""age"":{""type"":""integer"",""required"":true} |
713 | d78cbf09 | Panagiotis Kanavos | } |
714 | d78cbf09 | Panagiotis Kanavos | }"; |
715 | d78cbf09 | Panagiotis Kanavos | |
716 | d78cbf09 | Panagiotis Kanavos | string json = "{'name':'James'}"; |
717 | d78cbf09 | Panagiotis Kanavos | |
718 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
719 | d78cbf09 | Panagiotis Kanavos | |
720 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
721 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
722 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
723 | d78cbf09 | Panagiotis Kanavos | |
724 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
725 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartObject, reader.TokenType); |
726 | d78cbf09 | Panagiotis Kanavos | |
727 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
728 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
729 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("name", reader.Value.ToString()); |
730 | d78cbf09 | Panagiotis Kanavos | |
731 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
732 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
733 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("James", reader.Value.ToString()); |
734 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
735 | d78cbf09 | Panagiotis Kanavos | |
736 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
737 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndObject, reader.TokenType); |
738 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Required properties are missing from object: hobbies, age. Line 1, position 16.", validationEventArgs.Message); |
739 | d78cbf09 | Panagiotis Kanavos | |
740 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
741 | d78cbf09 | Panagiotis Kanavos | } |
742 | d78cbf09 | Panagiotis Kanavos | |
743 | d78cbf09 | Panagiotis Kanavos | [Test] |
744 | d78cbf09 | Panagiotis Kanavos | public void MissingNonRequiredProperties() |
745 | d78cbf09 | Panagiotis Kanavos | { |
746 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
747 | d78cbf09 | Panagiotis Kanavos | ""description"":""A person"", |
748 | d78cbf09 | Panagiotis Kanavos | ""type"":""object"", |
749 | d78cbf09 | Panagiotis Kanavos | ""properties"": |
750 | d78cbf09 | Panagiotis Kanavos | { |
751 | d78cbf09 | Panagiotis Kanavos | ""name"":{""type"":""string"",""required"":true}, |
752 | d78cbf09 | Panagiotis Kanavos | ""hobbies"":{""type"":""string"",""required"":false}, |
753 | d78cbf09 | Panagiotis Kanavos | ""age"":{""type"":""integer""} |
754 | d78cbf09 | Panagiotis Kanavos | } |
755 | d78cbf09 | Panagiotis Kanavos | }"; |
756 | d78cbf09 | Panagiotis Kanavos | |
757 | d78cbf09 | Panagiotis Kanavos | string json = "{'name':'James'}"; |
758 | d78cbf09 | Panagiotis Kanavos | |
759 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
760 | d78cbf09 | Panagiotis Kanavos | |
761 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
762 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
763 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
764 | d78cbf09 | Panagiotis Kanavos | |
765 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
766 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartObject, reader.TokenType); |
767 | d78cbf09 | Panagiotis Kanavos | |
768 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
769 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
770 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("name", reader.Value.ToString()); |
771 | d78cbf09 | Panagiotis Kanavos | |
772 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
773 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
774 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("James", reader.Value.ToString()); |
775 | d78cbf09 | Panagiotis Kanavos | Assert.IsNull(validationEventArgs); |
776 | d78cbf09 | Panagiotis Kanavos | |
777 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
778 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndObject, reader.TokenType); |
779 | d78cbf09 | Panagiotis Kanavos | |
780 | d78cbf09 | Panagiotis Kanavos | Assert.IsNull(validationEventArgs); |
781 | d78cbf09 | Panagiotis Kanavos | } |
782 | d78cbf09 | Panagiotis Kanavos | |
783 | d78cbf09 | Panagiotis Kanavos | [Test] |
784 | d78cbf09 | Panagiotis Kanavos | public void DisableAdditionalProperties() |
785 | d78cbf09 | Panagiotis Kanavos | { |
786 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
787 | d78cbf09 | Panagiotis Kanavos | ""description"":""A person"", |
788 | d78cbf09 | Panagiotis Kanavos | ""type"":""object"", |
789 | d78cbf09 | Panagiotis Kanavos | ""properties"": |
790 | d78cbf09 | Panagiotis Kanavos | { |
791 | d78cbf09 | Panagiotis Kanavos | ""name"":{""type"":""string""} |
792 | d78cbf09 | Panagiotis Kanavos | }, |
793 | d78cbf09 | Panagiotis Kanavos | ""additionalProperties"":false |
794 | d78cbf09 | Panagiotis Kanavos | }"; |
795 | d78cbf09 | Panagiotis Kanavos | |
796 | d78cbf09 | Panagiotis Kanavos | string json = "{'name':'James','additionalProperty1':null,'additionalProperty2':null}"; |
797 | d78cbf09 | Panagiotis Kanavos | |
798 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
799 | d78cbf09 | Panagiotis Kanavos | |
800 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
801 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
802 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
803 | d78cbf09 | Panagiotis Kanavos | |
804 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
805 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartObject, reader.TokenType); |
806 | d78cbf09 | Panagiotis Kanavos | |
807 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
808 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
809 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("name", reader.Value.ToString()); |
810 | d78cbf09 | Panagiotis Kanavos | |
811 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
812 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
813 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("James", reader.Value.ToString()); |
814 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
815 | d78cbf09 | Panagiotis Kanavos | |
816 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
817 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
818 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("additionalProperty1", reader.Value.ToString()); |
819 | d78cbf09 | Panagiotis Kanavos | |
820 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
821 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Null, reader.TokenType); |
822 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, reader.Value); |
823 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Property 'additionalProperty1' has not been defined and the schema does not allow additional properties. Line 1, position 38.", validationEventArgs.Message); |
824 | d78cbf09 | Panagiotis Kanavos | |
825 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
826 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
827 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("additionalProperty2", reader.Value.ToString()); |
828 | d78cbf09 | Panagiotis Kanavos | |
829 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
830 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Null, reader.TokenType); |
831 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, reader.Value); |
832 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Property 'additionalProperty2' has not been defined and the schema does not allow additional properties. Line 1, position 65.", validationEventArgs.Message); |
833 | d78cbf09 | Panagiotis Kanavos | |
834 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
835 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndObject, reader.TokenType); |
836 | d78cbf09 | Panagiotis Kanavos | |
837 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
838 | d78cbf09 | Panagiotis Kanavos | } |
839 | d78cbf09 | Panagiotis Kanavos | |
840 | d78cbf09 | Panagiotis Kanavos | [Test] |
841 | d78cbf09 | Panagiotis Kanavos | public void ExtendsStringGreaterThanMaximumLength() |
842 | d78cbf09 | Panagiotis Kanavos | { |
843 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
844 | d78cbf09 | Panagiotis Kanavos | ""extends"":{ |
845 | d78cbf09 | Panagiotis Kanavos | ""type"":""string"", |
846 | d78cbf09 | Panagiotis Kanavos | ""minLength"":5, |
847 | d78cbf09 | Panagiotis Kanavos | ""maxLength"":10 |
848 | d78cbf09 | Panagiotis Kanavos | }, |
849 | d78cbf09 | Panagiotis Kanavos | ""maxLength"":9 |
850 | d78cbf09 | Panagiotis Kanavos | }"; |
851 | d78cbf09 | Panagiotis Kanavos | |
852 | d78cbf09 | Panagiotis Kanavos | List<string> errors = new List<string>(); |
853 | d78cbf09 | Panagiotis Kanavos | string json = "'The quick brown fox jumps over the lazy dog.'"; |
854 | d78cbf09 | Panagiotis Kanavos | |
855 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
856 | d78cbf09 | Panagiotis Kanavos | |
857 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
858 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; errors.Add(validationEventArgs.Message); }; |
859 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
860 | d78cbf09 | Panagiotis Kanavos | |
861 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
862 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
863 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(1, errors.Count); |
864 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("String 'The quick brown fox jumps over the lazy dog.' exceeds maximum length of 9. Line 1, position 46.", errors[0]); |
865 | d78cbf09 | Panagiotis Kanavos | |
866 | d78cbf09 | Panagiotis Kanavos | Assert.IsNotNull(validationEventArgs); |
867 | d78cbf09 | Panagiotis Kanavos | } |
868 | d78cbf09 | Panagiotis Kanavos | |
869 | d78cbf09 | Panagiotis Kanavos | private JsonSchema GetExtendedSchema() |
870 | d78cbf09 | Panagiotis Kanavos | { |
871 | d78cbf09 | Panagiotis Kanavos | string first = @"{ |
872 | d78cbf09 | Panagiotis Kanavos | ""id"":""first"", |
873 | d78cbf09 | Panagiotis Kanavos | ""type"":""object"", |
874 | d78cbf09 | Panagiotis Kanavos | ""properties"": |
875 | d78cbf09 | Panagiotis Kanavos | { |
876 | d78cbf09 | Panagiotis Kanavos | ""firstproperty"":{""type"":""string"",""required"":true} |
877 | d78cbf09 | Panagiotis Kanavos | }, |
878 | d78cbf09 | Panagiotis Kanavos | ""additionalProperties"":{} |
879 | d78cbf09 | Panagiotis Kanavos | }"; |
880 | d78cbf09 | Panagiotis Kanavos | |
881 | d78cbf09 | Panagiotis Kanavos | string second = @"{ |
882 | d78cbf09 | Panagiotis Kanavos | ""id"":""second"", |
883 | d78cbf09 | Panagiotis Kanavos | ""type"":""object"", |
884 | d78cbf09 | Panagiotis Kanavos | ""extends"":{""$ref"":""first""}, |
885 | d78cbf09 | Panagiotis Kanavos | ""properties"": |
886 | d78cbf09 | Panagiotis Kanavos | { |
887 | d78cbf09 | Panagiotis Kanavos | ""secondproperty"":{""type"":""string"",""required"":true} |
888 | d78cbf09 | Panagiotis Kanavos | }, |
889 | d78cbf09 | Panagiotis Kanavos | ""additionalProperties"":false |
890 | d78cbf09 | Panagiotis Kanavos | }"; |
891 | d78cbf09 | Panagiotis Kanavos | |
892 | d78cbf09 | Panagiotis Kanavos | JsonSchemaResolver resolver = new JsonSchemaResolver(); |
893 | d78cbf09 | Panagiotis Kanavos | JsonSchema firstSchema = JsonSchema.Parse(first, resolver); |
894 | d78cbf09 | Panagiotis Kanavos | JsonSchema secondSchema = JsonSchema.Parse(second, resolver); |
895 | d78cbf09 | Panagiotis Kanavos | |
896 | d78cbf09 | Panagiotis Kanavos | return secondSchema; |
897 | d78cbf09 | Panagiotis Kanavos | } |
898 | d78cbf09 | Panagiotis Kanavos | |
899 | d78cbf09 | Panagiotis Kanavos | [Test] |
900 | d78cbf09 | Panagiotis Kanavos | public void ExtendsDisallowAdditionProperties() |
901 | d78cbf09 | Panagiotis Kanavos | { |
902 | d78cbf09 | Panagiotis Kanavos | string json = "{'firstproperty':'blah','secondproperty':'blah2','additional':'blah3','additional2':'blah4'}"; |
903 | d78cbf09 | Panagiotis Kanavos | |
904 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
905 | d78cbf09 | Panagiotis Kanavos | |
906 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
907 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
908 | d78cbf09 | Panagiotis Kanavos | reader.Schema = GetExtendedSchema(); |
909 | d78cbf09 | Panagiotis Kanavos | |
910 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
911 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartObject, reader.TokenType); |
912 | d78cbf09 | Panagiotis Kanavos | |
913 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
914 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
915 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("firstproperty", reader.Value.ToString()); |
916 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
917 | d78cbf09 | Panagiotis Kanavos | |
918 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
919 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
920 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("blah", reader.Value.ToString()); |
921 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
922 | d78cbf09 | Panagiotis Kanavos | |
923 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
924 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
925 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("secondproperty", reader.Value.ToString()); |
926 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
927 | d78cbf09 | Panagiotis Kanavos | |
928 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
929 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
930 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("blah2", reader.Value.ToString()); |
931 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
932 | d78cbf09 | Panagiotis Kanavos | |
933 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
934 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
935 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("additional", reader.Value.ToString()); |
936 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Property 'additional' has not been defined and the schema does not allow additional properties. Line 1, position 62.", validationEventArgs.Message); |
937 | d78cbf09 | Panagiotis Kanavos | |
938 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
939 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
940 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("blah3", reader.Value.ToString()); |
941 | d78cbf09 | Panagiotis Kanavos | |
942 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
943 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
944 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("additional2", reader.Value.ToString()); |
945 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Property 'additional2' has not been defined and the schema does not allow additional properties. Line 1, position 84.", validationEventArgs.Message); |
946 | d78cbf09 | Panagiotis Kanavos | |
947 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
948 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
949 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("blah4", reader.Value.ToString()); |
950 | d78cbf09 | Panagiotis Kanavos | |
951 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
952 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndObject, reader.TokenType); |
953 | d78cbf09 | Panagiotis Kanavos | |
954 | d78cbf09 | Panagiotis Kanavos | Assert.IsFalse(reader.Read()); |
955 | d78cbf09 | Panagiotis Kanavos | } |
956 | d78cbf09 | Panagiotis Kanavos | |
957 | d78cbf09 | Panagiotis Kanavos | [Test] |
958 | d78cbf09 | Panagiotis Kanavos | public void ExtendsMissingRequiredProperties() |
959 | d78cbf09 | Panagiotis Kanavos | { |
960 | d78cbf09 | Panagiotis Kanavos | string json = "{}"; |
961 | d78cbf09 | Panagiotis Kanavos | |
962 | d78cbf09 | Panagiotis Kanavos | List<string> errors = new List<string>(); |
963 | d78cbf09 | Panagiotis Kanavos | |
964 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
965 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { errors.Add(args.Message); }; |
966 | d78cbf09 | Panagiotis Kanavos | reader.Schema = GetExtendedSchema(); |
967 | d78cbf09 | Panagiotis Kanavos | |
968 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
969 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartObject, reader.TokenType); |
970 | d78cbf09 | Panagiotis Kanavos | |
971 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
972 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndObject, reader.TokenType); |
973 | d78cbf09 | Panagiotis Kanavos | |
974 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(1, errors.Count); |
975 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Required properties are missing from object: secondproperty, firstproperty. Line 1, position 2.", errors[0]); |
976 | d78cbf09 | Panagiotis Kanavos | } |
977 | d78cbf09 | Panagiotis Kanavos | |
978 | d78cbf09 | Panagiotis Kanavos | [Test] |
979 | d78cbf09 | Panagiotis Kanavos | public void NoAdditionalProperties() |
980 | d78cbf09 | Panagiotis Kanavos | { |
981 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
982 | d78cbf09 | Panagiotis Kanavos | ""type"":""array"", |
983 | d78cbf09 | Panagiotis Kanavos | ""items"": [{""type"":""string""},{""type"":""integer""}], |
984 | d78cbf09 | Panagiotis Kanavos | ""additionalProperties"": false |
985 | d78cbf09 | Panagiotis Kanavos | }"; |
986 | d78cbf09 | Panagiotis Kanavos | |
987 | d78cbf09 | Panagiotis Kanavos | string json = @"[1, 'a', null]"; |
988 | d78cbf09 | Panagiotis Kanavos | |
989 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
990 | d78cbf09 | Panagiotis Kanavos | |
991 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
992 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
993 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
994 | d78cbf09 | Panagiotis Kanavos | |
995 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
996 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartArray, reader.TokenType); |
997 | d78cbf09 | Panagiotis Kanavos | |
998 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
999 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Integer, reader.TokenType); |
1000 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Invalid type. Expected String but got Integer. Line 1, position 3.", validationEventArgs.Message); |
1001 | d78cbf09 | Panagiotis Kanavos | |
1002 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1003 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
1004 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Invalid type. Expected Integer but got String. Line 1, position 7.", validationEventArgs.Message); |
1005 | d78cbf09 | Panagiotis Kanavos | |
1006 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1007 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Null, reader.TokenType); |
1008 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Index 3 has not been defined and the schema does not allow additional items. Line 1, position 13.", validationEventArgs.Message); |
1009 | d78cbf09 | Panagiotis Kanavos | |
1010 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1011 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndArray, reader.TokenType); |
1012 | d78cbf09 | Panagiotis Kanavos | |
1013 | d78cbf09 | Panagiotis Kanavos | Assert.IsFalse(reader.Read()); |
1014 | d78cbf09 | Panagiotis Kanavos | } |
1015 | d78cbf09 | Panagiotis Kanavos | |
1016 | d78cbf09 | Panagiotis Kanavos | [Test] |
1017 | d78cbf09 | Panagiotis Kanavos | public void PatternPropertiesNoAdditionalProperties() |
1018 | d78cbf09 | Panagiotis Kanavos | { |
1019 | d78cbf09 | Panagiotis Kanavos | string schemaJson = @"{ |
1020 | d78cbf09 | Panagiotis Kanavos | ""type"":""object"", |
1021 | d78cbf09 | Panagiotis Kanavos | ""patternProperties"": { |
1022 | d78cbf09 | Panagiotis Kanavos | ""hi"": {""type"":""string""}, |
1023 | d78cbf09 | Panagiotis Kanavos | ""ho"": {""type"":""string""} |
1024 | d78cbf09 | Panagiotis Kanavos | }, |
1025 | d78cbf09 | Panagiotis Kanavos | ""additionalProperties"": false |
1026 | d78cbf09 | Panagiotis Kanavos | }"; |
1027 | d78cbf09 | Panagiotis Kanavos | |
1028 | d78cbf09 | Panagiotis Kanavos | string json = @"{ |
1029 | d78cbf09 | Panagiotis Kanavos | ""hi"": ""A string!"", |
1030 | d78cbf09 | Panagiotis Kanavos | ""hide"": ""A string!"", |
1031 | d78cbf09 | Panagiotis Kanavos | ""ho"": 1, |
1032 | d78cbf09 | Panagiotis Kanavos | ""hey"": ""A string!"" |
1033 | d78cbf09 | Panagiotis Kanavos | }"; |
1034 | d78cbf09 | Panagiotis Kanavos | |
1035 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
1036 | d78cbf09 | Panagiotis Kanavos | |
1037 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
1038 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; }; |
1039 | d78cbf09 | Panagiotis Kanavos | reader.Schema = JsonSchema.Parse(schemaJson); |
1040 | d78cbf09 | Panagiotis Kanavos | |
1041 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1042 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartObject, reader.TokenType); |
1043 | d78cbf09 | Panagiotis Kanavos | |
1044 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1045 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
1046 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
1047 | d78cbf09 | Panagiotis Kanavos | |
1048 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1049 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
1050 | d78cbf09 | Panagiotis Kanavos | |
1051 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1052 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
1053 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
1054 | d78cbf09 | Panagiotis Kanavos | |
1055 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1056 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
1057 | d78cbf09 | Panagiotis Kanavos | |
1058 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1059 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
1060 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
1061 | d78cbf09 | Panagiotis Kanavos | |
1062 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1063 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.Integer, reader.TokenType); |
1064 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Invalid type. Expected String but got Integer. Line 4, position 10.", validationEventArgs.Message); |
1065 | d78cbf09 | Panagiotis Kanavos | |
1066 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1067 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
1068 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("Property 'hey' has not been defined and the schema does not allow additional properties. Line 5, position 8.", validationEventArgs.Message); |
1069 | d78cbf09 | Panagiotis Kanavos | |
1070 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1071 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
1072 | d78cbf09 | Panagiotis Kanavos | |
1073 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1074 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndObject, reader.TokenType); |
1075 | d78cbf09 | Panagiotis Kanavos | |
1076 | d78cbf09 | Panagiotis Kanavos | Assert.IsFalse(reader.Read()); |
1077 | d78cbf09 | Panagiotis Kanavos | } |
1078 | d78cbf09 | Panagiotis Kanavos | |
1079 | d78cbf09 | Panagiotis Kanavos | [Test] |
1080 | d78cbf09 | Panagiotis Kanavos | public void ExtendedComplex() |
1081 | d78cbf09 | Panagiotis Kanavos | { |
1082 | d78cbf09 | Panagiotis Kanavos | string first = @"{ |
1083 | d78cbf09 | Panagiotis Kanavos | ""id"":""first"", |
1084 | d78cbf09 | Panagiotis Kanavos | ""type"":""object"", |
1085 | d78cbf09 | Panagiotis Kanavos | ""properties"": |
1086 | d78cbf09 | Panagiotis Kanavos | { |
1087 | d78cbf09 | Panagiotis Kanavos | ""firstproperty"":{""type"":""string""}, |
1088 | d78cbf09 | Panagiotis Kanavos | ""secondproperty"":{""type"":""string"",""maxLength"":10}, |
1089 | d78cbf09 | Panagiotis Kanavos | ""thirdproperty"":{ |
1090 | d78cbf09 | Panagiotis Kanavos | ""type"":""object"", |
1091 | d78cbf09 | Panagiotis Kanavos | ""properties"": |
1092 | d78cbf09 | Panagiotis Kanavos | { |
1093 | d78cbf09 | Panagiotis Kanavos | ""thirdproperty_firstproperty"":{""type"":""string"",""maxLength"":10,""minLength"":7} |
1094 | d78cbf09 | Panagiotis Kanavos | } |
1095 | d78cbf09 | Panagiotis Kanavos | } |
1096 | d78cbf09 | Panagiotis Kanavos | }, |
1097 | d78cbf09 | Panagiotis Kanavos | ""additionalProperties"":{} |
1098 | d78cbf09 | Panagiotis Kanavos | }"; |
1099 | d78cbf09 | Panagiotis Kanavos | |
1100 | d78cbf09 | Panagiotis Kanavos | string second = @"{ |
1101 | d78cbf09 | Panagiotis Kanavos | ""id"":""second"", |
1102 | d78cbf09 | Panagiotis Kanavos | ""type"":""object"", |
1103 | d78cbf09 | Panagiotis Kanavos | ""extends"":{""$ref"":""first""}, |
1104 | d78cbf09 | Panagiotis Kanavos | ""properties"": |
1105 | d78cbf09 | Panagiotis Kanavos | { |
1106 | d78cbf09 | Panagiotis Kanavos | ""secondproperty"":{""type"":""any""}, |
1107 | d78cbf09 | Panagiotis Kanavos | ""thirdproperty"":{ |
1108 | d78cbf09 | Panagiotis Kanavos | ""extends"":{ |
1109 | d78cbf09 | Panagiotis Kanavos | ""properties"": |
1110 | d78cbf09 | Panagiotis Kanavos | { |
1111 | d78cbf09 | Panagiotis Kanavos | ""thirdproperty_firstproperty"":{""maxLength"":9,""minLength"":6,""pattern"":""hi2u""} |
1112 | d78cbf09 | Panagiotis Kanavos | }, |
1113 | d78cbf09 | Panagiotis Kanavos | ""additionalProperties"":{""maxLength"":9,""minLength"":6,""enum"":[""one"",""two""]} |
1114 | d78cbf09 | Panagiotis Kanavos | }, |
1115 | d78cbf09 | Panagiotis Kanavos | ""type"":""object"", |
1116 | d78cbf09 | Panagiotis Kanavos | ""properties"": |
1117 | d78cbf09 | Panagiotis Kanavos | { |
1118 | d78cbf09 | Panagiotis Kanavos | ""thirdproperty_firstproperty"":{""pattern"":""hi""} |
1119 | d78cbf09 | Panagiotis Kanavos | }, |
1120 | d78cbf09 | Panagiotis Kanavos | ""additionalProperties"":{""type"":""string"",""enum"":[""two"",""three""]} |
1121 | d78cbf09 | Panagiotis Kanavos | }, |
1122 | d78cbf09 | Panagiotis Kanavos | ""fourthproperty"":{""type"":""string""} |
1123 | d78cbf09 | Panagiotis Kanavos | }, |
1124 | d78cbf09 | Panagiotis Kanavos | ""additionalProperties"":false |
1125 | d78cbf09 | Panagiotis Kanavos | }"; |
1126 | d78cbf09 | Panagiotis Kanavos | |
1127 | d78cbf09 | Panagiotis Kanavos | JsonSchemaResolver resolver = new JsonSchemaResolver(); |
1128 | d78cbf09 | Panagiotis Kanavos | JsonSchema firstSchema = JsonSchema.Parse(first, resolver); |
1129 | d78cbf09 | Panagiotis Kanavos | JsonSchema secondSchema = JsonSchema.Parse(second, resolver); |
1130 | d78cbf09 | Panagiotis Kanavos | |
1131 | d78cbf09 | Panagiotis Kanavos | JsonSchemaModelBuilder modelBuilder = new JsonSchemaModelBuilder(); |
1132 | d78cbf09 | Panagiotis Kanavos | |
1133 | d78cbf09 | Panagiotis Kanavos | string json = @"{ |
1134 | d78cbf09 | Panagiotis Kanavos | 'firstproperty':'blahblahblahblahblahblah', |
1135 | d78cbf09 | Panagiotis Kanavos | 'secondproperty':'secasecasecasecaseca', |
1136 | d78cbf09 | Panagiotis Kanavos | 'thirdproperty':{ |
1137 | d78cbf09 | Panagiotis Kanavos | 'thirdproperty_firstproperty':'aaa', |
1138 | d78cbf09 | Panagiotis Kanavos | 'additional':'three' |
1139 | d78cbf09 | Panagiotis Kanavos | } |
1140 | d78cbf09 | Panagiotis Kanavos | }"; |
1141 | d78cbf09 | Panagiotis Kanavos | |
1142 | d78cbf09 | Panagiotis Kanavos | Json.Schema.ValidationEventArgs validationEventArgs = null; |
1143 | d78cbf09 | Panagiotis Kanavos | List<string> errors = new List<string>(); |
1144 | d78cbf09 | Panagiotis Kanavos | |
1145 | d78cbf09 | Panagiotis Kanavos | JsonValidatingReader reader = new JsonValidatingReader(new JsonTextReader(new StringReader(json))); |
1146 | d78cbf09 | Panagiotis Kanavos | reader.ValidationEventHandler += (sender, args) => { validationEventArgs = args; errors.Add(validationEventArgs.Message); }; |
1147 | d78cbf09 | Panagiotis Kanavos | reader.Schema = secondSchema; |
1148 | d78cbf09 | Panagiotis Kanavos | |
1149 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1150 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartObject, reader.TokenType); |
1151 | d78cbf09 | Panagiotis Kanavos | |
1152 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1153 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
1154 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("firstproperty", reader.Value.ToString()); |
1155 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(null, validationEventArgs); |
1156 | d78cbf09 | Panagiotis Kanavos | |
1157 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1158 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
1159 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("blahblahblahblahblahblah", reader.Value.ToString()); |
1160 | d78cbf09 | Panagiotis Kanavos | |
1161 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1162 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
1163 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("secondproperty", reader.Value.ToString()); |
1164 | d78cbf09 | Panagiotis Kanavos | |
1165 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1166 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
1167 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("secasecasecasecaseca", reader.Value.ToString()); |
1168 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(1, errors.Count); |
1169 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("String 'secasecasecasecaseca' exceeds maximum length of 10. Line 3, position 41.", errors[0]); |
1170 | d78cbf09 | Panagiotis Kanavos | |
1171 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1172 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
1173 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("thirdproperty", reader.Value.ToString()); |
1174 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(1, errors.Count); |
1175 | d78cbf09 | Panagiotis Kanavos | |
1176 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1177 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.StartObject, reader.TokenType); |
1178 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(1, errors.Count); |
1179 | d78cbf09 | Panagiotis Kanavos | |
1180 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1181 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
1182 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("thirdproperty_firstproperty", reader.Value.ToString()); |
1183 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(1, errors.Count); |
1184 | d78cbf09 | Panagiotis Kanavos | |
1185 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1186 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
1187 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("aaa", reader.Value.ToString()); |
1188 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(4, errors.Count); |
1189 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("String 'aaa' is less than minimum length of 7. Line 5, position 39.", errors[1]); |
1190 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("String 'aaa' does not match regex pattern 'hi'. Line 5, position 39.", errors[2]); |
1191 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("String 'aaa' does not match regex pattern 'hi2u'. Line 5, position 39.", errors[3]); |
1192 | d78cbf09 | Panagiotis Kanavos | |
1193 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1194 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.PropertyName, reader.TokenType); |
1195 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("additional", reader.Value.ToString()); |
1196 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(4, errors.Count); |
1197 | d78cbf09 | Panagiotis Kanavos | |
1198 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1199 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.String, reader.TokenType); |
1200 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("three", reader.Value.ToString()); |
1201 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(5, errors.Count); |
1202 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual("String 'three' is less than minimum length of 6. Line 6, position 24.", errors[4]); |
1203 | d78cbf09 | Panagiotis Kanavos | |
1204 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1205 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndObject, reader.TokenType); |
1206 | d78cbf09 | Panagiotis Kanavos | |
1207 | d78cbf09 | Panagiotis Kanavos | Assert.IsTrue(reader.Read()); |
1208 | d78cbf09 | Panagiotis Kanavos | Assert.AreEqual(JsonToken.EndObject, reader.TokenType); |
1209 | d78cbf09 | Panagiotis Kanavos | |
1210 | d78cbf09 | Panagiotis Kanavos | Assert.IsFalse(reader.Read()); |
1211 | d78cbf09 | Panagiotis Kanavos | } |
1212 | d78cbf09 | Panagiotis Kanavos | } |
1213 | d78cbf09 | Panagiotis Kanavos | } |