Json.NET
Code Coverage Statistics for Source File

Newtonsoft.Json.Tests\Serialization\PopulateTests.cs

Symbol Coverage: 96.67% (29 of 30)

Branch Coverage: 83.33% (5 of 6)

Cyclomatic Complexity Avg: 1.00 Max:1

Code Lines: 72


L V Source
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.IO;
29
using System.Linq;
30
using System.Text;
31
using Newtonsoft.Json.Tests.TestObjects;
32
using NUnit.Framework;
33
using Newtonsoft.Json.Linq;
34

  
35
namespace Newtonsoft.Json.Tests.Serialization
36
{
37
  public class PopulateTests : TestFixtureBase
38
  {
39
    [Test]
40
    public void PopulatePerson()
41
    {
42
 1
      Person p = new Person();
43

  
44
 1
      JsonConvert.PopulateObject(@"{""Name"":""James""}", p);
45

  
46
 1
      Assert.AreEqual("James", p.Name);
47
 1
    }
48

  
49
    [Test]
50
    public void PopulateStore()
51
    {
52
 1
      Store s = new Store();
53
 1
      s.Color = StoreColor.Red;
54
 1
      s.product = new List<Product>
55
 1
        {
56
 1
          new Product
57
 1
            {
58
 1
              ExpiryDate = new DateTime(2000, 12, 3, 0, 0, 0, DateTimeKind.Utc),
59
 1
              Name = "ProductName!",
60
 1
              Price = 9.9m
61
 1
            }
62
 1
        };
63
 1
      s.Width = 99.99d;
64
 1
      s.Mottos = new List<string> { "Can do!", "We deliver!" };
65

  
66
 1
      string json = @"{
67
 1
  ""Color"": 2,
68
 1
  ""Establised"": ""\/Date(1264122061000+0000)\/"",
69
 1
  ""Width"": 99.99,
70
 1
  ""Employees"": 999,
71
 1
  ""RoomsPerFloor"": [
72
 1
    1,
73
 1
    2,
74
 1
    3,
75
 1
    4,
76
 1
    5,
77
 1
    6,
78
 1
    7,
79
 1
    8,
80
 1
    9
81
 1
  ],
82
 1
  ""Open"": false,
83
 1
  ""Symbol"": ""@"",
84
 1
  ""Mottos"": [
85
 1
    ""Fail whale""
86
 1
  ],
87
 1
  ""Cost"": 100980.1,
88
 1
  ""Escape"": ""\r\n\t\f\b?{\\r\\n\""'"",
89
 1
  ""product"": [
90
 1
    {
91
 1
      ""Name"": ""ProductName!"",
92
 1
      ""ExpiryDate"": ""\/Date(975801600000)\/"",
93
 1
      ""Price"": 9.9,
94
 1
      ""Sizes"": null
95
 1
    }
96
 1
  ]
97
 1
}";
98

  
99
 1
      JsonConvert.PopulateObject(json, s, new JsonSerializerSettings
100
 1
        {
101
 1
          ObjectCreationHandling = ObjectCreationHandling.Replace
102
 1
        });
103

  
104
 1
      Assert.AreEqual(1, s.Mottos.Count);
105
 1
      Assert.AreEqual("Fail whale", s.Mottos[0]);
106
 1
      Assert.AreEqual(1, s.product.Count);
107

  
108
      //Assert.AreEqual("James", p.Name);
109
 1
    }
110

  
111
    [Test]
112
    public void PopulateListOfPeople()
113
    {
114
 1
      List<Person> p = new List<Person>();
115

  
116
 1
      JsonSerializer serializer = new JsonSerializer();
117
 1
      serializer.Populate(new StringReader(@"[{""Name"":""James""},{""Name"":""Jim""}]"), p);
118

  
119
 1
      Assert.AreEqual(2, p.Count);
120
 1
      Assert.AreEqual("James", p[0].Name);
121
 1
      Assert.AreEqual("Jim", p[1].Name);
122
 1
    }
123

  
124
    [Test]
125
    public void PopulateDictionary()
126
    {
127
 1
      Dictionary<string, string> p = new Dictionary<string, string>();
128

  
129
 1
      JsonSerializer serializer = new JsonSerializer();
130
 1
      serializer.Populate(new StringReader(@"{""Name"":""James""}"), p);
131

  
132
 1
      Assert.AreEqual(1, p.Count);
133
 1
      Assert.AreEqual("James", p["Name"]);
134
 1
    }
135

  
136
    [Test]
137
    [ExpectedException(typeof(JsonSerializationException), ExpectedMessage = "Unexpected initial token 'Integer' when populating object. Expected JSON object or array.")]
138
    public void PopulateWithBadJson()
139
    {
140
 1
      JsonConvert.PopulateObject("1", new Person());
141
 0
    }
142
  }
143
}