root / trunk / Libraries / Json40r2 / Source / Src / Newtonsoft.Json.Tests / Linq / JTokenTests.cs @ d78cbf09
History | View | Annotate | Download (22.3 kB)
1 |
#region License |
---|---|
2 |
// Copyright (c) 2007 James Newton-King |
3 |
// |
4 |
// Permission is hereby granted, free of charge, to any person |
5 |
// obtaining a copy of this software and associated documentation |
6 |
// files (the "Software"), to deal in the Software without |
7 |
// restriction, including without limitation the rights to use, |
8 |
// copy, modify, merge, publish, distribute, sublicense, and/or sell |
9 |
// copies of the Software, and to permit persons to whom the |
10 |
// Software is furnished to do so, subject to the following |
11 |
// conditions: |
12 |
// |
13 |
// The above copyright notice and this permission notice shall be |
14 |
// included in all copies or substantial portions of the Software. |
15 |
// |
16 |
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
17 |
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES |
18 |
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
19 |
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
20 |
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
21 |
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
22 |
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
23 |
// OTHER DEALINGS IN THE SOFTWARE. |
24 |
#endregion |
25 |
|
26 |
using System; |
27 |
using System.Collections.Generic; |
28 |
using System.Linq; |
29 |
using System.Text; |
30 |
using Newtonsoft.Json.Converters; |
31 |
using NUnit.Framework; |
32 |
using Newtonsoft.Json.Linq; |
33 |
using System.IO; |
34 |
|
35 |
namespace Newtonsoft.Json.Tests.Linq |
36 |
{ |
37 |
public class JTokenTests : TestFixtureBase |
38 |
{ |
39 |
[Test] |
40 |
public void ReadFrom() |
41 |
{ |
42 |
JObject o = (JObject)JToken.ReadFrom(new JsonTextReader(new StringReader("{'pie':true}"))); |
43 |
Assert.AreEqual(true, (bool)o["pie"]); |
44 |
|
45 |
JArray a = (JArray)JToken.ReadFrom(new JsonTextReader(new StringReader("[1,2,3]"))); |
46 |
Assert.AreEqual(1, (int)a[0]); |
47 |
Assert.AreEqual(2, (int)a[1]); |
48 |
Assert.AreEqual(3, (int)a[2]); |
49 |
|
50 |
JsonReader reader = new JsonTextReader(new StringReader("{'pie':true}")); |
51 |
reader.Read(); |
52 |
reader.Read(); |
53 |
|
54 |
JProperty p = (JProperty)JToken.ReadFrom(reader); |
55 |
Assert.AreEqual("pie", p.Name); |
56 |
Assert.AreEqual(true, (bool)p.Value); |
57 |
|
58 |
JConstructor c = (JConstructor)JToken.ReadFrom(new JsonTextReader(new StringReader("new Date(1)"))); |
59 |
Assert.AreEqual("Date", c.Name); |
60 |
Assert.IsTrue(JToken.DeepEquals(new JValue(1), c.Values().ElementAt(0))); |
61 |
|
62 |
JValue v; |
63 |
|
64 |
v = (JValue)JToken.ReadFrom(new JsonTextReader(new StringReader(@"""stringvalue"""))); |
65 |
Assert.AreEqual("stringvalue", (string)v); |
66 |
|
67 |
v = (JValue)JToken.ReadFrom(new JsonTextReader(new StringReader(@"1"))); |
68 |
Assert.AreEqual(1, (int)v); |
69 |
|
70 |
v = (JValue)JToken.ReadFrom(new JsonTextReader(new StringReader(@"1.1"))); |
71 |
Assert.AreEqual(1.1, (double)v); |
72 |
} |
73 |
|
74 |
[Test] |
75 |
public void Load() |
76 |
{ |
77 |
JObject o = (JObject)JToken.Load(new JsonTextReader(new StringReader("{'pie':true}"))); |
78 |
Assert.AreEqual(true, (bool)o["pie"]); |
79 |
} |
80 |
|
81 |
[Test] |
82 |
public void Parse() |
83 |
{ |
84 |
JObject o = (JObject)JToken.Parse("{'pie':true}"); |
85 |
Assert.AreEqual(true, (bool)o["pie"]); |
86 |
} |
87 |
|
88 |
[Test] |
89 |
public void Parent() |
90 |
{ |
91 |
JArray v = new JArray(new JConstructor("TestConstructor"), new JValue(new DateTime(2000, 12, 20))); |
92 |
|
93 |
Assert.AreEqual(null, v.Parent); |
94 |
|
95 |
JObject o = |
96 |
new JObject( |
97 |
new JProperty("Test1", v), |
98 |
new JProperty("Test2", "Test2Value"), |
99 |
new JProperty("Test3", "Test3Value"), |
100 |
new JProperty("Test4", null) |
101 |
); |
102 |
|
103 |
Assert.AreEqual(o.Property("Test1"), v.Parent); |
104 |
|
105 |
JProperty p = new JProperty("NewProperty", v); |
106 |
|
107 |
// existing value should still have same parent |
108 |
Assert.AreEqual(o.Property("Test1"), v.Parent); |
109 |
|
110 |
// new value should be cloned |
111 |
Assert.AreNotSame(p.Value, v); |
112 |
|
113 |
Assert.AreEqual((DateTime)((JValue)p.Value[1]).Value, (DateTime)((JValue)v[1]).Value); |
114 |
|
115 |
Assert.AreEqual(v, o["Test1"]); |
116 |
|
117 |
Assert.AreEqual(null, o.Parent); |
118 |
JProperty o1 = new JProperty("O1", o); |
119 |
Assert.AreEqual(o, o1.Value); |
120 |
|
121 |
Assert.AreNotEqual(null, o.Parent); |
122 |
JProperty o2 = new JProperty("O2", o); |
123 |
|
124 |
Assert.AreNotSame(o1.Value, o2.Value); |
125 |
Assert.AreEqual(o1.Value.Children().Count(), o2.Value.Children().Count()); |
126 |
Assert.AreEqual(false, JToken.DeepEquals(o1, o2)); |
127 |
Assert.AreEqual(true, JToken.DeepEquals(o1.Value, o2.Value)); |
128 |
} |
129 |
|
130 |
[Test] |
131 |
public void Next() |
132 |
{ |
133 |
JArray a = |
134 |
new JArray( |
135 |
5, |
136 |
6, |
137 |
new JArray(7, 8), |
138 |
new JArray(9, 10) |
139 |
); |
140 |
|
141 |
JToken next = a[0].Next; |
142 |
Assert.AreEqual(6, (int)next); |
143 |
|
144 |
next = next.Next; |
145 |
Assert.IsTrue(JToken.DeepEquals(new JArray(7, 8), next)); |
146 |
|
147 |
next = next.Next; |
148 |
Assert.IsTrue(JToken.DeepEquals(new JArray(9, 10), next)); |
149 |
|
150 |
next = next.Next; |
151 |
Assert.IsNull(next); |
152 |
} |
153 |
|
154 |
[Test] |
155 |
public void Previous() |
156 |
{ |
157 |
JArray a = |
158 |
new JArray( |
159 |
5, |
160 |
6, |
161 |
new JArray(7, 8), |
162 |
new JArray(9, 10) |
163 |
); |
164 |
|
165 |
JToken previous = a[3].Previous; |
166 |
Assert.IsTrue(JToken.DeepEquals(new JArray(7, 8), previous)); |
167 |
|
168 |
previous = previous.Previous; |
169 |
Assert.AreEqual(6, (int)previous); |
170 |
|
171 |
previous = previous.Previous; |
172 |
Assert.AreEqual(5, (int)previous); |
173 |
|
174 |
previous = previous.Previous; |
175 |
Assert.IsNull(previous); |
176 |
} |
177 |
|
178 |
[Test] |
179 |
public void Children() |
180 |
{ |
181 |
JArray a = |
182 |
new JArray( |
183 |
5, |
184 |
new JArray(1), |
185 |
new JArray(1, 2), |
186 |
new JArray(1, 2, 3) |
187 |
); |
188 |
|
189 |
Assert.AreEqual(4, a.Count()); |
190 |
Assert.AreEqual(3, a.Children<JArray>().Count()); |
191 |
} |
192 |
|
193 |
[Test] |
194 |
public void BeforeAfter() |
195 |
{ |
196 |
JArray a = |
197 |
new JArray( |
198 |
5, |
199 |
new JArray(1, 2, 3), |
200 |
new JArray(1, 2, 3), |
201 |
new JArray(1, 2, 3) |
202 |
); |
203 |
|
204 |
Assert.AreEqual(5, (int)a[1].Previous); |
205 |
Assert.AreEqual(2, a[2].BeforeSelf().Count()); |
206 |
//Assert.AreEqual(2, a[2].AfterSelf().Count()); |
207 |
} |
208 |
|
209 |
[Test] |
210 |
public void Casting() |
211 |
{ |
212 |
Assert.AreEqual(new DateTime(2000, 12, 20), (DateTime)new JValue(new DateTime(2000, 12, 20))); |
213 |
#if !PocketPC && !NET20 |
214 |
Assert.AreEqual(new DateTimeOffset(2000, 12, 20, 23, 50, 10, TimeSpan.Zero), (DateTimeOffset)new JValue(new DateTimeOffset(2000, 12, 20, 23, 50, 10, TimeSpan.Zero))); |
215 |
Assert.AreEqual(null, (DateTimeOffset?)new JValue((DateTimeOffset?)null)); |
216 |
Assert.AreEqual(null, (DateTimeOffset?)(JValue)null); |
217 |
#endif |
218 |
Assert.AreEqual(true, (bool)new JValue(true)); |
219 |
Assert.AreEqual(true, (bool?)new JValue(true)); |
220 |
Assert.AreEqual(null, (bool?)((JValue)null)); |
221 |
Assert.AreEqual(null, (bool?)new JValue((object)null)); |
222 |
Assert.AreEqual(10, (long)new JValue(10)); |
223 |
Assert.AreEqual(null, (long?)new JValue((long?)null)); |
224 |
Assert.AreEqual(null, (long?)(JValue)null); |
225 |
Assert.AreEqual(null, (int?)new JValue((int?)null)); |
226 |
Assert.AreEqual(null, (int?)(JValue)null); |
227 |
Assert.AreEqual(null, (DateTime?)new JValue((DateTime?)null)); |
228 |
Assert.AreEqual(null, (DateTime?)(JValue)null); |
229 |
Assert.AreEqual(null, (short?)new JValue((short?)null)); |
230 |
Assert.AreEqual(null, (short?)(JValue)null); |
231 |
Assert.AreEqual(null, (float?)new JValue((float?)null)); |
232 |
Assert.AreEqual(null, (float?)(JValue)null); |
233 |
Assert.AreEqual(null, (double?)new JValue((double?)null)); |
234 |
Assert.AreEqual(null, (double?)(JValue)null); |
235 |
Assert.AreEqual(null, (decimal?)new JValue((decimal?)null)); |
236 |
Assert.AreEqual(null, (decimal?)(JValue)null); |
237 |
Assert.AreEqual(null, (uint?)new JValue((uint?)null)); |
238 |
Assert.AreEqual(null, (uint?)(JValue)null); |
239 |
Assert.AreEqual(null, (sbyte?)new JValue((sbyte?)null)); |
240 |
Assert.AreEqual(null, (sbyte?)(JValue)null); |
241 |
Assert.AreEqual(null, (ulong?)new JValue((ulong?)null)); |
242 |
Assert.AreEqual(null, (ulong?)(JValue)null); |
243 |
Assert.AreEqual(null, (uint?)new JValue((uint?)null)); |
244 |
Assert.AreEqual(null, (uint?)(JValue)null); |
245 |
Assert.AreEqual(11.1f, (float)new JValue(11.1)); |
246 |
Assert.AreEqual(float.MinValue, (float)new JValue(float.MinValue)); |
247 |
Assert.AreEqual(1.1, (double)new JValue(1.1)); |
248 |
Assert.AreEqual(uint.MaxValue, (uint)new JValue(uint.MaxValue)); |
249 |
Assert.AreEqual(ulong.MaxValue, (ulong)new JValue(ulong.MaxValue)); |
250 |
Assert.AreEqual(ulong.MaxValue, (ulong)new JProperty("Test", new JValue(ulong.MaxValue))); |
251 |
Assert.AreEqual(null, (string)new JValue((string)null)); |
252 |
Assert.AreEqual(5m, (decimal)(new JValue(5L))); |
253 |
Assert.AreEqual(5m, (decimal?)(new JValue(5L))); |
254 |
Assert.AreEqual(5f, (float)(new JValue(5L))); |
255 |
Assert.AreEqual(5f, (float)(new JValue(5m))); |
256 |
Assert.AreEqual(5f, (float?)(new JValue(5m))); |
257 |
|
258 |
byte[] data = new byte[0]; |
259 |
Assert.AreEqual(data, (byte[])(new JValue(data))); |
260 |
|
261 |
Assert.AreEqual(5, (int)(new JValue(StringComparison.OrdinalIgnoreCase))); |
262 |
} |
263 |
|
264 |
[Test] |
265 |
public void ImplicitCastingTo() |
266 |
{ |
267 |
Assert.IsTrue(JToken.DeepEquals(new JValue(new DateTime(2000, 12, 20)), (JValue)new DateTime(2000, 12, 20))); |
268 |
#if !PocketPC && !NET20 |
269 |
Assert.IsTrue(JToken.DeepEquals(new JValue(new DateTimeOffset(2000, 12, 20, 23, 50, 10, TimeSpan.Zero)), (JValue)new DateTimeOffset(2000, 12, 20, 23, 50, 10, TimeSpan.Zero))); |
270 |
Assert.IsTrue(JToken.DeepEquals(new JValue((DateTimeOffset?)null), (JValue)(DateTimeOffset?)null)); |
271 |
#endif |
272 |
|
273 |
Assert.IsTrue(JToken.DeepEquals(new JValue(true), (JValue)true)); |
274 |
Assert.IsTrue(JToken.DeepEquals(new JValue(true), (JValue)(bool?)true)); |
275 |
Assert.IsTrue(JToken.DeepEquals(new JValue((bool?)null), (JValue)(bool?)null)); |
276 |
Assert.IsTrue(JToken.DeepEquals(new JValue(10), (JValue)10)); |
277 |
Assert.IsTrue(JToken.DeepEquals(new JValue((long?)null), (JValue)(long?)null)); |
278 |
Assert.IsTrue(JToken.DeepEquals(new JValue((DateTime?)null), (JValue)(DateTime?)null)); |
279 |
Assert.IsTrue(JToken.DeepEquals(new JValue(long.MaxValue), (JValue)long.MaxValue)); |
280 |
Assert.IsTrue(JToken.DeepEquals(new JValue((int?)null), (JValue)(int?)null)); |
281 |
Assert.IsTrue(JToken.DeepEquals(new JValue((short?)null), (JValue)(short?)null)); |
282 |
Assert.IsTrue(JToken.DeepEquals(new JValue((double?)null), (JValue)(double?)null)); |
283 |
Assert.IsTrue(JToken.DeepEquals(new JValue((uint?)null), (JValue)(uint?)null)); |
284 |
Assert.IsTrue(JToken.DeepEquals(new JValue((decimal?)null), (JValue)(decimal?)null)); |
285 |
Assert.IsTrue(JToken.DeepEquals(new JValue((ulong?)null), (JValue)(ulong?)null)); |
286 |
Assert.IsTrue(JToken.DeepEquals(new JValue((sbyte?)null), (JValue)(sbyte?)null)); |
287 |
Assert.IsTrue(JToken.DeepEquals(new JValue((ushort?)null), (JValue)(ushort?)null)); |
288 |
Assert.IsTrue(JToken.DeepEquals(new JValue(ushort.MaxValue), (JValue)ushort.MaxValue)); |
289 |
Assert.IsTrue(JToken.DeepEquals(new JValue(11.1f), (JValue)11.1f)); |
290 |
Assert.IsTrue(JToken.DeepEquals(new JValue(float.MinValue), (JValue)float.MinValue)); |
291 |
Assert.IsTrue(JToken.DeepEquals(new JValue(double.MinValue), (JValue)double.MinValue)); |
292 |
Assert.IsTrue(JToken.DeepEquals(new JValue(uint.MaxValue), (JValue)uint.MaxValue)); |
293 |
Assert.IsTrue(JToken.DeepEquals(new JValue(ulong.MaxValue), (JValue)ulong.MaxValue)); |
294 |
Assert.IsTrue(JToken.DeepEquals(new JValue(ulong.MinValue), (JValue)ulong.MinValue)); |
295 |
Assert.IsTrue(JToken.DeepEquals(new JValue((string)null), (JValue)(string)null)); |
296 |
Assert.IsTrue(JToken.DeepEquals(new JValue((DateTime?)null), (JValue)(DateTime?)null)); |
297 |
Assert.IsTrue(JToken.DeepEquals(new JValue(decimal.MaxValue), (JValue)decimal.MaxValue)); |
298 |
Assert.IsTrue(JToken.DeepEquals(new JValue(decimal.MaxValue), (JValue)(decimal?)decimal.MaxValue)); |
299 |
Assert.IsTrue(JToken.DeepEquals(new JValue(decimal.MinValue), (JValue)decimal.MinValue)); |
300 |
Assert.IsTrue(JToken.DeepEquals(new JValue(float.MaxValue), (JValue)(float?)float.MaxValue)); |
301 |
Assert.IsTrue(JToken.DeepEquals(new JValue(double.MaxValue), (JValue)(double?)double.MaxValue)); |
302 |
Assert.IsTrue(JToken.DeepEquals(new JValue((object)null), (JValue)(double?)null)); |
303 |
|
304 |
Assert.IsFalse(JToken.DeepEquals(new JValue(true), (JValue)(bool?)null)); |
305 |
Assert.IsFalse(JToken.DeepEquals(new JValue((object)null), (JValue)(object)null)); |
306 |
|
307 |
byte[] emptyData = new byte[0]; |
308 |
Assert.IsTrue(JToken.DeepEquals(new JValue(emptyData), (JValue)emptyData)); |
309 |
Assert.IsFalse(JToken.DeepEquals(new JValue(emptyData), (JValue)new byte[1])); |
310 |
Assert.IsTrue(JToken.DeepEquals(new JValue(Encoding.UTF8.GetBytes("Hi")), (JValue)Encoding.UTF8.GetBytes("Hi"))); |
311 |
} |
312 |
|
313 |
[Test] |
314 |
public void Root() |
315 |
{ |
316 |
JArray a = |
317 |
new JArray( |
318 |
5, |
319 |
6, |
320 |
new JArray(7, 8), |
321 |
new JArray(9, 10) |
322 |
); |
323 |
|
324 |
Assert.AreEqual(a, a.Root); |
325 |
Assert.AreEqual(a, a[0].Root); |
326 |
Assert.AreEqual(a, ((JArray)a[2])[0].Root); |
327 |
} |
328 |
|
329 |
[Test] |
330 |
public void Remove() |
331 |
{ |
332 |
JToken t; |
333 |
JArray a = |
334 |
new JArray( |
335 |
5, |
336 |
6, |
337 |
new JArray(7, 8), |
338 |
new JArray(9, 10) |
339 |
); |
340 |
|
341 |
a[0].Remove(); |
342 |
|
343 |
Assert.AreEqual(6, (int)a[0]); |
344 |
|
345 |
a[1].Remove(); |
346 |
|
347 |
Assert.AreEqual(6, (int)a[0]); |
348 |
Assert.IsTrue(JToken.DeepEquals(new JArray(9, 10), a[1])); |
349 |
Assert.AreEqual(2, a.Count()); |
350 |
|
351 |
t = a[1]; |
352 |
t.Remove(); |
353 |
Assert.AreEqual(6, (int)a[0]); |
354 |
Assert.IsNull(t.Next); |
355 |
Assert.IsNull(t.Previous); |
356 |
Assert.IsNull(t.Parent); |
357 |
|
358 |
t = a[0]; |
359 |
t.Remove(); |
360 |
Assert.AreEqual(0, a.Count()); |
361 |
|
362 |
Assert.IsNull(t.Next); |
363 |
Assert.IsNull(t.Previous); |
364 |
Assert.IsNull(t.Parent); |
365 |
} |
366 |
|
367 |
[Test] |
368 |
public void AfterSelf() |
369 |
{ |
370 |
JArray a = |
371 |
new JArray( |
372 |
5, |
373 |
new JArray(1), |
374 |
new JArray(1, 2), |
375 |
new JArray(1, 2, 3) |
376 |
); |
377 |
|
378 |
JToken t = a[1]; |
379 |
List<JToken> afterTokens = t.AfterSelf().ToList(); |
380 |
|
381 |
Assert.AreEqual(2, afterTokens.Count); |
382 |
Assert.IsTrue(JToken.DeepEquals(new JArray(1, 2), afterTokens[0])); |
383 |
Assert.IsTrue(JToken.DeepEquals(new JArray(1, 2, 3), afterTokens[1])); |
384 |
} |
385 |
|
386 |
[Test] |
387 |
public void BeforeSelf() |
388 |
{ |
389 |
JArray a = |
390 |
new JArray( |
391 |
5, |
392 |
new JArray(1), |
393 |
new JArray(1, 2), |
394 |
new JArray(1, 2, 3) |
395 |
); |
396 |
|
397 |
JToken t = a[2]; |
398 |
List<JToken> beforeTokens = t.BeforeSelf().ToList(); |
399 |
|
400 |
Assert.AreEqual(2, beforeTokens.Count); |
401 |
Assert.IsTrue(JToken.DeepEquals(new JValue(5), beforeTokens[0])); |
402 |
Assert.IsTrue(JToken.DeepEquals(new JArray(1), beforeTokens[1])); |
403 |
} |
404 |
|
405 |
[Test] |
406 |
public void HasValues() |
407 |
{ |
408 |
JArray a = |
409 |
new JArray( |
410 |
5, |
411 |
new JArray(1), |
412 |
new JArray(1, 2), |
413 |
new JArray(1, 2, 3) |
414 |
); |
415 |
|
416 |
Assert.IsTrue(a.HasValues); |
417 |
} |
418 |
|
419 |
[Test] |
420 |
public void Ancestors() |
421 |
{ |
422 |
JArray a = |
423 |
new JArray( |
424 |
5, |
425 |
new JArray(1), |
426 |
new JArray(1, 2), |
427 |
new JArray(1, 2, 3) |
428 |
); |
429 |
|
430 |
JToken t = a[1][0]; |
431 |
List<JToken> ancestors = t.Ancestors().ToList(); |
432 |
Assert.AreEqual(2, ancestors.Count()); |
433 |
Assert.AreEqual(a[1], ancestors[0]); |
434 |
Assert.AreEqual(a, ancestors[1]); |
435 |
} |
436 |
|
437 |
[Test] |
438 |
public void Descendants() |
439 |
{ |
440 |
JArray a = |
441 |
new JArray( |
442 |
5, |
443 |
new JArray(1), |
444 |
new JArray(1, 2), |
445 |
new JArray(1, 2, 3) |
446 |
); |
447 |
|
448 |
List<JToken> descendants = a.Descendants().ToList(); |
449 |
Assert.AreEqual(10, descendants.Count()); |
450 |
Assert.AreEqual(5, (int)descendants[0]); |
451 |
Assert.IsTrue(JToken.DeepEquals(new JArray(1, 2, 3), descendants[descendants.Count - 4])); |
452 |
Assert.AreEqual(1, (int)descendants[descendants.Count - 3]); |
453 |
Assert.AreEqual(2, (int)descendants[descendants.Count - 2]); |
454 |
Assert.AreEqual(3, (int)descendants[descendants.Count - 1]); |
455 |
} |
456 |
|
457 |
[Test] |
458 |
public void CreateWriter() |
459 |
{ |
460 |
JArray a = |
461 |
new JArray( |
462 |
5, |
463 |
new JArray(1), |
464 |
new JArray(1, 2), |
465 |
new JArray(1, 2, 3) |
466 |
); |
467 |
|
468 |
JsonWriter writer = a.CreateWriter(); |
469 |
Assert.IsNotNull(writer); |
470 |
Assert.AreEqual(4, a.Count()); |
471 |
|
472 |
writer.WriteValue("String"); |
473 |
Assert.AreEqual(5, a.Count()); |
474 |
Assert.AreEqual("String", (string)a[4]); |
475 |
|
476 |
writer.WriteStartObject(); |
477 |
writer.WritePropertyName("Property"); |
478 |
writer.WriteValue("PropertyValue"); |
479 |
writer.WriteEnd(); |
480 |
|
481 |
Assert.AreEqual(6, a.Count()); |
482 |
Assert.IsTrue(JToken.DeepEquals(new JObject(new JProperty("Property", "PropertyValue")), a[5])); |
483 |
} |
484 |
|
485 |
[Test] |
486 |
public void AddFirst() |
487 |
{ |
488 |
JArray a = |
489 |
new JArray( |
490 |
5, |
491 |
new JArray(1), |
492 |
new JArray(1, 2), |
493 |
new JArray(1, 2, 3) |
494 |
); |
495 |
|
496 |
a.AddFirst("First"); |
497 |
|
498 |
Assert.AreEqual("First", (string)a[0]); |
499 |
Assert.AreEqual(a, a[0].Parent); |
500 |
Assert.AreEqual(a[1], a[0].Next); |
501 |
Assert.AreEqual(5, a.Count()); |
502 |
|
503 |
a.AddFirst("NewFirst"); |
504 |
Assert.AreEqual("NewFirst", (string)a[0]); |
505 |
Assert.AreEqual(a, a[0].Parent); |
506 |
Assert.AreEqual(a[1], a[0].Next); |
507 |
Assert.AreEqual(6, a.Count()); |
508 |
|
509 |
Assert.AreEqual(a[0], a[0].Next.Previous); |
510 |
} |
511 |
|
512 |
[Test] |
513 |
public void RemoveAll() |
514 |
{ |
515 |
JArray a = |
516 |
new JArray( |
517 |
5, |
518 |
new JArray(1), |
519 |
new JArray(1, 2), |
520 |
new JArray(1, 2, 3) |
521 |
); |
522 |
|
523 |
JToken first = a.First; |
524 |
Assert.AreEqual(5, (int)first); |
525 |
|
526 |
a.RemoveAll(); |
527 |
Assert.AreEqual(0, a.Count()); |
528 |
|
529 |
Assert.IsNull(first.Parent); |
530 |
Assert.IsNull(first.Next); |
531 |
} |
532 |
|
533 |
[Test] |
534 |
[ExpectedException(typeof(ArgumentException), ExpectedMessage = "Can not add Newtonsoft.Json.Linq.JProperty to Newtonsoft.Json.Linq.JArray.")] |
535 |
public void AddPropertyToArray() |
536 |
{ |
537 |
JArray a = new JArray(); |
538 |
a.Add(new JProperty("PropertyName")); |
539 |
} |
540 |
|
541 |
[Test] |
542 |
[ExpectedException(typeof(ArgumentException), ExpectedMessage = "Can not add Newtonsoft.Json.Linq.JValue to Newtonsoft.Json.Linq.JObject.")] |
543 |
public void AddValueToObject() |
544 |
{ |
545 |
JObject o = new JObject(); |
546 |
o.Add(5); |
547 |
} |
548 |
|
549 |
[Test] |
550 |
public void Replace() |
551 |
{ |
552 |
JArray a = |
553 |
new JArray( |
554 |
5, |
555 |
new JArray(1), |
556 |
new JArray(1, 2), |
557 |
new JArray(1, 2, 3) |
558 |
); |
559 |
|
560 |
a[0].Replace(new JValue(int.MaxValue)); |
561 |
Assert.AreEqual(int.MaxValue, (int)a[0]); |
562 |
Assert.AreEqual(4, a.Count()); |
563 |
|
564 |
a[1][0].Replace(new JValue("Test")); |
565 |
Assert.AreEqual("Test", (string)a[1][0]); |
566 |
|
567 |
a[2].Replace(new JValue(int.MaxValue)); |
568 |
Assert.AreEqual(int.MaxValue, (int)a[2]); |
569 |
Assert.AreEqual(4, a.Count()); |
570 |
|
571 |
Assert.IsTrue(JToken.DeepEquals(new JArray(int.MaxValue, new JArray("Test"), int.MaxValue, new JArray(1, 2, 3)), a)); |
572 |
} |
573 |
|
574 |
[Test] |
575 |
public void ToStringWithConverters() |
576 |
{ |
577 |
JArray a = |
578 |
new JArray( |
579 |
new JValue(new DateTime(2009, 2, 15, 0, 0, 0, DateTimeKind.Utc)) |
580 |
); |
581 |
|
582 |
string json = a.ToString(Formatting.Indented, new IsoDateTimeConverter()); |
583 |
|
584 |
Assert.AreEqual(@"[ |
585 |
""2009-02-15T00:00:00Z"" |
586 |
]", json); |
587 |
|
588 |
json = JsonConvert.SerializeObject(a, new IsoDateTimeConverter()); |
589 |
|
590 |
Assert.AreEqual(@"[""2009-02-15T00:00:00Z""]", json); |
591 |
} |
592 |
|
593 |
[Test] |
594 |
public void ToStringWithNoIndenting() |
595 |
{ |
596 |
JArray a = |
597 |
new JArray( |
598 |
new JValue(new DateTime(2009, 2, 15, 0, 0, 0, DateTimeKind.Utc)) |
599 |
); |
600 |
|
601 |
string json = a.ToString(Formatting.None, new IsoDateTimeConverter()); |
602 |
|
603 |
Assert.AreEqual(@"[""2009-02-15T00:00:00Z""]", json); |
604 |
} |
605 |
|
606 |
[Test] |
607 |
public void AddAfterSelf() |
608 |
{ |
609 |
JArray a = |
610 |
new JArray( |
611 |
5, |
612 |
new JArray(1), |
613 |
new JArray(1, 2), |
614 |
new JArray(1, 2, 3) |
615 |
); |
616 |
|
617 |
a[1].AddAfterSelf("pie"); |
618 |
|
619 |
Assert.AreEqual(5, (int)a[0]); |
620 |
Assert.AreEqual(1, a[1].Count()); |
621 |
Assert.AreEqual("pie", (string)a[2]); |
622 |
Assert.AreEqual(5, a.Count()); |
623 |
|
624 |
a[4].AddAfterSelf("lastpie"); |
625 |
|
626 |
Assert.AreEqual("lastpie", (string)a[5]); |
627 |
Assert.AreEqual("lastpie", (string)a.Last); |
628 |
} |
629 |
|
630 |
[Test] |
631 |
public void AddBeforeSelf() |
632 |
{ |
633 |
JArray a = |
634 |
new JArray( |
635 |
5, |
636 |
new JArray(1), |
637 |
new JArray(1, 2), |
638 |
new JArray(1, 2, 3) |
639 |
); |
640 |
|
641 |
a[1].AddBeforeSelf("pie"); |
642 |
|
643 |
Assert.AreEqual(5, (int)a[0]); |
644 |
Assert.AreEqual("pie", (string)a[1]); |
645 |
Assert.AreEqual(a, a[1].Parent); |
646 |
Assert.AreEqual(a[2], a[1].Next); |
647 |
Assert.AreEqual(5, a.Count()); |
648 |
|
649 |
a[0].AddBeforeSelf("firstpie"); |
650 |
|
651 |
Assert.AreEqual("firstpie", (string)a[0]); |
652 |
Assert.AreEqual(5, (int)a[1]); |
653 |
Assert.AreEqual("pie", (string)a[2]); |
654 |
Assert.AreEqual(a, a[0].Parent); |
655 |
Assert.AreEqual(a[1], a[0].Next); |
656 |
Assert.AreEqual(6, a.Count()); |
657 |
|
658 |
a.Last.AddBeforeSelf("secondlastpie"); |
659 |
|
660 |
Assert.AreEqual("secondlastpie", (string)a[5]); |
661 |
Assert.AreEqual(7, a.Count()); |
662 |
} |
663 |
|
664 |
[Test] |
665 |
public void DeepClone() |
666 |
{ |
667 |
JArray a = |
668 |
new JArray( |
669 |
5, |
670 |
new JArray(1), |
671 |
new JArray(1, 2), |
672 |
new JArray(1, 2, 3), |
673 |
new JObject( |
674 |
new JProperty("First", new JValue(Encoding.UTF8.GetBytes("Hi"))), |
675 |
new JProperty("Second", 1), |
676 |
new JProperty("Third", null), |
677 |
new JProperty("Fourth", new JConstructor("Date", 12345)), |
678 |
new JProperty("Fifth", double.PositiveInfinity), |
679 |
new JProperty("Sixth", double.NaN) |
680 |
) |
681 |
); |
682 |
|
683 |
JArray a2 = (JArray)a.DeepClone(); |
684 |
|
685 |
Console.WriteLine(a2.ToString(Formatting.Indented)); |
686 |
|
687 |
Assert.IsTrue(a.DeepEquals(a2)); |
688 |
} |
689 |
|
690 |
#if !SILVERLIGHT |
691 |
[Test] |
692 |
public void Clone() |
693 |
{ |
694 |
JArray a = |
695 |
new JArray( |
696 |
5, |
697 |
new JArray(1), |
698 |
new JArray(1, 2), |
699 |
new JArray(1, 2, 3), |
700 |
new JObject( |
701 |
new JProperty("First", new JValue(Encoding.UTF8.GetBytes("Hi"))), |
702 |
new JProperty("Second", 1), |
703 |
new JProperty("Third", null), |
704 |
new JProperty("Fourth", new JConstructor("Date", 12345)), |
705 |
new JProperty("Fifth", double.PositiveInfinity), |
706 |
new JProperty("Sixth", double.NaN) |
707 |
) |
708 |
); |
709 |
|
710 |
ICloneable c = a; |
711 |
|
712 |
JArray a2 = (JArray) c.Clone(); |
713 |
|
714 |
Assert.IsTrue(a.DeepEquals(a2)); |
715 |
} |
716 |
#endif |
717 |
|
718 |
[Test] |
719 |
public void DoubleDeepEquals() |
720 |
{ |
721 |
JArray a = |
722 |
new JArray( |
723 |
double.NaN, |
724 |
double.PositiveInfinity, |
725 |
double.NegativeInfinity |
726 |
); |
727 |
|
728 |
JArray a2 = (JArray)a.DeepClone(); |
729 |
|
730 |
Assert.IsTrue(a.DeepEquals(a2)); |
731 |
|
732 |
double d = 1 + 0.1 + 0.1 + 0.1; |
733 |
|
734 |
JValue v1 = new JValue(d); |
735 |
JValue v2 = new JValue(1.3); |
736 |
|
737 |
Assert.IsTrue(v1.DeepEquals(v2)); |
738 |
} |
739 |
} |
740 |
} |