diff --git a/docs/coding-guidelines/adding-api-guidelines.md b/docs/coding-guidelines/adding-api-guidelines.md index b9eba22012015f..7362e979a38772 100644 --- a/docs/coding-guidelines/adding-api-guidelines.md +++ b/docs/coding-guidelines/adding-api-guidelines.md @@ -38,7 +38,7 @@ should be added to `net5.0`. [More Information on TargetFrameworks](https://docs **Update tests** - Add new `TargetFramework` to the ```TargetFrameworks```. - Add new test code following [conventions](project-guidelines.md#code-file-naming-conventions) for new files to that are specific to the new target framework. - - To run just the new test targetFramework run `dotnet build .csproj -f /t:Test`. TargetFramework should be chosen only from supported TargetFrameworks. + - To run just the new test targetFramework run `dotnet test .csproj -f `. TargetFramework should be chosen only from supported TargetFrameworks. ## Documentation diff --git a/docs/workflow/building/libraries/README.md b/docs/workflow/building/libraries/README.md index de6969f2865820..0a7d14616ddcd2 100644 --- a/docs/workflow/building/libraries/README.md +++ b/docs/workflow/building/libraries/README.md @@ -23,7 +23,7 @@ cd tests :: Then inner loop build / test :: (If using Visual Studio, you might run tests inside it instead) -pushd ..\src & dotnet build & popd & dotnet build /t:test +pushd ..\src & dotnet build & popd & dotnet test ``` The instructions for Linux and macOS are essentially the same: @@ -43,7 +43,7 @@ cd src/libraries/System.Text.RegularExpressions cd tests # Then inner loop build / test: -pushd ../src & dotnet build & popd & dotnet build /t:test +pushd ../src & dotnet build & popd & dotnet test ``` The steps above may be all you need to know to make a change. Want more details about what this means? Read on. diff --git a/docs/workflow/building/libraries/code-coverage.md b/docs/workflow/building/libraries/code-coverage.md index d9ab38a2da9d5b..7d24d05a12ee48 100644 --- a/docs/workflow/building/libraries/code-coverage.md +++ b/docs/workflow/building/libraries/code-coverage.md @@ -34,9 +34,9 @@ This runs the tests and generates the full code coverage report. The resulting i artifacts\coverage\index.htm -You can also build and test with code coverage for a particular test project rather than for the whole repo with the `/p:Coverage=true` property: +You can also build and test with code coverage for a particular test project rather than for the whole repo with the `--collect:"XPlat Code Coverage"` switch: - dotnet build /t:Test /p:Coverage=true + dotnet test --collect:"XPlat Code Coverage" The results for this one library will then be available in this index.htm file, where $(OutDir) is the directory where the binaries were generated. @@ -44,7 +44,7 @@ The results for this one library will then be available in this index.htm file, For example, to build, test, and get code coverage results for the System.Diagnostics.Debug library, from the root of the repo one can do: - dotnet build src\System.Diagnostics.Debug\tests /t:Test /p:Coverage=true + dotnet test src\System.Diagnostics.Debug\tests --collect:"XPlat Code Coverage" And then once the run completes: diff --git a/docs/workflow/debugging/libraries/debugging-packages.md b/docs/workflow/debugging/libraries/debugging-packages.md index f72887149b7f41..e29298df4df74f 100644 --- a/docs/workflow/debugging/libraries/debugging-packages.md +++ b/docs/workflow/debugging/libraries/debugging-packages.md @@ -72,7 +72,7 @@ Build: To validate the content of the nupkg, change the extension to .zip. As before, use an IL disassembler to verify that the right APIs are present within `ref\\contractname.dll` and the right implementations within the `lib\\contractname.dll`. -4. Run the tests from `\tests`: `dotnet build /t:test` +4. Run the tests from `\tests`: `dotnet test` Ensure that the test is referencing the correct pkg. For example: ``` @@ -96,10 +96,11 @@ ResolvePkgProjReferences: To run a test from a single Build Pivot combination, specify all properties and build the `csproj`: ``` -dotnet build System.Net.ServicePoint.Tests.csproj -f netcoreapp2.0 /t:test /p:OuterLoop=true /p:xunitoptions=-showprogress +dotnet test System.Net.ServicePoint.Tests.csproj -f net5.0 /p:OuterLoop=true ``` Will run the test using the following pivot values: * Architecture: AnyCPU -* Flavor: Debug -* OS: Windows_NT -* Target: netstandard2.0 +* Configuration: Debug +* TargetOS: Windows_NT +* TargetFramework: net5.0 +* OuterLoop: true diff --git a/docs/workflow/debugging/libraries/unix-instructions.md b/docs/workflow/debugging/libraries/unix-instructions.md index 95377726237e39..14c11f3ec2151c 100644 --- a/docs/workflow/debugging/libraries/unix-instructions.md +++ b/docs/workflow/debugging/libraries/unix-instructions.md @@ -5,7 +5,7 @@ CoreFX can be debugged on unix using both lldb and visual studio code ## Using lldb and SOS -- Run the test using msbuild at least once with `/t:Test`. +- Run the test using the SDK at least once with `dotnet test`. - [Install version 3.9 of lldb](../coreclr/debugging.md#debugging-core-dumps-with-lldb) and launch lldb with dotnet as the process and arguments matching the arguments used when running the test through msbuild. - Load the sos plugin using `plugin load libsosplugin.so`. - Type `soshelp` to get help. You can now use all sos commands like `bpmd`. diff --git a/docs/workflow/debugging/libraries/windows-instructions.md b/docs/workflow/debugging/libraries/windows-instructions.md index 46d916e74da892..06dff13bce913b 100644 --- a/docs/workflow/debugging/libraries/windows-instructions.md +++ b/docs/workflow/debugging/libraries/windows-instructions.md @@ -29,19 +29,10 @@ You may need to do this for both x64 and x86 versions. Any application that crashes should now automatically start a WinDBG session. ## Debugging tests -To run a single test from command line: - -* Locate the test binary folder based on the CSPROJ name. - -For example: `src\System.Net.Sockets\tests\Functional\System.Net.Sockets.Tests.csproj` will build and output binaries at `bin\tests\Windows_NT.AnyCPU.Debug\System.Net.Sockets.Tests\netcoreapp1.0`. - -* Execute the test - -Assuming that your repo is at `C:\corefx`: +Assuming that your repo is at `C:\runtime`: ``` -cd C:\corefx\bin\tests\Windows_NT.AnyCPU.Debug\System.Net.Sockets.Tests\netcoreapp1.0 -C:\corefx\bin\tests\Windows_NT.AnyCPU.Debug\System.Net.Sockets.Tests\netcoreapp1.0\CoreRun.exe xunit.console.dll System.Net.Sockets.Tests.dll -xml testResults.xml -notrait category=nonwindowstests -notrait category=OuterLoop -notrait category=failing +dotnet test C:\runtime\src\libraries\System.Net.Sockets\tests ``` * If the test crashes or encounters a `Debugger.Launch()` method call, WinDBG will automatically start and attach to the `CoreRun.exe` process @@ -52,7 +43,7 @@ The following commands will properly configure the debugging extension and fix s .symfix .srcfix .reload -!load C:\corefx\packages\runtime.win7-x64.Microsoft.NETCore.Runtime.CoreCLR\\tools\sos +!load C:\runtime\coreclr\runtime.win7-x64.Microsoft.NETCore.Runtime.CoreCLR\\tools\sos ``` _Important_: Pass in the correct path to your SOS extension discovered during the Prerequisites, step 2. @@ -168,6 +159,3 @@ Helper scripts are available at https://github.com/dotnet/runtime/tree/master/sr * `*System.Threading.Tasks.TplEventSource {2e5dba47-a3d2-4d16-8ee0-6671ffdcd7b5}`: Provides an event source for tracing TPL information. * `*System.Threading.Tasks.Parallel.EventSource`: Provides an event source for tracing TPL information. * `*System.Threading.Tasks.Dataflow.DataflowEventSource {16F53577-E41D-43D4-B47E-C17025BF4025}`: Provides an event source for tracing Dataflow information. - -## Notes -* You can find the test invocation command-line by looking at the logs generated after the `dotnet build /t:test` within the test folder. diff --git a/docs/workflow/testing/libraries/filtering-tests.md b/docs/workflow/testing/libraries/filtering-tests.md index 2b1b3d9867b416..27bab894b6cc07 100644 --- a/docs/workflow/testing/libraries/filtering-tests.md +++ b/docs/workflow/testing/libraries/filtering-tests.md @@ -5,13 +5,13 @@ The tests can be filtered based on xunit trait attributes defined in [`Microsoft #### OuterLoopAttribute ```cs -[OuterLoop()] +[OuterLoop] ``` -Tests marked as `OuterLoop` are for scenarios that don't need to run every build. They may take longer than normal tests, cover seldom hit code paths, or require special setup or resources to execute. These tests are excluded by default when testing through `dotnet build` but can be enabled manually by adding the `-testscope outerloop` switch or `/p:TestScope=outerloop` e.g. +Tests marked as `OuterLoop` are for scenarios that don't need to run every build. They may take longer than normal tests, cover seldom hit code paths, or require special setup or resources to execute. These tests are excluded by default when testing through `dotnet test` but can be enabled manually by adding the `-testscope outerloop` switch or `/p:TestScope=outerloop` e.g. ```cmd build -test -testscope outerloop -cd src/System.Text.RegularExpressions/tests && dotnet build /t:Test /p:TestScope=outerloop +dotnet test src/System.Text.RegularExpressions/tests /p:TestScope=outerloop ``` #### PlatformSpecificAttribute @@ -22,17 +22,13 @@ cd src/System.Text.RegularExpressions/tests && dotnet build /t:Test /p:TestScope Use this attribute on test methods to specify that this test may only be run on the specified platforms. This attribute returns the following categories based on platform - `nonwindowstests` for tests that don't run on Windows - `nonlinuxtests` for tests that don't run on Linux -- `nonosxtests` for tests that don't run on OS X +- `nonosxtests` for tests that don't run on macOS **[Available Test Platforms](https://github.com/dotnet/arcade/blob/master/src/Microsoft.DotNet.XUnitExtensions/src/TestPlatforms.cs)** When running tests by building a test project, tests that don't apply to the `TargetOS` are not run. For example, to run Linux-specific tests on a Linux box, use the following command line: ```sh -dotnet build /t:Test /p:TargetOS=Linux -``` -To run all Linux-compatible tests that are failing: -```sh -dotnet build /t:Test /p:TargetOS=Linux /p:WithCategories=failing +dotnet test /p:TargetOS=Linux ``` #### ActiveIssueAttribute @@ -148,9 +144,11 @@ _**A few common examples with the above attributes:**_ - Run all tests acceptable on Windows that are not failing: ```cmd -dotnet build /t:Test /p:TargetOS=Windows_NT +dotnet test /p:TargetOS=Windows_NT ``` - Run all outer loop tests acceptable on OS X that are currently associated with active issues: ```sh -dotnet build /t:Test /p:TargetOS=OSX /p:WithCategories="OuterLoop;failing"" +dotnet test /p:TargetOS=OSX /p:WithCategories="OuterLoop;failing"" ``` + +Note: The `TargetOS` property can usually be omitted as it defaults to the OS. \ No newline at end of file diff --git a/docs/workflow/testing/libraries/testing-android.md b/docs/workflow/testing/libraries/testing-android.md index 5ad1b27f79004d..e2f3269c2cd07f 100644 --- a/docs/workflow/testing/libraries/testing-android.md +++ b/docs/workflow/testing/libraries/testing-android.md @@ -71,7 +71,7 @@ Make sure an emulator is booted (see `AVD Manager`) or a device is plugged in an ### Running individual test suites The following shows how to run tests for a specific library ``` -./dotnet.sh build /t:Test src/libraries/System.Numerics.Vectors/tests /p:TargetOS=Android /p:TargetArchitecture=x64 +./dotnet.sh test src/libraries/System.Numerics.Vectors/tests /p:TargetOS=Android /p:TargetArchitecture=x64 ``` ### Test App Design diff --git a/docs/workflow/testing/libraries/testing-apple.md b/docs/workflow/testing/libraries/testing-apple.md index 3f99570042065b..dca149ef92365a 100644 --- a/docs/workflow/testing/libraries/testing-apple.md +++ b/docs/workflow/testing/libraries/testing-apple.md @@ -19,7 +19,7 @@ In order to run the tests on a device you need to specify `DevTeamProvisioning` ### Running individual test suites - The following shows how to run tests for a specific library: ``` -./dotnet.sh build src/libraries/System.Numerics.Vectors/tests /t:Test /p:TargetOS=iOS /p:TargetArchitecture=x64 +./dotnet.sh test src/libraries/System.Numerics.Vectors/tests /p:TargetOS=iOS /p:TargetArchitecture=x64 ``` ### Test App Design diff --git a/docs/workflow/testing/libraries/testing-wasm.md b/docs/workflow/testing/libraries/testing-wasm.md index 7e530859bed44e..921012987f9d48 100644 --- a/docs/workflow/testing/libraries/testing-wasm.md +++ b/docs/workflow/testing/libraries/testing-wasm.md @@ -35,14 +35,14 @@ and even run tests one by one for each library: ### Running individual test suites The following shows how to run tests for a specific library ``` -./dotnet.sh build /t:Test src/libraries/System.AppContext/tests /p:TargetOS=Browser /p:TargetArchitecture=wasm /p:Configuration=Release +./dotnet.sh test src/libraries/System.AppContext/tests /p:TargetOS=Browser /p:TargetArchitecture=wasm -c Release ``` ### Running tests using different JavaScript engines It's possible to set a JavaScript engine explicitly by adding `/p:JSEngine` property: ``` -./dotnet.sh build /t:Test src/libraries/System.AppContext/tests /p:TargetOS=Browser /p:TargetArchitecture=wasm /p:Configuration=Release /p:JSEngine=SpiderMonkey +./dotnet.sh test src/libraries/System.AppContext/tests /p:TargetOS=Browser /p:TargetArchitecture=wasm -c Release /p:JSEngine=SpiderMonkey ``` At the moment supported values are: diff --git a/docs/workflow/testing/libraries/testing.md b/docs/workflow/testing/libraries/testing.md index 9ab30e12be41ad..b90548b670b35c 100644 --- a/docs/workflow/testing/libraries/testing.md +++ b/docs/workflow/testing/libraries/testing.md @@ -7,59 +7,63 @@ To build the tests and run them you can call the libraries build script. **Examples** - The following shows how to build only the tests but not run them: ``` -build.cmd/sh -subset libs.tests +build.cmd/sh libs.tests ``` - The following builds and runs all tests in release configuration: ``` -build.cmd/sh -subset libs.tests -test -c Release +build.cmd/sh libs.tests -test -c Release ``` - The following example shows how to pass extra msbuild properties to ignore tests ignored in CI: ``` -build.cmd/sh -subset libs.tests -test /p:WithoutCategories=IgnoreForCI +build.cmd/sh libs.tests -test /p:WithoutCategories=IgnoreForCI ``` Unless you specifiy `-testnobuild`, test assemblies are implicitly built when invoking the `Test` action. - The following shows how to only test the libraries without building them ``` -build.cmd/sh -subset libs.tests -test -testnobuild +build.cmd/sh -test -testnobuild ``` ## Running tests on the command line -To build tests you need to specify the `test` subset when invoking build.cmd/sh: `build.cmd/sh -subset libs.tests`. +To build tests you need to specify the `libs.tests` subset when invoking build.cmd/sh: `build.cmd/sh libs.tests`. -The easiest (and recommended) way to build and run the tests for a specific library, is to invoke the `Test` target on that library: +The easiest (and recommended) way to build and run the tests for a specific library, is to invoke `dotnet test` on that library: ```cmd -cd src\libraries\System.Collections.Immutable\tests -dotnet build /t:Test +dotnet test src\libraries\System.Collections.Immutable\tests ``` -It is possible to pass parameters to the underlying xunit runner via the `XUnitOptions` parameter, e.g.: +It is possible to pass parameters to the underlying VSTest runner, e.g.: ```cmd -dotnet build /t:Test /p:XUnitOptions="-class Test.ClassUnderTests" +dotnet test --filter Test.ClassUnderTests ``` +The available arguments for `dotnet test` are documented [here](https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-test) and advanced filtering options can be found [here](https://docs.microsoft.com/en-us/dotnet/core/testing/selective-unit-tests?pivots=xunit). + There may be multiple projects in some directories so you may need to specify the path to a specific test project to get it to build and run the tests. #### Running a single test on the command line -To quickly run or debug a single test from the command line, set the XunitMethodName property, e.g.: +To quickly run or debug a single test from the command line, supply a filter argument value, e.g.: ```cmd -dotnet build /t:Test /p:XunitMethodName={FullyQualifiedNamespace}.{ClassName}.{MethodName} +dotnet test --filter {FullyQualifiedNamespace}.{ClassName}.{MethodName} ``` #### Running outer loop tests To run all tests, including "outer loop" tests (which are typically slower and in some test suites less reliable, but which are more comprehensive): ```cmd -dotnet build /t:Test /p:Outerloop=true +dotnet test /p:Outerloop=true ``` -#### Running tests on a different target framework +#### Running tests on a single target framework -Each test project can potentially have multiple target frameworks. There are some tests that might be OS-specific, or might be testing an API that is available only on some target frameworks, so the `TargetFrameworks` property specifies the valid target frameworks. By default we will build and run only the default build target framework which is `net5.0`. The rest of the `TargetFrameworks` will need to be built and ran by specifying the `BuildTargetFramework` option, e.g.: +Each test project can potentially have multiple target frameworks. There are some tests that might be OS-specific, or might be testing an API that is available only on some target frameworks, so the `TargetFrameworks` property specifies the valid target frameworks. To run against a single target framework you can specify the `TargetFramework` via the framework `-f` switch: ```cmd -dotnet build src\libraries\System.Runtime\tests\System.Runtime.Tests.csproj /p:BuildTargetFramework=net472 +dotnet test -f net48 src\libraries\System.Text.RegularExpressions\tests ``` + +#### Using an alternative test runner (advanced) +For non mobile configurations, the default test runner is VSTest (locally and in CI). By passing in `/p:TestRunner=xunit` when invoking `dotnet test`, an alternative test runner `xunit.console` is used. Even though that test runner is out-of-support and deprecated, it is still useful when debugging runtime issues or when adding support for new operating systems or devices. Our plan is to eventually get rid of `xunit.console` by adding a lightweight mode to the VSTest runner. diff --git a/docs/workflow/testing/mono/testing.md b/docs/workflow/testing/mono/testing.md index 1bffa1de3389b7..c4f7a5e4339f07 100644 --- a/docs/workflow/testing/mono/testing.md +++ b/docs/workflow/testing/mono/testing.md @@ -32,7 +32,7 @@ build.cmd /p:RuntimeFlavor=mono 3. Run the tests ``` -dotnet build /t:Test /p:RuntimeFlavor=mono +dotnet test /p:RuntimeFlavor=mono ``` # Patching Local dotnet (.dotnet-mono) diff --git a/eng/Subsets.props b/eng/Subsets.props index 7f2a252b4c38c3..fb9c06d653b61a 100644 --- a/eng/Subsets.props +++ b/eng/Subsets.props @@ -243,7 +243,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 9ee584e737d698..3b025caa29e9a0 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -87,6 +87,10 @@ f69d7fc09c4fdb9e9427741b9a176e867dab577f + https://github.com/microsoft/vstest + 2418d9ec492e93245e1ce8699d6ae9cd7b86649b + + https://github.com/microsoft/vstest 0b1e2e51743cc083d99b88673fe518672e2af9f0 diff --git a/eng/Versions.props b/eng/Versions.props index fba8cc2613e0e4..87a90777833f50 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -103,6 +103,9 @@ 1.1.1 4.3.0 5.0.0-alpha.1.19563.3 + + 16.8.0-release-20201009-01 + 16.8.0-release-20201009-01 5.0.0-beta.20505.2 5.0.0-beta.20505.2 @@ -136,7 +139,6 @@ 4.9.4 4.9.4 - 16.8.0-release-20201009-01 1.0.0-prerelease.20516.1 1.0.0-prerelease.20516.1 2.4.1 diff --git a/eng/build.ps1 b/eng/build.ps1 index 3897475e47b88a..66d8e0f9661779 100644 --- a/eng/build.ps1 +++ b/eng/build.ps1 @@ -202,6 +202,7 @@ foreach ($argument in $PSBoundParameters.Keys) "framework" { $arguments += " /p:BuildTargetFramework=$($PSBoundParameters[$argument].ToLowerInvariant())" } "os" { $arguments += " /p:TargetOS=$($PSBoundParameters[$argument])" } "allconfigurations" { $arguments += " /p:BuildAllConfigurations=true" } + "coverage" { $arguments += " /p:VSTestCollect='XPlat Code Coverage'" } "properties" { $arguments += " " + $properties } "verbosity" { $arguments += " -$argument " + $($PSBoundParameters[$argument]) } # configuration and arch can be specified multiple times, so they should be no-ops here diff --git a/eng/build.sh b/eng/build.sh index a44cc89062c010..c22792ebb88eca 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -303,7 +303,7 @@ while [[ $# > 0 ]]; do ;; -coverage) - arguments="$arguments /p:Coverage=true" + arguments="$arguments /p:VSTestCollect='XPlat Code Coverage'" shift 1 ;; diff --git a/eng/pipelines/common/templates/innerloop-steps.yml b/eng/pipelines/common/templates/innerloop-steps.yml new file mode 100644 index 00000000000000..88e8ef59be90e1 --- /dev/null +++ b/eng/pipelines/common/templates/innerloop-steps.yml @@ -0,0 +1,17 @@ +parameters: + buildConfig: '' + archType: '' + testLibrary: '' + testRunner: '' + condition: always() + +steps: + # Build and test leaf solution + - ${{ if ne(parameters.testLibrary, '') }}: + - script: dotnet test + $(Build.SourcesDirectory)/src/libraries/${{ parameters.testLibrary }}/ + -c ${{ parameters.buildConfig }} + /p:TargetArchitecture=${{ parameters.archType }} + /p:TestRunner=${{ parameters.testRunner }} + /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/innerloop-steps-test.binlog + displayName: Build and test leaf solution diff --git a/eng/pipelines/global-build.yml b/eng/pipelines/global-build.yml index 9721eb4b9f479d..d745811ef31fed 100644 --- a/eng/pipelines/global-build.yml +++ b/eng/pipelines/global-build.yml @@ -41,6 +41,7 @@ jobs: parameters: jobTemplate: /eng/pipelines/common/global-build-job.yml buildConfig: release + timeoutInMinutes: 90 platforms: - Windows_NT_x86 - OSX_x64 @@ -48,6 +49,10 @@ jobs: testGroup: innerloop nameSuffix: Runtime_Debug buildArgs: -c release -runtimeConfiguration debug + extraStepsTemplate: /eng/pipelines/common/templates/innerloop-steps.yml + extraStepsParameters: + testLibrary: System.AppContext + testRunner: xunit # # Build with Debug config and Release runtimeConfiguration diff --git a/eng/pipelines/libraries/enterprise/linux.yml b/eng/pipelines/libraries/enterprise/linux.yml index caf5d91164ee71..9f0346b1b6fd79 100644 --- a/eng/pipelines/libraries/enterprise/linux.yml +++ b/eng/pipelines/libraries/enterprise/linux.yml @@ -26,7 +26,7 @@ variables: - name: enterpriseTestsSetup value: $(sourcesRoot)/Common/tests/System/Net/EnterpriseTests/setup - name: containerRunTestsCommand - value: /repo/dotnet.sh build /t:test + value: /repo/dotnet.sh test - name: containerLibrariesRoot value: /repo/src/libraries diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml index 6767f31fbbf6b0..380a3efb49f755 100644 --- a/eng/pipelines/runtime.yml +++ b/eng/pipelines/runtime.yml @@ -876,7 +876,8 @@ jobs: runtimeFlavor: mono buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} platforms: - - Windows_NT_x64 + # Reenable when https://github.com/dotnet/runtime/issues/34582 is fixed. + # - Windows_NT_x64 - OSX_x64 - Linux_arm64 - Linux_x64 diff --git a/eng/testing/.runsettings b/eng/testing/.runsettings index 1dfbe23e6501bd..993317b88ac267 100644 --- a/eng/testing/.runsettings +++ b/eng/testing/.runsettings @@ -1,23 +1,20 @@ - - 300000 .\TestResults\ .\ $$MAXCPUCOUNT$$ - - $$TARGETPLATFORM$$ $$DISABLEPARALLELIZATION$$ - - $$DISABLEAPPDOMAIN$$ $$TESTCASEFILTER$$ $$DOTNETHOSTPATH$$ + + $$MONO_ENV_OPTIONS$$ + @@ -32,7 +29,7 @@ - + $$COVERAGE_INCLUDE$$ $$COVERAGE_EXCLUDEBYFILE$$ @@ -43,7 +40,13 @@ false - + + + + + + diff --git a/eng/testing/RunnerTemplate.cmd b/eng/testing/RunnerTemplate.cmd deleted file mode 100644 index 10737eabe70950..00000000000000 --- a/eng/testing/RunnerTemplate.cmd +++ /dev/null @@ -1,68 +0,0 @@ -@echo off -setlocal enabledelayedexpansion - -set EXECUTION_DIR=%~dp0 - -:argparser_start - if "%~1" == "" goto argparser_end - set "argparser_currentarg=%~1" - shift - - set "argparser_help_specified_inloop=" - if /i "%argparser_currentarg%"=="-h" ( set "argparser_help_specified_inloop=1" ) - if /i "%argparser_currentarg%"=="--help" ( set "argparser_help_specified_inloop=1" ) - if defined argparser_help_specified_inloop ( - goto usage - ) - - set "argparser_runtime_path_specified_inloop=" - if /i "%argparser_currentarg%"=="-r" ( set "argparser_runtime_path_specified_inloop=1" ) - if /i "%argparser_currentarg%"=="--runtime-path" ( set "argparser_runtime_path_specified_inloop=1" ) - if defined argparser_runtime_path_specified_inloop ( - if "%~1" == "" ( goto argparser_invalid ) - set "RUNTIME_PATH=%~1" - goto argparser_break - ) - - if /i "%argparser_currentarg%"=="--rsp-file" ( - if "%~1" == "" ( goto argparser_invalid ) - set "RSP_FILE=@%~1" - goto argparser_break - ) - -:argparser_invalid - echo Invalid argument or value: %argparser_currentarg% - call :usage - exit /b -1 - -:argparser_break - shift - goto argparser_start - -:argparser_end - -:: Don't use a globally installed SDK. -set DOTNET_MULTILEVEL_LOOKUP=0 - -:: ========================= BEGIN Test Execution ============================= -echo ----- start %DATE% %TIME% =============== To repro directly: ===================================================== -echo pushd %EXECUTION_DIR% -[[RunCommandsEcho]] -echo popd -echo =========================================================================================================== -pushd %EXECUTION_DIR% -@echo on -[[RunCommands]] -@echo off -popd -echo ----- end %DATE% %TIME% ----- exit code %ERRORLEVEL% ---------------------------------------------------------- -exit /b %ERRORLEVEL% -:: ========================= END Test Execution ================================= - -:usage -echo Usage: RunTests.cmd {-r^|--runtime-path} ^ [{--rsp-file} ^] -echo. -echo Parameters: -echo --runtime-path (Mandatory) Testhost containing the test runtime used during test execution (short: -r)" -echo --rsp-file RSP file to pass in additional arguments -echo --help Print help and exit (short: -h) diff --git a/eng/testing/RunnerTemplate.sh b/eng/testing/RunnerTemplate.sh deleted file mode 100755 index dbd5f4741a5d1f..00000000000000 --- a/eng/testing/RunnerTemplate.sh +++ /dev/null @@ -1,207 +0,0 @@ -#!/usr/bin/env bash - -usage() -{ - echo "Usage: RunTests.sh {-r|--runtime-path} [{--rsp-file} ]" - echo "" - echo "Parameters:" - echo "--runtime-path (Mandatory) Testhost containing the test runtime used during test execution (short: -r)" - echo "--rsp-file RSP file to pass in additional arguments" - echo "--help Print help and exit (short: -h)" -} - -EXECUTION_DIR=$(dirname "$0") -RUNTIME_PATH='' -RSP_FILE='' - -while [[ $# > 0 ]]; do - opt="$(echo "${1}" | awk '{print tolower($0)}')" - case "$opt" in - --help|-h) - usage - exit 0 - ;; - --runtime-path|-r) - RUNTIME_PATH=$2 - shift - ;; - --rsp-file) - RSP_FILE=\@$2 - shift - ;; - *) - echo "Invalid argument: $1" - usage - exit -1 - ;; - esac - - shift -done - -if [ "$RUNTIME_PATH" == "" ]; then - echo "error: -r|--runtime-path argument is required." - usage - exit -1 -fi - -# Don't use a globally installed SDK. -export DOTNET_MULTILEVEL_LOOKUP=0 - -exitcode_list[0]="Exited Successfully" -exitcode_list[130]="SIGINT Ctrl-C occurred. Likely tests timed out." -exitcode_list[131]="SIGQUIT Ctrl-\ occurred. Core dumped." -exitcode_list[132]="SIGILL Illegal Instruction. Core dumped. Likely codegen issue." -exitcode_list[133]="SIGTRAP Breakpoint hit. Core dumped." -exitcode_list[134]="SIGABRT Abort. Managed or native assert, or runtime check such as heap corruption, caused call to abort(). Core dumped." -exitcode_list[135]="IGBUS Unaligned memory access. Core dumped." -exitcode_list[136]="SIGFPE Bad floating point arguments. Core dumped." -exitcode_list[137]="SIGKILL Killed eg by kill" -exitcode_list[139]="SIGSEGV Illegal memory access. Deref invalid pointer, overrunning buffer, stack overflow etc. Core dumped." -exitcode_list[143]="SIGTERM Terminated. Usually before SIGKILL." -exitcode_list[159]="SIGSYS Bad System Call." - -function print_info_from_core_file_using_lldb { - local core_file_name=$1 - local executable_name=$2 - local plugin_path_name="$RUNTIME_PATH/shared/Microsoft.NETCore.App/9.9.9/libsosplugin.so" - - # check for existence of lldb on the path - hash lldb 2>/dev/null || { echo >&2 "lldb was not found. Unable to print core file."; return; } - - # pe, clrstack, and dumpasync are defined in libsosplugin.so - if [ ! -f $plugin_path_name ]; then - echo $plugin_path_name cannot be found. - return - fi - - echo ----- start =============== lldb Output ===================================================== - echo Printing managed exceptions, managed call stacks, and async state machines. - lldb -O "settings set target.exec-search-paths $RUNTIME_PATH" -o "plugin load $plugin_path_name" -o "clrthreads -managedexception" -o "pe -nested" -o "clrstack -all -a -f" -o "dumpasync -fields -stacks -roots" -o "quit" --core $core_file_name $executable_name - echo ----- end =============== lldb Output ======================================================= -} - -function print_info_from_core_file_using_gdb { - local core_file_name=$1 - local executable_name=$2 - - # Check for the existence of GDB on the path - hash gdb 2>/dev/null || { echo >&2 "GDB was not found. Unable to print core file."; return; } - - echo ----- start =============== GDB Output ===================================================== - # Open the dump in GDB and print the stack from each thread. We can add more - # commands here if desired. - echo printing native stack. - gdb --batch -ex "thread apply all bt full" -ex "quit" $executable_name $core_file_name - echo ----- end =============== GDB Output ======================================================= -} - -function print_info_from_core_file { - local core_file_name=$1 - local executable_name=$RUNTIME_PATH/$2 - - if ! [ -e $executable_name ]; then - echo "Unable to find executable $executable_name" - return - elif ! [ -e $core_file_name ]; then - echo "Unable to find core file $core_file_name" - return - fi - echo "Printing info from core file $core_file_name" - print_info_from_core_file_using_gdb $core_file_name $executable_name - print_info_from_core_file_using_lldb $core_file_name $executable_name -} - -function copy_core_file_to_temp_location { - local core_file_name=$1 - - local storage_location="/tmp/coredumps" - - # Create the directory (this shouldn't fail even if it already exists). - mkdir -p $storage_location - - local new_location=$storage_location/core.$RANDOM - - echo "Copying core file $core_file_name to $new_location in case you need it." - cp $core_file_name $new_location -} - -# ========================= BEGIN Core File Setup ============================ -if [ "$(uname -s)" == "Darwin" ]; then - # On OS X, we will enable core dump generation only if there are no core - # files already in /cores/ at this point. This is being done to prevent - # inadvertently flooding the CI machines with dumps. - if [[ ! -d "/cores" || ! "$(ls -A /cores)" ]]; then - ulimit -c unlimited - fi -elif [ "$(uname -s)" == "Linux" ]; then - # On Linux, we'll enable core file generation unconditionally, and if a dump - # is generated, we will print some useful information from it and delete the - # dump immediately. - - if [ -e /proc/self/coredump_filter ]; then - # Include memory in private and shared file-backed mappings in the dump. - # This ensures that we can see disassembly from our shared libraries when - # inspecting the contents of the dump. See 'man core' for details. - echo -n 0x3F > /proc/self/coredump_filter - fi - - ulimit -c unlimited -fi -# ========================= END Core File Setup ============================== - -# ========================= BEGIN Test Execution ============================= -echo ----- start $(date) =============== To repro directly: ===================================================== -echo pushd $EXECUTION_DIR -[[RunCommandsEcho]] -echo popd -echo =========================================================================================================== -pushd $EXECUTION_DIR -[[RunCommands]] -test_exitcode=$? -popd -echo ----- end $(date) ----- exit code $test_exitcode ---------------------------------------------------------- - -if [ "${exitcode_list[$test_exitcode]}" != "" ]; then - echo exit code $test_exitcode means ${exitcode_list[$test_exitcode]} -fi -# ========================= END Test Execution =============================== - -# ======================= BEGIN Core File Inspection ========================= -pushd $EXECUTION_DIR >/dev/null -if [[ "$(uname -s)" == "Linux" && $test_exitcode -ne 0 ]]; then - if [ -n "$HELIX_WORKITEM_PAYLOAD" ]; then - have_sleep=$(which sleep) - if [ -x "$have_sleep" ]; then - echo Waiting a few seconds for any dump to be written.. - sleep 10s - fi - fi - echo Looking around for any Linux dump.. - # Depending on distro/configuration, the core files may either be named "core" - # or "core." by default. We read /proc/sys/kernel/core_uses_pid to - # determine which it is. - core_name_uses_pid=0 - if [ -e /proc/sys/kernel/core_uses_pid ] && [ "1" == $(cat /proc/sys/kernel/core_uses_pid) ]; then - core_name_uses_pid=1 - fi - - if [ $core_name_uses_pid == "1" ]; then - # We don't know what the PID of the process was, so let's look at all core - # files whose name matches core.NUMBER - echo Looking for files matching core.* ... - for f in core.*; do - [[ $f =~ core.[0-9]+ ]] && print_info_from_core_file "$f" "dotnet" && copy_core_file_to_temp_location "$f" && rm "$f" - done - elif [ -f core ]; then - echo found a dump named core in $EXECUTION_DIR ! - print_info_from_core_file "core" "dotnet" - copy_core_file_to_temp_location "core" - rm "core" - else - echo ... found no dump in $PWD - fi -fi -popd >/dev/null -# ======================== END Core File Inspection ========================== -exit $test_exitcode diff --git a/eng/testing/WasmRunnerTemplate.sh b/eng/testing/WasmRunnerTemplate.sh deleted file mode 100644 index e2e3996cab58c0..00000000000000 --- a/eng/testing/WasmRunnerTemplate.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -EXECUTION_DIR=$(dirname $0) - -cd $EXECUTION_DIR - -XHARNESS_OUT="$EXECUTION_DIR/xharness-output" - -if [ ! -z "$XHARNESS_CLI_PATH" ]; then - # When running in CI, we only have the .NET runtime available - # We need to call the XHarness CLI DLL directly via dotnet exec - HARNESS_RUNNER="dotnet exec $XHARNESS_CLI_PATH" -else - HARNESS_RUNNER="dotnet xharness" -fi - -if [ -z "$XHARNESS_COMMAND" ]; then - XHARNESS_COMMAND="test" -fi - -# RunCommands defined in tests.mobile.targets -[[RunCommands]] - -_exitCode=$? - -echo "XHarness artifacts: $XHARNESS_OUT" - -exit $_exitCode diff --git a/eng/testing/coverage.targets b/eng/testing/coverage.targets index 6f8ac2648f06e7..7c9d152d62b565 100644 --- a/eng/testing/coverage.targets +++ b/eng/testing/coverage.targets @@ -1,5 +1,10 @@ - + + + + + - - - coverage.opencover.xml - $(CoverageOutputPath) - $([MSBuild]::NormalizeDirectory('$(OutDir)', 'report')) - - "$(DotNetTool)" tool run coverlet "$(TargetFileName)" --target "$(RunScriptHost)" --targetargs "$(RunScriptCommand.Replace('"$(RunScriptHost)"', ''))" --format "opencover" --output "$(CoverageOutputPath)" --verbosity "normal" --use-source-link - $(RunScriptCommand) --exclude-by-file @(CoverageExcludeByFile -> '"%(Identity)"', ' --exclude-by-file ') - $(RunScriptCommand) --include-directory @(CoverageIncludeDirectory -> '"$(RunScriptHostDir)%(Identity)"', ' --include-directory ') - $(RunScriptCommand) --include @(CoverageInclude -> '"[%(Identity)]*"', ' --include ') - "$(DotNetTool)" tool run reportgenerator "-reports:$(CoverageReportInputPath)" "-targetdir:$(CoverageReportDir.TrimEnd('\/'))" "-reporttypes:Html" "-verbosity:Info" - - - - - - - - + AfterTargets="VSTest" + Condition="'$(VSTestCollect.ToLower())' == 'xplat code coverage' and + '$(BuildAllProjects)' != 'true' and + '$(SkipCoverageReport)' != 'true'"> @@ -75,7 +59,6 @@ - + Condition="'$(VSTestCollect.ToLower())' == 'xplat code coverage'"> diff --git a/eng/testing/AndroidRunnerTemplate.sh b/eng/testing/mobile/AndroidRunnerTemplate.sh similarity index 100% rename from eng/testing/AndroidRunnerTemplate.sh rename to eng/testing/mobile/AndroidRunnerTemplate.sh diff --git a/eng/testing/AppleRunnerTemplate.sh b/eng/testing/mobile/AppleRunnerTemplate.sh similarity index 97% rename from eng/testing/AppleRunnerTemplate.sh rename to eng/testing/mobile/AppleRunnerTemplate.sh index b78bff38d867a2..66bcb9864303ff 100644 --- a/eng/testing/AppleRunnerTemplate.sh +++ b/eng/testing/mobile/AppleRunnerTemplate.sh @@ -1,7 +1,8 @@ #!/usr/bin/env bash EXECUTION_DIR=$(dirname $0) -[[RunCommands]] +TEST_NAME=$1 +TARGET_ARCH=$2 # "Release" in SCHEME_SDK is what xcode produces (see "bool Optimized" property in AppleAppBuilderTask) if [ "$TARGET_ARCH" == "arm" ]; then diff --git a/eng/testing/mobile/WasmRunnerTemplate.sh b/eng/testing/mobile/WasmRunnerTemplate.sh new file mode 100755 index 00000000000000..4288dd0a848dea --- /dev/null +++ b/eng/testing/mobile/WasmRunnerTemplate.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +EXECUTION_DIR="$(dirname "$0")" +TEST_NAME="$1" +JS_ENGINE="${2:-V8}" +JS_ENGINE_ARGS="$3" +TEST_FILTER="${4:--notrait category=IgnoreForCI -notrait category=OuterLoop -notrait category=failing}" +XHARNESS_OUT="$EXECUTION_DIR/xharness-output" + +# Find a better way to express this +if [ "$TEST_NAME" == "System.IO.FileSystem.Tests" ]; then + RUN_TESTS_JS_ARGUMENTS="--working-dir=/test-dir" +fi + +if [ "$JS_ENGINE" == "V8" ]; then + JS_ENGINE_ARGS="${JS_ENGINE_ARGS} --engine-arg=--stack-trace-limit=1000" +fi + +if [ ! -z "$XHARNESS_CLI_PATH" ]; then + # When running in CI, we only have the .NET runtime available + # We need to call the XHarness CLI DLL directly via dotnet exec + HARNESS_RUNNER="dotnet exec $XHARNESS_CLI_PATH" +else + HARNESS_RUNNER="dotnet xharness" +fi + +if [ -z "$XHARNESS_COMMAND" ]; then + XHARNESS_COMMAND="test" +fi + +$HARNESS_RUNNER wasm ${XHARNESS_COMMAND} --app=. --engine=${JS_ENGINE} ${JS_ENGINE_ARGS} --js-file=runtime.js --output-directory=$XHARNESS_OUT -- ${RUN_TESTS_JS_ARGUMENTS} --run WasmTestRunner.dll ${TEST_NAME}.dll ${TEST_FILTER} + +_exitCode=$? + +echo "XHarness artifacts: $XHARNESS_OUT" + +exit $_exitCode diff --git a/eng/testing/tests.mobile.targets b/eng/testing/mobile/tests.targets similarity index 66% rename from eng/testing/tests.mobile.targets rename to eng/testing/mobile/tests.targets index 2f0d799395de92..da869e75259bc2 100644 --- a/eng/testing/tests.mobile.targets +++ b/eng/testing/mobile/tests.targets @@ -1,25 +1,37 @@ - + + Build + $(TestDependsOn);RunTests + + + $(NetCoreAppCurrent)-$(Configuration) + $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'AppleTestRunner', '$(MobileRunnersDirSuffix)')) + $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'AndroidTestRunner', '$(MobileRunnersDirSuffix)')) + $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'WasmTestRunner', '$(MobileRunnersDirSuffix)')) $([MSBuild]::NormalizeDirectory('$(OutDir)', 'AppBundle')) - $([MSBuild]::NormalizePath('$(BundleDir)', '$(RunScriptOutputName)')) - true - V8 - $(JSEngineArgs) --engine-arg=--stack-trace-limit=1000 - - - - + AppleRunnerTemplate.sh + AndroidRunnerTemplate.sh + WasmRunnerTemplate.sh + $(MSBuildThisFileDirectory)$(RunScriptInputName) - - - $HARNESS_RUNNER wasm $XHARNESS_COMMAND --app=. --engine=$(JSEngine) $(JSEngineArgs) --js-file=runtime.js --output-directory=$XHARNESS_OUT -- $(RunTestsJSArguments) --run WasmTestRunner.dll $(AssemblyName).dll + RunTests.cmd + RunTests.sh + $([MSBuild]::NormalizePath('$(BundleDir)', '$(RunScriptOutputName)')) + + true + $(PackageRID) + true - - + @@ -27,7 +39,8 @@ TaskName="AndroidAppBuilderTask" AssemblyFile="$(AndroidAppBuilderTasksAssemblyPath)" /> - + @@ -73,7 +86,8 @@ - + @@ -135,7 +149,8 @@ - + @@ -173,14 +188,49 @@ <_runnerFilesToPublish Include="$(AndroidTestRunnerDir)*" Condition="'$(TargetOS)' == 'Android'" /> <_runnerFilesToPublish Include="$(AppleTestRunnerDir)*" Condition="'$(TargetOS)' == 'iOS' or '$(TargetOS)' == 'tvOS'" /> <_runnerFilesToPublish Include="$(WasmTestRunnerDir)*" Condition="'$(TargetOS)' == 'Browser'" /> - - - + - + + + + + "$(RunScriptOutputPath)" + $(RunTestsCommand) $(AssemblyName) $(TargetArchitecture) + $(RunTestsCommand) $(AssemblyName) "$(JSEngine)" "$(JSEngineArgs)" "$(_withCategories.Replace(';', ' -trait category='))$(_withoutCategories.Replace(';', ' -notrait category='))" + + $(RunTestsEnvironmentVariables);MONO_ENV_OPTIONS=$(MonoEnvOptions) + + + + + + + + + $(OutputPath)$(TestResultsName) + One or more tests failed while running tests from '$(TestProjectName)'. + $(TestRunErrorMessage) Please check $(TestResultsPath) for details! + + + + + + + diff --git a/eng/testing/outerBuild.targets b/eng/testing/outerBuild.targets index c071944c21d93d..53a16d407c9dad 100644 --- a/eng/testing/outerBuild.targets +++ b/eng/testing/outerBuild.targets @@ -1,12 +1,12 @@ - + - + Targets="VSTest" + BuildInParallel="$(BuildAllProjects)" /> - - - + + \ No newline at end of file diff --git a/eng/testing/runsettings.targets b/eng/testing/runsettings.targets index 2fa1901e0489a7..d0b9a9393154e8 100644 --- a/eng/testing/runsettings.targets +++ b/eng/testing/runsettings.targets @@ -22,21 +22,18 @@ <_testFilter>$(_testFilter.Trim('&amp;')) - + $([System.IO.File]::ReadAllText('$(RunSettingsInputFilePath)')) $(RunSettingsFileContent.Replace('$$MAXCPUCOUNT$$', '1')) $(RunSettingsFileContent.Replace('$$MAXCPUCOUNT$$', '0')) - - $(RunSettingsFileContent.Replace('$$TARGETPLATFORM$$', '$(TargetArchitecture)')) - $(RunSettingsFileContent.Replace('$$TARGETPLATFORM$$', '')) + + $(RunSettingsFileContent.Replace('$$MONO_ENV_OPTIONS$$', '$(MonoEnvOptions)')) + $(RunSettingsFileContent.Replace('$$MONO_ENV_OPTIONS$$', '')) $(RunSettingsFileContent.Replace('$$COVERAGE_INCLUDE$$', '$(CoverageIncludeFilter)') .Replace('$$COVERAGE_EXCLUDEBYFILE$$', '$(CoverageExcludeByFileFilter)') .Replace('$$COVERAGE_INCLUDEDIRECTORY$$', '$(CoverageIncludeDirectoryFilter)') - .Replace('$$COVERAGE_ENABLED$$', '$([MSBuild]::ValueOrDefault('$(Coverage)', 'false'))') .Replace('$$DISABLEPARALLELIZATION$$', '$([MSBuild]::ValueOrDefault('$(TestDisableParallelization)', 'false'))') - .Replace('$$DISABLEAPPDOMAIN$$', '$([MSBuild]::ValueOrDefault('$(TestDisableAppDomain)', 'false'))') .Replace('$$TESTCASEFILTER$$', '$(_testFilter)') .Replace('$$DOTNETHOSTPATH$$', '$(TestHostRootPath)$([System.IO.Path]::GetFileName('$(DotNetTool)'))')) @@ -50,5 +47,10 @@ $(RunSettingsOutputFilePath) + + + diff --git a/eng/testing/runtimeConfiguration.targets b/eng/testing/runtimeConfiguration.targets index d69182992c7b30..6fa323bad8d4c7 100644 --- a/eng/testing/runtimeConfiguration.targets +++ b/eng/testing/runtimeConfiguration.targets @@ -9,8 +9,6 @@ true $(MSBuildThisFileDirectory)netfx.exe.config - - $(TargetPath).config diff --git a/eng/testing/tests.props b/eng/testing/tests.props index 65664f7f74992b..2addbfe6796dd5 100644 --- a/eng/testing/tests.props +++ b/eng/testing/tests.props @@ -2,17 +2,26 @@ $(MSBuildProjectName) xunit - - Build - $(TestDependsOn);GenerateRunScript;RunTests true + + en + + + + + + + <_withCategories Condition="'$(WithCategories)' != ''">;$(WithCategories.Trim(';')) <_withoutCategories Condition="'$(WithoutCategories)' != ''">;$(WithoutCategories.Trim(';')) - all <_withCategories Condition="'$(TestScope)' == 'outerloop'">$(_withCategories);OuterLoop <_withoutCategories Condition="'$(ArchiveTests)' == 'true'">$(_withoutCategories);IgnoreForCI @@ -20,26 +29,5 @@ <_withoutCategories Condition="!$(_withCategories.Contains('failing'))">$(_withoutCategories);failing - - - $(NetCoreAppCurrent)-$(Configuration) - $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'AppleTestRunner', '$(MobileRunnersDirSuffix)')) - $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'AndroidTestRunner', '$(MobileRunnersDirSuffix)')) - $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'WasmTestRunner', '$(MobileRunnersDirSuffix)')) - - $(PackageRID) - true - - - - - - - - - diff --git a/eng/testing/tests.targets b/eng/testing/tests.targets index 2fe669a10ba05a..717575f52cfb79 100644 --- a/eng/testing/tests.targets +++ b/eng/testing/tests.targets @@ -1,42 +1,36 @@ + - RunnerTemplate.cmd - RunnerTemplate.sh - AppleRunnerTemplate.sh - AndroidRunnerTemplate.sh - WasmRunnerTemplate.sh - - $(MSBuildThisFileDirectory)$(RunScriptInputName) - - RunTests.cmd - RunTests.sh - $([MSBuild]::NormalizePath('$(OutDir)', '$(RunScriptOutputName)')) - - %RUNTIME_PATH%\ - $RUNTIME_PATH/ - - $(RunScriptHostDir)dotnet.exe - $(RunScriptHostDir)dotnet + $(OutDir) - - PrepareForRun + + $(DotNetTool) + test $(TargetPath) --settings $(OutDir).runsettings + - - + + $(DevEnvDir)Extensions\TestPlatform\vstest.console.exe + $(TargetPath) --settings:$(OutDir).runsettings + + + Condition="'$(IsCrossTargetingBuild)' != 'true' and + '$(IgnoreForCI)' != 'true' and + ('$(TargetsMobile)' != 'true' or + '$(TargetOS)' == 'Browser')" + AfterTargets="Publish"> - <_ZipSourceDirectory>$(OutDir) + <_ZipSourceDirectory>$(PublishDir) <_ZipSourceDirectory Condition="'$(TargetOS)' == 'Browser'">$(BundleDir) @@ -48,80 +42,8 @@ - - - - - $(RunScriptCommand) %RSP_FILE% - $(RunScriptCommand) $RSP_FILE - - - $([MSBuild]::Escape('$(RunScriptCommand)')) - - - - - $(TestDebugger) $(RunScriptCommand) - $(TestDebugger) /debugexe $(RunScriptCommand) - - - - - - - - - - - - - - - - - - - - "$(RunScriptOutputPath)" - - $(RunTestsCommand) --runtime-path "$(TestHostRootPath.TrimEnd('\/'))" - $(RunTestsCommand) --rsp-file "$(TestRspFile)" - "$(RunScriptOutputPath)" $(AssemblyName) $(TargetArchitecture) - "$(RunScriptOutputPath)" $(JSEngine) $(AssemblyName).dll $(_withoutCategories.Replace(';', ' -notrait category=')) - - - - - - - - - $(OutputPath)$(TestResultsName) - One or more tests failed while running tests from '$(TestProjectName)'. - $(TestRunErrorMessage) Please check $(TestResultsPath) for details! - - - - - - + - - - diff --git a/eng/testing/xunit/xunit.console.targets b/eng/testing/xunit/xunit.console.targets index 5b71327e96450b..27aeb184f6ff5b 100644 --- a/eng/testing/xunit/xunit.console.targets +++ b/eng/testing/xunit/xunit.console.targets @@ -1,87 +1,42 @@ - - true - testResults.xml - - - - <_depsFileArgument Condition="'$(GenerateDependencyFile)' == 'true'">--depsfile $(AssemblyName).deps.json - "$(RunScriptHost)" exec --runtimeconfig $(AssemblyName).runtimeconfig.json $(_depsFileArgument) xunit.console.dll - xunit.console.exe - - $(RunScriptCommand) $(TargetFileName) - $(RunScriptCommand) -xml $(TestResultsName) - $(RunScriptCommand) -nologo - $(RunScriptCommand) -nocolor - $(RunScriptCommand) -noappdomain - $(RunScriptCommand) -maxthreads 1 - $(RunScriptCommand) -verbose - + - - $(RunScriptCommand) -method $(XUnitMethodName) - $(RunScriptCommand) -class $(XUnitClassName) - - - $(RunScriptCommand)$(_withCategories.Replace(';', ' -trait category=')) - $(RunScriptCommand)$(_withoutCategories.Replace(';', ' -notrait category=')) - - - $(RunScriptCommand) $(XUnitOptions) + + Build - - - - - - - - - <_testRunnerConfigDestFile Include="$(TargetDir)xunit.console.exe.config" /> - - - - - - - - - - - - <_xunitConsoleNetCoreExclude Condition="'$(GenerateDependencyFile)' != 'true' and '$(XunitConsoleNetCore21AppPath)' != ''" Include="$([System.IO.Path]::GetDirectoryName('$(XunitConsoleNetCore21AppPath)'))\xunit.console.deps.json" /> - - - - - - - - - - + + + <_depsFileArgument Condition="'$(GenerateDependencyFile)' == 'true'">--depsfile "$(TargetDir)$(TargetName).deps.json" + <_xunitConsoleAppPath>$(NuGetPackageRoot)microsoft.dotnet.xunitconsolerunner\$(MicrosoftDotNetXUnitConsoleRunnerVersion)\tools\netcoreapp2.1\xunit.console.dll + + <_runCommand>"$(TestHostRootPath)$([System.IO.Path]::GetFileName('$(DotNetTool)'))" exec --runtimeconfig "$(TargetDir)$(AssemblyName).runtimeconfig.json" $(_depsFileArgument) $(_xunitConsoleAppPath) + <_runCommand>$(_runCommand) "$(TargetPath)" + <_runCommand>$(_runCommand) -xml $(TargetDir)testResults.xml + <_runCommand Condition="'$(TestDisableParallelization)' == 'true'">$(_runCommand) -maxthreads 1 + <_runCommand Condition="'$(XUnitShowProgress)' == 'true'">$(_runCommand) -verbose + + + <_runCommand Condition="'$(XUnitMethodName)' != ''">$(_runCommand) -method $(XUnitMethodName) + <_runCommand Condition="'$(XUnitClassName)' != ''">$(_runCommand) -class $(XUnitClassName) + + + <_runCommand>$(_runCommand)$(_withCategories.Replace(';', ' -trait category=')) + <_runCommand>$(_runCommand)$(_withoutCategories.Replace(';', ' -notrait category=')) + + + <_runCommand Condition="'$(XUnitOptions)' != ''">$(_runCommand) $(XUnitOptions) + + + + + + - + \ No newline at end of file diff --git a/eng/testing/xunit/xunit.props b/eng/testing/xunit/xunit.props index 69355a452a48ee..fcad010f5e3c31 100644 --- a/eng/testing/xunit/xunit.props +++ b/eng/testing/xunit/xunit.props @@ -1,33 +1,15 @@ - - - en - $(MSBuildThisFileDirectory)xunit.runner.json - - - - - - - - - - - - - + + + - diff --git a/eng/testing/xunit/xunit.runner.json b/eng/testing/xunit/xunit.runner.json index a879e62a4379e4..f1699cce5f4dfa 100644 --- a/eng/testing/xunit/xunit.runner.json +++ b/eng/testing/xunit/xunit.runner.json @@ -1,6 +1,4 @@ { - "diagnosticMessages": true, - "longRunningTestSeconds": 120, "shadowCopy": false, "preEnumerateTheories": false } \ No newline at end of file diff --git a/eng/testing/xunit/xunit.targets b/eng/testing/xunit/xunit.targets index feb429aab6bf4d..7e387204c4de81 100644 --- a/eng/testing/xunit/xunit.targets +++ b/eng/testing/xunit/xunit.targets @@ -6,20 +6,10 @@ Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp'" /> - - - $(OutDir) - - - - $(DotNetTool) - test $(TargetPath) --settings $(OutDir).runsettings - - - - $(DevEnvDir)Extensions\TestPlatform\vstest.console.exe - $(TargetPath) --settings:$(OutDir).runsettings - - - + + diff --git a/src/libraries/Common/src/System/Net/Http/aspnetcore/ReadMe.SharedCode.md b/src/libraries/Common/src/System/Net/Http/aspnetcore/ReadMe.SharedCode.md index eb86cd931280ec..aa570da940b0c6 100644 --- a/src/libraries/Common/src/System/Net/Http/aspnetcore/ReadMe.SharedCode.md +++ b/src/libraries/Common/src/System/Net/Http/aspnetcore/ReadMe.SharedCode.md @@ -20,8 +20,8 @@ dotnet/AspNetCore code paths: - `PS D:\github\dotnet\src\libraries\System.Net.Http\src> dotnet build` ### Running dotnet/runtime tests: -- `PS D:\github\runtime\src\libraries\Common\tests> dotnet build /t:test` -- `PS D:\github\runtime\src\libraries\System.Net.Http\tests\UnitTests> dotnet build /t:test` +- `PS D:\github\runtime\src\libraries\Common\tests> dotnet test` +- `PS D:\github\runtime\src\libraries\System.Net.Http\tests\UnitTests> dotnet test` ## Building dotnet/AspNetCore code: - https://github.com/dotnet/AspNetCore/blob/master/docs/BuildFromSource.md diff --git a/src/libraries/Common/tests/Scripts/Tools/ParallelTestExecution.ps1 b/src/libraries/Common/tests/Scripts/Tools/ParallelTestExecution.ps1 index df8b8b3b5c0f96..3b41fbe43d30b0 100644 --- a/src/libraries/Common/tests/Scripts/Tools/ParallelTestExecution.ps1 +++ b/src/libraries/Common/tests/Scripts/Tools/ParallelTestExecution.ps1 @@ -13,7 +13,7 @@ function BuildAndTestBinary { - $output = (msbuild /t:test /p:OuterLoop=true) + $output = (dotnet test /p:OuterLoop=true) if ($lastexitcode -ne 0) { throw "Build/test failed." diff --git a/src/libraries/Common/tests/System/Net/EnterpriseTests/setup/README.md b/src/libraries/Common/tests/System/Net/EnterpriseTests/setup/README.md index 24a1db60f5a211..7105933eeaa87b 100644 --- a/src/libraries/Common/tests/System/Net/EnterpriseTests/setup/README.md +++ b/src/libraries/Common/tests/System/Net/EnterpriseTests/setup/README.md @@ -59,7 +59,7 @@ Now you can run the enterprise tests. Currently, there are tests for System.Net. ```bash cd /repo/src/libraries/System.Net.Http/tests/EnterpriseTests -/repo/dotnet.sh build /t:test +/repo/dotnet.sh test ``` You can exit from the container bash shell: diff --git a/src/libraries/Directory.Build.props b/src/libraries/Directory.Build.props index 7622c28efd0e0a..f5585fe57ed3ec 100644 --- a/src/libraries/Directory.Build.props +++ b/src/libraries/Directory.Build.props @@ -294,9 +294,10 @@ true - - true - true + true + + true diff --git a/src/libraries/Directory.Build.targets b/src/libraries/Directory.Build.targets index 0df45c84d2847b..11d819a8793bbd 100644 --- a/src/libraries/Directory.Build.targets +++ b/src/libraries/Directory.Build.targets @@ -123,7 +123,7 @@ - + diff --git a/src/libraries/Microsoft.XmlSerializer.Generator/tests/Microsoft.XmlSerializer.Generator.Tests.csproj b/src/libraries/Microsoft.XmlSerializer.Generator/tests/Microsoft.XmlSerializer.Generator.Tests.csproj index 13024a3e7a7fc8..0e924afc2ca07c 100644 --- a/src/libraries/Microsoft.XmlSerializer.Generator/tests/Microsoft.XmlSerializer.Generator.Tests.csproj +++ b/src/libraries/Microsoft.XmlSerializer.Generator/tests/Microsoft.XmlSerializer.Generator.Tests.csproj @@ -3,13 +3,7 @@ $(DefineConstants);XMLSERIALIZERGENERATORTESTS $(NetCoreAppCurrent) true - - - $(MSBuildThisFileDirectory)..\pkg\build\dotnet-Microsoft.XmlSerializer.Generator.runtimeconfig.json - "$(DotNetTool)" - set DOTNET_MULTILEVEL_LOOKUP=0 & $(GeneratorCommand) - export DOTNET_MULTILEVEL_LOOKUP=0 && $(GeneratorCommand) @@ -21,11 +15,13 @@ - - - dotnet-Microsoft.XmlSerializer.Generator.runtimeconfig.json - PreserveNewest - + + + + + @@ -34,18 +30,36 @@ - + + "$(DotNetTool)" + set DOTNET_MULTILEVEL_LOOKUP=0 & $(GeneratorCommand) + export DOTNET_MULTILEVEL_LOOKUP=0 && $(GeneratorCommand) $(AssemblyName).XmlSerializers - + + + diff --git a/src/libraries/System.Configuration.ConfigurationManager/tests/System.Configuration.ConfigurationManager.Tests.csproj b/src/libraries/System.Configuration.ConfigurationManager/tests/System.Configuration.ConfigurationManager.Tests.csproj index 555d37eb2cb37b..c8b5c7404b7a42 100644 --- a/src/libraries/System.Configuration.ConfigurationManager/tests/System.Configuration.ConfigurationManager.Tests.csproj +++ b/src/libraries/System.Configuration.ConfigurationManager/tests/System.Configuration.ConfigurationManager.Tests.csproj @@ -1,7 +1,5 @@ - - true true true $(NetCoreAppCurrent)-Windows_NT;net461 diff --git a/src/libraries/System.Configuration.ConfigurationManager/tests/System/Configuration/UrlPathTests.cs b/src/libraries/System.Configuration.ConfigurationManager/tests/System/Configuration/UrlPathTests.cs index 4619bec0f43023..b3d52bab6a2860 100644 --- a/src/libraries/System.Configuration.ConfigurationManager/tests/System/Configuration/UrlPathTests.cs +++ b/src/libraries/System.Configuration.ConfigurationManager/tests/System/Configuration/UrlPathTests.cs @@ -31,10 +31,9 @@ public void GetDirectoryOrRootName_GettingDirectoryFromAFilePath() // Remove the trailing slash. Different OS's use a different slash. // This is to make the test pass without worrying about adding a slash // and which kind of slash. - string exePathWithoutTrailingSlash = exePath.Substring(0, exePath.Length - 1); - string pathToNonexistentFile = exePath + "TestFileForUrlPathTests.txt"; - - string test = UrlPath.GetDirectoryOrRootName(pathToNonexistentFile); + string exePathWithoutTrailingSlash = exePath.TrimEnd('/', '\\'); + string pathToNonexistentFile = Path.Combine(exePath, "TestFileForUrlPathTests.txt"); + string test = UrlPath.GetDirectoryOrRootName(pathToNonexistentFile).TrimEnd('/', '\\'); Assert.Equal(exePathWithoutTrailingSlash, test); } diff --git a/src/libraries/System.Console/tests/ReadAndWrite.cs b/src/libraries/System.Console/tests/ReadAndWrite.cs index 7076c46edd9547..3222c1040e6a6b 100644 --- a/src/libraries/System.Console/tests/ReadAndWrite.cs +++ b/src/libraries/System.Console/tests/ReadAndWrite.cs @@ -257,10 +257,11 @@ private static unsafe void ValidateConsoleEncoding(Encoding encoding) } } - [Fact] + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsNotWindowsNanoServer), nameof(PlatformDetection.IsNotWindowsServerCore), nameof(PlatformDetection.IsNotWindowsIoTCore))] [PlatformSpecific(~TestPlatforms.Browser)] - public static unsafe void OutputEncodingPreamble() + public unsafe void OutputEncodingPreamble() { + // On Windows Nano Server this returns "Codepage - 0" which defaults to nothing. Therefore disabling th Encoding curEncoding = Console.OutputEncoding; try @@ -280,9 +281,9 @@ public static unsafe void OutputEncodingPreamble() } } - [Fact] + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsNotWindowsNanoServer), nameof(PlatformDetection.IsNotWindowsServerCore), nameof(PlatformDetection.IsNotWindowsIoTCore))] [PlatformSpecific(~TestPlatforms.Browser)] - public static unsafe void OutputEncoding() + public unsafe void OutputEncoding() { Encoding curEncoding = Console.OutputEncoding; diff --git a/src/libraries/System.Console/tests/ReadKey.cs b/src/libraries/System.Console/tests/ReadKey.cs index 42481f367a6a33..da1befd6434108 100644 --- a/src/libraries/System.Console/tests/ReadKey.cs +++ b/src/libraries/System.Console/tests/ReadKey.cs @@ -8,8 +8,8 @@ public class ReadKey { - [Fact] - public static void KeyAvailable() + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsNotWindows7))] // https://github.com/dotnet/runtime/issues/43015 + public void KeyAvailable() { if (Console.IsInputRedirected) { diff --git a/src/libraries/System.Console/tests/WindowAndCursorProps.cs b/src/libraries/System.Console/tests/WindowAndCursorProps.cs index 07309799a7549b..632b5777e47f74 100644 --- a/src/libraries/System.Console/tests/WindowAndCursorProps.cs +++ b/src/libraries/System.Console/tests/WindowAndCursorProps.cs @@ -51,7 +51,8 @@ public static void SetBufferSize_Unix_ThrowsPlatformNotSupportedException() [InlineData(-1)] public static void WindowWidth_SetInvalid_ThrowsArgumentOutOfRangeException(int value) { - if (Console.IsOutputRedirected) + // Windows7 x86 doesn't throw an IOException when input/output is redirected: https://github.com/dotnet/runtime/issues/43138. + if (Console.IsOutputRedirected && (PlatformDetection.IsNotWindows7 || !PlatformDetection.Is32BitProcess)) { Assert.Throws(() => Console.WindowWidth = value); } @@ -83,7 +84,8 @@ public static void WindowWidth_SetUnix_ThrowsPlatformNotSupportedException() [InlineData(-1)] public static void WindowHeight_SetInvalid_ThrowsArgumentOutOfRangeException(int value) { - if (Console.IsOutputRedirected) + // Windows7 x86 doesn't throw an IOException when input/output is redirected: https://github.com/dotnet/runtime/issues/43138. + if (Console.IsOutputRedirected && (PlatformDetection.IsNotWindows7 || !PlatformDetection.Is32BitProcess)) { Assert.Throws(() => Console.WindowHeight = value); } @@ -171,7 +173,8 @@ public static void WindowTop_SetUnix_ThrowsPlatformNotSupportedException() [PlatformSpecific(TestPlatforms.Windows)] // Expected behavior specific to Windows public static void WindowLeftTop_Windows() { - if (Console.IsOutputRedirected) + // Windows7 x86 doesn't throw an IOException when input/output is redirected: https://github.com/dotnet/runtime/issues/43138. + if (Console.IsOutputRedirected && (PlatformDetection.IsNotWindows7 || !PlatformDetection.Is32BitProcess)) { Assert.Throws(() => Console.WindowLeft); Assert.Throws(() => Console.WindowTop); @@ -416,7 +419,8 @@ public void CursorLeft_Set_GetReturnsExpected() [PlatformSpecific(~TestPlatforms.Browser)] public void CursorLeft_SetInvalid_ThrowsArgumentOutOfRangeException(int value) { - if (PlatformDetection.IsWindows && Console.IsOutputRedirected) + // Windows7 x86 doesn't throw an IOException when input/output is redirected: https://github.com/dotnet/runtime/issues/43138. + if (PlatformDetection.IsWindows && Console.IsOutputRedirected && (PlatformDetection.IsNotWindows7 || !PlatformDetection.Is32BitProcess)) { Assert.Throws(() => Console.CursorLeft = value); } @@ -459,7 +463,8 @@ public void CursorTop_Set_GetReturnsExpected() [PlatformSpecific(~TestPlatforms.Browser)] public void CursorTop_SetInvalid_ThrowsArgumentOutOfRangeException(int value) { - if (PlatformDetection.IsWindows & Console.IsOutputRedirected) + // Windows7 x86 doesn't throw an IOException when input/output is redirected: https://github.com/dotnet/runtime/issues/43138. + if (PlatformDetection.IsWindows && Console.IsOutputRedirected && (PlatformDetection.IsNotWindows7 || !PlatformDetection.Is32BitProcess)) { Assert.Throws(() => Console.CursorTop = value); } diff --git a/src/libraries/System.Diagnostics.Debug/tests/DebugTests.cs b/src/libraries/System.Diagnostics.Debug/tests/DebugTests.cs index c9226503aa9b12..ba50a00ebe5bab 100644 --- a/src/libraries/System.Diagnostics.Debug/tests/DebugTests.cs +++ b/src/libraries/System.Diagnostics.Debug/tests/DebugTests.cs @@ -14,11 +14,19 @@ public abstract class DebugTests static DebugTests() { - FieldInfo fieldInfo = typeof(Debug).GetField("s_provider", BindingFlags.Static | BindingFlags.NonPublic); - _debugOnlyProvider = (DebugProvider)fieldInfo.GetValue(null); - // Triggers code to wire up TraceListeners with Debug + // Clear the current trace listeners in case test runners add their own. + Trace.Listeners.Clear(); + Trace.Listeners.Add(new DefaultTraceListener()); Assert.Equal(1, Trace.Listeners.Count); + + // Initialize the trace provider. + FieldInfo fieldInfo = typeof(Debug).GetField("s_provider", BindingFlags.Static | BindingFlags.NonPublic); _debugTraceProvider = (DebugProvider)fieldInfo.GetValue(null); + + // Initialize the debug provider. Set it explicitely as test runner might override it (ie vstest). + Debug.SetProvider(new DebugProvider()); + _debugOnlyProvider = (DebugProvider)fieldInfo.GetValue(null); + Assert.NotEqual(_debugOnlyProvider.GetType(), _debugTraceProvider.GetType()); } diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessStandardConsoleTests.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessStandardConsoleTests.cs index e302761750140d..1b638419ff89ba 100644 --- a/src/libraries/System.Diagnostics.Process/tests/ProcessStandardConsoleTests.cs +++ b/src/libraries/System.Diagnostics.Process/tests/ProcessStandardConsoleTests.cs @@ -13,6 +13,12 @@ public class ProcessStandardConsoleTests : ProcessTestBase [ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))] public void TestChangesInConsoleEncoding() { + // Returns a non existent encoding "Codepage - 0": https://github.com/dotnet/runtime/issues/42959 + if (PlatformDetection.IsWindowsNanoServer) + { + return; + } + const int ConsoleEncoding = 437; void RunWithExpectedCodePage(int expectedCodePage) diff --git a/src/libraries/System.Diagnostics.Tracing/tests/BasicEventSourceTest/TestUtilities.cs b/src/libraries/System.Diagnostics.Tracing/tests/BasicEventSourceTest/TestUtilities.cs index 3c092bde0c6c46..24c9472a002fab 100644 --- a/src/libraries/System.Diagnostics.Tracing/tests/BasicEventSourceTest/TestUtilities.cs +++ b/src/libraries/System.Diagnostics.Tracing/tests/BasicEventSourceTest/TestUtilities.cs @@ -39,7 +39,13 @@ public static void CheckNoEventSourcesRunning(string message = "") eventSource.Name != "System.Runtime.InteropServices.InteropEventProvider" && eventSource.Name != "System.Reflection.Runtime.Tracing" && eventSource.Name != "Microsoft-Windows-DotNETRuntime" && - eventSource.Name != "System.Runtime" + eventSource.Name != "System.Runtime" && + // Used by VSTest + eventSource.Name != "TestPlatform" && + eventSource.Name != "Private.InternalDiagnostics.System.Net.Sockets" && + eventSource.Name != "System.Net.NameResolution" && + eventSource.Name != "Private.InternalDiagnostics.System.Net.NameResolution" && + eventSource.Name != "System.Net.Sockets" ) { eventSourceNames += eventSource.Name + " "; diff --git a/src/libraries/System.Runtime.Serialization.Formatters/tests/BinaryFormatterTestData.cs b/src/libraries/System.Runtime.Serialization.Formatters/tests/BinaryFormatterTestData.cs index 54af864c8c4e18..8f8dcec31e879d 100644 --- a/src/libraries/System.Runtime.Serialization.Formatters/tests/BinaryFormatterTestData.cs +++ b/src/libraries/System.Runtime.Serialization.Formatters/tests/BinaryFormatterTestData.cs @@ -1081,13 +1081,16 @@ public static IEnumerable SerializableObjects() yield return new object[] { new LinkedList>>(), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAADqA1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpbmtlZExpc3RgMVtbU3lzdGVtLlR1cGxlYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0sIFN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cywgVmVyc2lvbj00LjAuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTlkNzdjYzdhZDM5YjY4ZWJdXSwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0CAAAAB1ZlcnNpb24FQ291bnQAAAgIAgAAAAAAAAAAAAAACw==", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAADqA1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpbmtlZExpc3RgMVtbU3lzdGVtLlR1cGxlYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0sIFN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cywgVmVyc2lvbj00LjAuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTlkNzdjYzdhZDM5YjY4ZWJdXSwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0CAAAAB1ZlcnNpb24FQ291bnQAAAgIAgAAAAAAAAAAAAAACw==", TargetFrameworkMoniker.netfx461) } }; yield return new object[] { new LinkedList>>(new Tuple>[] { Tuple.Create(1, new Graph()), Tuple.Create(5, new Graph()) }), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAADqA1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpbmtlZExpc3RgMVtbU3lzdGVtLlR1cGxlYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0sIFN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cywgVmVyc2lvbj00LjAuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTlkNzdjYzdhZDM5YjY4ZWJdXSwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAAB1ZlcnNpb24FQ291bnQERGF0YQAAAwgI9AJTeXN0ZW0uVHVwbGVgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuR3JhcGhgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXSwgU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYl1dW10CAAAAAgAAAAIAAAAJAwAAAAcDAAAAAAEAAAACAAAAA/ICU3lzdGVtLlR1cGxlYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0sIFN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cywgVmVyc2lvbj00LjAuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTlkNzdjYzdhZDM5YjY4ZWJdXQkEAAAACQUAAAAMBgAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBAQAAADyAlN5c3RlbS5UdXBsZWAyW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5HcmFwaGAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dLCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0CAAAAB21fSXRlbTEHbV9JdGVtMgAECJIBU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0GAAAAAQAAAAkHAAAAAQUAAAAEAAAABQAAAAkIAAAABQcAAACSAVN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5HcmFwaGAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAVWYWx1ZQVMaW5rcwAECJQBU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1bXQYAAAAGAAAAAAAAAAoBCAAAAAcAAAAAAAAACgs=", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAADqA1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpbmtlZExpc3RgMVtbU3lzdGVtLlR1cGxlYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0sIFN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cywgVmVyc2lvbj00LjAuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTlkNzdjYzdhZDM5YjY4ZWJdXSwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAAB1ZlcnNpb24FQ291bnQERGF0YQAAAwgI9AJTeXN0ZW0uVHVwbGVgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuR3JhcGhgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXSwgU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYl1dW10CAAAAAgAAAAIAAAAJAwAAAAcDAAAAAAEAAAACAAAAA/ICU3lzdGVtLlR1cGxlYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0sIFN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cywgVmVyc2lvbj00LjAuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTlkNzdjYzdhZDM5YjY4ZWJdXQkEAAAACQUAAAAMBgAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBAQAAADyAlN5c3RlbS5UdXBsZWAyW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5HcmFwaGAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dLCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0CAAAAB21fSXRlbTEHbV9JdGVtMgAECJIBU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0GAAAAAQAAAAkHAAAAAQUAAAAEAAAABQAAAAkIAAAABQcAAACSAVN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5HcmFwaGAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAVWYWx1ZQVMaW5rcwAECJQBU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1bXQYAAAAGAAAAAAAAAAoBCAAAAAcAAAAAAAAACgs=", TargetFrameworkMoniker.netfx461) } }; - yield return new object[] { new Queue(), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAADIAAAAAAAAABACAAAAIAAAAA0gCw==", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAADIAAAAAAAAABACAAAAIAAAAA0gCw==", TargetFrameworkMoniker.netfx461) } }; - yield return new object[] { new Queue(5), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAADIAAAAAAAAABACAAAABQAAAA0FCw==", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAADIAAAAAAAAABACAAAABQAAAA0FCw==", TargetFrameworkMoniker.netfx461) } }; - yield return new object[] { new Queue(7, 2.2f), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAADcAAAAAAAAABACAAAABwAAAA0HCw==", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAADcAAAAAAAAABACAAAABwAAAA0HCw==", TargetFrameworkMoniker.netfx461) } }; - yield return new object[] { new Queue(Enumerable.Range(0, 123).ToArray()), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAHsAAADIAAAAewAAABACAAAAewAAAAgIAAAAAAgIAQAAAAgIAgAAAAgIAwAAAAgIBAAAAAgIBQAAAAgIBgAAAAgIBwAAAAgICAAAAAgICQAAAAgICgAAAAgICwAAAAgIDAAAAAgIDQAAAAgIDgAAAAgIDwAAAAgIEAAAAAgIEQAAAAgIEgAAAAgIEwAAAAgIFAAAAAgIFQAAAAgIFgAAAAgIFwAAAAgIGAAAAAgIGQAAAAgIGgAAAAgIGwAAAAgIHAAAAAgIHQAAAAgIHgAAAAgIHwAAAAgIIAAAAAgIIQAAAAgIIgAAAAgIIwAAAAgIJAAAAAgIJQAAAAgIJgAAAAgIJwAAAAgIKAAAAAgIKQAAAAgIKgAAAAgIKwAAAAgILAAAAAgILQAAAAgILgAAAAgILwAAAAgIMAAAAAgIMQAAAAgIMgAAAAgIMwAAAAgINAAAAAgINQAAAAgINgAAAAgINwAAAAgIOAAAAAgIOQAAAAgIOgAAAAgIOwAAAAgIPAAAAAgIPQAAAAgIPgAAAAgIPwAAAAgIQAAAAAgIQQAAAAgIQgAAAAgIQwAAAAgIRAAAAAgIRQAAAAgIRgAAAAgIRwAAAAgISAAAAAgISQAAAAgISgAAAAgISwAAAAgITAAAAAgITQAAAAgITgAAAAgITwAAAAgIUAAAAAgIUQAAAAgIUgAAAAgIUwAAAAgIVAAAAAgIVQAAAAgIVgAAAAgIVwAAAAgIWAAAAAgIWQAAAAgIWgAAAAgIWwAAAAgIXAAAAAgIXQAAAAgIXgAAAAgIXwAAAAgIYAAAAAgIYQAAAAgIYgAAAAgIYwAAAAgIZAAAAAgIZQAAAAgIZgAAAAgIZwAAAAgIaAAAAAgIaQAAAAgIagAAAAgIawAAAAgIbAAAAAgIbQAAAAgIbgAAAAgIbwAAAAgIcAAAAAgIcQAAAAgIcgAAAAgIcwAAAAgIdAAAAAgIdQAAAAgIdgAAAAgIdwAAAAgIeAAAAAgIeQAAAAgIegAAAAs=", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAHsAAADIAAAAewAAABACAAAAewAAAAgIAAAAAAgIAQAAAAgIAgAAAAgIAwAAAAgIBAAAAAgIBQAAAAgIBgAAAAgIBwAAAAgICAAAAAgICQAAAAgICgAAAAgICwAAAAgIDAAAAAgIDQAAAAgIDgAAAAgIDwAAAAgIEAAAAAgIEQAAAAgIEgAAAAgIEwAAAAgIFAAAAAgIFQAAAAgIFgAAAAgIFwAAAAgIGAAAAAgIGQAAAAgIGgAAAAgIGwAAAAgIHAAAAAgIHQAAAAgIHgAAAAgIHwAAAAgIIAAAAAgIIQAAAAgIIgAAAAgIIwAAAAgIJAAAAAgIJQAAAAgIJgAAAAgIJwAAAAgIKAAAAAgIKQAAAAgIKgAAAAgIKwAAAAgILAAAAAgILQAAAAgILgAAAAgILwAAAAgIMAAAAAgIMQAAAAgIMgAAAAgIMwAAAAgINAAAAAgINQAAAAgINgAAAAgINwAAAAgIOAAAAAgIOQAAAAgIOgAAAAgIOwAAAAgIPAAAAAgIPQAAAAgIPgAAAAgIPwAAAAgIQAAAAAgIQQAAAAgIQgAAAAgIQwAAAAgIRAAAAAgIRQAAAAgIRgAAAAgIRwAAAAgISAAAAAgISQAAAAgISgAAAAgISwAAAAgITAAAAAgITQAAAAgITgAAAAgITwAAAAgIUAAAAAgIUQAAAAgIUgAAAAgIUwAAAAgIVAAAAAgIVQAAAAgIVgAAAAgIVwAAAAgIWAAAAAgIWQAAAAgIWgAAAAgIWwAAAAgIXAAAAAgIXQAAAAgIXgAAAAgIXwAAAAgIYAAAAAgIYQAAAAgIYgAAAAgIYwAAAAgIZAAAAAgIZQAAAAgIZgAAAAgIZwAAAAgIaAAAAAgIaQAAAAgIagAAAAgIawAAAAgIbAAAAAgIbQAAAAgIbgAAAAgIbwAAAAgIcAAAAAgIcQAAAAgIcgAAAAgIcwAAAAgIdAAAAAgIdQAAAAgIdgAAAAgIdwAAAAgIeAAAAAgIeQAAAAgIegAAAAs=", TargetFrameworkMoniker.netfx461) } }; - yield return new object[] { new Queue(new int[] { 5, 7, 9 }), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAMAAADIAAAAAwAAABACAAAAAwAAAAgIBQAAAAgIBwAAAAgICQAAAAs=", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAMAAADIAAAAAwAAABACAAAAAwAAAAgIBQAAAAgIBwAAAAgICQAAAAs=", TargetFrameworkMoniker.netfx461) } }; - yield return new object[] { new Queue(new Point[] { new Point(1, 2), new Point(4, 3) }), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAIAAADIAAAAAgAAABACAAAAAgAAAAkDAAAACQQAAAAMBQAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBQMAAAAzU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50AgAAAAFYAVkAAAgIBQAAAAEAAAACAAAAAQQAAAADAAAABAAAAAMAAAAL", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAIAAADIAAAAAgAAABACAAAAAgAAAAkDAAAACQQAAAAMBQAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBQMAAAAzU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50AgAAAAFYAVkAAAgIBQAAAAEAAAACAAAAAQQAAAADAAAABAAAAAMAAAAL", TargetFrameworkMoniker.netfx461) } }; - yield return new object[] { new Queue(new Tuple>[] { Tuple.Create(1, new Graph()), Tuple.Create(5, new Graph()) }), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAIAAADIAAAAAgAAABACAAAAAgAAAAkDAAAACQQAAAAMBQAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBAMAAADyAlN5c3RlbS5UdXBsZWAyW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5HcmFwaGAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dLCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0CAAAAB21fSXRlbTEHbV9JdGVtMgAECJIBU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0FAAAAAQAAAAkGAAAAAQQAAAADAAAABQAAAAkHAAAABQYAAACSAVN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5HcmFwaGAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAVWYWx1ZQVMaW5rcwAECJQBU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1bXQUAAAAFAAAAAAAAAAoBBwAAAAYAAAAAAAAACgs=", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAIAAADIAAAAAgAAABACAAAAAgAAAAkDAAAACQQAAAAMBQAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBAMAAADyAlN5c3RlbS5UdXBsZWAyW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5HcmFwaGAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dLCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0CAAAAB21fSXRlbTEHbV9JdGVtMgAECJIBU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0FAAAAAQAAAAkGAAAAAQQAAAADAAAABQAAAAkHAAAABQYAAACSAVN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5HcmFwaGAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAVWYWx1ZQVMaW5rcwAECJQBU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1bXQUAAAAFAAAAAAAAAAoBBwAAAAYAAAAAAAAACgs=", TargetFrameworkMoniker.netfx461) } }; + if (!PlatformDetection.IsNetFramework) + { + yield return new object[] { new Queue(), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAADIAAAAAAAAABACAAAAIAAAAA0gCw==", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAADIAAAAAAAAABACAAAAIAAAAA0gCw==", TargetFrameworkMoniker.netfx461) } }; + yield return new object[] { new Queue(5), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAADIAAAAAAAAABACAAAABQAAAA0FCw==", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAADIAAAAAAAAABACAAAABQAAAA0FCw==", TargetFrameworkMoniker.netfx461) } }; + yield return new object[] { new Queue(7, 2.2f), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAADcAAAAAAAAABACAAAABwAAAA0HCw==", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAADcAAAAAAAAABACAAAABwAAAA0HCw==", TargetFrameworkMoniker.netfx461) } }; + yield return new object[] { new Queue(Enumerable.Range(0, 123).ToArray()), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAHsAAADIAAAAewAAABACAAAAewAAAAgIAAAAAAgIAQAAAAgIAgAAAAgIAwAAAAgIBAAAAAgIBQAAAAgIBgAAAAgIBwAAAAgICAAAAAgICQAAAAgICgAAAAgICwAAAAgIDAAAAAgIDQAAAAgIDgAAAAgIDwAAAAgIEAAAAAgIEQAAAAgIEgAAAAgIEwAAAAgIFAAAAAgIFQAAAAgIFgAAAAgIFwAAAAgIGAAAAAgIGQAAAAgIGgAAAAgIGwAAAAgIHAAAAAgIHQAAAAgIHgAAAAgIHwAAAAgIIAAAAAgIIQAAAAgIIgAAAAgIIwAAAAgIJAAAAAgIJQAAAAgIJgAAAAgIJwAAAAgIKAAAAAgIKQAAAAgIKgAAAAgIKwAAAAgILAAAAAgILQAAAAgILgAAAAgILwAAAAgIMAAAAAgIMQAAAAgIMgAAAAgIMwAAAAgINAAAAAgINQAAAAgINgAAAAgINwAAAAgIOAAAAAgIOQAAAAgIOgAAAAgIOwAAAAgIPAAAAAgIPQAAAAgIPgAAAAgIPwAAAAgIQAAAAAgIQQAAAAgIQgAAAAgIQwAAAAgIRAAAAAgIRQAAAAgIRgAAAAgIRwAAAAgISAAAAAgISQAAAAgISgAAAAgISwAAAAgITAAAAAgITQAAAAgITgAAAAgITwAAAAgIUAAAAAgIUQAAAAgIUgAAAAgIUwAAAAgIVAAAAAgIVQAAAAgIVgAAAAgIVwAAAAgIWAAAAAgIWQAAAAgIWgAAAAgIWwAAAAgIXAAAAAgIXQAAAAgIXgAAAAgIXwAAAAgIYAAAAAgIYQAAAAgIYgAAAAgIYwAAAAgIZAAAAAgIZQAAAAgIZgAAAAgIZwAAAAgIaAAAAAgIaQAAAAgIagAAAAgIawAAAAgIbAAAAAgIbQAAAAgIbgAAAAgIbwAAAAgIcAAAAAgIcQAAAAgIcgAAAAgIcwAAAAgIdAAAAAgIdQAAAAgIdgAAAAgIdwAAAAgIeAAAAAgIeQAAAAgIegAAAAs=", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAHsAAADIAAAAewAAABACAAAAewAAAAgIAAAAAAgIAQAAAAgIAgAAAAgIAwAAAAgIBAAAAAgIBQAAAAgIBgAAAAgIBwAAAAgICAAAAAgICQAAAAgICgAAAAgICwAAAAgIDAAAAAgIDQAAAAgIDgAAAAgIDwAAAAgIEAAAAAgIEQAAAAgIEgAAAAgIEwAAAAgIFAAAAAgIFQAAAAgIFgAAAAgIFwAAAAgIGAAAAAgIGQAAAAgIGgAAAAgIGwAAAAgIHAAAAAgIHQAAAAgIHgAAAAgIHwAAAAgIIAAAAAgIIQAAAAgIIgAAAAgIIwAAAAgIJAAAAAgIJQAAAAgIJgAAAAgIJwAAAAgIKAAAAAgIKQAAAAgIKgAAAAgIKwAAAAgILAAAAAgILQAAAAgILgAAAAgILwAAAAgIMAAAAAgIMQAAAAgIMgAAAAgIMwAAAAgINAAAAAgINQAAAAgINgAAAAgINwAAAAgIOAAAAAgIOQAAAAgIOgAAAAgIOwAAAAgIPAAAAAgIPQAAAAgIPgAAAAgIPwAAAAgIQAAAAAgIQQAAAAgIQgAAAAgIQwAAAAgIRAAAAAgIRQAAAAgIRgAAAAgIRwAAAAgISAAAAAgISQAAAAgISgAAAAgISwAAAAgITAAAAAgITQAAAAgITgAAAAgITwAAAAgIUAAAAAgIUQAAAAgIUgAAAAgIUwAAAAgIVAAAAAgIVQAAAAgIVgAAAAgIVwAAAAgIWAAAAAgIWQAAAAgIWgAAAAgIWwAAAAgIXAAAAAgIXQAAAAgIXgAAAAgIXwAAAAgIYAAAAAgIYQAAAAgIYgAAAAgIYwAAAAgIZAAAAAgIZQAAAAgIZgAAAAgIZwAAAAgIaAAAAAgIaQAAAAgIagAAAAgIawAAAAgIbAAAAAgIbQAAAAgIbgAAAAgIbwAAAAgIcAAAAAgIcQAAAAgIcgAAAAgIcwAAAAgIdAAAAAgIdQAAAAgIdgAAAAgIdwAAAAgIeAAAAAgIeQAAAAgIegAAAAs=", TargetFrameworkMoniker.netfx461) } }; + yield return new object[] { new Queue(new int[] { 5, 7, 9 }), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAMAAADIAAAAAwAAABACAAAAAwAAAAgIBQAAAAgIBwAAAAgICQAAAAs=", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAMAAADIAAAAAwAAABACAAAAAwAAAAgIBQAAAAgIBwAAAAgICQAAAAs=", TargetFrameworkMoniker.netfx461) } }; + yield return new object[] { new Queue(new Point[] { new Point(1, 2), new Point(4, 3) }), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAIAAADIAAAAAgAAABACAAAAAgAAAAkDAAAACQQAAAAMBQAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBQMAAAAzU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50AgAAAAFYAVkAAAgIBQAAAAEAAAACAAAAAQQAAAADAAAABAAAAAMAAAAL", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAIAAADIAAAAAgAAABACAAAAAgAAAAkDAAAACQQAAAAMBQAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBQMAAAAzU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50AgAAAAFYAVkAAAgIBQAAAAEAAAACAAAAAQQAAAADAAAABAAAAAMAAAAL", TargetFrameworkMoniker.netfx461) } }; + yield return new object[] { new Queue(new Tuple>[] { Tuple.Create(1, new Graph()), Tuple.Create(5, new Graph()) }), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAIAAADIAAAAAgAAABACAAAAAgAAAAkDAAAACQQAAAAMBQAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBAMAAADyAlN5c3RlbS5UdXBsZWAyW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5HcmFwaGAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dLCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0CAAAAB21fSXRlbTEHbV9JdGVtMgAECJIBU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0FAAAAAQAAAAkGAAAAAQQAAAADAAAABQAAAAkHAAAABQYAAACSAVN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5HcmFwaGAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAVWYWx1ZQVMaW5rcwAECJQBU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1bXQUAAAAFAAAAAAAAAAoBBwAAAAYAAAAAAAAACgs=", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAIAAADIAAAAAgAAABACAAAAAgAAAAkDAAAACQQAAAAMBQAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBAMAAADyAlN5c3RlbS5UdXBsZWAyW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5HcmFwaGAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dLCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0CAAAAB21fSXRlbTEHbV9JdGVtMgAECJIBU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0FAAAAAQAAAAkGAAAAAQQAAAADAAAABQAAAAkHAAAABQYAAACSAVN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5HcmFwaGAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAVWYWx1ZQVMaW5rcwAECJQBU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLkdyYXBoYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1bXQUAAAAFAAAAAAAAAAoBBwAAAAYAAAAAAAAACgs=", TargetFrameworkMoniker.netfx461) } }; + } yield return new object[] { new SortedDictionary(), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAADmAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZERpY3Rpb25hcnlgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAQAAAARfc2V0BNcCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuVHJlZVNldGAxW1tTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAACAAAACQMAAAAMBAAAAFVTeXN0ZW0uQ29sbGVjdGlvbnMsIFZlcnNpb249NC4xLjEuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iMDNmNWY3ZjExZDUwYTNhBQMAAADXAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlRyZWVTZXRgMVtbU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXSwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABUNvdW50CENvbXBhcmVyB1ZlcnNpb24ABAAI+wFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Tb3J0ZWREaWN0aW9uYXJ5YDIrS2V5VmFsdWVQYWlyQ29tcGFyZXJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQQAAAAIAgAAAAAAAAAJBQAAAAAAAAAFBQAAAPsBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuU29ydGVkRGljdGlvbmFyeWAyK0tleVZhbHVlUGFpckNvbXBhcmVyW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0BAAAAC2tleUNvbXBhcmVyA4kBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuR2VuZXJpY0NvbXBhcmVyYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0EAAAACQYAAAAEBgAAAIkBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuR2VuZXJpY0NvbXBhcmVyYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0AAAAACw==", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAADmAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZERpY3Rpb25hcnlgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAQAAAARfc2V0BNcCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuVHJlZVNldGAxW1tTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAACAAAACQMAAAAFAwAAANcCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuVHJlZVNldGAxW1tTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQMAAAAFQ291bnQIQ29tcGFyZXIHVmVyc2lvbgAEAAj7AVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZERpY3Rpb25hcnlgMitLZXlWYWx1ZVBhaXJDb21wYXJlcltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAgCAAAAAAAAAAkEAAAAAAAAAAUEAAAA+wFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Tb3J0ZWREaWN0aW9uYXJ5YDIrS2V5VmFsdWVQYWlyQ29tcGFyZXJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQEAAAALa2V5Q29tcGFyZXIDiQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5HZW5lcmljQ29tcGFyZXJgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJBQAAAAQFAAAAiQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5HZW5lcmljQ29tcGFyZXJgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQAAAAAL", TargetFrameworkMoniker.netfx461) } }; yield return new object[] { new SortedDictionary(Comparer.Default), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAADmAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZERpY3Rpb25hcnlgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAQAAAARfc2V0BNcCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuVHJlZVNldGAxW1tTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAACAAAACQMAAAAMBAAAAFVTeXN0ZW0uQ29sbGVjdGlvbnMsIFZlcnNpb249NC4xLjEuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iMDNmNWY3ZjExZDUwYTNhBQMAAADXAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlRyZWVTZXRgMVtbU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXSwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABUNvdW50CENvbXBhcmVyB1ZlcnNpb24ABAAI+wFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Tb3J0ZWREaWN0aW9uYXJ5YDIrS2V5VmFsdWVQYWlyQ29tcGFyZXJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQQAAAAIAgAAAAAAAAAJBQAAAAAAAAAFBQAAAPsBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuU29ydGVkRGljdGlvbmFyeWAyK0tleVZhbHVlUGFpckNvbXBhcmVyW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0BAAAAC2tleUNvbXBhcmVyA4kBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuR2VuZXJpY0NvbXBhcmVyYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0EAAAACQYAAAAEBgAAAIkBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuR2VuZXJpY0NvbXBhcmVyYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0AAAAACw==", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAADmAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZERpY3Rpb25hcnlgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAQAAAARfc2V0BNcCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuVHJlZVNldGAxW1tTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAACAAAACQMAAAAFAwAAANcCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuVHJlZVNldGAxW1tTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQMAAAAFQ291bnQIQ29tcGFyZXIHVmVyc2lvbgAEAAj7AVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZERpY3Rpb25hcnlgMitLZXlWYWx1ZVBhaXJDb21wYXJlcltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAgCAAAAAAAAAAkEAAAAAAAAAAUEAAAA+wFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Tb3J0ZWREaWN0aW9uYXJ5YDIrS2V5VmFsdWVQYWlyQ29tcGFyZXJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQEAAAALa2V5Q29tcGFyZXIDiQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5HZW5lcmljQ29tcGFyZXJgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJBQAAAAQFAAAAiQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5HZW5lcmljQ29tcGFyZXJgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQAAAAAL", TargetFrameworkMoniker.netfx461) } }; @@ -1273,8 +1276,14 @@ public static IEnumerable SerializableObjects() yield return new object[] { new HashSet(new[] { point }, new PointEqualityComparer()), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAE5TeXN0ZW0uQ29yZSwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBQEAAADNAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkhhc2hTZXRgMVtbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50LCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0EAAAAB1ZlcnNpb24IQ29tcGFyZXIIQ2FwYWNpdHkIRWxlbWVudHMABAAECENTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnRFcXVhbGl0eUNvbXBhcmVyAwAAAAg1U3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50W10DAAAAAgAAAAEAAAAJBAAAAAMAAAAJBQAAAAUEAAAAQ1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5Qb2ludEVxdWFsaXR5Q29tcGFyZXIAAAAAAwAAAAcFAAAAAAEAAAABAAAABDNTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQDAAAACQYAAAAFBgAAADNTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQCAAAAAVgBWQAACAgDAAAAAQAAAAIAAAAL", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAE5TeXN0ZW0uQ29yZSwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBQEAAADNAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkhhc2hTZXRgMVtbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50LCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0EAAAAB1ZlcnNpb24IQ29tcGFyZXIIQ2FwYWNpdHkIRWxlbWVudHMABAAECENTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnRFcXVhbGl0eUNvbXBhcmVyAwAAAAg1U3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50W10DAAAAAgAAAAEAAAAJBAAAAAMAAAAJBQAAAAUEAAAAQ1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5Qb2ludEVxdWFsaXR5Q29tcGFyZXIAAAAAAwAAAAcFAAAAAAEAAAABAAAABDNTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQDAAAACQYAAAAFBgAAADNTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQCAAAAAVgBWQAACAgDAAAAAQAAAAIAAAAL", TargetFrameworkMoniker.netfx461) } }; yield return new object[] { new KeyValuePair(5, "five"), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAAOMBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0CAAAAA2tleQV2YWx1ZQABCAUAAAAGAgAAAARmaXZlCw==", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAAOMBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0CAAAAA2tleQV2YWx1ZQABCAUAAAAGAgAAAARmaXZlCw==", TargetFrameworkMoniker.netfx461) } }; yield return new object[] { new LinkedList(new[] { point }), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5DAMAAABwU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYgUBAAAA0AFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaW5rZWRMaXN0YDFbW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5Qb2ludCwgU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYl1dAwAAAAdWZXJzaW9uBUNvdW50BERhdGEAAAQICDVTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnRbXQMAAAACAAAAAQAAAAEAAAAJBAAAAAcEAAAAAAEAAAABAAAABDNTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQDAAAACQUAAAAFBQAAADNTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQCAAAAAVgBWQAACAgDAAAAAQAAAAIAAAAL", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5DAMAAABwU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYgUBAAAA0AFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaW5rZWRMaXN0YDFbW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5Qb2ludCwgU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYl1dAwAAAAdWZXJzaW9uBUNvdW50BERhdGEAAAQICDVTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnRbXQMAAAACAAAAAQAAAAEAAAAJBAAAAAcEAAAAAAEAAAABAAAABDNTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQDAAAACQUAAAAFBQAAADNTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQCAAAAAVgBWQAACAgDAAAAAQAAAAIAAAAL", TargetFrameworkMoniker.netfx461) } }; - yield return new object[] { new Queue(Enumerable.Range(1, 25)), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAB/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuUXVldWVgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQUAAAAGX2FycmF5BV9oZWFkBV90YWlsBV9zaXplCF92ZXJzaW9uBwAAAAAICAgICAIAAAAJAwAAAAAAAAAZAAAAGQAAAAAAAAAPAwAAACAAAAAIAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAB/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuUXVldWVgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQUAAAAGX2FycmF5BV9oZWFkBV90YWlsBV9zaXplCF92ZXJzaW9uBwAAAAAICAgICAIAAAAJAwAAAAAAAAAZAAAAGQAAABwAAAAPAwAAACAAAAAIAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL", TargetFrameworkMoniker.netfx461) } }; - yield return new object[] { new Collections.Queue(50, 5.6f), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAAAwAgAAAAAAABACAAAAMgAAAA0yCw==", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAAAwAgAAAAAAABACAAAAMgAAAA0yCw==", TargetFrameworkMoniker.netfx461) } }; + + if (!PlatformDetection.IsNetFramework) + { + yield return new object[] { new Queue(Enumerable.Range(1, 25)), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAB/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuUXVldWVgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQUAAAAGX2FycmF5BV9oZWFkBV90YWlsBV9zaXplCF92ZXJzaW9uBwAAAAAICAgICAIAAAAJAwAAAAAAAAAZAAAAGQAAAAAAAAAPAwAAACAAAAAIAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAB/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuUXVldWVgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQUAAAAGX2FycmF5BV9oZWFkBV90YWlsBV9zaXplCF92ZXJzaW9uBwAAAAAICAgICAIAAAAJAwAAAAAAAAAZAAAAGQAAABwAAAAPAwAAACAAAAAIAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL", TargetFrameworkMoniker.netfx461) } }; + + yield return new object[] { new Collections.Queue(50, 5.6f), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAAAwAgAAAAAAABACAAAAMgAAAA0yCw==", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAABhTeXN0ZW0uQ29sbGVjdGlvbnMuUXVldWUGAAAABl9hcnJheQVfaGVhZAVfdGFpbAVfc2l6ZQtfZ3Jvd0ZhY3RvcghfdmVyc2lvbgUAAAAAAAgICAgICQIAAAAAAAAAAAAAAAAAAAAwAgAAAAAAABACAAAAMgAAAA0yCw==", TargetFrameworkMoniker.netfx461) } }; + } + yield return new object[] { new SortedDictionary(pointDictionary, Comparer.Default), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAACyAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZERpY3Rpb25hcnlgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQsIFN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cywgVmVyc2lvbj00LjAuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTlkNzdjYzdhZDM5YjY4ZWJdXQEAAAAEX3NldASjA1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlRyZWVTZXRgMVtbU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50LCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0sIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAIAAAAJAwAAAAwEAAAAVVN5c3RlbS5Db2xsZWN0aW9ucywgVmVyc2lvbj00LjEuMS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAwAAAKMDU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuVHJlZVNldGAxW1tTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQsIFN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cywgVmVyc2lvbj00LjAuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTlkNzdjYzdhZDM5YjY4ZWJdXSwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0EAAAABUNvdW50CENvbXBhcmVyB1ZlcnNpb24FSXRlbXMABAADCMcCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuU29ydGVkRGljdGlvbmFyeWAyK0tleVZhbHVlUGFpckNvbXBhcmVyW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5Qb2ludCwgU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYl1dBAAAAAiwAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLktleVZhbHVlUGFpcmAyW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5Qb2ludCwgU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYl1dW10CAAAAAgAAAAkFAAAAAgAAAAkGAAAABQUAAADHAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZERpY3Rpb25hcnlgMitLZXlWYWx1ZVBhaXJDb21wYXJlcltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQsIFN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cywgVmVyc2lvbj00LjAuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTlkNzdjYzdhZDM5YjY4ZWJdXQEAAAALa2V5Q29tcGFyZXIDiQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5HZW5lcmljQ29tcGFyZXJgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQQAAAAJBwAAAAcGAAAAAAEAAAACAAAAA64CU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50LCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0MCQAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBPj///+uAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLktleVZhbHVlUGFpcmAyW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5Qb2ludCwgU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYl1dAgAAAANrZXkFdmFsdWUABAgzU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50CQAAAAEAAAAJCgAAAAH1////+P///wIAAAAJDAAAAAQHAAAAiQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5HZW5lcmljQ29tcGFyZXJgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQAAAAAFCgAAADNTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQCAAAAAVgBWQAACAgJAAAAAQAAAAEAAAABDAAAAAoAAAACAAAAAgAAAAs=", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAACyAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZERpY3Rpb25hcnlgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQsIFN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cywgVmVyc2lvbj00LjAuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTlkNzdjYzdhZDM5YjY4ZWJdXQEAAAAEX3NldASjA1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlRyZWVTZXRgMVtbU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50LCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0sIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAIAAAAJAwAAAAUDAAAAowNTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5UcmVlU2V0YDFbW1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLktleVZhbHVlUGFpcmAyW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5Qb2ludCwgU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYl1dLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQQAAAAFQ291bnQIQ29tcGFyZXIHVmVyc2lvbgVJdGVtcwAEAAMIxwJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Tb3J0ZWREaWN0aW9uYXJ5YDIrS2V5VmFsdWVQYWlyQ29tcGFyZXJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50LCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0CAAAACLACU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50LCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV1bXQIAAAACAAAACQQAAAACAAAACQUAAAAFBAAAAMcCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuU29ydGVkRGljdGlvbmFyeWAyK0tleVZhbHVlUGFpckNvbXBhcmVyW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5Qb2ludCwgU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYl1dAQAAAAtrZXlDb21wYXJlcgOJAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkdlbmVyaWNDb21wYXJlcmAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAkGAAAABwUAAAAAAQAAAAIAAAADrgJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQsIFN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cywgVmVyc2lvbj00LjAuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTlkNzdjYzdhZDM5YjY4ZWJdXQwIAAAAcFN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cywgVmVyc2lvbj00LjAuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTlkNzdjYzdhZDM5YjY4ZWIE+f///64CU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50LCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0CAAAAA2tleQV2YWx1ZQAECDNTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQIAAAAAQAAAAkJAAAAAfb////5////AgAAAAkLAAAABAYAAACJAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkdlbmVyaWNDb21wYXJlcmAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAAAAAAUJAAAAM1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5Qb2ludAIAAAABWAFZAAAICAgAAAABAAAAAQAAAAELAAAACQAAAAIAAAACAAAACw==", TargetFrameworkMoniker.netfx461) } }; yield return new object[] { new SortedList(pointDictionary, Comparer.Default), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5DAMAAABwU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYgwEAAAAVVN5c3RlbS5Db2xsZWN0aW9ucywgVmVyc2lvbj00LjEuMS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAKwCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuU29ydGVkTGlzdGAyW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5Qb2ludCwgU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYl1dBwAAAARrZXlzBnZhbHVlcwVfc2l6ZQd2ZXJzaW9uCGNvbXBhcmVyB2tleUxpc3QJdmFsdWVMaXN0BwQAAAMEBAg1U3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50W10DAAAACAiJAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkdlbmVyaWNDb21wYXJlcmAxW1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dtAJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Tb3J0ZWRMaXN0YDIrS2V5TGlzdFtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQsIFN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cywgVmVyc2lvbj00LjAuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTlkNzdjYzdhZDM5YjY4ZWJdXQQAAAC2AlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZExpc3RgMitWYWx1ZUxpc3RbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50LCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0EAAAAAgAAAAkFAAAACQYAAAACAAAAAAAAAAkHAAAACgoPBQAAAAIAAAAIAQAAAAIAAAAHBgAAAAABAAAAAgAAAAQzU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50AwAAAAkIAAAACQkAAAAEBwAAAIkBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuR2VuZXJpY0NvbXBhcmVyYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0AAAAABQgAAAAzU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50AgAAAAFYAVkAAAgIAwAAAAEAAAABAAAAAQkAAAAIAAAAAgAAAAIAAAAL", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5DAMAAABwU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYgUBAAAArAJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Tb3J0ZWRMaXN0YDJbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50LCBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViXV0HAAAABGtleXMGdmFsdWVzBV9zaXplB3ZlcnNpb24IY29tcGFyZXIHa2V5TGlzdAl2YWx1ZUxpc3QHBAAAAwQECDVTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnRbXQMAAAAICIkBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuR2VuZXJpY0NvbXBhcmVyYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV20AlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZExpc3RgMitLZXlMaXN0W1tTeXN0ZW0uSW50MzIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cy5Qb2ludCwgU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLCBWZXJzaW9uPTQuMC4zLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OWQ3N2NjN2FkMzliNjhlYl1dAgAAALYCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuU29ydGVkTGlzdGAyK1ZhbHVlTGlzdFtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQsIFN5c3RlbS5SdW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5UZXN0cywgVmVyc2lvbj00LjAuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTlkNzdjYzdhZDM5YjY4ZWJdXQIAAAACAAAACQQAAAAJBQAAAAIAAAAAAAAACQYAAAAKCg8EAAAAAgAAAAgBAAAAAgAAAAcFAAAAAAEAAAACAAAABDNTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQDAAAACQcAAAAJCAAAAAQGAAAAiQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5HZW5lcmljQ29tcGFyZXJgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQAAAAAFBwAAADNTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMuUG9pbnQCAAAAAVgBWQAACAgDAAAAAQAAAAEAAAABCAAAAAcAAAACAAAAAgAAAAs=", TargetFrameworkMoniker.netfx461) } }; yield return new object[] { new Collections.SortedList(pointDictionary, Comparer.Default), new TypeSerializableValue[] { new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAAB1TeXN0ZW0uQ29sbGVjdGlvbnMuU29ydGVkTGlzdAcAAAAEa2V5cwZ2YWx1ZXMFX3NpemUHdmVyc2lvbghjb21wYXJlcgdrZXlMaXN0CXZhbHVlTGlzdAUFAAADAwMICIkBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuR2VuZXJpY0NvbXBhcmVyYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0lU3lzdGVtLkNvbGxlY3Rpb25zLlNvcnRlZExpc3QrS2V5TGlzdCdTeXN0ZW0uQ29sbGVjdGlvbnMuU29ydGVkTGlzdCtWYWx1ZUxpc3QJAgAAAAkDAAAAAgAAAAAAAAAJBAAAAAoKEAIAAAACAAAACAgBAAAACAgCAAAAEAMAAAACAAAACQUAAAAJBgAAAAQEAAAAiQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5HZW5lcmljQ29tcGFyZXJgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQAAAAAMBwAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBQUAAAAzU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50AgAAAAFYAVkAAAgIBwAAAAEAAAABAAAAAQYAAAAFAAAAAgAAAAIAAAAL", TargetFrameworkMoniker.netcoreapp20), new TypeSerializableValue("AAEAAAD/////AQAAAAAAAAAEAQAAAB1TeXN0ZW0uQ29sbGVjdGlvbnMuU29ydGVkTGlzdAcAAAAEa2V5cwZ2YWx1ZXMFX3NpemUHdmVyc2lvbghjb21wYXJlcgdrZXlMaXN0CXZhbHVlTGlzdAUFAAADAwMICIkBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuR2VuZXJpY0NvbXBhcmVyYDFbW1N5c3RlbS5JbnQzMiwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0lU3lzdGVtLkNvbGxlY3Rpb25zLlNvcnRlZExpc3QrS2V5TGlzdCdTeXN0ZW0uQ29sbGVjdGlvbnMuU29ydGVkTGlzdCtWYWx1ZUxpc3QJAgAAAAkDAAAAAgAAAAAAAAAJBAAAAAoKEAIAAAACAAAACAgBAAAACAgCAAAAEAMAAAACAAAACQUAAAAJBgAAAAQEAAAAiQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5HZW5lcmljQ29tcGFyZXJgMVtbU3lzdGVtLkludDMyLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQAAAAAMBwAAAHBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuVGVzdHMsIFZlcnNpb249NC4wLjMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05ZDc3Y2M3YWQzOWI2OGViBQUAAAAzU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLlRlc3RzLlBvaW50AgAAAAFYAVkAAAgIBwAAAAEAAAABAAAAAQYAAAAFAAAAAgAAAAIAAAAL", TargetFrameworkMoniker.netfx461) } }; diff --git a/src/libraries/System.Security.Cryptography.Pkcs/tests/EnvelopedCms/KeyTransRecipientInfoTests.cs b/src/libraries/System.Security.Cryptography.Pkcs/tests/EnvelopedCms/KeyTransRecipientInfoTests.cs index 5e503b10584bab..bd49b06ade3f63 100644 --- a/src/libraries/System.Security.Cryptography.Pkcs/tests/EnvelopedCms/KeyTransRecipientInfoTests.cs +++ b/src/libraries/System.Security.Cryptography.Pkcs/tests/EnvelopedCms/KeyTransRecipientInfoTests.cs @@ -198,6 +198,8 @@ private static KeyTransRecipientInfo EncodeKeyTransl(SubjectIdentifierType type { ContentInfo contentInfo = new ContentInfo(new byte[] { 1, 2, 3 }); EnvelopedCms ecms = new EnvelopedCms(contentInfo); + // force useCms=true on netframework + ecms.UnprotectedAttributes.Add(new Pkcs9DocumentName("a")); using (X509Certificate2 cert = Certificates.RSAKeyTransfer1.GetCertificate()) { CmsRecipient cmsRecipient = new CmsRecipient(type, cert); diff --git a/src/libraries/System.Security.Cryptography.Xml/tests/System.Security.Cryptography.Xml.Tests.csproj b/src/libraries/System.Security.Cryptography.Xml/tests/System.Security.Cryptography.Xml.Tests.csproj index 2bfad93e7780ff..3c09606bbbe0a8 100644 --- a/src/libraries/System.Security.Cryptography.Xml/tests/System.Security.Cryptography.Xml.Tests.csproj +++ b/src/libraries/System.Security.Cryptography.Xml/tests/System.Security.Cryptography.Xml.Tests.csproj @@ -1,6 +1,6 @@ - $(NetCoreAppCurrent);net461 + $(NetCoreAppCurrent);net48 @@ -68,7 +68,7 @@ - + \ No newline at end of file diff --git a/src/libraries/System.ServiceProcess.ServiceController/tests/ServiceBaseTests.cs b/src/libraries/System.ServiceProcess.ServiceController/tests/ServiceBaseTests.cs index da535fafea8e79..b19d080b381f1c 100644 --- a/src/libraries/System.ServiceProcess.ServiceController/tests/ServiceBaseTests.cs +++ b/src/libraries/System.ServiceProcess.ServiceController/tests/ServiceBaseTests.cs @@ -41,7 +41,7 @@ private void AssertExpectedProperties(ServiceController testServiceController) // [Fact] // To cleanup lingering Test Services uncomment the Fact attribute, make it public and run the following command - // dotnet build /t:test /p:XunitMethodName=System.ServiceProcess.Tests.ServiceBaseTests.Cleanup /p:OuterLoop=true + // dotnet test --filter System.ServiceProcess.Tests.ServiceBaseTests.Cleanup /p:OuterLoop=true // Remember to comment out the Fact again before running tests otherwise it will cleanup tests running in parallel // and cause them to fail. private void Cleanup() diff --git a/src/libraries/externals.csproj b/src/libraries/externals.csproj index c05ee437a04592..91ee7dc69dba47 100644 --- a/src/libraries/externals.csproj +++ b/src/libraries/externals.csproj @@ -2,7 +2,7 @@ $(PackageRID) - true + true $(NetCoreAppCurrent) false @@ -22,6 +22,13 @@ Version="$(MicrosoftNETCoreDotNetHostVersion)" /> + @@ -56,6 +63,26 @@ UseHardlinksIfPossible="$(UseHardlink)" /> + + + + + + + + + + + 01:30:00 - <_workItemTimeout Condition="'$(_workItemTimeout)' == '' and ('$(TargetOS)' == 'iOS' or '$(TargetOS)' == 'tvOS')">00:30:00 + <_workItemTimeout Condition="'$(_workItemTimeout)' == '' and ('$(TargetOS)' == 'iOS' or '$(TargetOS)' == 'tvOS' or '$(MonoEnableInterpreter)' == 'true')">00:30:00 <_workItemTimeout Condition="'$(Scenario)' == '' and '$(_workItemTimeout)' == '' and ('$(TargetArchitecture)' == 'arm64' or '$(TargetArchitecture)' == 'arm')">00:45:00 <_workItemTimeout Condition="'$(Scenario)' != '' and '$(_workItemTimeout)' == '' and ('$(TargetArchitecture)' == 'arm64' or '$(TargetArchitecture)' == 'arm')">01:00:00 <_workItemTimeout Condition="'$(Scenario)' == '' and '$(_workItemTimeout)' == ''">00:15:00 @@ -38,6 +38,7 @@ $(TestArchiveRuntimeFile) + true $(TestArchiveTestsRoot)**/*.zip $(Configuration) @@ -51,16 +52,16 @@ $(BuildSettings)- $(TestRunNamePrefix)$(TestRunNamePrefixSuffix)- $(TestRunNamePrefix)$(Scenario)- + packaging- $(WaitForWorkItemCompletion) - + true sdk - packaging- $([System.IO.File]::ReadAllText('$(RepoRoot)global.json')) $([System.Text.RegularExpressions.Regex]::Match($(GlobalJsonContent), '(%3F<="dotnet": ").*(%3F=")')) @@ -82,13 +83,52 @@ - - dotnet msbuild %HELIX_CORRELATION_PAYLOAD%\test.msbuild - $(HelixCommand) /warnaserror - $(HelixCommand) /p:PackageTestProjectsDir=%HELIX_WORKITEM_PAYLOAD% - $(HelixCommand) /p:RestorePackagesPath=%HELIX_WORKITEM_PAYLOAD%\packages - $(HelixCommand) /p:LocalPackagesPath="%HELIX_CORRELATION_PAYLOAD%\packages\" - + + + + dotnet msbuild %HELIX_CORRELATION_PAYLOAD%\test.msbuild + $(HelixCommand) /warnaserror + $(HelixCommand) /p:PackageTestProjectsDir=%HELIX_WORKITEM_PAYLOAD% + $(HelixCommand) /p:RestorePackagesPath=%HELIX_WORKITEM_PAYLOAD%\packages + $(HelixCommand) /p:LocalPackagesPath="%HELIX_CORRELATION_PAYLOAD%\packages\" + + + + + ./RunTests.sh $HELIX_WORKITEM_FRIENDLYNAME + $(HelixCommand) $(TargetArchitecture) + + + + + + <_workItemTimeoutInSeconds>$([System.TimeSpan]::Parse($(_workItemTimeout)).TotalSeconds) + <_vstestBlameOption>CollectDump;CollectAlways=true;DumpType=Full;CollectHangDump;HangDumpType=Full;TestTimeout=$(_workItemTimeoutInSeconds)s + + <_newWorkItemTimeoutInSeconds>$([MSBuild]::Add($(_workItemTimeoutInSeconds), 600)) + <_workItemTimeout>$([System.TimeSpan]::FromSeconds($(_newWorkItemTimeoutInSeconds)).ToString('hh\:mm\:ss')) + + + dotnet test %HELIX_WORKITEM_FRIENDLYNAME%.dll --settings .runsettings --platform $(TargetArchitecture) --blame "$(_vstestBlameOption)" + + + %HELIX_CORRELATION_PAYLOAD%\dotnet.exe %HELIX_CORRELATION_PAYLOAD%\sdk\$(ProductVersion)\vstest.console.dll %HELIX_WORKITEM_FRIENDLYNAME%.dll --Settings:.runsettings + $HELIX_CORRELATION_PAYLOAD/dotnet $HELIX_CORRELATION_PAYLOAD/sdk/$(ProductVersion)/vstest.console.dll $HELIX_WORKITEM_FRIENDLYNAME.dll --Settings:.runsettings + + $(HelixCommand) --Platform:$(TargetArchitecture) + $(HelixCommand) --Blame:"$(_vstestBlameOption)" + + $(HelixCommand) -- RunConfiguration.DotNetHostPath="%HELIX_CORRELATION_PAYLOAD%\dotnet.exe" + $(HelixCommand) -- RunConfiguration.DotNetHostPath="$HELIX_CORRELATION_PAYLOAD/dotnet" + + + + + + + + + @@ -138,19 +178,6 @@ @(HelixPreCommand) - true - - - - - call RunTests.cmd - $(HelixCommand) --runtime-path %HELIX_CORRELATION_PAYLOAD% - ./RunTests.sh - $(HelixCommand) --runtime-path "$HELIX_CORRELATION_PAYLOAD" diff --git a/src/libraries/tests.proj b/src/libraries/tests.proj index 2e1c93942657a7..2016ffcaf5cbe8 100644 --- a/src/libraries/tests.proj +++ b/src/libraries/tests.proj @@ -1,25 +1,32 @@ - - false ErrorAndContinue BuildAllProjects=true - $(ArtifactsBinDir)\*.Tests\**\coverage.opencover.xml - $(ArtifactsDir)coverage - true + true false false true - - - - - - - + + + + + false + $(ArtifactsBinDir)\*.Tests\**\coverage.opencover.xml + $(ArtifactsDir)coverage + true + + + + + + + + + + @@ -131,6 +138,5 @@ AfterTargets="Test" DependsOnTargets="GenerateCoverageReport" Condition="'$(TestAssemblies)' == 'true' and - '$(Coverage)' == 'true'" /> - + '$(VSTestCollect.ToLower())' == 'xplat code coverage'" /> diff --git a/src/mono/netcore/Makefile b/src/mono/netcore/Makefile index 13029f39f19fb5..e5715ec2b1431b 100644 --- a/src/mono/netcore/Makefile +++ b/src/mono/netcore/Makefile @@ -58,5 +58,5 @@ run-tests-coreclr-all: # make run-tests-corefx-System.Runtime # for `System.Runtime.Tests` (the rule builds both the lib and the test if needed) run-tests-corefx-%: - $(DOTNET) build ../../../src/libraries/$*/tests -c $(LIBRARIES_TESTS_CONFIG) /p:RuntimeFlavor=mono /t:Test + $(DOTNET) test ../../../src/libraries/$*/tests -c $(LIBRARIES_TESTS_CONFIG) /p:RuntimeFlavor=mono /p:BuildTargetFramework=net6.0 diff --git a/src/mono/wasm/Makefile b/src/mono/wasm/Makefile index 48a336d9b8ad42..6ce46f999a46ad 100644 --- a/src/mono/wasm/Makefile +++ b/src/mono/wasm/Makefile @@ -142,14 +142,14 @@ build-tasks: $(DOTNET) build $(TOP)/tools-local/tasks/mobile.tasks/WasmBuildTasks run-tests-v8-%: - PATH="$(JSVU):$(PATH)" $(DOTNET) build $(TOP)/src/libraries/$*/tests/ /t:Test /p:TargetOS=Browser /p:TargetArchitecture=wasm /p:Configuration=$(CONFIG) /p:JSEngine=V8 $(MSBUILD_ARGS) + PATH="$(JSVU):$(PATH)" $(DOTNET) test $(TOP)/src/libraries/$*/tests/ /p:TargetOS=Browser /p:TargetArchitecture=wasm -c $(CONFIG) /p:JSEngine=V8 $(MSBUILD_ARGS) run-tests-sm-%: - PATH="$(JSVU):$(PATH)" $(DOTNET) build $(TOP)/src/libraries/$*/tests/ /t:Test /p:TargetOS=Browser /p:TargetArchitecture=wasm /p:Configuration=$(CONFIG) /p:JSEngine=SpiderMonkey $(MSBUILD_ARGS) + PATH="$(JSVU):$(PATH)" $(DOTNET) test $(TOP)/src/libraries/$*/tests/ /p:TargetOS=Browser /p:TargetArchitecture=wasm -c $(CONFIG) /p:JSEngine=SpiderMonkey $(MSBUILD_ARGS) run-tests-jsc-%: - PATH="$(JSVU):$(PATH)" $(DOTNET) build $(TOP)/src/libraries/$*/tests/ /t:Test /p:TargetOS=Browser /p:TargetArchitecture=wasm /p:Configuration=$(CONFIG) /p:JSEngine=JavaScriptCore $(MSBUILD_ARGS) + PATH="$(JSVU):$(PATH)" $(DOTNET) test $(TOP)/src/libraries/$*/tests/ /p:TargetOS=Browser /p:TargetArchitecture=wasm -c $(CONFIG) /p:JSEngine=JavaScriptCore $(MSBUILD_ARGS) run-tests-%: - PATH="$(JSVU):$(PATH)" $(DOTNET) build $(TOP)/src/libraries/$*/tests/ /t:Test /p:TargetOS=Browser /p:TargetArchitecture=wasm /p:Configuration=$(CONFIG) $(MSBUILD_ARGS) + PATH="$(JSVU):$(PATH)" $(DOTNET) test $(TOP)/src/libraries/$*/tests/ /p:TargetOS=Browser /p:TargetArchitecture=wasm /p:Configuration=$(CONFIG) $(MSBUILD_ARGS) run-browser-tests-%: PATH="$(CHROMEDRIVER):$(PATH)" XHARNESS_COMMAND=test-browser $(DOTNET) build $(TOP)/src/libraries/$*/tests/ /t:Test /p:TargetOS=Browser /p:TargetArchitecture=wasm /p:Configuration=$(CONFIG) $(MSBUILD_ARGS) diff --git a/tools-local/tasks/installer.tasks/GenerateRunScript.cs b/tools-local/tasks/installer.tasks/GenerateRunScript.cs deleted file mode 100644 index a2629768aa2027..00000000000000 --- a/tools-local/tasks/installer.tasks/GenerateRunScript.cs +++ /dev/null @@ -1,113 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using System; -using System.IO; -using System.Text; - -namespace Microsoft.DotNet.Build.Tasks -{ - public class GenerateRunScript : Task - { - [Required] - public string[] RunCommands { get; set; } - - [Required] - public string TemplatePath { get; set; } - - [Required] - public string OutputPath { get; set; } - - public override bool Execute() - { - if (RunCommands.Length == 0) - { - Log.LogError("Please provide at least one test command to execute via the RunCommands property."); - return false; - } - - if (!File.Exists(TemplatePath)) - { - Log.LogError($"Runner script template {TemplatePath} was not found."); - return false; - } - - string templateContent = File.ReadAllText(TemplatePath); - Directory.CreateDirectory(Path.GetDirectoryName(OutputPath)); - - Log.LogMessage($"Run commands = {string.Join(Environment.NewLine, RunCommands)}"); - - string extension = Path.GetExtension(Path.GetFileName(OutputPath)).ToLowerInvariant(); - switch (extension) - { - case ".sh": - case ".cmd": - case ".bat": - WriteRunScript(templateContent, extension); - break; - default: - Log.LogError($"Generating runner scripts with extension '{extension}' is not supported."); - return false; - } - - return true; - } - - private void WriteRunScript(string templateContent, string extension) - { - bool isUnix = extension == ".sh"; - string lineFeed = isUnix ? "\n" : "\r\n"; - - var runCommandsBuilder = new StringBuilder(); - for (int i = 0; i < RunCommands.Length; i++) - { - runCommandsBuilder.Append(RunCommands[i]); - if (i < RunCommands.Length - 1) - { - runCommandsBuilder.Append(lineFeed); - } - } - templateContent = templateContent.Replace("[[RunCommands]]", runCommandsBuilder.ToString()); - - var runCommandEchoesBuilder = new StringBuilder(); - foreach (string runCommand in RunCommands) - { - // Escape backtick and question mark characters to avoid running commands instead of echo'ing them. - string sanitizedRunCommand = runCommand.Replace("`", "\\`") - .Replace("?", "\\") - .Replace("\r","") - .Replace("\n"," ") - .Replace("&", "^&") - .Replace(">", "^>"); - - if (isUnix) - { - // Remove parentheses and quotes from echo command before wrapping it in quotes to avoid errors on Linux. - sanitizedRunCommand = "\"" + sanitizedRunCommand.Replace("\"", "") - .Replace("(", "") - .Replace(")", "") + "\""; - } - - runCommandEchoesBuilder.Append($"echo {sanitizedRunCommand}{lineFeed}"); - } - templateContent = templateContent.Replace("[[RunCommandsEcho]]", runCommandEchoesBuilder.ToString()); - - if (isUnix) - { - // Just in case any Windows EOLs have made it in by here, clean any up. - templateContent = templateContent.Replace("\r\n", "\n"); - } - - using (StreamWriter sw = new StreamWriter(new FileStream(OutputPath, FileMode.Create))) - { - sw.NewLine = lineFeed; - sw.Write(templateContent); - sw.WriteLine(); - } - - Log.LogMessage($"Wrote {extension} run script to {OutputPath}"); - } - } -} \ No newline at end of file