Json.NET
Code Coverage Statistics for Source File

Newtonsoft.Json.Tests\Serialization\SerializationEventAttributeTests.cs

Symbol Coverage: 100.00% (97 of 97)

Branch Coverage: 100.00% (10 of 10)

Cyclomatic Complexity Avg: 1.00 Max:1

Code Lines: 141


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
#if !PocketPC && !NET20
27
using System;
28
using System.IO;
29
using System.Linq;
30
using System.Reflection;
31
using System.Runtime.Serialization;
32
using System.Text;
33
using Newtonsoft.Json.Tests;
34
using Newtonsoft.Json.Tests.TestObjects;
35
using NUnit.Framework;
36
using Newtonsoft.Json.Linq;
37
using Newtonsoft.Json.Converters;
38

  
39
namespace Newtonsoft.Json.Tests.Serialization
40
{
41
  public class SerializationEventAttributeTests : TestFixtureBase
42
  {
43
    [Test]
44
    public void ObjectEvents()
45
    {
46
 1
      SerializationEventTestObject obj = new SerializationEventTestObject();
47

  
48
 1
      Assert.AreEqual(11, obj.Member1);
49
 1
      Assert.AreEqual("Hello World!", obj.Member2);
50
 1
      Assert.AreEqual("This is a nonserialized value", obj.Member3);
51
 1
      Assert.AreEqual(null, obj.Member4);
52
 1
      Assert.AreEqual(null, obj.Member5);
53

  
54
 1
      string json = JsonConvert.SerializeObject(obj, Formatting.Indented);
55
 1
      Assert.AreEqual(@"{
56
 1
  ""Member1"": 11,
57
 1
  ""Member2"": ""This value went into the data file during serialization."",
58
 1
  ""Member4"": null
59
 1
}", json);
60

  
61
 1
      Assert.AreEqual(11, obj.Member1);
62
 1
      Assert.AreEqual("This value was reset after serialization.", obj.Member2);
63
 1
      Assert.AreEqual("This is a nonserialized value", obj.Member3);
64
 1
      Assert.AreEqual(null, obj.Member4);
65
 1
      Assert.AreEqual("Error message for member Member6 = Error getting value from 'Member6' on 'Newtonsoft.Json.Tests.TestObjects.SerializationEventTestObject'.", obj.Member5);
66

  
67
 1
      JObject o = JObject.Parse(@"{
68
 1
  ""Member1"": 11,
69
 1
  ""Member2"": ""This value went into the data file during serialization."",
70
 1
  ""Member4"": null
71
 1
}");
72
 1
      o["Member6"] = "Dummy text for error";
73

  
74
 1
      obj = JsonConvert.DeserializeObject<SerializationEventTestObject>(o.ToString());
75

  
76
 1
      Assert.AreEqual(11, obj.Member1);
77
 1
      Assert.AreEqual("This value went into the data file during serialization.", obj.Member2);
78
 1
      Assert.AreEqual("This value was set during deserialization", obj.Member3);
79
 1
      Assert.AreEqual("This value was set after deserialization.", obj.Member4);
80
 1
      Assert.AreEqual("Error message for member Member6 = Error setting value to 'Member6' on 'Newtonsoft.Json.Tests.TestObjects.SerializationEventTestObject'.", obj.Member5);
81
 1
    }
82

  
83
    [Test]
84
    public void ObjectWithConstructorEvents()
85
    {
86
 1
      SerializationEventTestObjectWithConstructor obj = new SerializationEventTestObjectWithConstructor(11, "Hello World!", null);
87

  
88
 1
      Assert.AreEqual(11, obj.Member1);
89
 1
      Assert.AreEqual("Hello World!", obj.Member2);
90
 1
      Assert.AreEqual("This is a nonserialized value", obj.Member3);
91
 1
      Assert.AreEqual(null, obj.Member4);
92

  
93
 1
      string json = JsonConvert.SerializeObject(obj, Formatting.Indented);
94
 1
      Assert.AreEqual(@"{
95
 1
  ""Member1"": 11,
96
 1
  ""Member2"": ""This value went into the data file during serialization."",
97
 1
  ""Member4"": null
98
 1
}", json);
99

  
100
 1
      Assert.AreEqual(11, obj.Member1);
101
 1
      Assert.AreEqual("This value was reset after serialization.", obj.Member2);
102
 1
      Assert.AreEqual("This is a nonserialized value", obj.Member3);
103
 1
      Assert.AreEqual(null, obj.Member4);
104

  
105
 1
      obj = JsonConvert.DeserializeObject<SerializationEventTestObjectWithConstructor>(json);
106

  
107
 1
      Assert.AreEqual(11, obj.Member1);
108
 1
      Assert.AreEqual("This value went into the data file during serialization.", obj.Member2);
109
 1
      Assert.AreEqual("This value was set during deserialization", obj.Member3);
110
 1
      Assert.AreEqual("This value was set after deserialization.", obj.Member4);
111
 1
    }
112

  
113
    [Test]
114
    public void ListEvents()
115
    {
116
 1
      SerializationEventTestList obj = new SerializationEventTestList
117
 1
        {
118
 1
          1.1m,
119
 1
          2.222222222m,
120
 1
          int.MaxValue,
121
 1
          Convert.ToDecimal(Math.PI)
122
 1
        };
123

  
124
 1
      Assert.AreEqual(11, obj.Member1);
125
 1
      Assert.AreEqual("Hello World!", obj.Member2);
126
 1
      Assert.AreEqual("This is a nonserialized value", obj.Member3);
127
 1
      Assert.AreEqual(null, obj.Member4);
128

  
129
 1
      string json = JsonConvert.SerializeObject(obj, Formatting.Indented);
130
 1
      Assert.AreEqual(@"[
131
 1
  -1.0,
132
 1
  1.1,
133
 1
  2.222222222,
134
 1
  2147483647.0,
135
 1
  3.14159265358979
136
 1
]", json);
137

  
138
 1
      Assert.AreEqual(11, obj.Member1);
139
 1
      Assert.AreEqual("This value was reset after serialization.", obj.Member2);
140
 1
      Assert.AreEqual("This is a nonserialized value", obj.Member3);
141
 1
      Assert.AreEqual(null, obj.Member4);
142

  
143
 1
      obj = JsonConvert.DeserializeObject<SerializationEventTestList>(json);
144

  
145
 1
      Assert.AreEqual(11, obj.Member1);
146
 1
      Assert.AreEqual("Hello World!", obj.Member2);
147
 1
      Assert.AreEqual("This value was set during deserialization", obj.Member3);
148
 1
      Assert.AreEqual("This value was set after deserialization.", obj.Member4);
149
 1
    }
150

  
151
    [Test]
152
    public void DictionaryEvents()
153
    {
154
 1
      SerializationEventTestDictionary obj = new SerializationEventTestDictionary
155
 1
        {
156
 1
          { 1.1m, "first" },
157
 1
          { 2.222222222m, "second" },
158
 1
          { int.MaxValue, "third" },
159
 1
          { Convert.ToDecimal(Math.PI), "fourth" }
160
 1
        };
161

  
162
 1
      Assert.AreEqual(11, obj.Member1);
163
 1
      Assert.AreEqual("Hello World!", obj.Member2);
164
 1
      Assert.AreEqual("This is a nonserialized value", obj.Member3);
165
 1
      Assert.AreEqual(null, obj.Member4);
166

  
167
 1
      string json = JsonConvert.SerializeObject(obj, Formatting.Indented);
168
 1
      Assert.AreEqual(@"{
169
 1
  ""1.1"": ""first"",
170
 1
  ""2.222222222"": ""second"",
171
 1
  ""2147483647"": ""third"",
172
 1
  ""3.14159265358979"": ""fourth"",
173
 1
  ""79228162514264337593543950335"": ""Inserted on serializing""
174
 1
}", json);
175

  
176
 1
      Assert.AreEqual(11, obj.Member1);
177
 1
      Assert.AreEqual("This value was reset after serialization.", obj.Member2);
178
 1
      Assert.AreEqual("This is a nonserialized value", obj.Member3);
179
 1
      Assert.AreEqual(null, obj.Member4);
180

  
181
 1
      obj = JsonConvert.DeserializeObject<SerializationEventTestDictionary>(json);
182

  
183
 1
      Assert.AreEqual(11, obj.Member1);
184
 1
      Assert.AreEqual("Hello World!", obj.Member2);
185
 1
      Assert.AreEqual("This value was set during deserialization", obj.Member3);
186
 1
      Assert.AreEqual("This value was set after deserialization.", obj.Member4);
187
 1
    }
188

  
189
    [Test]
190
    public void ObjectEventsDocumentationExample()
191
    {
192
 1
      SerializationEventTestObject obj = new SerializationEventTestObject();
193

  
194
 1
      Console.WriteLine(obj.Member1);
195
      // 11
196
 1
      Console.WriteLine(obj.Member2);
197
      // Hello World!
198
 1
      Console.WriteLine(obj.Member3);
199
      // This is a nonserialized value
200
 1
      Console.WriteLine(obj.Member4);
201
      // null
202
 1
      Console.WriteLine(obj.Member5);
203
      // null
204

  
205
 1
      string json = JsonConvert.SerializeObject(obj, Formatting.Indented);
206
      // {
207
      //   "Member1": 11,
208
      //   "Member2": "This value went into the data file during serialization.",
209
      //   "Member4": null
210
      // }
211

  
212
 1
      Console.WriteLine(obj.Member1);
213
      // 11
214
 1
      Console.WriteLine(obj.Member2);
215
      // This value was reset after serialization.
216
 1
      Console.WriteLine(obj.Member3);
217
      // This is a nonserialized value
218
 1
      Console.WriteLine(obj.Member4);
219
      // null
220
 1
      Console.WriteLine(obj.Member5);
221
      // Error message for member Member6 = Exception has been thrown by the target of an invocation.
222

  
223
 1
      obj = JsonConvert.DeserializeObject<SerializationEventTestObject>(json);
224

  
225
 1
      Console.WriteLine(obj.Member1);
226
      // 11
227
 1
      Console.WriteLine(obj.Member2);
228
      // This value went into the data file during serialization.
229
 1
      Console.WriteLine(obj.Member3);
230
      // This value was set during deserialization
231
 1
      Console.WriteLine(obj.Member4);
232
      // This value was set after deserialization.
233
 1
    }
234

  
235
#if !SILVERLIGHT
236
    public class SerializationEventContextTestObject
237
    {
238
      public string TestMember { get; set; }
239

  
240
      [OnSerializing]
241
      internal void OnSerializingMethod(StreamingContext context)
242
      {
243
 1
        TestMember = context.State + " " + context.Context;
244
 1
      }
245
    }
246

  
247
    [Test]
248
    public void SerializationEventContextTest()
249
    {
250
 1
      SerializationEventContextTestObject value = new SerializationEventContextTestObject();
251

  
252
 1
      string json = JsonConvert.SerializeObject(value, Formatting.Indented, new JsonSerializerSettings
253
 1
                                                                              {
254
 1
                                                                                Context =
255
 1
                                                                                  new StreamingContext(
256
 1
                                                                                  StreamingContextStates.Remoting,
257
 1
                                                                                  "ContextValue")
258
 1
                                                                              });
259

  
260
 1
      Assert.AreEqual(@"{
261
 1
  ""TestMember"": ""Remoting ContextValue""
262
 1
}", json);
263
 1
    }
264
#endif
265
  }
266
}
267
#endif