diff --git a/build.fsx b/build.fsx index 6c3d130..1d1d8ba 100644 --- a/build.fsx +++ b/build.fsx @@ -38,9 +38,9 @@ module Source = let dir = root "src" let projectFile = dir "Thoth.Json.Giraffe.fsproj" -// module Tests = -// let dir = root "tests" -// let projectFile = dir "Tests.fsproj" +module Tests = + let dir = root "tests" + let projectFile = dir "Thoth.Json.Giraffe.Tests.fsproj" let gitOwner = "thoth-org" let repoName = "Thoth.Json.Giraffe" @@ -180,7 +180,7 @@ let getNotes (version : string) = let m = versionRegex.Match(line) if m.Success then - not (m.Groups.[1].Value = version) + m.Groups.[1].Value <> version else true ) @@ -192,6 +192,10 @@ let getNotes (version : string) = not m.Success ) +Target.create "Test" (fun _ -> + DotNet.test id Tests.projectFile +) + Target.create "Publish" (fun _ -> let version = getLastVersion() pushNuget version Source.projectFile @@ -220,6 +224,7 @@ Target.create "Release" (fun _ -> "Clean" ==> "YarnInstall" ==> "DotnetRestore" + ==> "Test" ==> "Publish" ==> "Release" diff --git a/global.json b/global.json index 8237c99..775c52f 100644 --- a/global.json +++ b/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "3.0.100" + "version": "3.1.101" } } diff --git a/mono_crash.e0c2488e0.0.json b/mono_crash.e0c2488e0.0.json new file mode 100644 index 0000000..6e4c070 --- /dev/null +++ b/mono_crash.e0c2488e0.0.json @@ -0,0 +1,685 @@ +{ + "protocol_version" : "0.0.2", + "configuration" : { + "version" : "5.18.0.240 (Debian 5.18.0.240+dfsg-3 Mon Jun 24 08:50:44 UTC 2019)", + "tlc" : "__thread", + "sigsgev" : "altstack", + "notifications" : "epoll", + "architecture" : "amd64", + "disabled_features" : "none", + "smallconfig" : "disabled", + "bigarrays" : "disabled", + "softdebug" : "enabled", + "interpreter" : "enabled", + "llvm_support" : "disabled", + "suspend" : "preemptive" + }, + "memory" : { + "minor_gc_time" : "10784499", + "major_gc_time" : "1407291", + "minor_gc_count" : "465", + "major_gc_count" : "16", + "major_gc_time_concurrent" : "107535743" + }, + "threads" : [ + { + "is_managed" : false, + "crashed" : false, + "managed_thread_ptr" : "0x0", + "native_thread_id" : "0x7f78bcbfd700", + "thread_info_addr" : "0x0", + "thread_name" : "Thread Pool Wor", + "ctx" : { + "IP" : "0x7f78c26635b8", + "SP" : "0x7f78bcbfcc70", + "BP" : "0x56222955f608" + }, + "unmanaged_frames" : [ + { + "native_address" : "unregistered" + } + + ] + }, + { + "is_managed" : false, + "crashed" : false, + "managed_thread_ptr" : "0x0", + "native_thread_id" : "0x7f78a6a7d700", + "thread_info_addr" : "0x0", + "thread_name" : "Thread Pool Wor", + "ctx" : { + "IP" : "0x7f78c266431c", + "SP" : "0x7f78a6a7c430", + "BP" : "0x8" + }, + "managed_frames" : [ + { + "native_address" : "unregistered" + } + + ], + "unmanaged_frames" : [ + { + "native_address" : "unregistered" + } + + ] +}, +{ + "is_managed" : false, + "crashed" : false, + "managed_thread_ptr" : "0x0", + "native_thread_id" : "0x7f78a5bff700", + "thread_info_addr" : "0x0", + "thread_name" : "Thread Pool Wor", + "ctx" : { + "IP" : "0x7f78c26606e0", + "SP" : "0x7f78a5bfdce0", + "BP" : "0x56222955e920" + }, + "managed_frames" : [ + { + "native_address" : "unregistered" + } + + ], +"unmanaged_frames" : [ +{ + "native_address" : "unregistered" + } + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f7835463700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { + "IP" : "0x7f78c26635b8", + "SP" : "0x7f7835462c70", + "BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ + "native_address" : "unregistered" + } + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78bc7d6700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { + "IP" : "0x7f78c26635b8", + "SP" : "0x7f78bc7d5c70", + "BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ + "native_address" : "unregistered" + } + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78bcdfe700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { + "IP" : "0x7f78c26635b8", + "SP" : "0x7f78bcdfdc70", + "BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ + "native_address" : "unregistered" + } + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78a6c7e700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { + "IP" : "0x7f78c266431c", + "SP" : "0x7f78a6c7d430", + "BP" : "0x7" +}, +"managed_frames" : [ +{ + "native_address" : "unregistered" + } + +], +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78bcfff700", +"thread_info_addr" : "0x0", +"thread_name" : "mono", +"ctx" : { +"IP" : "0x7f78c26606e0", +"SP" : "0x7f78bcffeb80", +"BP" : "0x5622295e8740" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78a6e7f700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c266431c", +"SP" : "0x7f78a6e7e430", +"BP" : "0x4" +}, +"managed_frames" : [ +{ +"native_address" : "unregistered" +} + +], +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78a4bfe700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c26635b8", +"SP" : "0x7f78a4bfdc70", +"BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f7864b93700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78beddbf12", +"SP" : "0x7f7864b910c0", +"BP" : "(nil)" +}, +"managed_frames" : [ +{ +"is_managed" : "true", +"guid" : "D0E12F67-2B88-444A-B4B6-D9B2ECF20142", +"token" : "0x6000b16", +"native_offset" : "0x0", +"il_offset" : "0x00028" +} + +], +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78a7080700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c26635b8", +"SP" : "0x7f78a707fc70", +"BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78a4dff700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c26635b8", +"SP" : "0x7f78a4dfec70", +"BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78a7281700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c26635b8", +"SP" : "0x7f78a7280c70", +"BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f7865aec700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c26635b8", +"SP" : "0x7f7865aebc70", +"BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78a7482700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c26635b8", +"SP" : "0x7f78a7481c70", +"BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f7865ced700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c26635b8", +"SP" : "0x7f7865cecc70", +"BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78a7683700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c26635b8", +"SP" : "0x7f78a7682c70", +"BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f783d0b7700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c26635b8", +"SP" : "0x7f783d0b6c70", +"BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f7865eee700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c26635b8", +"SP" : "0x7f7865eedc70", +"BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78a7908700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c26635b8", +"SP" : "0x7f78a7907c70", +"BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78660ef700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c26635b8", +"SP" : "0x7f78660eec70", +"BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78a647a700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c266431c", +"SP" : "0x7f78a6479430", +"BP" : "0xb" +}, +"managed_frames" : [ +{ +"native_address" : "unregistered" +} + +], +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78a7b09700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c26635b8", +"SP" : "0x7f78a7b08c70", +"BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78c2440780", +"thread_info_addr" : "0x0", +"thread_name" : "mono", +"ctx" : { +"IP" : "0x7f78c266431c", +"SP" : "0x7fff20742ae0", +"BP" : "(nil)" +}, +"managed_frames" : [ +{ +"native_address" : "unregistered" +} + +], +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78a667b700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c266431c", +"SP" : "0x7f78a667a430", +"BP" : "0xa" +}, +"managed_frames" : [ +{ +"native_address" : "unregistered" +} + +], +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78a7d0a700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c266431c", +"SP" : "0x7f78a7d08af0", +"BP" : "(nil)" +}, +"managed_frames" : [ +{ +"native_address" : "unregistered" +} + +], +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : true, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f783f197700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c248b3eb", +"SP" : "0x7f783f194a30", +"BP" : "0x7f783f194d80" +}, +"managed_frames" : [ +{ +"native_address" : "unregistered" +} + +], +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78becbb700", +"thread_info_addr" : "0x0", +"thread_name" : "Finalizer", +"ctx" : { +"IP" : "0x7f78c2663394", +"SP" : "0x7f78becbac90", +"BP" : "0x56222955ed00" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f78a687c700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c266431c", +"SP" : "0x7f78a687b430", +"BP" : "0x9" +}, +"managed_frames" : [ +{ +"native_address" : "unregistered" +} + +], +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +}, +{ +"is_managed" : false, +"crashed" : false, +"managed_thread_ptr" : "0x0", +"native_thread_id" : "0x7f786567b700", +"thread_info_addr" : "0x0", +"thread_name" : "Thread Pool Wor", +"ctx" : { +"IP" : "0x7f78c26635b8", +"SP" : "0x7f786567ac70", +"BP" : "0x56222955f608" +}, +"unmanaged_frames" : [ +{ +"native_address" : "unregistered" +} + +] +} +] +} \ No newline at end of file diff --git a/paket.dependencies b/paket.dependencies index c5da11d..ec59345 100644 --- a/paket.dependencies +++ b/paket.dependencies @@ -4,6 +4,10 @@ storage: none nuget FSharp.Core redirects:force, content:none nuget Giraffe >= 3.6 lowest_matching:true nuget Thoth.Json.Net +nuget Expecto +nuget Microsoft.AspNetCore.TestHost +nuget Microsoft.NET.Test.Sdk +nuget YoloDev.Expecto.TestSdk group netcorebuild source https://www.nuget.org/api/v2 diff --git a/paket.lock b/paket.lock index 4f5a8c2..2912808 100644 --- a/paket.lock +++ b/paket.lock @@ -1,6 +1,9 @@ STORAGE: NONE NUGET remote: https://www.nuget.org/api/v2 + Expecto (8.13.1) + FSharp.Core (>= 4.3.4) - restriction: || (>= net461) (>= netstandard2.0) + Mono.Cecil (>= 0.11) - restriction: || (>= net461) (>= netstandard2.0) Fable.Core (3.1.2) - restriction: && (< net46) (>= netstandard2.0) FSharp.Core (>= 4.7) - restriction: >= netstandard2.0 FSharp.Core (4.7) - content: none, redirects: force @@ -93,9 +96,12 @@ NUGET Microsoft.Extensions.Logging.Abstractions (>= 2.2) - restriction: >= netstandard2.0 Microsoft.AspNetCore.ResponseCaching.Abstractions (2.2) - restriction: >= netstandard2.0 Microsoft.Extensions.Primitives (>= 2.2) - restriction: >= netstandard2.0 + Microsoft.AspNetCore.TestHost (3.1.1) + System.IO.Pipelines (>= 4.7) - restriction: >= netcoreapp3.1 Microsoft.AspNetCore.WebUtilities (2.2) - restriction: >= netstandard2.0 Microsoft.Net.Http.Headers (>= 2.2) - restriction: >= netstandard2.0 System.Text.Encodings.Web (>= 4.5) - restriction: >= netstandard2.0 + Microsoft.CodeCoverage (16.5) - restriction: || (>= net45) (>= netcoreapp2.1) Microsoft.Extensions.Caching.Abstractions (3.0) - restriction: >= netstandard2.0 Microsoft.Extensions.Primitives (>= 3.0) - restriction: >= netstandard2.0 Microsoft.Extensions.Caching.Memory (3.0) - restriction: >= netstandard2.0 @@ -133,8 +139,20 @@ NUGET Microsoft.Net.Http.Headers (2.2) - restriction: >= netstandard2.0 Microsoft.Extensions.Primitives (>= 2.2) - restriction: >= netstandard2.0 System.Buffers (>= 4.5) - restriction: >= netstandard2.0 + Microsoft.NET.Test.Sdk (16.5) + Microsoft.CodeCoverage (>= 16.5) - restriction: || (>= net45) (>= netcoreapp2.1) + Microsoft.TestPlatform.TestHost (>= 16.5) - restriction: >= netcoreapp2.1 + Newtonsoft.Json (>= 9.0.1) - restriction: >= uap10.0 + System.ComponentModel.Primitives (>= 4.1) - restriction: >= uap10.0 + System.ComponentModel.TypeConverter (>= 4.1) - restriction: >= uap10.0 + System.Runtime.InteropServices.RuntimeInformation (>= 4.0) - restriction: >= uap10.0 Microsoft.NETCore.Platforms (3.0) - restriction: || (&& (< net45) (>= net461) (< netstandard1.2)) (&& (< net45) (>= net461) (< netstandard1.3)) (&& (< net45) (>= net461) (>= netstandard1.5) (< netstandard1.6)) (&& (< net45) (>= net461) (< netstandard1.5)) (&& (< net45) (>= net461) (>= netstandard1.6)) (&& (< net45) (>= netstandard2.0)) (&& (>= net461) (>= netcoreapp1.1)) (&& (>= net461) (< netstandard1.0) (>= netstandard1.6)) (&& (>= net461) (< netstandard1.3) (>= netstandard1.6) (>= wpa81)) (&& (>= net461) (< netstandard1.5) (>= netstandard1.6) (>= uap10.0)) (&& (>= net461) (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= net461) (>= netstandard1.6) (>= uap10.1)) (&& (>= net461) (>= netstandard1.6) (>= wp8)) (&& (>= netcoreapp1.1) (>= netstandard2.0)) (>= netcoreapp2.0) (&& (>= netcoreapp3.0) (< netstandard2.1)) (&& (< netstandard1.0) (>= netstandard2.0) (< portable-net45+win8)) (&& (< netstandard1.0) (>= netstandard2.0) (>= win8)) (&& (< netstandard1.0) (>= netstandard2.0) (< win8)) (&& (< netstandard1.3) (>= netstandard2.0) (< win8) (>= wpa81)) (&& (< netstandard1.5) (>= netstandard2.0) (>= uap10.0)) (&& (>= netstandard2.0) (< portable-net45+win8+wpa81)) (&& (>= netstandard2.0) (>= uap10.1)) (&& (>= netstandard2.0) (>= wp8)) Microsoft.NETCore.Targets (3.0) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.6) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net461) (< netstandard1.2)) (&& (< net45) (>= net461) (< netstandard1.3)) (&& (< net45) (>= net461) (>= netstandard1.5) (< netstandard1.6)) (&& (< net45) (>= net461) (< netstandard1.5)) (&& (< net45) (>= net461) (>= netstandard1.6)) (&& (>= net461) (>= netcoreapp1.1)) (&& (>= netcoreapp1.1) (>= netstandard2.0)) + Microsoft.TestPlatform.ObjectModel (16.5) - restriction: >= netcoreapp2.1 + NuGet.Frameworks (>= 5.0) - restriction: || (>= net451) (>= netstandard2.0) + Microsoft.TestPlatform.TestHost (16.5) - restriction: >= netcoreapp2.1 + Microsoft.TestPlatform.ObjectModel (>= 16.5) - restriction: || (>= netcoreapp2.1) (>= uap10.0) + Newtonsoft.Json (>= 9.0.1) - restriction: || (>= netcoreapp2.1) (>= uap10.0) Microsoft.Win32.Registry (4.6) - restriction: >= netstandard2.0 System.Buffers (>= 4.5) - restriction: || (&& (>= monoandroid) (< netstandard2.0)) (>= monotouch) (&& (< net46) (< netcoreapp2.0) (>= netstandard2.0)) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) System.Memory (>= 4.5.3) - restriction: || (&& (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (>= uap10.1) @@ -142,17 +160,22 @@ NUGET System.Security.Principal.Windows (>= 4.6) - restriction: || (&& (>= monoandroid) (< netstandard2.0)) (>= monotouch) (&& (< net46) (>= netstandard2.0)) (>= net461) (>= netcoreapp2.0) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) Microsoft.Win32.SystemEvents (4.6) - restriction: >= netcoreapp3.0 Microsoft.NETCore.Platforms (>= 3.0) - restriction: >= netcoreapp2.0 + Mono.Cecil (0.11.1) - restriction: || (>= net461) (>= netstandard2.0) NETStandard.Library (2.0.3) - restriction: || (&& (< net45) (>= net461) (>= netstandard1.6)) (&& (< net45) (>= netstandard2.0)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (>= net45) (< netstandard1.3)) (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81)) (&& (< net45) (>= netstandard2.0)) (&& (>= net46) (< netstandard1.4)) (>= net461) (>= netcoreapp2.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81)) (&& (< netstandard1.0) (>= portable-net45+win8) (< win8)) (&& (< netstandard1.0) (< portable-net45+win8) (>= portable-net45+win8+wpa81)) (&& (< netstandard1.0) (>= portable-net45+win8+wp8+wpa81) (< portable-net45+win8+wpa81)) (&& (< netstandard1.0) (>= win8)) (&& (< netstandard1.3) (< win8) (>= wpa81)) (&& (< netstandard1.5) (>= uap10.0)) (>= uap10.1) (>= wp8) - Newtonsoft.Json (12.0.2) - restriction: || (>= net46) (>= netstandard2.0) - System.Buffers (4.5) - restriction: || (&& (>= net45) (< netstandard1.3) (>= xamarinios)) (&& (>= net45) (< netstandard1.3) (>= xamarinmac)) (&& (>= net46) (>= xamarinios)) (&& (>= net46) (>= xamarinmac)) (>= netstandard2.0) (&& (>= uap10.1) (>= xamarinios)) (&& (>= uap10.1) (>= xamarinmac)) + Newtonsoft.Json (12.0.2) - restriction: || (>= net46) (>= netstandard2.0) (>= uap10.0) + NuGet.Frameworks (5.4) - restriction: >= netcoreapp2.1 + System.Buffers (4.5) - restriction: || (&& (>= monotouch) (>= netcoreapp2.0)) (&& (>= net46) (>= netcoreapp2.0)) (>= net461) (&& (>= netcoreapp2.0) (< netstandard1.1)) (&& (>= netcoreapp2.0) (>= uap10.1)) (&& (>= netcoreapp2.0) (>= xamarinios)) (&& (>= netcoreapp2.0) (>= xamarinmac)) (&& (>= netcoreapp2.0) (>= xamarintvos)) (&& (>= netcoreapp2.0) (>= xamarinwatchos)) (>= netstandard2.0) System.Collections (4.3) - restriction: || (&& (< monoandroid) (< net45) (< netcoreapp1.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net461)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) - System.Collections.Immutable (1.6) - restriction: || (&& (>= net45) (>= netstandard2.0)) (&& (< netcoreapp3.0) (>= netstandard2.0)) (&& (< netstandard1.1) (>= netstandard2.0) (>= win8)) (&& (< netstandard1.1) (>= netstandard2.0) (< win8)) + System.Collections.Immutable (1.6) - restriction: || (&& (>= net45) (>= netstandard2.0)) (>= net461) (>= netcoreapp2.0) (&& (< netcoreapp3.0) (>= netstandard2.0)) (&& (< netstandard1.1) (>= netstandard2.0) (>= win8)) (&& (< netstandard1.1) (>= netstandard2.0) (< win8)) System.Memory (>= 4.5.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net46) (>= uap10.1) System.ComponentModel.Annotations (4.6) - restriction: && (< netcoreapp3.0) (>= netstandard2.0) + System.ComponentModel.Primitives (4.3) - restriction: >= uap10.0 + System.ComponentModel.TypeConverter (4.3) - restriction: >= uap10.0 + System.ComponentModel.Primitives (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.5) (< win8)) (&& (>= net45) (< netstandard1.5)) (>= net462) (&& (< netstandard1.0) (>= win8)) (>= wp8) (>= wpa81) System.Diagnostics.Debug (4.3) - restriction: || (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net461) (>= netstandard1.6)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) @@ -183,21 +206,18 @@ NUGET System.Threading.Tasks (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.IO.FileSystem.Primitives (4.3) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net461)) System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) - System.IO.Pipelines (4.6) - restriction: >= netstandard2.0 - System.Buffers (>= 4.5) - restriction: || (&& (>= monoandroid) (< netstandard2.0)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard2.0) (< uap10.1)) (>= monotouch) (&& (>= net46) (< netstandard2.0)) (&& (< net46) (< netcoreapp2.0) (>= netstandard2.0)) (>= net461) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) - System.Memory (>= 4.5.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< netstandard2.0) (< xamarintvos) (< xamarinwatchos)) (&& (>= net46) (< netstandard2.0)) (&& (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (>= uap10.1) - System.Threading.Tasks.Extensions (>= 4.5.2) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< netstandard2.0) (< xamarintvos) (< xamarinwatchos)) (&& (>= net46) (< netstandard2.0)) (&& (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (>= uap10.1) + System.IO.Pipelines (4.7) - restriction: >= netstandard2.0 System.Linq (4.3) - restriction: || (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net461)) System.Collections (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.6) (< win8) (< wp8) (< wpa81)) System.Diagnostics.Debug (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.Resources.ResourceManager (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.6) (< win8) (< wp8) (< wpa81)) System.Runtime.Extensions (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) - System.Memory (4.5.3) - restriction: || (&& (>= net45) (< netstandard1.3) (>= netstandard2.0)) (&& (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= net46) (>= netstandard2.0)) (&& (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< netcoreapp3.0) (>= netstandard2.0)) (&& (>= netstandard2.0) (>= uap10.1)) + System.Memory (4.5.3) - restriction: || (&& (>= net45) (< netstandard1.3) (>= netstandard2.0)) (&& (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= net46) (>= netcoreapp2.0)) (&& (>= net46) (>= netstandard2.0)) (&& (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (>= netcoreapp2.0) (< netstandard2.0)) (&& (>= netcoreapp2.0) (>= uap10.1)) (&& (< netcoreapp3.0) (>= netstandard2.0)) (&& (>= netstandard2.0) (>= uap10.1)) System.Buffers (>= 4.4) - restriction: || (&& (>= monoandroid) (< netstandard2.0)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (>= monotouch) (&& (>= net45) (< netstandard2.0)) (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (>= net461) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (< uap10.1) (>= wpa81)) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) System.Numerics.Vectors (>= 4.4) - restriction: || (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) System.Runtime.CompilerServices.Unsafe (>= 4.5.2) - restriction: || (&& (>= monoandroid) (< netstandard2.0)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (>= monotouch) (&& (>= net45) (< netstandard2.0)) (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (>= wpa81)) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) - System.Numerics.Vectors (4.5) - restriction: || (&& (< net45) (>= net46) (>= netstandard2.0)) (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= net461) (>= netstandard2.0)) (&& (>= netstandard2.0) (>= uap10.1)) + System.Numerics.Vectors (4.5) - restriction: || (&& (>= net46) (>= netcoreapp2.0)) (>= net461) (&& (>= netcoreapp2.0) (< netstandard2.0)) (&& (>= netcoreapp2.0) (>= uap10.1)) System.Reflection (4.3) - restriction: || (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net461)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) @@ -230,7 +250,7 @@ NUGET System.Runtime (4.3.1) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.6) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net461)) (&& (>= net461) (>= netcoreapp1.1)) (&& (>= netcoreapp1.1) (>= netstandard2.0)) Microsoft.NETCore.Platforms (>= 1.1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.2) (< win8) (< wp8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) Microsoft.NETCore.Targets (>= 1.1.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.2) (< win8) (< wp8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) - System.Runtime.CompilerServices.Unsafe (4.6) - restriction: || (&& (< monoandroid) (< netstandard1.0) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard2.0) (< win8)) (&& (>= monotouch) (>= netstandard2.0)) (&& (>= net45) (>= netcoreapp2.0) (< netstandard1.3)) (&& (>= net45) (< netstandard1.1) (>= netstandard2.0)) (&& (>= net45) (< netstandard1.3) (>= netstandard2.0)) (&& (>= net45) (< netstandard1.3) (>= xamarinios)) (&& (>= net45) (< netstandard1.3) (>= xamarinmac)) (&& (< net45) (>= net46) (>= netstandard2.0)) (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= net46) (>= netcoreapp2.0)) (&& (>= net46) (< netstandard1.1) (>= netstandard2.0)) (&& (>= net46) (>= xamarinios)) (&& (>= net46) (>= xamarinmac)) (&& (>= net461) (< netstandard1.0)) (&& (>= net461) (>= netstandard2.0)) (&& (>= net461) (< netstandard2.0)) (&& (>= net461) (>= wp8)) (>= net47) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (>= netcoreapp2.0) (>= uap10.1)) (&& (< netcoreapp3.0) (>= netstandard2.0)) (&& (< netstandard1.0) (>= netstandard2.0) (>= win8)) (&& (< netstandard1.1) (>= netstandard2.0) (>= win8)) (&& (>= netstandard2.0) (>= uap10.1)) (&& (>= netstandard2.0) (>= wp8)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (&& (>= uap10.1) (>= xamarinios)) (&& (>= uap10.1) (>= xamarinmac)) + System.Runtime.CompilerServices.Unsafe (4.6) - restriction: || (&& (< monoandroid) (< netstandard1.0) (>= netstandard2.0) (< win8)) (&& (>= monotouch) (>= netcoreapp2.0)) (&& (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= net46) (>= netcoreapp2.0)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (>= netcoreapp2.0) (< netstandard1.1)) (&& (>= netcoreapp2.0) (< netstandard2.0)) (&& (>= netcoreapp2.0) (>= uap10.1)) (&& (>= netcoreapp2.0) (>= xamarinios)) (&& (>= netcoreapp2.0) (>= xamarinmac)) (&& (>= netcoreapp2.0) (>= xamarintvos)) (&& (>= netcoreapp2.0) (>= xamarinwatchos)) (&& (< netcoreapp3.0) (>= netstandard2.0)) (&& (< netstandard1.0) (>= netstandard2.0) (>= win8)) (&& (>= netstandard2.0) (>= wp8)) System.Runtime.Extensions (4.3.1) - restriction: || (&& (< monoandroid) (< net45) (< netcoreapp1.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net461)) Microsoft.NETCore.Platforms (>= 1.1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) Microsoft.NETCore.Targets (>= 1.1.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) @@ -246,6 +266,7 @@ NUGET System.Reflection.Primitives (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net462) (>= netcoreapp1.1) System.Runtime.Handles (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) + System.Runtime.InteropServices.RuntimeInformation (4.3) - restriction: >= uap10.0 System.Security.AccessControl (4.6) - restriction: || (&& (>= monotouch) (>= netstandard2.0)) (&& (< net46) (>= netstandard2.0)) (&& (>= net461) (>= netstandard2.0)) (>= netcoreapp2.0) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac) Microsoft.NETCore.Platforms (>= 3.0) - restriction: >= netcoreapp2.0 System.Security.Principal.Windows (>= 4.6) - restriction: || (&& (>= net46) (< netstandard2.0)) (&& (< net46) (>= netstandard1.3) (< netstandard2.0) (< uap10.1)) (&& (< net46) (>= netstandard2.0)) (>= net461) (>= netcoreapp2.0) @@ -288,7 +309,7 @@ NUGET Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) - System.Threading.Tasks.Extensions (4.5.3) - restriction: || (&& (< net45) (>= net461)) (&& (< net45) (>= netstandard2.0)) (&& (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= net461) (>= netstandard2.0)) (&& (>= net461) (< netstandard2.0)) (>= net47) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (>= netstandard2.0) (>= uap10.1)) + System.Threading.Tasks.Extensions (4.5.3) - restriction: || (&& (< net45) (>= net461)) (&& (< net45) (>= netstandard2.0)) (&& (>= net461) (< netstandard2.0)) (>= net47) System.Runtime.CompilerServices.Unsafe (>= 4.5.2) - restriction: || (&& (< monoandroid) (< monotouch) (>= netstandard1.0) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netstandard1.0) (>= portable-net45+win8+wp8+wpa81) (< win8)) (>= net45) (&& (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< netstandard1.0) (>= win8)) (&& (< netstandard2.0) (>= wpa81)) (>= wp8) System.ValueTuple (4.5) - restriction: || (&& (>= net45) (< net46) (< netstandard1.6) (>= netstandard2.0)) (&& (< net45) (>= netstandard2.0)) (&& (>= net46) (< netstandard1.6) (>= netstandard2.0)) (>= net461) System.Windows.Extensions (4.6) - restriction: >= netcoreapp3.0 @@ -351,6 +372,11 @@ NUGET System.Reflection.Emit.Lightweight (>= 4.3) - restriction: || (&& (>= net45) (< netstandard2.0)) (&& (< net45) (>= netstandard2.0)) (>= net47) System.Threading.Tasks.Extensions (>= 4.4) - restriction: || (&& (>= net45) (< netstandard2.0)) (&& (< net45) (>= netstandard2.0)) (>= net47) System.ValueTuple (>= 4.4) - restriction: || (&& (>= net45) (< netstandard2.0)) (&& (< net45) (>= netstandard2.0)) (>= net47) + YoloDev.Expecto.TestSdk (0.8) + Expecto (>= 8.10 < 9.0) - restriction: || (>= net461) (>= netcoreapp2.0) + FSharp.Core (>= 4.3.4) - restriction: || (>= net461) (>= netcoreapp2.0) + System.Collections.Immutable (>= 1.4) - restriction: || (>= net461) (>= netcoreapp2.0) + System.ValueTuple (>= 4.4) - restriction: >= net461 GROUP netcorebuild RESTRICTION: == netstandard2.0 diff --git a/src/ThothSerializer.fs b/src/ThothSerializer.fs index d1ae17a..05a1a0f 100644 --- a/src/ThothSerializer.fs +++ b/src/ThothSerializer.fs @@ -22,6 +22,7 @@ type ThothSerializer (?isCamelCase : bool, ?extra : ExtraCoders, ?skipNullField use stream = new System.IO.StreamWriter(ctx.Response.Body, Utf8EncodingWithoutBom, DefaultBufferSize, true) use jsonWriter = new JsonTextWriter(stream) do! body.WriteToAsync(jsonWriter) + do! jsonWriter.FlushAsync() return Some ctx } @@ -42,6 +43,7 @@ type ThothSerializer (?isCamelCase : bool, ?extra : ExtraCoders, ?skipNullField jsonWriter.WriteStartArray() for item in items do do! item.WriteToAsync(jsonWriter) + do! jsonWriter.FlushAsync() jsonWriter.WriteEndArray() return Some ctx } @@ -127,4 +129,5 @@ type ThothSerializer (?isCamelCase : bool, ?extra : ExtraCoders, ?skipNullField use jsonWriter = new JsonTextWriter(streamWriter) let encoder = Encode.Auto.generateEncoderCached<'T>(?isCamelCase=isCamelCase, ?extra=extra, ?skipNullField=skipNullField) do! (encoder o).WriteToAsync(jsonWriter) + do! jsonWriter.FlushAsync() } diff --git a/tests/Main.fs b/tests/Main.fs new file mode 100644 index 0000000..2a3c7e1 --- /dev/null +++ b/tests/Main.fs @@ -0,0 +1,7 @@ +module Thoth.Json.Giraffe.Tests + +open Expecto + +[] +let main argv = + Tests.runTestsInAssembly defaultConfig argv diff --git a/tests/Thoth.Json.Giraffe.Tests.fsproj b/tests/Thoth.Json.Giraffe.Tests.fsproj new file mode 100644 index 0000000..d2592e2 --- /dev/null +++ b/tests/Thoth.Json.Giraffe.Tests.fsproj @@ -0,0 +1,18 @@ + + + Exe + netcoreapp3.1 + false + + + + + + + + + + + + + diff --git a/tests/ThothSerializer.fs b/tests/ThothSerializer.fs new file mode 100644 index 0000000..7ba105d --- /dev/null +++ b/tests/ThothSerializer.fs @@ -0,0 +1,100 @@ +module Tests.ThothSerializer + +open System +open System.Net +open System.Net.Http + +open Microsoft.AspNetCore +open Microsoft.AspNetCore.Builder +open Microsoft.AspNetCore.Hosting +open Microsoft.AspNetCore.TestHost +open Microsoft.Extensions.Hosting +open Microsoft.Extensions.Logging +open Microsoft.Extensions.DependencyInjection + +open FSharp.Control.Tasks.V2.ContextInsensitive + +open Giraffe +open Thoth.Json.Giraffe + +open Expecto + +// ---------------------------------------------------------------------------- +// Test server/client setup +// ---------------------------------------------------------------------------- +module Encode = + open Thoth.Json.Net + + let person (id, name) = + Encode.object + [ "id", Encode.int id + "name", Encode.string name + ] + + let persons ps = List.map person ps |> Encode.list + +module Decode = + open Thoth.Json.Net + + let person = + Decode.map2 (fun id name -> id, name) + (Decode.field "id" Decode.int) + (Decode.field "name" Decode.string) + + let persons = + Decode.list person + +let webApp = + let postAndSendBack next ctx = + task { + match! ThothSerializer.ReadBody ctx Decode.persons with + | Ok body -> return! ThothSerializer.RespondJson body Encode.persons next ctx + | Error e -> return! text (sprintf "Error while deserializing: %s" e) next ctx + } + + choose + [ route "/" >=> + choose + [ GET >=> + ThothSerializer.RespondJson + [ (1, "Maxime") + (2, "Thoth") + ] + Encode.persons + POST >=> postAndSendBack + ] + ] + +let createHost () = + HostBuilder() + .ConfigureServices(Action + (fun (services : IServiceCollection) -> services.AddGiraffe() |> ignore)) + .ConfigureWebHost(fun webHost -> + webHost.UseTestServer() |> ignore + webHost.Configure(Action (fun app -> app.UseGiraffe(webApp) |> ignore)) + |> ignore) + +[] +let tests = + let json = "[{\"id\":1,\"name\":\"Maxime\"},{\"id\":2,\"name\":\"Thoth\"}]" + testList "ThothSerializer" [ + testTask "Serialization" { + let hostBuilder = createHost () + use! host = hostBuilder.StartAsync () + let client = (host :> IHost).GetTestClient() + let! (response : HttpResponseMessage) = client.GetAsync("/") + let! content = response.EnsureSuccessStatusCode().Content.ReadAsStringAsync() + + Expect.equal content json "Serialization failure" + } + + testTask "Deserialization" { + let hostBuilder = createHost () + use! host = hostBuilder.StartAsync() + let client = (host :> IHost).GetTestClient() + let! (response : HttpResponseMessage) = client.PostAsync("/", new StringContent(json)) + let! content = response.EnsureSuccessStatusCode().Content.ReadAsStringAsync() + + Expect.equal content json "Deserialization failure" + } + ] diff --git a/tests/paket.references b/tests/paket.references new file mode 100644 index 0000000..c420d57 --- /dev/null +++ b/tests/paket.references @@ -0,0 +1,5 @@ +FSharp.Core +Expecto +Microsoft.AspNetCore.TestHost +Microsoft.NET.Test.Sdk +YoloDev.Expecto.TestSdk \ No newline at end of file