Json.NET
Code Coverage Statistics for Source File

Newtonsoft.Json.Tests\Converters\RegexConverterTests.cs

Symbol Coverage: 100.00% (63 of 63)

Branch Coverage: 100.00% (8 of 8)

Cyclomatic Complexity Avg: 1.00 Max:1

Code Lines: 76


L V Source
1
using System;
2
using System.Collections.Generic;
3
#if !SILVERLIGHT && !PocketPC && !NET20
4
using System.Data.Linq;
5
#endif
6
#if !SILVERLIGHT
7
using System.Data.SqlTypes;
8
#endif
9
using System.IO;
10
using System.Linq;
11
using System.Text;
12
using System.Text.RegularExpressions;
13
using Newtonsoft.Json.Bson;
14
using Newtonsoft.Json.Converters;
15
using Newtonsoft.Json.Utilities;
16
using NUnit.Framework;
17
using Newtonsoft.Json.Tests.TestObjects;
18

  
19
namespace Newtonsoft.Json.Tests.Converters
20
{
21
  public class RegexConverterTests : TestFixtureBase
22
  {
23
    public class RegexTestClass
24
    {
25
      public Regex Regex { get; set; }
26
    }
27

  
28
    [Test]
29
    public void SerializeToText()
30
    {
31
 1
      Regex regex = new Regex("abc", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
32

  
33
 1
      string json = JsonConvert.SerializeObject(regex, Formatting.Indented, new RegexConverter());
34

  
35
 1
      Assert.AreEqual(@"{
36
 1
  ""Pattern"": ""abc"",
37
 1
  ""Options"": 513
38
 1
}", json);
39
 1
    }
40

  
41
    [Test]
42
    public void SerializeToBson()
43
    {
44
 1
      Regex regex = new Regex("abc", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
45

  
46
 1
      MemoryStream ms = new MemoryStream();
47
 1
      BsonWriter writer = new BsonWriter(ms);
48
 1
      JsonSerializer serializer = new JsonSerializer();
49
 1
      serializer.Converters.Add(new RegexConverter());
50

  
51
 1
      serializer.Serialize(writer, new RegexTestClass { Regex = regex });
52

  
53
 1
      string expected = "13-00-00-00-0B-52-65-67-65-78-00-61-62-63-00-69-75-00-00";
54
 1
      string bson = MiscellaneousUtils.BytesToHex(ms.ToArray());
55

  
56
 1
      Assert.AreEqual(expected, bson);
57
 1
    }
58

  
59
    [Test]
60
    public void DeserializeFromText()
61
    {
62
 1
      string json = @"{
63
 1
  ""Pattern"": ""abc"",
64
 1
  ""Options"": 513
65
 1
}";
66

  
67
 1
      Regex newRegex = JsonConvert.DeserializeObject<Regex>(json, new RegexConverter());
68
 1
      Assert.AreEqual("abc", newRegex.ToString());
69
 1
      Assert.AreEqual(RegexOptions.IgnoreCase | RegexOptions.CultureInvariant, newRegex.Options);
70
 1
    }
71

  
72
    [Test]
73
    public void DeserializeFromBson()
74
    {
75
 1
      MemoryStream ms = new MemoryStream(MiscellaneousUtils.HexToBytes("13-00-00-00-0B-52-65-67-65-78-00-61-62-63-00-69-75-00-00"));
76
 1
      BsonReader reader = new BsonReader(ms);
77
 1
      JsonSerializer serializer = new JsonSerializer();
78
 1
      serializer.Converters.Add(new RegexConverter());
79

  
80
 1
      RegexTestClass c = serializer.Deserialize<RegexTestClass>(reader);
81

  
82
 1
      Assert.AreEqual("abc", c.Regex.ToString());
83
 1
      Assert.AreEqual(RegexOptions.IgnoreCase, c.Regex.Options);
84
 1
    }
85

  
86
    [Test]
87
    public void ConvertEmptyRegexBson()
88
    {
89
 1
      Regex regex = new Regex(string.Empty);
90

  
91
 1
      MemoryStream ms = new MemoryStream();
92
 1
      BsonWriter writer = new BsonWriter(ms);
93
 1
      JsonSerializer serializer = new JsonSerializer();
94
 1
      serializer.Converters.Add(new RegexConverter());
95

  
96
 1
      serializer.Serialize(writer, new RegexTestClass { Regex = regex });
97

  
98
 1
      ms.Seek(0, SeekOrigin.Begin);
99
 1
      BsonReader reader = new BsonReader(ms);
100
 1
      serializer.Converters.Add(new RegexConverter());
101

  
102
 1
      RegexTestClass c = serializer.Deserialize<RegexTestClass>(reader);
103

  
104
 1
      Assert.AreEqual("", c.Regex.ToString());
105
 1
      Assert.AreEqual(RegexOptions.None, c.Regex.Options);
106
 1
    }
107

  
108
    [Test]
109
    public void ConvertRegexWithAllOptionsBson()
110
    {
111
 1
      Regex regex = new Regex(
112
 1
        "/",
113
 1
        RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.ExplicitCapture);
114

  
115
 1
      MemoryStream ms = new MemoryStream();
116
 1
      BsonWriter writer = new BsonWriter(ms);
117
 1
      JsonSerializer serializer = new JsonSerializer();
118
 1
      serializer.Converters.Add(new RegexConverter());
119

  
120
 1
      serializer.Serialize(writer, new RegexTestClass { Regex = regex });
121

  
122
 1
      string expected = "14-00-00-00-0B-52-65-67-65-78-00-2F-00-69-6D-73-75-78-00-00";
123
 1
      string bson = MiscellaneousUtils.BytesToHex(ms.ToArray());
124

  
125
 1
      Assert.AreEqual(expected, bson);
126

  
127
 1
      ms.Seek(0, SeekOrigin.Begin);
128
 1
      BsonReader reader = new BsonReader(ms);
129
 1
      serializer.Converters.Add(new RegexConverter());
130

  
131
 1
      RegexTestClass c = serializer.Deserialize<RegexTestClass>(reader);
132

  
133
 1
      Assert.AreEqual("/", c.Regex.ToString());
134
 1
      Assert.AreEqual(RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.ExplicitCapture, c.Regex.Options);
135
 1
    }
136

  
137
    [Test]
138
    public void ConvertEmptyRegexJson()
139
    {
140
 1
      Regex regex = new Regex("");
141

  
142
 1
      string json = JsonConvert.SerializeObject(new RegexTestClass { Regex = regex }, Formatting.Indented, new RegexConverter());
143

  
144
 1
      Assert.AreEqual(@"{
145
 1
  ""Regex"": {
146
 1
    ""Pattern"": """",
147
 1
    ""Options"": 0
148
 1
  }
149
 1
}", json);
150

  
151
 1
      RegexTestClass newRegex = JsonConvert.DeserializeObject<RegexTestClass>(json, new RegexConverter());
152
 1
      Assert.AreEqual("", newRegex.Regex.ToString());
153
 1
      Assert.AreEqual(RegexOptions.None, newRegex.Regex.Options);
154
 1
    }
155
  }
156
}