From f0ea851da4115ed9b885775f3361132c9e2a1af6 Mon Sep 17 00:00:00 2001 From: Michael Friis Date: Thu, 19 Jul 2012 15:49:26 -0700 Subject: [PATCH 1/8] add sample data --- RestSharp.Tests/RestSharp.Tests.csproj | 3 +++ RestSharp.Tests/SampleData/iso8601datetimes.txt | 5 +++++ 2 files changed, 8 insertions(+) create mode 100644 RestSharp.Tests/SampleData/iso8601datetimes.txt diff --git a/RestSharp.Tests/RestSharp.Tests.csproj b/RestSharp.Tests/RestSharp.Tests.csproj index f5c937fde..f2e260c3d 100644 --- a/RestSharp.Tests/RestSharp.Tests.csproj +++ b/RestSharp.Tests/RestSharp.Tests.csproj @@ -112,6 +112,9 @@ Always + + Always + Always diff --git a/RestSharp.Tests/SampleData/iso8601datetimes.txt b/RestSharp.Tests/SampleData/iso8601datetimes.txt new file mode 100644 index 000000000..99c88b1c8 --- /dev/null +++ b/RestSharp.Tests/SampleData/iso8601datetimes.txt @@ -0,0 +1,5 @@ +{ + "DateTimeLocal": "2012-07-19T10:23:25", + "DateTimeUtc": "2012-07-19T10:23:25.544Z", + "DateTimeWithOffset": "2012-07-19T03:23:25.544-07:00", +} \ No newline at end of file From 12f562f80a41717f73c9ac362776d82470829f16 Mon Sep 17 00:00:00 2001 From: Michael Friis Date: Thu, 19 Jul 2012 15:49:35 -0700 Subject: [PATCH 2/8] add tests --- RestSharp.Tests/JsonTests.cs | 39 ++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/RestSharp.Tests/JsonTests.cs b/RestSharp.Tests/JsonTests.cs index 9eb5e310b..58dfd9c47 100644 --- a/RestSharp.Tests/JsonTests.cs +++ b/RestSharp.Tests/JsonTests.cs @@ -526,6 +526,45 @@ public void Can_Deserialize_DateTimeOffset() payload.DateTimeOffset.ToString("u")); } + [Fact] + public void Can_Deserialize_Iso8601DateTimeLocal() + { + var doc = File.ReadAllText(Path.Combine("SampleData", "iso8601datetimes.txt")); + var d = new JsonDeserializer(); + var response = new RestResponse { Content = doc }; + var payload = d.Deserialize(response); + + Assert.Equal( + new DateTime(2012, 7, 19, 10, 23, 25, DateTimeKind.Utc).ToString("u"), + payload.DateTimeLocal.ToString("u")); + } + + [Fact] + public void Can_Deserialize_Iso8601DateTimeZulu() + { + var doc = File.ReadAllText(Path.Combine("SampleData", "iso8601datetimes.txt")); + var d = new JsonDeserializer(); + var response = new RestResponse { Content = doc }; + var payload = d.Deserialize(response); + + Assert.Equal( + new DateTime(2012, 7, 19, 10, 23, 25, DateTimeKind.Utc).ToString("u"), + payload.DateTimeUtc.ToUniversalTime().ToString("u")); + } + + [Fact] + public void Can_Deserialize_Iso8601DateTimeWithOffset() + { + var doc = File.ReadAllText(Path.Combine("SampleData", "iso8601datetimes.txt")); + var d = new JsonDeserializer(); + var response = new RestResponse { Content = doc }; + var payload = d.Deserialize(response); + + Assert.Equal( + new DateTime(2012, 7, 19, 10, 23, 25, DateTimeKind.Utc).ToString("u"), + payload.DateTimeWithOffset.ToUniversalTime().ToString("u")); + } + [Fact] public void Can_Deserialize_Nullable_DateTimeOffset_With_Value() { From 3e51eb21faf6f89be0921b7fc81ae3b07da53f01 Mon Sep 17 00:00:00 2001 From: Michael Friis Date: Thu, 19 Jul 2012 15:51:19 -0700 Subject: [PATCH 3/8] add structure --- RestSharp.Tests/SampleClasses/misc.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/RestSharp.Tests/SampleClasses/misc.cs b/RestSharp.Tests/SampleClasses/misc.cs index f8ad380d1..2ebef5925 100644 --- a/RestSharp.Tests/SampleClasses/misc.cs +++ b/RestSharp.Tests/SampleClasses/misc.cs @@ -165,6 +165,13 @@ public class DateTimeTestStructure public DateTimeOffset? NullableDateTimeOffsetWithValue { get; set; } } + public class Iso8601DateTimeTestStructure + { + public DateTime DateTimeLocal { get; set; } + public DateTime DateTimeUtc { get; set; } + public DateTime DateTimeWithOffset { get; set; } + } + public class TimeSpanTestStructure { public TimeSpan Tick { get; set; } From 586ff49a01ecfb996a2282a7565c97734d297556 Mon Sep 17 00:00:00 2001 From: Michael Friis Date: Thu, 19 Jul 2012 15:51:37 -0700 Subject: [PATCH 4/8] try harder --- RestSharp/Extensions/StringExtensions.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/RestSharp/Extensions/StringExtensions.cs b/RestSharp/Extensions/StringExtensions.cs index 64a56246d..ded87049e 100644 --- a/RestSharp/Extensions/StringExtensions.cs +++ b/RestSharp/Extensions/StringExtensions.cs @@ -157,6 +157,11 @@ private static DateTime ParseFormattedDate(string input, CultureInfo culture) return date; } + if (DateTime.TryParse(input, culture, DateTimeStyles.None, out date)) + { + return date; + } + return default(DateTime); } From 9ca39e258cde824f0fcc6fadeaf84179338cca8b Mon Sep 17 00:00:00 2001 From: Michael Friis Date: Thu, 19 Jul 2012 16:19:41 -0700 Subject: [PATCH 5/8] add helper --- RestSharp.Tests/JsonTests.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/RestSharp.Tests/JsonTests.cs b/RestSharp.Tests/JsonTests.cs index 58dfd9c47..9ee4de174 100644 --- a/RestSharp.Tests/JsonTests.cs +++ b/RestSharp.Tests/JsonTests.cs @@ -798,5 +798,13 @@ public string CreateDynamicJsonStringDictionary () doc["ThingBlue"] = new JObject (new JProperty("Name", "ThingBlue"), new JProperty ("Color", "Blue")); return doc.ToString (); } + + private T GetPayLoad(string fileName) + { + var doc = File.ReadAllText(Path.Combine("SampleData", fileName)); + var response = new RestResponse { Content = doc }; + var d = new JsonDeserializer(); + return d.Deserialize(response); + } } } From 6d7873314c43ed4ccdf5b5dc7d6ad4570fece7e0 Mon Sep 17 00:00:00 2001 From: Michael Friis Date: Thu, 19 Jul 2012 16:19:45 -0700 Subject: [PATCH 6/8] refactor --- RestSharp.Tests/JsonTests.cs | 55 ++++++++---------------------------- 1 file changed, 11 insertions(+), 44 deletions(-) diff --git a/RestSharp.Tests/JsonTests.cs b/RestSharp.Tests/JsonTests.cs index 9ee4de174..5ae185200 100644 --- a/RestSharp.Tests/JsonTests.cs +++ b/RestSharp.Tests/JsonTests.cs @@ -425,10 +425,7 @@ public void Ignore_ReadOnly_Property_That_Exists_In_Data() [Fact] public void Can_Deserialize_TimeSpan() { - var doc = File.ReadAllText(Path.Combine("SampleData", "timespans.txt")); - var d = new JsonDeserializer(); - var response = new RestResponse { Content = doc }; - var payload = d.Deserialize(response); + var payload = GetPayLoad("timespans.txt"); Assert.Equal(new TimeSpan(468006), payload.Tick); Assert.Equal(new TimeSpan(0, 0, 0, 0, 125), payload.Millisecond); @@ -465,10 +462,7 @@ public void Can_Deserialize_Unix_Json_Dates() [Fact] public void Can_Deserialize_JsonNet_Dates() { - var doc = File.ReadAllText(Path.Combine("SampleData", "person.json.txt")); - var d = new JsonDeserializer(); - var response = new RestResponse { Content = doc }; - var person = d.Deserialize(response); + var person = GetPayLoad("person.json.txt"); Assert.Equal( new DateTime(2011, 6, 30, 8, 15, 46, DateTimeKind.Utc).ToString("u"), @@ -478,10 +472,7 @@ public void Can_Deserialize_JsonNet_Dates() [Fact] public void Can_Deserialize_DateTime() { - var doc = File.ReadAllText(Path.Combine("SampleData", "datetimes.txt")); - var d = new JsonDeserializer(); - var response = new RestResponse { Content = doc }; - var payload = d.Deserialize(response); + var payload = GetPayLoad("datetimes.txt"); Assert.Equal( new DateTime(2011, 6, 30, 8, 15, 46, DateTimeKind.Utc).ToString("u"), @@ -491,10 +482,7 @@ public void Can_Deserialize_DateTime() [Fact] public void Can_Deserialize_Nullable_DateTime_With_Value() { - var doc = File.ReadAllText(Path.Combine("SampleData", "datetimes.txt")); - var d = new JsonDeserializer(); - var response = new RestResponse { Content = doc }; - var payload = d.Deserialize(response); + var payload = GetPayLoad("datetimes.txt"); Assert.NotNull(payload.NullableDateTimeWithValue); Assert.Equal( @@ -505,10 +493,7 @@ public void Can_Deserialize_Nullable_DateTime_With_Value() [Fact] public void Can_Deserialize_Nullable_DateTime_With_Null() { - var doc = File.ReadAllText(Path.Combine("SampleData", "datetimes.txt")); - var d = new JsonDeserializer(); - var response = new RestResponse { Content = doc }; - var payload = d.Deserialize(response); + var payload = GetPayLoad("datetimes.txt"); Assert.Null(payload.NullableDateTimeWithNull); } @@ -516,10 +501,7 @@ public void Can_Deserialize_Nullable_DateTime_With_Null() [Fact] public void Can_Deserialize_DateTimeOffset() { - var doc = File.ReadAllText(Path.Combine("SampleData", "datetimes.txt")); - var d = new JsonDeserializer(); - var response = new RestResponse { Content = doc }; - var payload = d.Deserialize(response); + var payload = GetPayLoad("datetimes.txt"); Assert.Equal( new DateTime(2011, 6, 30, 8, 15, 46, DateTimeKind.Utc).ToString("u"), @@ -529,10 +511,7 @@ public void Can_Deserialize_DateTimeOffset() [Fact] public void Can_Deserialize_Iso8601DateTimeLocal() { - var doc = File.ReadAllText(Path.Combine("SampleData", "iso8601datetimes.txt")); - var d = new JsonDeserializer(); - var response = new RestResponse { Content = doc }; - var payload = d.Deserialize(response); + var payload = GetPayLoad("iso8601datetimes.txt"); Assert.Equal( new DateTime(2012, 7, 19, 10, 23, 25, DateTimeKind.Utc).ToString("u"), @@ -542,10 +521,7 @@ public void Can_Deserialize_Iso8601DateTimeLocal() [Fact] public void Can_Deserialize_Iso8601DateTimeZulu() { - var doc = File.ReadAllText(Path.Combine("SampleData", "iso8601datetimes.txt")); - var d = new JsonDeserializer(); - var response = new RestResponse { Content = doc }; - var payload = d.Deserialize(response); + var payload = GetPayLoad("iso8601datetimes.txt"); Assert.Equal( new DateTime(2012, 7, 19, 10, 23, 25, DateTimeKind.Utc).ToString("u"), @@ -555,10 +531,7 @@ public void Can_Deserialize_Iso8601DateTimeZulu() [Fact] public void Can_Deserialize_Iso8601DateTimeWithOffset() { - var doc = File.ReadAllText(Path.Combine("SampleData", "iso8601datetimes.txt")); - var d = new JsonDeserializer(); - var response = new RestResponse { Content = doc }; - var payload = d.Deserialize(response); + var payload = GetPayLoad("iso8601datetimes.txt"); Assert.Equal( new DateTime(2012, 7, 19, 10, 23, 25, DateTimeKind.Utc).ToString("u"), @@ -568,10 +541,7 @@ public void Can_Deserialize_Iso8601DateTimeWithOffset() [Fact] public void Can_Deserialize_Nullable_DateTimeOffset_With_Value() { - var doc = File.ReadAllText(Path.Combine("SampleData", "datetimes.txt")); - var d = new JsonDeserializer(); - var response = new RestResponse { Content = doc }; - var payload = d.Deserialize(response); + var payload = GetPayLoad("datetimes.txt"); Assert.NotNull(payload.NullableDateTimeOffsetWithValue); Assert.Equal( @@ -582,10 +552,7 @@ public void Can_Deserialize_Nullable_DateTimeOffset_With_Value() [Fact] public void Can_Deserialize_Nullable_DateTimeOffset_With_Null() { - var doc = File.ReadAllText(Path.Combine("SampleData", "datetimes.txt")); - var d = new JsonDeserializer(); - var response = new RestResponse { Content = doc }; - var payload = d.Deserialize(response); + var payload = GetPayLoad("datetimes.txt"); Assert.Null(payload.NullableDateTimeOffsetWithNull); } From dd05e0f6da5a7aa1b9abaa90b8f417d5bbf81763 Mon Sep 17 00:00:00 2001 From: Michael Friis Date: Fri, 20 Jul 2012 18:07:34 -0700 Subject: [PATCH 7/8] don't use toString when comparing dates --- RestSharp.Tests/JsonTests.cs | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/RestSharp.Tests/JsonTests.cs b/RestSharp.Tests/JsonTests.cs index 5ae185200..d3b1b03af 100644 --- a/RestSharp.Tests/JsonTests.cs +++ b/RestSharp.Tests/JsonTests.cs @@ -190,8 +190,8 @@ public void Can_Deserialize_Elements_to_Nullable_Values() Assert.Equal(123, output.Id); Assert.NotNull(output.StartDate); Assert.Equal( - new DateTime(2010, 2, 21, 9, 35, 00, DateTimeKind.Utc).ToString("u"), - output.StartDate.Value.ToString("u")); + new DateTime(2010, 2, 21, 9, 35, 00, DateTimeKind.Utc), + output.StartDate.Value); Assert.Equal(new Guid(GuidString), output.UniqueId); } @@ -465,8 +465,8 @@ public void Can_Deserialize_JsonNet_Dates() var person = GetPayLoad("person.json.txt"); Assert.Equal( - new DateTime(2011, 6, 30, 8, 15, 46, DateTimeKind.Utc).ToString("u"), - person.StartDate.ToString("u")); + new DateTime(2011, 6, 30, 8, 15, 46, 929, DateTimeKind.Utc), + person.StartDate); } [Fact] @@ -475,8 +475,8 @@ public void Can_Deserialize_DateTime() var payload = GetPayLoad("datetimes.txt"); Assert.Equal( - new DateTime(2011, 6, 30, 8, 15, 46, DateTimeKind.Utc).ToString("u"), - payload.DateTime.ToString("u")); + new DateTime(2011, 6, 30, 8, 15, 46, 929, DateTimeKind.Utc), + payload.DateTime); } [Fact] @@ -486,8 +486,8 @@ public void Can_Deserialize_Nullable_DateTime_With_Value() Assert.NotNull(payload.NullableDateTimeWithValue); Assert.Equal( - new DateTime(2011, 6, 30, 8, 15, 46, DateTimeKind.Utc).ToString("u"), - payload.NullableDateTimeWithValue.Value.ToString("u")); + new DateTime(2011, 6, 30, 8, 15, 46, 929, DateTimeKind.Utc), + payload.NullableDateTimeWithValue.Value); } [Fact] @@ -504,8 +504,8 @@ public void Can_Deserialize_DateTimeOffset() var payload = GetPayLoad("datetimes.txt"); Assert.Equal( - new DateTime(2011, 6, 30, 8, 15, 46, DateTimeKind.Utc).ToString("u"), - payload.DateTimeOffset.ToString("u")); + new DateTime(2011, 6, 30, 8, 15, 46, 929, DateTimeKind.Utc), + payload.DateTimeOffset); } [Fact] @@ -514,8 +514,8 @@ public void Can_Deserialize_Iso8601DateTimeLocal() var payload = GetPayLoad("iso8601datetimes.txt"); Assert.Equal( - new DateTime(2012, 7, 19, 10, 23, 25, DateTimeKind.Utc).ToString("u"), - payload.DateTimeLocal.ToString("u")); + new DateTime(2012, 7, 19, 10, 23, 25, DateTimeKind.Utc), + payload.DateTimeLocal); } [Fact] @@ -524,8 +524,8 @@ public void Can_Deserialize_Iso8601DateTimeZulu() var payload = GetPayLoad("iso8601datetimes.txt"); Assert.Equal( - new DateTime(2012, 7, 19, 10, 23, 25, DateTimeKind.Utc).ToString("u"), - payload.DateTimeUtc.ToUniversalTime().ToString("u")); + new DateTime(2012, 7, 19, 10, 23, 25, 544, DateTimeKind.Utc), + payload.DateTimeUtc.ToUniversalTime()); } [Fact] @@ -534,8 +534,8 @@ public void Can_Deserialize_Iso8601DateTimeWithOffset() var payload = GetPayLoad("iso8601datetimes.txt"); Assert.Equal( - new DateTime(2012, 7, 19, 10, 23, 25, DateTimeKind.Utc).ToString("u"), - payload.DateTimeWithOffset.ToUniversalTime().ToString("u")); + new DateTime(2012, 7, 19, 10, 23, 25, 544, DateTimeKind.Utc), + payload.DateTimeWithOffset.ToUniversalTime()); } [Fact] @@ -545,8 +545,8 @@ public void Can_Deserialize_Nullable_DateTimeOffset_With_Value() Assert.NotNull(payload.NullableDateTimeOffsetWithValue); Assert.Equal( - new DateTime(2011, 6, 30, 8, 15, 46, DateTimeKind.Utc).ToString("u"), - payload.NullableDateTimeOffsetWithValue.Value.ToString("u")); + new DateTime(2011, 6, 30, 8, 15, 46, 929, DateTimeKind.Utc), + payload.NullableDateTimeOffsetWithValue); } [Fact] From 4f6aef32b26001bd44556a086bc55aec94ce2c62 Mon Sep 17 00:00:00 2001 From: Michael Friis Date: Fri, 20 Jul 2012 18:08:50 -0700 Subject: [PATCH 8/8] remove spurious whitespace --- RestSharp.Tests/JsonTests.cs | 76 ++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/RestSharp.Tests/JsonTests.cs b/RestSharp.Tests/JsonTests.cs index d3b1b03af..9f6329b47 100644 --- a/RestSharp.Tests/JsonTests.cs +++ b/RestSharp.Tests/JsonTests.cs @@ -31,9 +31,9 @@ namespace RestSharp.Tests { public class JsonTests { - private const string AlternativeCulture = "pt-PT"; + private const string AlternativeCulture = "pt-PT"; - private const string GuidString = "AC1FC4BC-087A-4242-B8EE-C53EBE9887A5"; + private const string GuidString = "AC1FC4BC-087A-4242-B8EE-C53EBE9887A5"; [Fact] public void Can_Deserialize_4sq_Json_With_Root_Element_Specified() @@ -315,14 +315,14 @@ public void Can_Deserialize_With_Default_Root() Assert.Equal("Foe 2", p.Foes["dict2"].Nickname); } - [Fact] - public void Can_Deserialize_With_Default_Root_Alternative_Culture() - { - using (new CultureChange(AlternativeCulture)) - { - Can_Deserialize_With_Default_Root(); - } - } + [Fact] + public void Can_Deserialize_With_Default_Root_Alternative_Culture() + { + using (new CultureChange(AlternativeCulture)) + { + Can_Deserialize_With_Default_Root(); + } + } [Fact] public void Can_Deserialize_Names_With_Underscores_With_Default_Root() @@ -353,14 +353,14 @@ public void Can_Deserialize_Names_With_Underscores_With_Default_Root() Assert.Equal("Foe 2", p.Foes["dict2"].Nickname); } - [Fact] - public void Can_Deserialize_Names_With_Underscores_With_Default_Root_Alternative_Culture() - { - using (new CultureChange(AlternativeCulture)) - { - Can_Deserialize_Names_With_Underscores_With_Default_Root(); - } - } + [Fact] + public void Can_Deserialize_Names_With_Underscores_With_Default_Root_Alternative_Culture() + { + using (new CultureChange(AlternativeCulture)) + { + Can_Deserialize_Names_With_Underscores_With_Default_Root(); + } + } [Fact] public void Can_Deserialize_Names_With_Dashes_With_Default_Root() @@ -391,14 +391,14 @@ public void Can_Deserialize_Names_With_Dashes_With_Default_Root() Assert.Equal("Foe 2", p.Foes["dict2"].Nickname); } - [Fact] - public void Can_Deserialize_Names_With_Dashes_With_Default_Root_Alternative_Culture() - { - using (new CultureChange(AlternativeCulture)) - { - Can_Deserialize_Names_With_Dashes_With_Default_Root(); - } - } + [Fact] + public void Can_Deserialize_Names_With_Dashes_With_Default_Root_Alternative_Culture() + { + using (new CultureChange(AlternativeCulture)) + { + Can_Deserialize_Names_With_Dashes_With_Default_Root(); + } + } [Fact] public void Ignore_Protected_Property_That_Exists_In_Data() @@ -423,19 +423,19 @@ public void Ignore_ReadOnly_Property_That_Exists_In_Data() } [Fact] - public void Can_Deserialize_TimeSpan() - { - var payload = GetPayLoad("timespans.txt"); + public void Can_Deserialize_TimeSpan() + { + var payload = GetPayLoad("timespans.txt"); - Assert.Equal(new TimeSpan(468006), payload.Tick); - Assert.Equal(new TimeSpan(0, 0, 0, 0, 125), payload.Millisecond); - Assert.Equal(new TimeSpan(0, 0, 8), payload.Second); - Assert.Equal(new TimeSpan(0, 55, 2), payload.Minute); - Assert.Equal(new TimeSpan(21, 30, 7), payload.Hour); - Assert.Null(payload.NullableWithoutValue); - Assert.NotNull(payload.NullableWithValue); - Assert.Equal(new TimeSpan(21, 30, 7), payload.NullableWithValue.Value); - } + Assert.Equal(new TimeSpan(468006), payload.Tick); + Assert.Equal(new TimeSpan(0, 0, 0, 0, 125), payload.Millisecond); + Assert.Equal(new TimeSpan(0, 0, 8), payload.Second); + Assert.Equal(new TimeSpan(0, 55, 2), payload.Minute); + Assert.Equal(new TimeSpan(21, 30, 7), payload.Hour); + Assert.Null(payload.NullableWithoutValue); + Assert.NotNull(payload.NullableWithValue); + Assert.Equal(new TimeSpan(21, 30, 7), payload.NullableWithValue.Value); + } [Fact] public void Can_Deserialize_Iso_Json_Dates()