Json.NET
Code Coverage Statistics for Source File

Newtonsoft.Json.Tests\Converters\DataTableConverterTests.cs

Symbol Coverage: 100.00% (62 of 62)

Branch Coverage: 100.00% (7 of 7)

Cyclomatic Complexity Avg: 1.00 Max:1

Code Lines: 80


L V Source
1
#if !SILVERLIGHT
2
using System;
3
using System.Collections.Generic;
4
using System.Linq;
5
using System.Text;
6
using Newtonsoft.Json.Converters;
7
using NUnit.Framework;
8
using Newtonsoft.Json.Tests.TestObjects;
9
using System.Data;
10

  
11
namespace Newtonsoft.Json.Tests.Converters
12
{
13
  public class DataTableConverterTests : TestFixtureBase
14
  {
15
    [Test]
16
    public void Deserialize()
17
    {
18
 1
      string json = @"[
19
 1
  {
20
 1
    ""id"": 0,
21
 1
    ""item"": ""item 0""
22
 1
  },
23
 1
  {
24
 1
    ""id"": 1,
25
 1
    ""item"": ""item 1""
26
 1
  }
27
 1
]";
28

  
29
 1
      DataTable deserializedDataTable = JsonConvert.DeserializeObject<DataTable>(json);
30
 1
      Assert.IsNotNull(deserializedDataTable);
31

  
32
 1
      Assert.AreEqual(string.Empty, deserializedDataTable.TableName);
33
 1
      Assert.AreEqual(2, deserializedDataTable.Columns.Count);
34
 1
      Assert.AreEqual("id", deserializedDataTable.Columns[0].ColumnName);
35
 1
      Assert.AreEqual(typeof(long), deserializedDataTable.Columns[0].DataType);
36
 1
      Assert.AreEqual("item", deserializedDataTable.Columns[1].ColumnName);
37
 1
      Assert.AreEqual(typeof(string), deserializedDataTable.Columns[1].DataType);
38

  
39
 1
      Assert.AreEqual(2, deserializedDataTable.Rows.Count);
40

  
41
 1
      DataRow dr1 = deserializedDataTable.Rows[0];
42
 1
      Assert.AreEqual(0, dr1["id"]);
43
 1
      Assert.AreEqual("item 0", dr1["item"]);
44

  
45
 1
      DataRow dr2 = deserializedDataTable.Rows[1];
46
 1
      Assert.AreEqual(1, dr2["id"]);
47
 1
      Assert.AreEqual("item 1", dr2["item"]);
48
 1
    }
49

  
50
    [Test]
51
    public void Serialize()
52
    {
53
      // create a new DataTable.
54
 1
      DataTable myTable = new DataTable("blah");
55

  
56
      // create DataColumn objects of data types.
57
 1
      DataColumn colString = new DataColumn("StringCol");
58
 1
      colString.DataType = typeof(string);
59
 1
      myTable.Columns.Add(colString);
60

  
61
 1
      DataColumn colInt32 = new DataColumn("Int32Col");
62
 1
      colInt32.DataType = typeof(int);
63
 1
      myTable.Columns.Add(colInt32);
64

  
65
 1
      DataColumn colBoolean = new DataColumn("BooleanCol");
66
 1
      colBoolean.DataType = typeof(bool);
67
 1
      myTable.Columns.Add(colBoolean);
68

  
69
 1
      DataColumn colTimeSpan = new DataColumn("TimeSpanCol");
70
 1
      colTimeSpan.DataType = typeof(TimeSpan);
71
 1
      myTable.Columns.Add(colTimeSpan);
72

  
73
 1
      DataColumn colDateTime = new DataColumn("DateTimeCol");
74
 1
      colDateTime.DataType = typeof(DateTime);
75
 1
      colDateTime.DateTimeMode = DataSetDateTime.Utc;
76
 1
      myTable.Columns.Add(colDateTime);
77

  
78
 1
      DataColumn colDecimal = new DataColumn("DecimalCol");
79
 1
      colDecimal.DataType = typeof(decimal);
80
 1
      myTable.Columns.Add(colDecimal);
81

  
82
      // populate one row with values.
83
 1
      DataRow myNewRow = myTable.NewRow();
84

  
85
 1
      myNewRow["StringCol"] = "Item Name";
86
 1
      myNewRow["Int32Col"] = 2147483647;
87
 1
      myNewRow["BooleanCol"] = true;
88
 1
      myNewRow["TimeSpanCol"] = new TimeSpan(10, 22, 10, 15, 100);
89
 1
      myNewRow["DateTimeCol"] = new DateTime(2000, 12, 29, 0, 0, 0, DateTimeKind.Utc);
90
 1
      myNewRow["DecimalCol"] = 64.0021;
91
 1
      myTable.Rows.Add(myNewRow);
92

  
93
 1
      string json = JsonConvert.SerializeObject(myTable, Formatting.Indented);
94
 1
      Assert.AreEqual(@"[
95
 1
  {
96
 1
    ""StringCol"": ""Item Name"",
97
 1
    ""Int32Col"": 2147483647,
98
 1
    ""BooleanCol"": true,
99
 1
    ""TimeSpanCol"": ""10.22:10:15.1000000"",
100
 1
    ""DateTimeCol"": ""\/Date(978048000000)\/"",
101
 1
    ""DecimalCol"": 64.0021
102
 1
  }
103
 1
]", json);
104
 1
    }
105

  
106
    public class TestDataTableConverter : JsonConverter
107
    {
108
      public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
109
      {
110
 1
        DataTable d = (DataTable) value;
111
 1
        writer.WriteValue(d.TableName);
112
 1
      }
113

  
114
      public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
115
      {
116
        //reader.Read();
117
 1
        DataTable d = new DataTable((string)reader.Value);
118

  
119
 1
        return d;
120
 1
      }
121

  
122
      public override bool CanConvert(Type objectType)
123
      {
124
 2
        return (objectType == typeof (DataTable));
125
 2
      }
126
    }
127

  
128
    [Test]
129
    public void PassedInJsonConverterOverridesInternalConverter()
130
    {
131
 1
      DataTable t1 = new DataTable("Custom");
132

  
133
 1
      string json = JsonConvert.SerializeObject(t1, Formatting.Indented, new TestDataTableConverter());
134
 1
      Assert.AreEqual(@"""Custom""", json);
135

  
136
 1
      DataTable t2 = JsonConvert.DeserializeObject<DataTable>(json, new TestDataTableConverter());
137
 1
      Assert.AreEqual(t1.TableName, t2.TableName);
138
 1
    }
139
  }
140
}
141
#endif