diff --git a/CHANGES.txt b/CHANGES.txt
index 0de4aca8e..326598977 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -753,3 +753,8 @@ Release 1.0.0 2018-6-14
* Fix map keys order emitted by asymmetric (serialization only) serializer are inconsistent across platform.
* Fix Unity build does not honor serialization related attributes correctly.
* Fix internal inconsitency between serialization related attributes detection and their parameter retrieval.
+
+Release 1.0.1 2018-09-09
+
+ BUG FIXES
+ * Fix conversion from DateTime[Offset] to Timestamp failure for before Unix epoc. #296
diff --git a/MsgPack.nuspec b/MsgPack.nuspec
index 3a4062a4f..aa088e4d2 100644
--- a/MsgPack.nuspec
+++ b/MsgPack.nuspec
@@ -76,6 +76,12 @@ This package provides MessagePack serialization/deserialization APIs. This pacak
+
+
+
+
+
+
@@ -89,4 +95,4 @@ This package provides MessagePack serialization/deserialization APIs. This pacak
-
\ No newline at end of file
+
diff --git a/README.md b/README.md
index bbf89204a..9ed575081 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,17 @@
# MessagePack for CLI
-[](https://ci.appveyor.com/project/yfakariya/msgpack-cli-x2p85)
-[](https://ci.appveyor.com/project/yfakariya/msgpack-cli)
-[](https://ci.appveyor.com/project/yfakariya/msgpack-cli-3jme9)
-[](https://ci.appveyor.com/project/yfakariya/msgpack-cli-rhnh0)
+## CI Status
+
+|**Configuration**|**Status**|
+|:--|:--|
+|Release |[](https://ci.appveyor.com/project/yfakariya/msgpack-cli-x2p85)|
+|Debug (.NET Core 2.0) |[](https://ci.appveyor.com/project/yfakariya/msgpack-cli)|
+|Debug (.NET Core 2.0) |[](https://ci.appveyor.com/project/yfakariya/msgpack-cli-g3guk)|
+|Debug (.NET Framework 4.x) |[](https://ci.appveyor.com/project/yfakariya/msgpack-cli-nuf62)|
+|Debug (Code DOM)] |[](https://ci.appveyor.com/project/yfakariya/msgpack-cli-rhnh0)|
+|Debug (miscs)] |[](https://ci.appveyor.com/project/yfakariya/msgpack-cli-bo856)|
+|Debug (.NET Framework 3.5) |[](https://ci.appveyor.com/project/yfakariya/msgpack-cli-3jme9)|
+|Debug (.NET Framework 3.5 Code DOM) |[](https://ci.appveyor.com/project/yfakariya/msgpack-cli-rhnh0)|
## What is it?
diff --git a/appveyor-debug-codedom.yml b/appveyor-debug-codedom.yml
new file mode 100644
index 000000000..d4aebb8cc
--- /dev/null
+++ b/appveyor-debug-codedom.yml
@@ -0,0 +1,39 @@
+version: '{branch}-{build}'
+image: Visual Studio 2017
+skip_tags: true
+configuration: Debug
+assembly_info:
+ patch: true
+ file: '**\*AssemblyInfo.cs'
+ assembly_version: $(AssemblyBaseVersion).0
+ assembly_file_version: $(AssemblyBaseVersion).{build}
+ assembly_informational_version: $(PackageVersion)
+environment:
+ XamarinMSBuildExtensionsPath: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild
+install:
+- cmd: >-
+ cd .\build
+- ps: >-
+ ./SetBuildEnv.ps1
+
+ cd ..
+build_script:
+- ps: >-
+ Write-Host "Configuration=${env:CONFIGURATION}"
+
+ cd ./build
+
+ ./Build.ps1
+
+ if ( $LastExitCode -ne 0 )
+ {
+ Write-Error "Failed to build."
+ exit 1
+ }
+
+ cd ..
+test_script:
+- cmd: >-
+ cd ./build
+
+ ./RunUnitTests-CodeDOM.cmd
diff --git a/appveyor-debug-netcore10.yml b/appveyor-debug-netcore10.yml
new file mode 100644
index 000000000..5389a70c0
--- /dev/null
+++ b/appveyor-debug-netcore10.yml
@@ -0,0 +1,39 @@
+version: '{branch}-{build}'
+image: Visual Studio 2017
+skip_tags: true
+configuration: Debug
+assembly_info:
+ patch: true
+ file: '**\*AssemblyInfo.cs'
+ assembly_version: $(AssemblyBaseVersion).0
+ assembly_file_version: $(AssemblyBaseVersion).{build}
+ assembly_informational_version: $(PackageVersion)
+environment:
+ XamarinMSBuildExtensionsPath: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild
+install:
+- cmd: >-
+ cd .\build
+- ps: >-
+ ./SetBuildEnv.ps1
+
+ cd ..
+build_script:
+- ps: >-
+ Write-Host "Configuration=${env:CONFIGURATION}"
+
+ cd ./build
+
+ ./Build.ps1
+
+ if ( $LastExitCode -ne 0 )
+ {
+ Write-Error "Failed to build."
+ exit 1
+ }
+
+ cd ..
+test_script:
+- cmd: >-
+ cd ./build
+
+ ./RunUnitTests-NetCore10.cmd
diff --git a/appveyor-debug4x.yml b/appveyor-debug4x.yml
new file mode 100644
index 000000000..66fff7217
--- /dev/null
+++ b/appveyor-debug4x.yml
@@ -0,0 +1,39 @@
+version: '{branch}-{build}'
+image: Visual Studio 2017
+skip_tags: true
+configuration: Debug
+assembly_info:
+ patch: true
+ file: '**\*AssemblyInfo.cs'
+ assembly_version: $(AssemblyBaseVersion).0
+ assembly_file_version: $(AssemblyBaseVersion).{build}
+ assembly_informational_version: $(PackageVersion)
+environment:
+ XamarinMSBuildExtensionsPath: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild
+install:
+- cmd: >-
+ cd .\build
+- ps: >-
+ ./SetBuildEnv.ps1
+
+ cd ..
+build_script:
+- ps: >-
+ Write-Host "Configuration=${env:CONFIGURATION}"
+
+ cd ./build
+
+ ./Build.ps1
+
+ if ( $LastExitCode -ne 0 )
+ {
+ Write-Error "Failed to build."
+ exit 1
+ }
+
+ cd ..
+test_script:
+- cmd: >-
+ cd ./build
+
+ ./RunUnitTests4x.cmd
diff --git a/appveyor-release.yml b/appveyor-release.yml
index b763baea5..49dca6f53 100644
--- a/appveyor-release.yml
+++ b/appveyor-release.yml
@@ -3,9 +3,7 @@ image: Visual Studio 2017
branches:
only:
- master
- - 0.7
- - 0.8
- - 0.9
+ - /[0-9]+\.[0-9]+(\.[xX])?/
configuration: Release
assembly_info:
patch: true
diff --git a/build/Build.ps1 b/build/Build.ps1
index 8f4e35827..c397399b9 100644
--- a/build/Build.ps1
+++ b/build/Build.ps1
@@ -158,7 +158,7 @@ if ( $buildConfig -eq 'Release' )
{
Write-Host "Build NuGet packages..."
- & $msbuild ../src/MsgPack/MsgPack.csproj /t:pack /v:minimal /p:Configuration=$buildConfig /p:IncludeSource=true /p:NuspecProperties=version=$env:PackageVersion
+ & $msbuild ../src/MsgPack/MsgPack.csproj /t:pack /v:minimal /p:Configuration=$buildConfig /p:IncludeSource=true /p:IncludeSymbols=true /p:NuspecProperties=version=$env:PackageVersion
Move-Item ../bin/*.nupkg ../dist/
Copy-Item ../bin/* ./MsgPack-CLI/ -Recurse -Exclude @("*.vshost.*")
diff --git a/build/RunUnitTests-CodeDOM.cmd b/build/RunUnitTests-CodeDOM.cmd
new file mode 100644
index 000000000..4274d15f5
--- /dev/null
+++ b/build/RunUnitTests-CodeDOM.cmd
@@ -0,0 +1,8 @@
+dotnet test %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.CodeDom/MsgPack.UnitTest.CodeDom.csproj
+if not %errorlevel% == 0 exit /b 1
+@rem WinRT related tests require developer license...
+@rem vstest.console /logger:Appveyor /InIsolation %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.WinRT/AppPackages/MsgPack.UnitTest.WinRT_1.1.0.0_AnyCPU_Debug_Test/MsgPack.UnitTest.WinRT_1.1.0.0_AnyCPU_Debug.appx
+@rem vstest.console /logger:Appveyor /InIsolation %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.BclExtensions.WinRT/AppPackages/MsgPack.UnitTest.BclExtensions.WinRT_1.1.0.0_AnyCPU_Debug_Test/MsgPack.UnitTest.BclExtensions.WinRT_1.1.0.0_AnyCPU_Debug.appx
+@rem vstest.console /logger:Appveyor /InIsolation %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.WinRT.WindowsPhone/AppPackages/MsgPack.UnitTest.WinRT.WindowsPhone_1.0.0.0_x86_Debug_Test/MsgPack.UnitTest.WinRT.WindowsPhone_1.0.0.0_x86_Debug.appx
+@rem UWP test with NUnit3 is not available in cli
+@rem Xamarin tests are not available in cli
\ No newline at end of file
diff --git a/build/RunUnitTests-NetCore10.cmd b/build/RunUnitTests-NetCore10.cmd
new file mode 100644
index 000000000..b1ec28612
--- /dev/null
+++ b/build/RunUnitTests-NetCore10.cmd
@@ -0,0 +1,10 @@
+dotnet test %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest/MsgPack.UnitTest.csproj --framework netcoreapp1.0
+if not %errorlevel% == 0 exit /b 1
+dotnet test %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.BclExtensions/MsgPack.UnitTest.BclExtensions.csproj --framework netcoreapp1.0
+if not %errorlevel% == 0 exit /b 1
+@rem WinRT related tests require developer license...
+@rem vstest.console /logger:Appveyor /InIsolation %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.WinRT/AppPackages/MsgPack.UnitTest.WinRT_1.1.0.0_AnyCPU_Debug_Test/MsgPack.UnitTest.WinRT_1.1.0.0_AnyCPU_Debug.appx
+@rem vstest.console /logger:Appveyor /InIsolation %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.BclExtensions.WinRT/AppPackages/MsgPack.UnitTest.BclExtensions.WinRT_1.1.0.0_AnyCPU_Debug_Test/MsgPack.UnitTest.BclExtensions.WinRT_1.1.0.0_AnyCPU_Debug.appx
+@rem vstest.console /logger:Appveyor /InIsolation %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.WinRT.WindowsPhone/AppPackages/MsgPack.UnitTest.WinRT.WindowsPhone_1.0.0.0_x86_Debug_Test/MsgPack.UnitTest.WinRT.WindowsPhone_1.0.0.0_x86_Debug.appx
+@rem UWP test with NUnit3 is not available in cli
+@rem Xamarin tests are not available in cli
\ No newline at end of file
diff --git a/build/RunUnitTests.cmd b/build/RunUnitTests.cmd
index a8f210bdb..ed3e8884c 100644
--- a/build/RunUnitTests.cmd
+++ b/build/RunUnitTests.cmd
@@ -1,8 +1,6 @@
-dotnet test %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest/MsgPack.UnitTest.csproj
+dotnet test %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest/MsgPack.UnitTest.csproj --framework netcoreapp2.0
if not %errorlevel% == 0 exit /b 1
-dotnet test %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.BclExtensions/MsgPack.UnitTest.BclExtensions.csproj
-if not %errorlevel% == 0 exit /b 1
-dotnet test %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.CodeDom/MsgPack.UnitTest.CodeDom.csproj
+dotnet test %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.BclExtensions/MsgPack.UnitTest.BclExtensions.csproj --framework netcoreapp2.0
if not %errorlevel% == 0 exit /b 1
@rem WinRT related tests require developer license...
@rem vstest.console /logger:Appveyor /InIsolation %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.WinRT/AppPackages/MsgPack.UnitTest.WinRT_1.1.0.0_AnyCPU_Debug_Test/MsgPack.UnitTest.WinRT_1.1.0.0_AnyCPU_Debug.appx
diff --git a/build/RunUnitTests4x.cmd b/build/RunUnitTests4x.cmd
new file mode 100644
index 000000000..4b1b79408
--- /dev/null
+++ b/build/RunUnitTests4x.cmd
@@ -0,0 +1,10 @@
+dotnet test %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest/MsgPack.UnitTest.csproj --framework net47
+if not %errorlevel% == 0 exit /b 1
+dotnet test %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.BclExtensions/MsgPack.UnitTest.BclExtensions.csproj --framework net47
+if not %errorlevel% == 0 exit /b 1
+@rem WinRT related tests require developer license...
+@rem vstest.console /logger:Appveyor /InIsolation %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.WinRT/AppPackages/MsgPack.UnitTest.WinRT_1.1.0.0_AnyCPU_Debug_Test/MsgPack.UnitTest.WinRT_1.1.0.0_AnyCPU_Debug.appx
+@rem vstest.console /logger:Appveyor /InIsolation %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.BclExtensions.WinRT/AppPackages/MsgPack.UnitTest.BclExtensions.WinRT_1.1.0.0_AnyCPU_Debug_Test/MsgPack.UnitTest.BclExtensions.WinRT_1.1.0.0_AnyCPU_Debug.appx
+@rem vstest.console /logger:Appveyor /InIsolation %APPVEYOR_BUILD_FOLDER%/test/MsgPack.UnitTest.WinRT.WindowsPhone/AppPackages/MsgPack.UnitTest.WinRT.WindowsPhone_1.0.0.0_x86_Debug_Test/MsgPack.UnitTest.WinRT.WindowsPhone_1.0.0.0_x86_Debug.appx
+@rem UWP test with NUnit3 is not available in cli
+@rem Xamarin tests are not available in cli
\ No newline at end of file
diff --git a/build/Version.txt b/build/Version.txt
index afaf360d3..7f207341d 100644
--- a/build/Version.txt
+++ b/build/Version.txt
@@ -1 +1 @@
-1.0.0
\ No newline at end of file
+1.0.1
\ No newline at end of file
diff --git a/src/MsgPack/PackerUnpackerStreamOptions.cs b/src/MsgPack/PackerUnpackerStreamOptions.cs
index 71a1bf8f5..9500851db 100644
--- a/src/MsgPack/PackerUnpackerStreamOptions.cs
+++ b/src/MsgPack/PackerUnpackerStreamOptions.cs
@@ -82,9 +82,19 @@ private static bool ShouldWrapStream( Stream stream )
#else
internal
#endif
- static readonly PackerUnpackerStreamOptions SingletonForAsync =
+ static readonly PackerUnpackerStreamOptions SingletonForAsyncPacking =
+ // It is OK for serialize to do buffering because we explicitly call FlushAsync for it.
new PackerUnpackerStreamOptions { OwnsStream = true, WithBuffering = true };
+ #if UNITY && DEBUG
+ public
+#else
+ internal
+#endif
+ static readonly PackerUnpackerStreamOptions SingletonForAsyncUnpacking =
+ // Buffering causes data loss in deserialization because buffered bytes will be gone in a tail of Deserialize(Stream) call.
+ new PackerUnpackerStreamOptions { OwnsStream = true, WithBuffering = false };
+
#if UNITY && DEBUG
public
#else
diff --git a/src/MsgPack/Serialization/MessagePackSerializer`1.cs b/src/MsgPack/Serialization/MessagePackSerializer`1.cs
index 8434bc622..5355763f1 100644
--- a/src/MsgPack/Serialization/MessagePackSerializer`1.cs
+++ b/src/MsgPack/Serialization/MessagePackSerializer`1.cs
@@ -219,7 +219,7 @@ public Task PackAsync( Stream stream, T objectTree )
///
public async Task PackAsync( Stream stream, T objectTree, CancellationToken cancellationToken )
{
- var packer = Packer.Create( stream, this.PackerCompatibilityOptions, PackerUnpackerStreamOptions.SingletonForAsync );
+ var packer = Packer.Create( stream, this.PackerCompatibilityOptions, PackerUnpackerStreamOptions.SingletonForAsyncPacking );
try
{
await this.PackToAsync( packer, objectTree, cancellationToken ).ConfigureAwait( false );
@@ -324,7 +324,7 @@ public Task UnpackAsync( Stream stream )
public async Task UnpackAsync( Stream stream, CancellationToken cancellationToken )
{
// Unpacker does not have finalizer, so just avoiding unpacker disposing prevents stream closing.
- var unpacker = Unpacker.Create( stream, PackerUnpackerStreamOptions.SingletonForAsync, DefaultUnpackerOptions );
+ var unpacker = Unpacker.Create( stream, PackerUnpackerStreamOptions.SingletonForAsyncUnpacking, DefaultUnpackerOptions );
if ( !( await unpacker.ReadAsync( cancellationToken ).ConfigureAwait( false ) ) )
{
SerializationExceptions.ThrowUnexpectedEndOfStream( unpacker );
diff --git a/src/MsgPack/Timestamp.Conversion.cs b/src/MsgPack/Timestamp.Conversion.cs
index f6fbc24ef..56b28063c 100644
--- a/src/MsgPack/Timestamp.Conversion.cs
+++ b/src/MsgPack/Timestamp.Conversion.cs
@@ -133,6 +133,14 @@ private static void FromOffsetTicks( long ticks, out long unixEpocSeconds, out i
long remaining;
unixEpocSeconds = DivRem( ticks, SecondsToTicks, out remaining );
nanoSeconds = unchecked( ( int )remaining ) * 100;
+ if ( nanoSeconds < 0 )
+ {
+ // In this case, we must adjust these values
+ // from "negative nanosec from nearest larger negative integer"
+ // to "positive nanosec from nearest smaller nagative integer".
+ unixEpocSeconds -= 1;
+ nanoSeconds = ( MaxNanoSeconds + 1 ) + nanoSeconds;
+ }
}
///
diff --git a/test/MsgPack.UnitTest.BclExtensions.WinRT/MsgPack.UnitTest.BclExtensions.WinRT.csproj b/test/MsgPack.UnitTest.BclExtensions.WinRT/MsgPack.UnitTest.BclExtensions.WinRT.csproj
index d1374018d..f262117be 100644
--- a/test/MsgPack.UnitTest.BclExtensions.WinRT/MsgPack.UnitTest.BclExtensions.WinRT.csproj
+++ b/test/MsgPack.UnitTest.BclExtensions.WinRT/MsgPack.UnitTest.BclExtensions.WinRT.csproj
@@ -15,7 +15,7 @@
MsgPack.UnitTest.BclExtensions.WinRT_TemporaryKey.pfx
..\..\
true
- 34322AD6CF171CC843FCCE936CB6B9B616B961E1
+ AA68CFB533B03B5B4FAD8AE85A404BD5936CB7C7
8.1
12
@@ -23,7 +23,8 @@
-
+
+
$(DefineConstants);NETFX_CORE;NETSTANDARD1_1;FEATURE_TAP;MSTEST
;2008
diff --git a/test/MsgPack.UnitTest.BclExtensions.WinRT/MsgPack.UnitTest.BclExtensions.WinRT_TemporaryKey.pfx b/test/MsgPack.UnitTest.BclExtensions.WinRT/MsgPack.UnitTest.BclExtensions.WinRT_TemporaryKey.pfx
index 322dc6f60..9c3c1d013 100644
Binary files a/test/MsgPack.UnitTest.BclExtensions.WinRT/MsgPack.UnitTest.BclExtensions.WinRT_TemporaryKey.pfx and b/test/MsgPack.UnitTest.BclExtensions.WinRT/MsgPack.UnitTest.BclExtensions.WinRT_TemporaryKey.pfx differ
diff --git a/test/MsgPack.UnitTest.Uwp.Aot/MsgPack.UnitTest.Uwp.Aot.csproj b/test/MsgPack.UnitTest.Uwp.Aot/MsgPack.UnitTest.Uwp.Aot.csproj
index ac6872671..405c158f6 100644
--- a/test/MsgPack.UnitTest.Uwp.Aot/MsgPack.UnitTest.Uwp.Aot.csproj
+++ b/test/MsgPack.UnitTest.Uwp.Aot/MsgPack.UnitTest.Uwp.Aot.csproj
@@ -14,7 +14,7 @@
{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
MsgPack.UnitTest.Uwp.Aot_TemporaryKey.pfx
14.0
- C125CA52683091C62F7746FF9A159E44B2A18673
+ 880646284800F8F3356B8C7E3E734562D8BB304F
diff --git a/test/MsgPack.UnitTest.Uwp.Aot/MsgPack.UnitTest.Uwp.Aot_TemporaryKey.pfx b/test/MsgPack.UnitTest.Uwp.Aot/MsgPack.UnitTest.Uwp.Aot_TemporaryKey.pfx
index bdea5d913..8a0d0bd47 100644
Binary files a/test/MsgPack.UnitTest.Uwp.Aot/MsgPack.UnitTest.Uwp.Aot_TemporaryKey.pfx and b/test/MsgPack.UnitTest.Uwp.Aot/MsgPack.UnitTest.Uwp.Aot_TemporaryKey.pfx differ
diff --git a/test/MsgPack.UnitTest.Uwp/MsgPack.UnitTest.Uwp.csproj b/test/MsgPack.UnitTest.Uwp/MsgPack.UnitTest.Uwp.csproj
index 081f56673..6f5dfbce1 100644
--- a/test/MsgPack.UnitTest.Uwp/MsgPack.UnitTest.Uwp.csproj
+++ b/test/MsgPack.UnitTest.Uwp/MsgPack.UnitTest.Uwp.csproj
@@ -14,11 +14,12 @@
{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
MsgPack.UnitTest.Uwp_TemporaryKey.pfx
14.0
- 0CEFF2E3DC6DD3A7245B2FB641B6DE056C5A79D9
+ 807856C98966D121CA69C33F7D6475CF03AA8633
-
+
+
$(DefineConstants);NETFX_CORE;WINDOWS_UWP;NETSTANDARD1_3;FEATURE_TAP
;2008
false
diff --git a/test/MsgPack.UnitTest.Uwp/MsgPack.UnitTest.Uwp_TemporaryKey.pfx b/test/MsgPack.UnitTest.Uwp/MsgPack.UnitTest.Uwp_TemporaryKey.pfx
index d9a6dd761..604dac0b0 100644
Binary files a/test/MsgPack.UnitTest.Uwp/MsgPack.UnitTest.Uwp_TemporaryKey.pfx and b/test/MsgPack.UnitTest.Uwp/MsgPack.UnitTest.Uwp_TemporaryKey.pfx differ
diff --git a/test/MsgPack.UnitTest.WinRT/MsgPack.UnitTest.WinRT.csproj b/test/MsgPack.UnitTest.WinRT/MsgPack.UnitTest.WinRT.csproj
index e0e54b445..ef2acfe77 100644
--- a/test/MsgPack.UnitTest.WinRT/MsgPack.UnitTest.WinRT.csproj
+++ b/test/MsgPack.UnitTest.WinRT/MsgPack.UnitTest.WinRT.csproj
@@ -11,7 +11,7 @@
512
{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
MsgPack.UnitTest.WinRT_TemporaryKey.pfx
- A411E1A11B99FF48CFDEDA3098F7F4D0FB6D746D
+ DEBDFCC31BC8F851996AD84C394EA999CA3ED9D1
8.1
12
@@ -19,7 +19,8 @@
-
+
+
$(DefineConstants);NETFX_CORE;NETSTANDARD1_1;FEATURE_TAP;MSTEST
;2008
diff --git a/test/MsgPack.UnitTest.WinRT/MsgPack.UnitTest.WinRT_TemporaryKey.pfx b/test/MsgPack.UnitTest.WinRT/MsgPack.UnitTest.WinRT_TemporaryKey.pfx
index 66ea08c7a..194d5586e 100644
Binary files a/test/MsgPack.UnitTest.WinRT/MsgPack.UnitTest.WinRT_TemporaryKey.pfx and b/test/MsgPack.UnitTest.WinRT/MsgPack.UnitTest.WinRT_TemporaryKey.pfx differ
diff --git a/test/MsgPack.UnitTest/Serialization/RegressionTests.cs b/test/MsgPack.UnitTest/Serialization/RegressionTests.cs
index 65bdf4434..36be0c54f 100644
--- a/test/MsgPack.UnitTest/Serialization/RegressionTests.cs
+++ b/test/MsgPack.UnitTest/Serialization/RegressionTests.cs
@@ -547,5 +547,27 @@ public void TestIssue269()
var forString = Assert.Throws( () => target.AsString() );
Assert.That( forString.Message, Is.EqualTo( "Do not convert MsgPack.MessagePackExtendedTypeObject MessagePackObject to System.String." ) );
}
+
+#if FEATURE_TAP
+ [Test]
+ public async Task TestIssue321_AsyncBuffering()
+ {
+ var context = new SerializationContext();
+ var serializer = context.GetSerializer();
+ using ( var stream = new MyMemoryStream() )
+ {
+ await serializer.PackAsync( stream, "hello" );
+ await serializer.PackAsync( stream, "world" );
+ stream.Position = 0;
+ var result1 = await serializer.UnpackAsync( stream );
+ // Ensure no exceptions are thrown.
+ var result2 = await serializer.UnpackAsync( stream );
+ }
+ }
+#endif // FEATURE_TAP
+
+ public class MyMemoryStream : MemoryStream
+ {
+ }
}
}
diff --git a/test/MsgPack.UnitTest/TimestampTest.Conversion.cs b/test/MsgPack.UnitTest/TimestampTest.Conversion.cs
index e57acad2f..2dd85b81b 100644
--- a/test/MsgPack.UnitTest/TimestampTest.Conversion.cs
+++ b/test/MsgPack.UnitTest/TimestampTest.Conversion.cs
@@ -285,6 +285,7 @@ private static void AssertSubseconds( Timestamp target, DateTime expected )
Assert.That( target.Microsecond, Is.EqualTo( ticks / 10 ), "Microsecond" );
Assert.That( target.Nanosecond, Is.EqualTo( ( ticks % 10 ) * 100 ), "Nanosecond" );
}
+
[Test]
public void TestFromDateTimeOffset_UtcNow_OK()
{
@@ -536,5 +537,379 @@ private static void AssertSubseconds( Timestamp target, DateTimeOffset expected
Assert.That( target.Microsecond, Is.EqualTo( ticks / 10 ), "Microsecond" );
Assert.That( target.Nanosecond, Is.EqualTo( ( ticks % 10 ) * 100 ), "Nanosecond" );
}
+
+#if !NET35 && !SILVERLIGHT && !NETSTANDARD1_1
+
+ [Test]
+ public void TestFromDateTime_UnixEpoc_OK()
+ {
+ var source = DateTimeOffset.FromUnixTimeMilliseconds( 0 ).DateTime;
+ var target = Timestamp.FromDateTime( source );
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ }
+
+ [Test]
+ public void TestFromDateTime_UnixEpocMinus1Millisecond_OK()
+ {
+ var source = DateTimeOffset.FromUnixTimeMilliseconds( -1 ).DateTime;
+ var target = Timestamp.FromDateTime( source );
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ }
+
+ [Test]
+ public void TestFromDateTime_UnixEpocPlus1Millisecond_OK()
+ {
+ var source = DateTimeOffset.FromUnixTimeMilliseconds( 1 ).DateTime;
+ var target = Timestamp.FromDateTime( source );
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ }
+
+ [Test]
+ public void TestFromDateTime_UnixEpocMinusSecond_OK()
+ {
+ var source = DateTimeOffset.FromUnixTimeSeconds( -1 ).DateTime;
+ var target = Timestamp.FromDateTime( source );
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ }
+
+ [Test]
+ public void TestFromDateTime_UnixEpocPlus1Second_OK()
+ {
+ var source = DateTimeOffset.FromUnixTimeSeconds( 1 ).DateTime;
+ var target = Timestamp.FromDateTime( source );
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ }
+
+ [Test]
+ public void TestToDateTime_UnixEpoc_OK()
+ {
+ var source = default( Timestamp );
+ var target = source.ToDateTime();
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ AssertUtc( target );
+ }
+
+ [Test]
+ public void TestToDateTime_UnixEpocMinus1Millisecond_OK()
+ {
+ var source = default( Timestamp ).Add( TimeSpan.FromMilliseconds( -1 ) );
+ var target = source.ToDateTime();
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ AssertUtc( target );
+ }
+
+ [Test]
+ public void TestToDateTime_UnixEpocPlus1Millisecond_OK()
+ {
+ var source = default( Timestamp ).Add( TimeSpan.FromMilliseconds( 1 ) );
+ var target = source.ToDateTime();
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ AssertUtc( target );
+ }
+
+ [Test]
+ public void TestToDateTime_UnixEpocMinus1Second_OK()
+ {
+ var source = default( Timestamp ).Add( TimeSpan.FromSeconds( -1 ) );
+ var target = source.ToDateTime();
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ AssertUtc( target );
+ }
+
+ [Test]
+ public void TestToDateTime_UnixEpocPlus1Second_OK()
+ {
+ var source = default( Timestamp ).Add( TimeSpan.FromSeconds( 1 ) );
+ var target = source.ToDateTime();
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ AssertUtc( target );
+ }
+
+ [Test]
+ public void TestFromDateTimeOffset_UnixEpoc_OK()
+ {
+ var source = DateTimeOffset.FromUnixTimeMilliseconds( 0 );
+ var target = Timestamp.FromDateTimeOffset( source );
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ }
+
+ [Test]
+ public void TestFromDateTimeOffset_UnixEpocMinus1Millisecond_OK()
+ {
+ var source = DateTimeOffset.FromUnixTimeMilliseconds( -1 );
+ var target = Timestamp.FromDateTimeOffset( source );
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ }
+
+ [Test]
+ public void TestFromDateTimeOffset_UnixEpocPlus1Millisecond_OK()
+ {
+ var source = DateTimeOffset.FromUnixTimeMilliseconds( 1 );
+ var target = Timestamp.FromDateTimeOffset( source );
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ }
+
+ [Test]
+ public void TestFromDateTimeOffset_UnixEpocMinus1Second_OK()
+ {
+ var source = DateTimeOffset.FromUnixTimeSeconds( -1 );
+ var target = Timestamp.FromDateTimeOffset( source );
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ }
+
+ [Test]
+ public void TestFromDateTimeOffset_UnixEpocPlus1Second_OK()
+ {
+ var source = DateTimeOffset.FromUnixTimeSeconds( 1 );
+ var target = Timestamp.FromDateTimeOffset( source );
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ }
+
+ [Test]
+ public void TestToDateTimeOffset_UnixEpoc_OK()
+ {
+ var source = default( Timestamp );
+ var target = source.ToDateTimeOffset();
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ AssertUtc( target );
+ }
+
+ [Test]
+ public void TestToDateTimeOffset_UnixEpocMinus1Millisecond_OK()
+ {
+ var source = default( Timestamp ).Add( TimeSpan.FromMilliseconds( -1 ) );
+ var target = source.ToDateTimeOffset();
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ AssertUtc( target );
+ }
+
+ [Test]
+ public void TestToDateTimeOffset_UnixEpocPlus1Millisecond_OK()
+ {
+ var source = default( Timestamp ).Add( TimeSpan.FromMilliseconds( 1 ) );
+ var target = source.ToDateTimeOffset();
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ AssertUtc( target );
+ }
+
+ [Test]
+ public void TestToDateTimeOffset_UnixEpocMinus1Second_OK()
+ {
+ var source = default( Timestamp ).Add( TimeSpan.FromSeconds( -1 ) );
+ var target = source.ToDateTimeOffset();
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ AssertUtc( target );
+ }
+
+ [Test]
+ public void TestToDateTimeOffset_UnixEpocPlus1Second_OK()
+ {
+ var source = default( Timestamp ).Add( TimeSpan.FromSeconds( 1 ) );
+ var target = source.ToDateTimeOffset();
+ var expected = source;
+ Assert.That( target.Year, Is.EqualTo( expected.Year ), "Year" );
+ Assert.That( target.Month, Is.EqualTo( expected.Month ), "Month" );
+ Assert.That( target.Day, Is.EqualTo( expected.Day ), "Day" );
+ Assert.That( target.DayOfYear, Is.EqualTo( expected.DayOfYear ), "DayOfYear" );
+ Assert.That( target.DayOfWeek, Is.EqualTo( expected.DayOfWeek ), "DayOfWeek" );
+ Assert.That( target.Hour, Is.EqualTo( expected.Hour ), "Hour" );
+ Assert.That( target.Minute, Is.EqualTo( expected.Minute ), "Minute" );
+ Assert.That( target.Second, Is.EqualTo( expected.Second ), "Second" );
+ Assert.That( target.Millisecond, Is.EqualTo( expected.Millisecond ), "Millisecond" );
+ AssertSubseconds( target, expected );
+ AssertUtc( target );
+ }
+
+#endif // NET35 && !SILVERLIGHT && !NETSTANDARD1_1
}
}
diff --git a/test/MsgPack.UnitTest/TimestampTest.Conversion.tt b/test/MsgPack.UnitTest/TimestampTest.Conversion.tt
index d0030d8a3..1621c3772 100644
--- a/test/MsgPack.UnitTest/TimestampTest.Conversion.tt
+++ b/test/MsgPack.UnitTest/TimestampTest.Conversion.tt
@@ -126,9 +126,38 @@ foreach ( var type in new [] { "DateTime", "DateTimeOffset" } )
Assert.That( target.Microsecond, Is.EqualTo( ticks / 10 ), "Microsecond" );
Assert.That( target.Nanosecond, Is.EqualTo( ( ticks % 10 ) * 100 ), "Nanosecond" );
}
+
<#
}
#>
+#if !NET35 && !SILVERLIGHT && !NETSTANDARD1_1
+
+<#
+ WriteConversionTest( "FromDateTime_UnixEpoc_OK", "DateTimeOffset.FromUnixTimeMilliseconds( 0 ).DateTime", "Timestamp.FromDateTime( {0} )", null, null );
+ WriteConversionTest( "FromDateTime_UnixEpocMinus1Millisecond_OK", "DateTimeOffset.FromUnixTimeMilliseconds( -1 ).DateTime", "Timestamp.FromDateTime( {0} )", null, null );
+ WriteConversionTest( "FromDateTime_UnixEpocPlus1Millisecond_OK", "DateTimeOffset.FromUnixTimeMilliseconds( 1 ).DateTime", "Timestamp.FromDateTime( {0} )", null, null );
+ WriteConversionTest( "FromDateTime_UnixEpocMinusSecond_OK", "DateTimeOffset.FromUnixTimeSeconds( -1 ).DateTime", "Timestamp.FromDateTime( {0} )", null, null );
+ WriteConversionTest( "FromDateTime_UnixEpocPlus1Second_OK", "DateTimeOffset.FromUnixTimeSeconds( 1 ).DateTime", "Timestamp.FromDateTime( {0} )", null, null );
+
+ WriteConversionTest( "ToDateTime_UnixEpoc_OK", "default( Timestamp )", "{0}.ToDateTime()", null, "AssertUtc( {0} )" );
+ WriteConversionTest( "ToDateTime_UnixEpocMinus1Millisecond_OK", "default( Timestamp ).Add( TimeSpan.FromMilliseconds( -1 ) )", "{0}.ToDateTime()", null, "AssertUtc( {0} )" );
+ WriteConversionTest( "ToDateTime_UnixEpocPlus1Millisecond_OK", "default( Timestamp ).Add( TimeSpan.FromMilliseconds( 1 ) )", "{0}.ToDateTime()", null, "AssertUtc( {0} )" );
+ WriteConversionTest( "ToDateTime_UnixEpocMinus1Second_OK", "default( Timestamp ).Add( TimeSpan.FromSeconds( -1 ) )", "{0}.ToDateTime()", null, "AssertUtc( {0} )" );
+ WriteConversionTest( "ToDateTime_UnixEpocPlus1Second_OK", "default( Timestamp ).Add( TimeSpan.FromSeconds( 1 ) )", "{0}.ToDateTime()", null, "AssertUtc( {0} )" );
+
+ WriteConversionTest( "FromDateTimeOffset_UnixEpoc_OK", "DateTimeOffset.FromUnixTimeMilliseconds( 0 )", "Timestamp.FromDateTimeOffset( {0} )", null, null );
+ WriteConversionTest( "FromDateTimeOffset_UnixEpocMinus1Millisecond_OK", "DateTimeOffset.FromUnixTimeMilliseconds( -1 )", "Timestamp.FromDateTimeOffset( {0} )", null, null );
+ WriteConversionTest( "FromDateTimeOffset_UnixEpocPlus1Millisecond_OK", "DateTimeOffset.FromUnixTimeMilliseconds( 1 )", "Timestamp.FromDateTimeOffset( {0} )", null, null );
+ WriteConversionTest( "FromDateTimeOffset_UnixEpocMinus1Second_OK", "DateTimeOffset.FromUnixTimeSeconds( -1 )", "Timestamp.FromDateTimeOffset( {0} )", null, null );
+ WriteConversionTest( "FromDateTimeOffset_UnixEpocPlus1Second_OK", "DateTimeOffset.FromUnixTimeSeconds( 1 )", "Timestamp.FromDateTimeOffset( {0} )", null, null );
+
+ WriteConversionTest( "ToDateTimeOffset_UnixEpoc_OK", "default( Timestamp )", "{0}.ToDateTimeOffset()", null, "AssertUtc( {0} )" );
+ WriteConversionTest( "ToDateTimeOffset_UnixEpocMinus1Millisecond_OK", "default( Timestamp ).Add( TimeSpan.FromMilliseconds( -1 ) )", "{0}.ToDateTimeOffset()", null, "AssertUtc( {0} )" );
+ WriteConversionTest( "ToDateTimeOffset_UnixEpocPlus1Millisecond_OK", "default( Timestamp ).Add( TimeSpan.FromMilliseconds( 1 ) )", "{0}.ToDateTimeOffset()", null, "AssertUtc( {0} )" );
+ WriteConversionTest( "ToDateTimeOffset_UnixEpocMinus1Second_OK", "default( Timestamp ).Add( TimeSpan.FromSeconds( -1 ) )", "{0}.ToDateTimeOffset()", null, "AssertUtc( {0} )" );
+ WriteConversionTest( "ToDateTimeOffset_UnixEpocPlus1Second_OK", "default( Timestamp ).Add( TimeSpan.FromSeconds( 1 ) )", "{0}.ToDateTimeOffset()", null, "AssertUtc( {0} )" );
+#>
+#endif // NET35 && !SILVERLIGHT && !NETSTANDARD1_1
}
}
<#+