PageRenderTime 69ms CodeModel.GetById 22ms app.highlight 39ms RepoModel.GetById 1ms app.codeStats 1ms

/Newtonsoft.Json.Tests/Linq/JArrayTests.cs

https://github.com/ayoung/Newtonsoft.Json
C# | 440 lines | 360 code | 80 blank | 0 comment | 2 complexity | 434c90e9de7b095976fc74411b056aac MD5 | raw file
  1using System;
  2using System.Collections.Generic;
  3using System.ComponentModel;
  4using System.Linq;
  5using System.Text;
  6using NUnit.Framework;
  7using Newtonsoft.Json.Linq;
  8
  9namespace Newtonsoft.Json.Tests.Linq
 10{
 11  public class JArrayTests : TestFixtureBase
 12  {
 13    [Test]
 14    public void Clear()
 15    {
 16      JArray a = new JArray { 1 };
 17      Assert.AreEqual(1, a.Count);
 18
 19      a.Clear();
 20      Assert.AreEqual(0, a.Count);
 21    }
 22
 23    [Test]
 24    public void Contains()
 25    {
 26      JValue v = new JValue(1);
 27
 28      JArray a = new JArray { v };
 29
 30      Assert.AreEqual(false, a.Contains(new JValue(2)));
 31      Assert.AreEqual(false, a.Contains(new JValue(1)));
 32      Assert.AreEqual(false, a.Contains(null));
 33      Assert.AreEqual(true, a.Contains(v));
 34    }
 35
 36    [Test]
 37    public void GenericCollectionCopyTo()
 38    {
 39      JArray j = new JArray();
 40      j.Add(new JValue(1));
 41      j.Add(new JValue(2));
 42      j.Add(new JValue(3));
 43      Assert.AreEqual(3, j.Count);
 44
 45      JToken[] a = new JToken[5];
 46
 47      ((ICollection<JToken>)j).CopyTo(a, 1);
 48
 49      Assert.AreEqual(null, a[0]);
 50
 51      Assert.AreEqual(1, (int)a[1]);
 52
 53      Assert.AreEqual(2, (int)a[2]);
 54
 55      Assert.AreEqual(3, (int)a[3]);
 56
 57      Assert.AreEqual(null, a[4]);
 58
 59    }
 60
 61    [Test]
 62    [ExpectedException(typeof(ArgumentNullException), ExpectedMessage = @"Value cannot be null.
 63Parameter name: array")]
 64    public void GenericCollectionCopyToNullArrayShouldThrow()
 65    {
 66      JArray j = new JArray();
 67      ((ICollection<JToken>)j).CopyTo(null, 0);
 68    }
 69
 70    [Test]
 71    [ExpectedException(typeof(ArgumentOutOfRangeException), ExpectedMessage = @"arrayIndex is less than 0.
 72Parameter name: arrayIndex")]
 73    public void GenericCollectionCopyToNegativeArrayIndexShouldThrow()
 74    {
 75      JArray j = new JArray();
 76      ((ICollection<JToken>)j).CopyTo(new JToken[1], -1);
 77    }
 78
 79    [Test]
 80    [ExpectedException(typeof(ArgumentException), ExpectedMessage = @"arrayIndex is equal to or greater than the length of array.")]
 81    public void GenericCollectionCopyToArrayIndexEqualGreaterToArrayLengthShouldThrow()
 82    {
 83      JArray j = new JArray();
 84      ((ICollection<JToken>)j).CopyTo(new JToken[1], 1);
 85    }
 86
 87    [Test]
 88    [ExpectedException(typeof(ArgumentException), ExpectedMessage = @"The number of elements in the source JObject is greater than the available space from arrayIndex to the end of the destination array.")]
 89    public void GenericCollectionCopyToInsufficientArrayCapacity()
 90    {
 91      JArray j = new JArray();
 92      j.Add(new JValue(1));
 93      j.Add(new JValue(2));
 94      j.Add(new JValue(3));
 95
 96      ((ICollection<JToken>)j).CopyTo(new JToken[3], 1);
 97    }
 98
 99    [Test]
100    public void Remove()
101    {
102      JValue v = new JValue(1);
103      JArray j = new JArray();
104      j.Add(v);
105
106      Assert.AreEqual(1, j.Count);
107
108      Assert.AreEqual(false, j.Remove(new JValue(1)));
109      Assert.AreEqual(false, j.Remove(null));
110      Assert.AreEqual(true, j.Remove(v));
111      Assert.AreEqual(false, j.Remove(v));
112
113      Assert.AreEqual(0, j.Count);
114    }
115
116    [Test]
117    public void IndexOf()
118    {
119      JValue v1 = new JValue(1);
120      JValue v2 = new JValue(1);
121      JValue v3 = new JValue(1);
122
123      JArray j = new JArray();
124
125      j.Add(v1);
126      Assert.AreEqual(0, j.IndexOf(v1));
127
128      j.Add(v2);
129      Assert.AreEqual(0, j.IndexOf(v1));
130      Assert.AreEqual(1, j.IndexOf(v2));
131
132      j.AddFirst(v3);
133      Assert.AreEqual(1, j.IndexOf(v1));
134      Assert.AreEqual(2, j.IndexOf(v2));
135      Assert.AreEqual(0, j.IndexOf(v3));
136
137      v3.Remove();
138      Assert.AreEqual(0, j.IndexOf(v1));
139      Assert.AreEqual(1, j.IndexOf(v2));
140      Assert.AreEqual(-1, j.IndexOf(v3));
141    }
142
143    [Test]
144    public void RemoveAt()
145    {
146      JValue v1 = new JValue(1);
147      JValue v2 = new JValue(1);
148      JValue v3 = new JValue(1);
149
150      JArray j = new JArray();
151
152      j.Add(v1);
153      j.Add(v2);
154      j.Add(v3);
155
156      Assert.AreEqual(true, j.Contains(v1));
157      j.RemoveAt(0);
158      Assert.AreEqual(false, j.Contains(v1));
159
160      Assert.AreEqual(true, j.Contains(v3));
161      j.RemoveAt(1);
162      Assert.AreEqual(false, j.Contains(v3));
163
164      Assert.AreEqual(1, j.Count);
165    }
166
167    [Test]
168    [ExpectedException(typeof(ArgumentOutOfRangeException), ExpectedMessage = @"Index is equal to or greater than Count.
169Parameter name: index")]
170    public void RemoveAtOutOfRangeIndexShouldError()
171    {
172      JArray j = new JArray();
173      j.RemoveAt(0);
174    }
175
176    [Test]
177    [ExpectedException(typeof(ArgumentOutOfRangeException), ExpectedMessage = @"Index is less than 0.
178Parameter name: index")]
179    public void RemoveAtNegativeIndexShouldError()
180    {
181      JArray j = new JArray();
182      j.RemoveAt(-1);
183    }
184
185    [Test]
186    public void Insert()
187    {
188      JValue v1 = new JValue(1);
189      JValue v2 = new JValue(2);
190      JValue v3 = new JValue(3);
191      JValue v4 = new JValue(4);
192
193      JArray j = new JArray();
194
195      j.Add(v1);
196      j.Add(v2);
197      j.Add(v3);
198      j.Insert(1, v4);
199
200      Assert.AreEqual(0, j.IndexOf(v1));
201      Assert.AreEqual(1, j.IndexOf(v4));
202      Assert.AreEqual(2, j.IndexOf(v2));
203      Assert.AreEqual(3, j.IndexOf(v3));
204    }
205
206    [Test]
207    public void AddFirstAddedTokenShouldBeFirst()
208    {
209      JValue v1 = new JValue(1);
210      JValue v2 = new JValue(2);
211      JValue v3 = new JValue(3);
212
213      JArray j = new JArray();
214      Assert.AreEqual(null, j.First);
215      Assert.AreEqual(null, j.Last);
216
217      j.AddFirst(v1);
218      Assert.AreEqual(v1, j.First);
219      Assert.AreEqual(v1, j.Last);
220
221      j.AddFirst(v2);
222      Assert.AreEqual(v2, j.First);
223      Assert.AreEqual(v1, j.Last);
224
225      j.AddFirst(v3);
226      Assert.AreEqual(v3, j.First);
227      Assert.AreEqual(v1, j.Last);
228    }
229
230    [Test]
231    public void InsertShouldInsertAtZeroIndex()
232    {
233      JValue v1 = new JValue(1);
234      JValue v2 = new JValue(2);
235
236      JArray j = new JArray();
237
238      j.Insert(0, v1);
239      Assert.AreEqual(0, j.IndexOf(v1));
240
241      j.Insert(0, v2);
242      Assert.AreEqual(1, j.IndexOf(v1));
243      Assert.AreEqual(0, j.IndexOf(v2));
244    }
245
246    [Test]
247    public void InsertNull()
248    {
249      JArray j = new JArray();
250      j.Insert(0, null);
251
252      Assert.AreEqual(null, ((JValue)j[0]).Value);
253    }
254
255    [Test]
256    [ExpectedException(typeof(ArgumentOutOfRangeException), ExpectedMessage = @"Index was out of range. Must be non-negative and less than the size of the collection.
257Parameter name: index")]
258    public void InsertNegativeIndexShouldThrow()
259    {
260      JArray j = new JArray();
261      j.Insert(-1, new JValue(1));
262    }
263
264    [Test]
265    [ExpectedException(typeof(ArgumentOutOfRangeException), ExpectedMessage = @"Index must be within the bounds of the List.
266Parameter name: index")]
267    public void InsertOutOfRangeIndexShouldThrow()
268    {
269      JArray j = new JArray();
270      j.Insert(2, new JValue(1));
271    }
272
273    [Test]
274    public void Item()
275    {
276      JValue v1 = new JValue(1);
277      JValue v2 = new JValue(2);
278      JValue v3 = new JValue(3);
279      JValue v4 = new JValue(4);
280
281      JArray j = new JArray();
282
283      j.Add(v1);
284      j.Add(v2);
285      j.Add(v3);
286
287      j[1] = v4;
288
289      Assert.AreEqual(null, v2.Parent);
290      Assert.AreEqual(-1, j.IndexOf(v2));
291      Assert.AreEqual(j, v4.Parent);
292      Assert.AreEqual(1, j.IndexOf(v4));
293    }
294
295    [Test]
296    [ExpectedException(typeof(Exception), ExpectedMessage = "Error reading JArray from JsonReader. Current JsonReader item is not an array: StartObject")]
297    public void Parse_ShouldThrowOnUnexpectedToken()
298    {
299      string json = @"{""prop"":""value""}";
300      JArray.Parse(json);
301    }
302
303    public class ListItemFields
304    {
305      public string ListItemText { get; set; }
306      public object ListItemValue { get; set; }
307    }
308
309    [Test]
310    public void ArrayOrder()
311    {
312      string itemZeroText = "Zero text";
313
314      IEnumerable<ListItemFields> t = new List<ListItemFields>
315      {
316        new ListItemFields { ListItemText = "First", ListItemValue = 1 },
317        new ListItemFields { ListItemText = "Second", ListItemValue = 2 },
318        new ListItemFields { ListItemText = "Third", ListItemValue = 3 }
319      };
320
321      JObject optionValues =
322          new JObject(
323              new JProperty("options",
324                  new JArray(
325                      new JObject(
326                          new JProperty("text", itemZeroText),
327                          new JProperty("value", "0")),
328                          from r in t
329                          orderby r.ListItemValue
330                          select new JObject(
331                              new JProperty("text", r.ListItemText),
332                              new JProperty("value", r.ListItemValue.ToString())))));
333
334      string result = "myOptions = " + optionValues.ToString();
335
336      Assert.AreEqual(@"myOptions = {
337  ""options"": [
338    {
339      ""text"": ""Zero text"",
340      ""value"": ""0""
341    },
342    {
343      ""text"": ""First"",
344      ""value"": ""1""
345    },
346    {
347      ""text"": ""Second"",
348      ""value"": ""2""
349    },
350    {
351      ""text"": ""Third"",
352      ""value"": ""3""
353    }
354  ]
355}", result);
356    }
357
358    [Test]
359    public void Iterate()
360    {
361      JArray a = new JArray(1, 2, 3, 4, 5);
362
363      int i = 1;
364      foreach (JToken token in a)
365      {
366        Assert.AreEqual(i, (int)token);
367        i++;
368      }
369    }
370
371
372#if !(SILVERLIGHT || MONOTOUCH || MONODROID)
373    [Test]
374    public void ITypedListGetItemProperties()
375    {
376      JProperty p1 = new JProperty("Test1", 1);
377      JProperty p2 = new JProperty("Test2", "Two");
378      ITypedList a = new JArray(new JObject(p1, p2));
379
380      PropertyDescriptorCollection propertyDescriptors = a.GetItemProperties(null);
381      Assert.IsNotNull(propertyDescriptors);
382      Assert.AreEqual(2, propertyDescriptors.Count);
383      Assert.AreEqual("Test1", propertyDescriptors[0].Name);
384      Assert.AreEqual("Test2", propertyDescriptors[1].Name);
385    }
386#endif
387
388    [Test]
389    public void AddArrayToSelf()
390    {
391      JArray a = new JArray(1, 2);
392      a.Add(a);
393
394      Assert.AreEqual(3, a.Count);
395      Assert.AreEqual(1, (int)a[0]);
396      Assert.AreEqual(2, (int)a[1]);
397      Assert.AreNotSame(a, a[2]);
398    }
399
400    [Test]
401    [ExpectedException(typeof(ArgumentException), ExpectedMessage = @"Set JArray values with invalid key value: ""badvalue"". Array position index expected.")]
402    public void SetValueWithInvalidIndex()
403    {
404      JArray a = new JArray();
405      a["badvalue"] = new JValue(3);
406    }
407
408    [Test]
409    public void SetValue()
410    {
411      object key = 0;
412
413      JArray a = new JArray((object)null);
414      a[key] = new JValue(3);
415
416      Assert.AreEqual(3, (int)a[key]);
417    }
418
419    [Test]
420    public void ReplaceAll()
421    {
422      JArray a = new JArray(new [] { 1, 2, 3 });
423      Assert.AreEqual(3, a.Count);
424      Assert.AreEqual(1, (int)a[0]);
425      Assert.AreEqual(2, (int)a[1]);
426      Assert.AreEqual(3, (int)a[2]);
427
428      a.ReplaceAll(1);
429      Assert.AreEqual(1, a.Count);
430      Assert.AreEqual(1, (int)a[0]);
431    }
432
433    [Test]
434    [ExpectedException(typeof(Exception), ExpectedMessage = "Unexpected end of content while loading JArray.")]
435    public void ParseIncomplete()
436    {
437      JArray.Parse("[1");
438    }
439  }
440}