Statistics
| Branch: | Revision:

root / trunk / Libraries / Json40r2 / Source / Src / Newtonsoft.Json.Tests / Linq / JTokenTests.cs @ d78cbf09

History | View | Annotate | Download (22.3 kB)

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