From 34e65ba57ec25367da297f652a6d5f0e58c04499 Mon Sep 17 00:00:00 2001 From: cankoluman Date: Thu, 1 May 2014 16:13:19 +0100 Subject: [PATCH] Issue #AR-1_property_value_converters: switched to using Archetype's native GetValue when getting property values, - added umbracoSettings.config to the test project: conversion of decimal numbers, e.g. '12345.34' triggers 'NormalizeNumberDecimalSeparator' which in turn requires via 'DefaultShortStringHelper' that the umbracoSettings.config file is loaded. We added this to make sure tests deserializing decimal numbers pass. --- .../Archetype.Tests/Archetype.Tests.csproj | 492 +++++++++--------- .../ArchetypeJsonConverterTest.cs | 8 +- .../config/umbracoSettings.config | 109 ++++ app/Umbraco/Archetype.Tests/app.config | 10 +- app/Umbraco/Umbraco.Archetype.sln | 66 +-- .../Serialization/ArchetypeJsonConverter.cs | 33 +- 6 files changed, 423 insertions(+), 295 deletions(-) create mode 100644 app/Umbraco/Archetype.Tests/SupportingFiles/config/umbracoSettings.config diff --git a/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj b/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj index 261c3f9..6cf6061 100644 --- a/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj +++ b/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj @@ -1,249 +1,257 @@ - - - - - Debug - AnyCPU - {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B} - Library - Properties - Archetype.Tests - Archetype.Tests - v4.5 - 512 - ..\ - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.dll - - - ..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.Net4.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\businesslogic.dll - - - ..\packages\ClientDependency.1.7.1.2\lib\ClientDependency.Core.dll - - - ..\packages\ClientDependency-Mvc.1.7.0.4\lib\ClientDependency.Core.Mvc.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\cms.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\controls.dll - - - ..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\Examine.dll - - - ..\packages\HtmlAgilityPack.1.4.6\lib\Net45\HtmlAgilityPack.dll - - - ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll - - - ..\packages\ImageProcessor.1.8.7.0\lib\ImageProcessor.dll - - - ..\packages\ImageProcessor.Web.3.2.1.0\lib\net45\ImageProcessor.Web.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\interfaces.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\log4net.dll - - - ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.ApplicationBlocks.Data.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.Web.Helpers.dll - - - True - ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll - - - ..\packages\Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.1\lib\net40\Microsoft.Web.Mvc.FixedDisplayModes.dll - - - ..\packages\MiniProfiler.2.1.0\lib\net40\MiniProfiler.dll - - - ..\packages\Moq.4.2.1312.1622\lib\net40\Moq.dll - - - ..\packages\MySql.Data.6.6.5\lib\net40\MySql.Data.dll - - - False - ..\packages\Newtonsoft.Json.6.0.2\lib\net45\Newtonsoft.Json.dll - - - ..\packages\NUnit.2.6.3\lib\nunit.framework.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\SQLCE4Umbraco.dll - - - - - True - ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.dll - - - True - ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.Entity.dll - - - - ..\packages\Microsoft.AspNet.WebApi.Client.4.0.30506.0\lib\net40\System.Net.Http.Formatting.dll - - - - True - ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.Helpers.dll - - - ..\packages\Microsoft.AspNet.WebApi.Core.4.0.30506.0\lib\net40\System.Web.Http.dll - - - ..\packages\Microsoft.AspNet.WebApi.WebHost.4.0.30506.0\lib\net40\System.Web.Http.WebHost.dll - - - True - ..\packages\Microsoft.AspNet.Mvc.4.0.30506.0\lib\net40\System.Web.Mvc.dll - - - False - ..\packages\Microsoft.AspNet.Razor.2.0.30506.0\lib\net40\System.Web.Razor.dll - True - - - True - ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.dll - - - True - ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Deployment.dll - - - True - ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Razor.dll - - - - - - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\TidyNet.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Core.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.DataLayer.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.editorControls.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.MacroEngines.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.providers.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Web.UI.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.XmlSerializers.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\UmbracoExamine.dll - - - False - ..\packages\UmbracoCms.Core.7.1.1\lib\UrlRewritingNet.UrlRewriter.dll - - - - - - - - - - - - - - - - - - - {7D185D41-4228-4978-ACB8-83F9A48AD94F} - Archetype.Umbraco - - - - - + + + + + Debug + AnyCPU + {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B} + Library + Properties + Archetype.Tests + Archetype.Tests + v4.5 + 512 + ..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.dll + + + ..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.Net4.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\businesslogic.dll + + + ..\packages\ClientDependency.1.7.1.2\lib\ClientDependency.Core.dll + + + ..\packages\ClientDependency-Mvc.1.7.0.4\lib\ClientDependency.Core.Mvc.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\cms.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\controls.dll + + + ..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\Examine.dll + + + ..\packages\HtmlAgilityPack.1.4.6\lib\Net45\HtmlAgilityPack.dll + + + ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll + + + ..\packages\ImageProcessor.1.8.7.0\lib\ImageProcessor.dll + + + ..\packages\ImageProcessor.Web.3.2.1.0\lib\net45\ImageProcessor.Web.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\interfaces.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\log4net.dll + + + ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.ApplicationBlocks.Data.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\Microsoft.Web.Helpers.dll + + + True + ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll + + + ..\packages\Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.1\lib\net40\Microsoft.Web.Mvc.FixedDisplayModes.dll + + + ..\packages\MiniProfiler.2.1.0\lib\net40\MiniProfiler.dll + + + ..\packages\Moq.4.2.1312.1622\lib\net40\Moq.dll + + + ..\packages\MySql.Data.6.6.5\lib\net40\MySql.Data.dll + + + False + ..\packages\Newtonsoft.Json.6.0.2\lib\net45\Newtonsoft.Json.dll + + + ..\packages\NUnit.2.6.3\lib\nunit.framework.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\SQLCE4Umbraco.dll + + + + + True + ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.dll + + + True + ..\packages\UmbracoCms.Core.7.1.1\lib\System.Data.SqlServerCe.Entity.dll + + + + ..\packages\Microsoft.AspNet.WebApi.Client.4.0.30506.0\lib\net40\System.Net.Http.Formatting.dll + + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.Helpers.dll + + + ..\packages\Microsoft.AspNet.WebApi.Core.4.0.30506.0\lib\net40\System.Web.Http.dll + + + ..\packages\Microsoft.AspNet.WebApi.WebHost.4.0.30506.0\lib\net40\System.Web.Http.WebHost.dll + + + True + ..\packages\Microsoft.AspNet.Mvc.4.0.30506.0\lib\net40\System.Web.Mvc.dll + + + False + ..\packages\Microsoft.AspNet.Razor.2.0.30506.0\lib\net40\System.Web.Razor.dll + True + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Deployment.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Razor.dll + + + + + + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\TidyNet.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Core.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.DataLayer.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.editorControls.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.MacroEngines.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.providers.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\Umbraco.Web.UI.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\umbraco.XmlSerializers.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\UmbracoExamine.dll + + + False + ..\packages\UmbracoCms.Core.7.1.1\lib\UrlRewritingNet.UrlRewriter.dll + + + + + + + + + + + + + + + + + + + + {7D185D41-4228-4978-ACB8-83F9A48AD94F} + Archetype.Umbraco + + + + + + + + + + + xcopy $(ProjectDir)SupportingFiles\config\* $(TargetDir)config /I /O /X /E /K /D + + --> \ No newline at end of file diff --git a/app/Umbraco/Archetype.Tests/Serialization/ArchetypeJsonConverterTest.cs b/app/Umbraco/Archetype.Tests/Serialization/ArchetypeJsonConverterTest.cs index f5ad6bb..27de22a 100644 --- a/app/Umbraco/Archetype.Tests/Serialization/ArchetypeJsonConverterTest.cs +++ b/app/Umbraco/Archetype.Tests/Serialization/ArchetypeJsonConverterTest.cs @@ -1,8 +1,8 @@ -using System; +using System; using Archetype.Umbraco.PropertyConverters; using Newtonsoft.Json; -using NUnit.Framework; - +using NUnit.Framework; + namespace Archetype.Tests.Serialization { [TestFixture] @@ -228,7 +228,7 @@ namespace Archetype.Tests.Serialization } [Test] - public void DeserializeNumericAndDateModelFromArchetype() + public void DeserializeNumericAndDateModelFromArchetype() { var result = JsonConvert.DeserializeObject(JsonTestStrings._ANNUAL_STATEMENT_JSON); diff --git a/app/Umbraco/Archetype.Tests/SupportingFiles/config/umbracoSettings.config b/app/Umbraco/Archetype.Tests/SupportingFiles/config/umbracoSettings.config new file mode 100644 index 0000000..2ccc8a5 --- /dev/null +++ b/app/Umbraco/Archetype.Tests/SupportingFiles/config/umbracoSettings.config @@ -0,0 +1,109 @@ + + + + + + + + + 1 + + + + + + your@email.here + + + + text + + + In Preview Mode - click to end]]> + + + + 1800 + + + inline + + + ashx,aspx,ascx,config,cshtml,vbhtml,asmx,air,axd + + + Textstring + + + + + false + + false + + + + + false + + true + + + + + Mvc + + + + + + + + + + + + 0 + + + + + + + + + + + + + diff --git a/app/Umbraco/Archetype.Tests/app.config b/app/Umbraco/Archetype.Tests/app.config index 72cac16..786460d 100644 --- a/app/Umbraco/Archetype.Tests/app.config +++ b/app/Umbraco/Archetype.Tests/app.config @@ -1,6 +1,14 @@  - + + +
+ + + + + + diff --git a/app/Umbraco/Umbraco.Archetype.sln b/app/Umbraco/Umbraco.Archetype.sln index 88272ac..68ebc7d 100644 --- a/app/Umbraco/Umbraco.Archetype.sln +++ b/app/Umbraco/Umbraco.Archetype.sln @@ -1,33 +1,33 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Archetype.Umbraco", "Umbraco.Archetype\Archetype.Umbraco.csproj", "{7D185D41-4228-4978-ACB8-83F9A48AD94F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{D84AA4ED-85A6-484F-9E72-BE7AC9835821}" - ProjectSection(SolutionItems) = preProject - .nuget\NuGet.Config = .nuget\NuGet.Config - .nuget\NuGet.exe = .nuget\NuGet.exe - .nuget\NuGet.targets = .nuget\NuGet.targets - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Archetype.Tests", "Archetype.Tests\Archetype.Tests.csproj", "{21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {7D185D41-4228-4978-ACB8-83F9A48AD94F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7D185D41-4228-4978-ACB8-83F9A48AD94F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7D185D41-4228-4978-ACB8-83F9A48AD94F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7D185D41-4228-4978-ACB8-83F9A48AD94F}.Release|Any CPU.Build.0 = Release|Any CPU - {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Archetype.Umbraco", "Umbraco.Archetype\Archetype.Umbraco.csproj", "{7D185D41-4228-4978-ACB8-83F9A48AD94F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{D84AA4ED-85A6-484F-9E72-BE7AC9835821}" + ProjectSection(SolutionItems) = preProject + .nuget\NuGet.Config = .nuget\NuGet.Config + .nuget\NuGet.exe = .nuget\NuGet.exe + .nuget\NuGet.targets = .nuget\NuGet.targets + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Archetype.Tests", "Archetype.Tests\Archetype.Tests.csproj", "{21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7D185D41-4228-4978-ACB8-83F9A48AD94F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D185D41-4228-4978-ACB8-83F9A48AD94F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D185D41-4228-4978-ACB8-83F9A48AD94F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D185D41-4228-4978-ACB8-83F9A48AD94F}.Release|Any CPU.Build.0 = Release|Any CPU + {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {21F3E6CF-B76F-4059-9474-1AF1CE63CD6B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/app/Umbraco/Umbraco.Archetype/Serialization/ArchetypeJsonConverter.cs b/app/Umbraco/Umbraco.Archetype/Serialization/ArchetypeJsonConverter.cs index 618b9aa..21c1b42 100644 --- a/app/Umbraco/Umbraco.Archetype/Serialization/ArchetypeJsonConverter.cs +++ b/app/Umbraco/Umbraco.Archetype/Serialization/ArchetypeJsonConverter.cs @@ -5,7 +5,8 @@ using System.Dynamic; using System.IO; using System.Linq; using System.Reflection; -using System.Text; +using System.Text; +using Archetype.Umbraco.Models; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -173,7 +174,7 @@ namespace Archetype.Umbraco.Serialization return IsValueArchetypeDatatype(propertyInfo.PropertyType) ? JsonConvert.DeserializeObject(propJToken["value"].ToString(), propertyInfo.PropertyType, GetArchetypeDatatypeConverter()) - : GetDeserializedPropertyValue(propJToken["value"], propertyInfo.PropertyType); + : GetDeserializedPropertyValue(propJToken, propertyInfo.PropertyType); } private bool PropertyLayoutHasFieldsets(IEnumerable properties) @@ -329,19 +330,21 @@ namespace Archetype.Umbraco.Serialization return String.Format("{0}", propValue); } - private object GetDeserializedPropertyValue(JToken jToken, Type type) - { - if (String.IsNullOrEmpty(jToken.ToString())) - return GetDefault(type); - - var localType = Nullable.GetUnderlyingType(type) ?? type; - - if (localType == typeof(bool)) - return jToken.ToString() == "1"; - - return localType == typeof(DateTime) - ? Convert.ToDateTime(jToken.ToString()) - : jToken.ToObject(localType); + private object GetDeserializedPropertyValue(JToken jToken, Type type) + { + return String.IsNullOrEmpty(jToken.ToString()) + ? GetDefault(type) + : GetTypedValue(jToken, type); + } + + private object GetTypedValue(JToken jToken, Type type) + { + var property = JsonConvert.DeserializeObject(jToken.ToString()); + + var method = typeof(Property).GetMethod("GetValue"); + var getValue = method.MakeGenericMethod(type); + + return getValue.Invoke(property, null); } private object GetDefault(Type type)