diff --git a/Documentation/developer-guide.md b/Documentation/developer-guide.md
index 5ad54ab8041..fae16537f42 100644
--- a/Documentation/developer-guide.md
+++ b/Documentation/developer-guide.md
@@ -23,6 +23,34 @@ We use the following workflow for building and testing features and fixes.
You first need to [Fork](https://github.com/dotnet/corefx/wiki/Checking-out-the-code-repository#fork-the-repository) and [Clone](https://github.com/dotnet/corefx/wiki/Checking-out-the-code-repository#clone-the-repository) this WPF repository. This is a one-time task.
+
+### Running DRTs locally ###
+In order to run the set of DRTs on your local machine, pass the `-test` parameter to the `build.cmd` script. At the end of the run, you should see something like this:
+
+```
+ A total of 1 test Infos were processed, with the following results.
+ Passed: 1
+ Failed (need to analyze): 0
+ Failed (with BugIDs): 0
+ Ignore: 0
+
+```
+If there were any failures, you can cd into $(RepoRoot)\artifacts\test\$(Configuration)\$(Platform)\Test and run the tests manually with the `/debugtests` flag using the `RunDrts.cmd` script. Note that you do not run the `RunDrtsDebug` script, as this will debug the test infrastructure, `QualityVault`. When you pass the `/debugtests` flag, a cmd window will open where you can open the test executable in Visual Studio and debug it. When the cmd pops up, you will see instructions for debugging using a few different commands, however these commands will enable you to debug the `Simple Test Invocation` executable, `sti.exe`, which simply launches the test executable you are most likely interested in debugging. Using `DrtXaml.exe` as an example, this is how you can debug the test executable. Any MSBuild style properties should be replaced with actual values:
+
+1. `$(RepoRoot)\artifacts\test\$(Configuration)\$(Platform)\Test\RunDrts.cmd /name=DrtXaml /debugtests`
+2. Enter following command into the cmd window that pops up:
+`"%ProgramFiles%\Microsoft Visual Studio\2019\Preview\Common7\IDE\devenv.exe" DrtXaml.exe`
+3. Once Visual Studio is open, go to `Debug-> DrtXaml Properties` and do the following:
+ - Manually change the `Debugger Type` from `Auto` to `Mixed (CoreCLR)`.
+ - Change the `Environment` from `Default` to a custom one that properly defines the `DOTNET_ROOT` variable so that the host is able to locate the install of `Microsoft.NETCore.App`.
+ - x86 (Default): Name: `DOTNET_ROOT(x86)` Value: `$(RepoRoot).dotnet\x86`
+ - x64 (/p:Platform=x64): Name: `DOTNET_ROOT` Value: `$(RepoRoot).dotnet`
+4. From there you can F5 and the test will execute.
+
+*Note: To run a specific test, you can pass the name of the test like this: `/name=DrtXaml`. The names of these tests are contained in DrtList.xml.*
+
+**NOTE: This requires being run from an admin window at the moment. Removing this restriction is tracked by https://github.com/dotnet/wpf/issues/816. **
+
### Testing Locally built WPF assemblies (excluding PresentationBuildTasks)
This section of guide is intended to discuss the different approaches for ad-hoc testing of WPF assemblies,
and not automated testing. There are a few different ways this can be done, and for the most part,
@@ -162,3 +190,4 @@ Follow the steps defined [here](https://github.com/dotnet/arcade/blob/master/Doc
* [up-for-grabs WPF issues](https://github.com/dotnet/wpf/issues?q=is%3Aopen+is%3Aissue+label%3Aup-for-grabs)
* [easy WPF issues](https://github.com/dotnet/wpf/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+label%3Aeasy)
* [Code generation in dotnet/wpf](codegen.md)
+* [Testing in Helix](testing-in-helix.md)
diff --git a/Documentation/testing-in-helix.md b/Documentation/testing-in-helix.md
new file mode 100644
index 00000000000..58274b9f261
--- /dev/null
+++ b/Documentation/testing-in-helix.md
@@ -0,0 +1,12 @@
+# Testing in Helix
+
+I'd recommend seeing the official Helix [readme](https://github.com/dotnet/arcade/blob/master/src/Microsoft.DotNet.Helix/Sdk/Readme.md) if you are interested in some of the general Helix concepts. I'll briefly outline what we are doing that is a bit unique:
+
+1. Helix has built-in support for running xUnit tests. Since we are not using xUnit, we have to manually setup our machines so that they work with QualityVault and STI. During the build, we create a payload directory that contains the infrastructure we need. A single project (in our case `DrtXaml`) is responsible for creating this directory (see instances of the MSBuild property `CreateTestPayload`).
+2. After the build is done, we utilize Arcade's `AfterSolutionBuild.targets` extension point to finish creating the rest of the payload if the `-test` parameter is passed to the build. Here we add the just built DRTs and if `-ci` was **not** passed into to the build, run the tests.
+3. Helix allows you to specify a `HelixCorrelationPayload` directory, where this directory gets deployed to the Helix machine, and is made available in your various helix commands with the `HELIX_CORRELATION_PAYLOAD` environment variable. We use the payload directory created described above.
+4. Helix and Azure Pipelines can report xUnit logs, so we will be updating QualityVault to produce an xUnit compatible log. We will then need to copy that log to a known location for it to be picked up. This location can be in any subfolder of the `HelixWorkItem` working directory.
+
+## How we are running tests
+1. Currently, the `HelixQueues` that we selected are Windows.10.Amd64.Open;Windows.7.Amd64.Open;Windows.10.Amd64.ServerRS5.Open. Essentially, this translates to: "Latest Windows 10", "Windows 7", and "Windows 10 RS5 Server" addition. This enables tests to run on some of the most interesting and important SKUs, without overloading the Helix servers and/or making CI runs take an unnecessarily long time to run.
+2. In a similar fashion, we only run test passes for Release builds, mainly to save time and resources running duplicate tests in a near-identical environment.
\ No newline at end of file
diff --git a/Microsoft.Dotnet.Wpf.sln b/Microsoft.Dotnet.Wpf.sln
index 4ee3b158701..e2d296bd014 100644
--- a/Microsoft.Dotnet.Wpf.sln
+++ b/Microsoft.Dotnet.Wpf.sln
@@ -81,9 +81,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Printing-ref", "src\
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{B0EFDB12-C931-4E7F-A6C2-D4AC111D7EDF}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DrtXaml.Tests", "src\Microsoft.DotNet.Wpf\test\DRT\DrtXaml\DrtXaml\DrtXaml.Tests.csproj", "{FAB114A2-2C6C-4372-A6BB-BC087B646E3A}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DrtXaml", "src\Microsoft.DotNet.Wpf\test\DRT\DrtXaml\DrtXaml\DrtXaml.csproj", "{FAB114A2-2C6C-4372-A6BB-BC087B646E3A}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestServices", "src\Microsoft.DotNet.Wpf\test\Common\TestServices\TestServices.csproj", "{387F3700-8C0B-4CEC-A68A-1725F656A249}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestServices", "src\Microsoft.DotNet.Wpf\test\Common\DRT\TestServices\TestServices.csproj", "{387F3700-8C0B-4CEC-A68A-1725F656A249}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XamlTestClasses", "src\Microsoft.DotNet.Wpf\test\DRT\DrtXaml\XamlTestClasses\XamlTestClasses.csproj", "{3C1FC36C-E3E6-4EED-9ECA-CFF2EB950486}"
EndProject
diff --git a/eng/AfterSolutionBuild.targets b/eng/AfterSolutionBuild.targets
new file mode 100644
index 00000000000..3b6300aec90
--- /dev/null
+++ b/eng/AfterSolutionBuild.targets
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 75c429b0092..a6d00a56925 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -1,99 +1,103 @@
-
+ https://github.com/dotnet/winforms
- f59e9a9dde144098bb58365f210dfdf4acc9e693
+ e65ecacdf2da06f11c847571b467f632393bd060
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://github.com/dotnet/core-setup
- a620d0dba57cd18e49fa686e28e18369be23d067
+ 2e54d1f6a6a9126126d6c9f8d730489892acf730
-
+ https://github.com/dotnet/arcade
- c9ab9c47d6c66fb9ad89e331900e06bed7463904
+ d05c046913964e880be08b804e7249f297617c2f
-
+ https://github.com/dotnet/arcade
- c9ab9c47d6c66fb9ad89e331900e06bed7463904
+ d05c046913964e880be08b804e7249f297617c2f
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://dev.azure.com/dnceng/internal/_git/dotnet-wpf-int
- 24fbf672601b7b9c088abed2e850bfe14a69875f
+ 76e5819b43718069ef5710a08032b616de5d754c
-
+ https://github.com/dotnet/corefx
- 2469a91c2aa68f9cb6b0f18f75dffc673a1f7895
+ 5c2ba765f55462dcc5e00179a34398fc70bf37b7
-
+ https://github.com/dotnet/coreclr
- 89df4b9d928c7f21550d487328f5db000a498bdf
+ 10df20ed3ff0208b3f16f79d5062662a8827f579
-
+ https://github.com/dotnet/coreclr
- 89df4b9d928c7f21550d487328f5db000a498bdf
+ 10df20ed3ff0208b3f16f79d5062662a8827f579
-
+ https://github.com/dotnet/coreclr
- 89df4b9d928c7f21550d487328f5db000a498bdf
+ 10df20ed3ff0208b3f16f79d5062662a8827f579
+
+
+ https://github.com/dotnet/arcade
+ 11f90a2a260422201895de58e57170131ab4efe7
diff --git a/eng/Versions.props b/eng/Versions.props
index ee819bd9b05..7e0eb5fa390 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -4,43 +4,43 @@
4.8.0preview74.0.0.0
- 4.6.0-preview7.19304.7
+ 4.6.0-preview7.19305.9
- 4.8.0-preview7.19304.2
+ 4.8.0-preview7.19305.1
- 3.0.0-preview7.19304.2
- 3.0.0-preview7.19304.2
- 3.0.0-preview7.19304.2
+ 3.0.0-preview7.19305.2
+ 3.0.0-preview7.19305.2
+ 3.0.0-preview7.19305.2
- 3.0.0-preview7-27804-03
- 3.0.0-preview7.19304.7
- 4.6.0-preview7.19304.7
- 4.6.0-preview7.19304.7
- 4.6.0-preview7.19304.7
+ 3.0.0-preview7-27805-02
+ 3.0.0-preview7.19305.9
+ 4.6.0-preview7.19305.9
+ 4.6.0-preview7.19305.9
+ 4.6.0-preview7.19305.9
- 4.6.0-preview7.19304.7
- 4.6.0-preview7.19304.7
- 4.6.0-preview7.19304.7
- 4.6.0-preview7.19304.7
- 4.6.0-preview7.19304.7
+ 4.6.0-preview7.19305.9
+ 4.6.0-preview7.19305.9
+ 4.6.0-preview7.19305.9
+ 4.6.0-preview7.19305.9
+ 4.6.0-preview7.19305.94.6.0-preview4.19176.11
- 4.6.0-preview7.19304.7
- 4.6.0-preview7.19304.7
- 4.6.0-preview7.19304.7
- 4.6.0-preview7.19304.7
- 4.6.0-preview7.19304.7
+ 4.6.0-preview7.19305.9
+ 4.6.0-preview7.19305.9
+ 4.6.0-preview7.19305.9
+ 4.6.0-preview7.19305.9
+ 4.6.0-preview7.19305.9
- 1.0.0-beta.19304.23
+ 1.0.0-beta.19305.13
@@ -58,6 +58,11 @@
2.4.0$(XUnitVersion)$(XUnitVersion)
+
+ 1.0.0-beta.19263.1
@@ -98,6 +103,6 @@
It is worth reiterating that this package *should not* be consumed to build the product.
-->
- 4.8.0-preview7.19304.6
+ 4.8.0-preview7.19305.10
diff --git a/eng/WpfArcadeSdk/Sdk/Sdk.props b/eng/WpfArcadeSdk/Sdk/Sdk.props
index 2393ddf03e9..d688f838cfc 100644
--- a/eng/WpfArcadeSdk/Sdk/Sdk.props
+++ b/eng/WpfArcadeSdk/Sdk/Sdk.props
@@ -17,6 +17,13 @@
8.0truetrue
+
+
+ win-$(Platform)
+ win-x86
diff --git a/eng/WpfArcadeSdk/Sdk/Sdk.targets b/eng/WpfArcadeSdk/Sdk/Sdk.targets
index 88a2a498f5d..d035888e2ac 100644
--- a/eng/WpfArcadeSdk/Sdk/Sdk.targets
+++ b/eng/WpfArcadeSdk/Sdk/Sdk.targets
@@ -22,6 +22,7 @@
+
diff --git a/eng/WpfArcadeSdk/tools/AddDrtsToPayload.targets b/eng/WpfArcadeSdk/tools/AddDrtsToPayload.targets
new file mode 100644
index 00000000000..60c1044a63f
--- /dev/null
+++ b/eng/WpfArcadeSdk/tools/AddDrtsToPayload.targets
@@ -0,0 +1,35 @@
+
+
+
+
+ x64
+
+
+ $(RepoRoot)artifacts\test\$(Configuration)\$(Platform)\
+ $(PayloadBaseLocation)Test\DRT\
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eng/WpfArcadeSdk/tools/CreateTestPayload.targets b/eng/WpfArcadeSdk/tools/CreateTestPayload.targets
new file mode 100644
index 00000000000..d96c8e11098
--- /dev/null
+++ b/eng/WpfArcadeSdk/tools/CreateTestPayload.targets
@@ -0,0 +1,62 @@
+
+
+
+ $(NoWarn);NU3027;NU3018
+
+
+ x86
+ x64
+ $(RepoRoot)artifacts\test\$(Configuration)\$(PlatformFolder)
+
+ $(PayloadRoot)\Test\
+
+ $(PayloadRoot)\dotnet\shared\Microsoft.NETCore.App\$(MicrosoftNETCoreAppVersion)\
+
+
+
+
+
+
+
+ $(Pkgruntime_win-x86_Microsoft_DotNet_Wpf_Test)\tools\$(WpfRuntimeIdentifier)\Test\
+
+
+
+ $(Pkgruntime_win-x64_Microsoft_DotNet_Wpf_Test)\tools\$(WpfRuntimeIdentifier)\Test\
+
+
+
+
+ $(DotNetRoot)x86\
+ $(DotNetRoot)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eng/WpfArcadeSdk/tools/DrtsToRun.props b/eng/WpfArcadeSdk/tools/DrtsToRun.props
new file mode 100644
index 00000000000..72da7bd3216
--- /dev/null
+++ b/eng/WpfArcadeSdk/tools/DrtsToRun.props
@@ -0,0 +1,9 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/eng/WpfArcadeSdk/tools/GenerateProgramFileForTests.targets b/eng/WpfArcadeSdk/tools/GenerateProgramFileForTests.targets
index 1ff69760a46..7542aab1a7a 100644
--- a/eng/WpfArcadeSdk/tools/GenerateProgramFileForTests.targets
+++ b/eng/WpfArcadeSdk/tools/GenerateProgramFileForTests.targets
@@ -1,6 +1,6 @@
true
diff --git a/eng/WpfArcadeSdk/tools/InjectModuleInitializer.targets b/eng/WpfArcadeSdk/tools/InjectModuleInitializer.targets
index e1e3ef4a5bf..2a246ef0937 100644
--- a/eng/WpfArcadeSdk/tools/InjectModuleInitializer.targets
+++ b/eng/WpfArcadeSdk/tools/InjectModuleInitializer.targets
@@ -1,12 +1,4 @@
-
-
-
- win-$(Platform)
- win-x86
- win-x64
-
-
- Bitness64
- Bitness32
+ Bitness64
+ Bitness32
@@ -381,7 +373,8 @@
Assembly="$(InFile)"
Condition="Exists('$(InFile)')"
LineNum="true"
- Out="$(OutFile)" />
+ Out="$(OutFile)"
+ NoBar="true" />
@@ -421,7 +414,8 @@
SourceFile="$(ILFile)"
Out="$(TargetFile)"
Dll="true"
- Debug="true" />
+ Debug="true"
+ Quiet="true" />
diff --git a/eng/WpfArcadeSdk/tools/RunDrtsLocal.targets b/eng/WpfArcadeSdk/tools/RunDrtsLocal.targets
new file mode 100644
index 00000000000..2c74d3ae3eb
--- /dev/null
+++ b/eng/WpfArcadeSdk/tools/RunDrtsLocal.targets
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/eng/WpfArcadeSdk/tools/TestProjects.targets b/eng/WpfArcadeSdk/tools/TestProjects.targets
index d5396b3a087..335d9cacf16 100644
--- a/eng/WpfArcadeSdk/tools/TestProjects.targets
+++ b/eng/WpfArcadeSdk/tools/TestProjects.targets
@@ -1,7 +1,6 @@
- win-$(Platform)
- win-x86
+ $(WpfRuntimeIdentifier)
diff --git a/eng/WpfArcadeSdk/tools/configure-machine.ps1 b/eng/WpfArcadeSdk/tools/configure-machine.ps1
new file mode 100644
index 00000000000..e8c54acd2a3
--- /dev/null
+++ b/eng/WpfArcadeSdk/tools/configure-machine.ps1
@@ -0,0 +1,71 @@
+[CmdLetBinding()]
+Param(
+ [switch]$ci
+)
+# This file prepares the machine for our tests runs
+
+if ($ci)
+{
+ # When running in ci, the dotnet install is located at %HELIX_CORRELATION_PAYLOAD% along with all our test content.
+ $dotnetLocation = Join-Path (Split-Path -Parent $script:MyInvocation.MyCommand.Path) "dotnet"
+ # Only either the x86 or x64 versions of dotnet are installed on the helix machine, and they both go to the same location
+ $x86dotnetLocation = $dotnetLocation
+}
+else
+{
+ # When running local, we can use the DOTNET_INSTALL_DIR environment variable set by Arcade
+ $dotnetLocation = $env:DOTNET_INSTALL_DIR
+
+ # The x86 location installed by Arcade is in the x86 directory
+ $x86dotnetLocation = "$dotnetLocation\x86"
+
+ # This is yet one more unfortunate workaround required until https://github.com/dotnet/wpf/issues/816 is addressed, or until
+ # QualityVault and STI don't use WindowsDesktop any longer. Since the multi-framework support only installs the Microsoft.NETCore.App
+ # runtime in the 'x86' dir, we need the ability to look outside that directory for an install of Microsoft.WindowsDesktop.App.
+ $env:DOTNET_MULTILEVEL_LOOKUP=1
+}
+
+# Set DOTNET_ROOT variables so the host can find it
+Set-Item -Path "env:DOTNET_ROOT(x86)" -Value $x86dotnetLocation
+Set-Item -Path "env:DOTNET_ROOT" -Value $dotnetLocation
+
+# Temporary workaround until https://github.com/dotnet/wpf/issues/816 is addressed.
+# The test infrastructure is built against an older version of Microsoft.WindowsDesktop.App.
+# Here we re-write the infrastructure runtimeconfig files so that they can load
+if ($ci)
+{
+ $runtimes = dotnet --list-runtimes
+ foreach ($rt in $runtimes)
+ {
+ if ($rt.StartsWith("Microsoft.WindowsDesktop.App"))
+ {
+ $version = $rt.Split(" ")[1]
+ }
+ }
+
+ if ($null -ne $version)
+ {
+ # Rewrite the *.runtimeconfig.json files to match the version of the runtime on the machine
+ $infraLocation = Join-Path (Split-Path -Parent $script:MyInvocation.MyCommand.Path) "Test\Infra"
+ $stiConfigFile = Join-Path $infraLocation "Sti.runtimeconfig.json"
+ $qvConfigFile = Join-Path $infraLocation "QualityVaultFrontEnd.runtimeconfig.json"
+ $configFiles = $stiConfigFile, $qvConfigFile
+ foreach ($config in $configFiles)
+ {
+ # Read current config file
+ $jsondata = Get-Content -Raw -Path $config | ConvertFrom-Json
+ # Update version
+ $jsondata.runtimeOptions.framework.version = $version
+ # Write data back
+ $jsondata | ConvertTo-Json -depth 100 | Set-Content $config
+ }
+ }
+ else
+ {
+ Write-Error "No WindowsDesktop runtime found on machine!"
+
+ Write-Output "Runtimes installed:"
+ Write-Output $runtimes
+ }
+
+}
diff --git a/eng/WpfArcadeSdk/tools/runtests.cmd b/eng/WpfArcadeSdk/tools/runtests.cmd
new file mode 100644
index 00000000000..c7b6190b9f2
--- /dev/null
+++ b/eng/WpfArcadeSdk/tools/runtests.cmd
@@ -0,0 +1,3 @@
+@echo off
+
+powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0runtests.ps1""" %*"
\ No newline at end of file
diff --git a/eng/WpfArcadeSdk/tools/runtests.ps1 b/eng/WpfArcadeSdk/tools/runtests.ps1
new file mode 100644
index 00000000000..5931b60f7fa
--- /dev/null
+++ b/eng/WpfArcadeSdk/tools/runtests.ps1
@@ -0,0 +1,48 @@
+[CmdLetBinding()]
+Param(
+ [string]$command,
+ [switch]$ci
+)
+
+# Run any configuration needed for the test pass
+if (Test-Path "$PSScriptRoot\configure-machine.ps1")
+{
+ . "$PSScriptRoot\configure-machine.ps1" -ci:$ci
+}
+
+if (Test-Path "$env:AppData\QualityVault")
+{
+ # Cleanup any QualityVault stuff left behind before executing the tests
+ Remove-Item "$env:AppData\QualityVault" -Recurse
+}
+
+# Run the tests
+$testLocation = Join-Path (Split-Path -Parent $script:MyInvocation.MyCommand.Path) "Test"
+if (Test-Path "$testLocation\QV.cmd")
+{
+ # We invoke QV directly instead of rundrts to prevent the "RunDrtReport" script being generated.
+ Invoke-Expression "$testLocation\QV.cmd Run /DiscoveryInfoPath=$testLocation\DiscoveryInfoDrts.xml /RunDirectory=$env:AppData\QualityVault\Run $command"
+}
+
+if ($ci -and (Test-Path "$env:AppData\QualityVault\Run\Report\DrtReport.xml"))
+{
+ Invoke-Expression "$env:HELIX_PYTHONPATH $env:HELIX_SCRIPT_ROOT\upload_result.py -result $env:AppData\QualityVault\Run\Report\DrtReport.xml -result_name DrtReport.xml"
+}
+# We can use $env:HELIX_PYTHONPATH $env:HELIX_SCRIPT_ROOT\upload_result.py to upload any QV specific logs and/or screenshots that we are interested in.
+# For example: $env:HELIX_PYTHONPATH $env:HELIX_SCRIPT_ROOT%\upload_result.py -result screenshot.jpg -result_name screenshot.jpg
+# Then, links to these artifacts can then be included in the xUnit logs.
+
+# Need to copy the xUnit log to a known location that helix can understand
+if (Test-Path "$env:AppData\QualityVault\Run\Report\testResults.xml")
+{
+ Get-ChildItem env:
+ $resultLocation = if($ci) { Get-Location } else { $PSScriptRoot }
+ Write-Output "Copying testResults.xml to $resultLocation"
+ Copy-Item "$env:AppData\QualityVault\Run\Report\testResults.xml" $resultLocation
+}
+
+if (Test-Path "$env:AppData\QualityVault")
+{
+ # Cleanup what QualityVault left behind in AppData to save space on Helix machines
+ Remove-Item "$env:AppData\QualityVault" -Recurse
+}
\ No newline at end of file
diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1
index 3983d719be3..538a0262b52 100644
--- a/eng/common/tools.ps1
+++ b/eng/common/tools.ps1
@@ -107,11 +107,11 @@ function Write-PipelineTaskError {
if(!$ci) {
if($Type -eq 'error') {
- Write-Error $Message
+ Write-Host $Message -ForegroundColor Red
return
}
elseif ($Type -eq 'warning') {
- Write-Warning $Message
+ Write-Host $Message -ForegroundColor Yellow
return
}
}
diff --git a/eng/copy-wpf.ps1 b/eng/copy-wpf.ps1
index dc4a5a51a67..59dd14bdfb7 100644
--- a/eng/copy-wpf.ps1
+++ b/eng/copy-wpf.ps1
@@ -60,7 +60,10 @@ function CopyPackagedBinaries($location, $localBinLocation, $packageName, $binar
{
$ArchFolder = if ($arch -eq "x86") { "" } else { "x64" }
$BinLocation = [System.IO.Path]::Combine($localBinLocation, $Config, $ArchFolder, $packageName, "lib", $binaryLocationInPackage, "*")
- Copy-Item -path $BinLocation -include "*.dll","*.pdb" -Destination $location
+ if (Test-Path $BinLocation)
+ {
+ Copy-Item -path $BinLocation -include "*.dll","*.pdb" -Destination $location
+ }
}
if ($help -or ([string]::IsNullOrEmpty($destination) -and !$local))
diff --git a/eng/helixpublish.proj b/eng/helixpublish.proj
new file mode 100644
index 00000000000..81f734141b4
--- /dev/null
+++ b/eng/helixpublish.proj
@@ -0,0 +1,42 @@
+
+
+
+ netcoreapp3.0
+ true
+
+
+ sdk
+ $(DotNetCliVersion)
+ $(WpfRuntimeIdentifier)
+
+ true
+ true
+ true
+
+
+ $(HelixPreCommands);
+
+
+ Windows.10.Amd64.Open;Windows.7.Amd64.Open;Windows.10.Amd64.ServerRS5.Open
+
+
+
+
+
+ 00:20:00
+ call %HELIX_CORRELATION_PAYLOAD%\runtests.cmd /Area=%(Area) -ci
+
+
+
+
\ No newline at end of file
diff --git a/eng/pipeline.yml b/eng/pipeline.yml
index 0a0d445c293..0f70d2be7ae 100644
--- a/eng/pipeline.yml
+++ b/eng/pipeline.yml
@@ -11,17 +11,18 @@ parameters:
# Needed because runAsPublic is used in template expressions, which can't read from user-defined variables
# Defaults to true
runAsPublic: true
+ repoName: dotnet/wpf
jobs:
- template: /eng/common/templates/jobs/jobs.yml
parameters:
enableMicrobuild: true
enablePublishBuildArtifacts: true
- enablePublishTestResults: true
+ enablePublishTestResults: false # tests run in helix
enablePublishBuildAssets: true
enablePublishUsingPipelines: $(_PublishUsingPipelines)
enableTelemetry: true
- helixRepo: dnceng/wpf
+ helixRepo: $(repoName)
jobs:
- job: Windows_NT
@@ -48,6 +49,16 @@ jobs:
value: x86
- name: _PlatformArgs
value: /p:Platform=$(_Platform)
+ - name: _TestHelixAgentPool
+ value: 'Windows.10.Amd64.Open'
+ - name: _HelixStagingDir
+ value: $(BUILD.STAGINGDIRECTORY)\helix\functests
+ - name: _HelixSource
+ value: ${{ parameters.repoName }}/$(Build.SourceBranch)
+ - name: _HelixToken
+ value: ''
+ - name: _HelixCreator
+ value: ${{ parameters.repoName }}
# Override some values if we're building internally
- ${{ if eq(parameters.runAsPublic, 'false') }}:
@@ -60,6 +71,7 @@ jobs:
value: true
- group: DotNet-Blob-Feed
- group: DotNet-Symbol-Server-Pats
+ - group: DotNet-HelixApi-Access
- name: _PublishBlobFeedUrl
value: https://dotnetfeed.blob.core.windows.net/dotnet-windowsdesktop/index.json
@@ -78,6 +90,12 @@ jobs:
/p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat)
- name: _OfficialBuildIdArgs
value: /p:OfficialBuildId=$(BUILD.BUILDNUMBER)
+ - name: _HelixSource
+ value: official/${{ parameters.repoName }}/$(Build.SourceBranch)
+ - name: _HelixToken
+ value: '$(HelixApiAccessToken)' # from DotNet-HelixApi-Access group
+ - name: _HelixCreator
+ value: '' #if _HelixToken is set, Creator must be empty
strategy:
matrix:
Build_Debug_x86:
@@ -101,6 +119,11 @@ jobs:
steps:
- checkout: self
clean: true
+
+ # Set VSO Variable(s)
+ - powershell: eng\pre-build.ps1
+ displayName: Pre-Build - Set VSO Variables
+
# Use utility script to run script command dependent on agent OS.
- script: eng\common\cibuild.cmd
-configuration $(_BuildConfig)
@@ -110,3 +133,21 @@ jobs:
$(_OfficialBuildIdArgs)
$(_PlatformArgs)
displayName: Windows Build / Publish
+
+ # Run DRTs
+ - powershell: eng\common\cibuild.cmd
+ -configuration $(_BuildConfig)
+ $(_OfficialBuildIdArgs)
+ $(_PlatformArgs)
+ -projects $(Build.SourcesDirectory)\eng\helixpublish.proj
+ /bl:$(BUILD.SOURCESDIRECTORY)\artifacts\log\$(_BuildConfig)\HelixDrt.binlog
+ displayName: Run Developer Regression Tests on Helix Machine (Release)
+ env:
+ HelixSource: $(_HelixSource)
+ HelixType: 'tests/drt'
+ HelixBuild: $(Build.BuildNumber)
+ HelixTargetQueues: $(_TestHelixAgentPool)
+ HelixAccessToken: $(_HelixToken) # only defined for internal CI
+ Creator: $(_HelixCreator)
+ SYSTEM_ACCESSTOKEN: $(System.AccessToken)
+ condition: and(succeeded(), eq(variables['_BuildConfig'], 'Release')) # on helix machine (with real signing)
diff --git a/eng/pre-build.ps1 b/eng/pre-build.ps1
new file mode 100644
index 00000000000..baad60ccbd9
--- /dev/null
+++ b/eng/pre-build.ps1
@@ -0,0 +1,7 @@
+# Open global.json
+$globaljsonpath = Join-Path $env:BUILD_SOURCESDIRECTORY 'global.json'
+$jsondata = Get-Content -Raw -Path $globaljsonpath | ConvertFrom-Json
+
+# Set DotNetCliVersion to global.json.tools.dotnet
+$dotnetcliver = $jsondata.tools.dotnet
+Write-Host "##vso[task.setvariable variable=DotNetCliVersion;]$dotnetcliver"
\ No newline at end of file
diff --git a/global.json b/global.json
index e355737c6e8..9f7136d509e 100644
--- a/global.json
+++ b/global.json
@@ -12,7 +12,8 @@
}
},
"msbuild-sdks": {
- "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19304.23"
+ "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19305.13",
+ "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19278.1"
},
"native-tools": {
"strawberry-perl": "5.28.1.1-1"
diff --git a/packaging/Microsoft.DotNet.Arcade.Wpf.Sdk/Microsoft.DotNet.Arcade.Wpf.Sdk.ArchNeutral.csproj b/packaging/Microsoft.DotNet.Arcade.Wpf.Sdk/Microsoft.DotNet.Arcade.Wpf.Sdk.ArchNeutral.csproj
index cce7486b2a3..9a6c924a2f5 100644
--- a/packaging/Microsoft.DotNet.Arcade.Wpf.Sdk/Microsoft.DotNet.Arcade.Wpf.Sdk.ArchNeutral.csproj
+++ b/packaging/Microsoft.DotNet.Arcade.Wpf.Sdk/Microsoft.DotNet.Arcade.Wpf.Sdk.ArchNeutral.csproj
@@ -3,6 +3,8 @@
{B73BB4AB-68DE-4B91-BBB0-AB4F2D504AC3}netcoreapp3.0AnyCPU;x64
+
+ NU5111
diff --git a/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemCore/PresentationFramework-SystemCore.csproj b/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemCore/PresentationFramework-SystemCore.csproj
index ae90fb22271..52a9e041a8d 100644
--- a/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemCore/PresentationFramework-SystemCore.csproj
+++ b/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemCore/PresentationFramework-SystemCore.csproj
@@ -4,6 +4,7 @@
AnyCPU;x64falsefalse
+ false
diff --git a/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemData/PresentationFramework-SystemData.csproj b/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemData/PresentationFramework-SystemData.csproj
index fca66dfba37..952af945c3f 100644
--- a/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemData/PresentationFramework-SystemData.csproj
+++ b/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemData/PresentationFramework-SystemData.csproj
@@ -4,6 +4,7 @@
AnyCPU;x64falsefalse
+ false
diff --git a/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemDrawing/PresentationFramework-SystemDrawing.csproj b/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemDrawing/PresentationFramework-SystemDrawing.csproj
index 2c2dbc344bd..02c7d8f28b4 100644
--- a/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemDrawing/PresentationFramework-SystemDrawing.csproj
+++ b/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemDrawing/PresentationFramework-SystemDrawing.csproj
@@ -4,6 +4,7 @@
AnyCPU;x64falsefalse
+ false
diff --git a/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemXml/PresentationFramework-SystemXml.csproj b/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemXml/PresentationFramework-SystemXml.csproj
index 63b23198ed4..fe6e950307a 100644
--- a/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemXml/PresentationFramework-SystemXml.csproj
+++ b/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemXml/PresentationFramework-SystemXml.csproj
@@ -4,6 +4,7 @@
AnyCPU;x64falsefalse
+ false
diff --git a/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemXmlLinq/PresentationFramework-SystemXmlLinq.csproj b/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemXmlLinq/PresentationFramework-SystemXmlLinq.csproj
index 922c1cfd2b5..9da2f96d40c 100644
--- a/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemXmlLinq/PresentationFramework-SystemXmlLinq.csproj
+++ b/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemXmlLinq/PresentationFramework-SystemXmlLinq.csproj
@@ -4,6 +4,7 @@
AnyCPU;x64falsefalse
+ false
diff --git a/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemXmlLinq/SystemXmlLinqExtension.cs b/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemXmlLinq/SystemXmlLinqExtension.cs
index e983d7a60d5..5a0a67b906f 100644
--- a/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemXmlLinq/SystemXmlLinqExtension.cs
+++ b/src/Microsoft.DotNet.Wpf/src/Extensions/PresentationFramework-SystemXmlLinq/SystemXmlLinqExtension.cs
@@ -21,10 +21,10 @@ static SystemXmlLinqExtension()
XElement xelement = new XElement("Dummy");
PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(xelement);
- s_XElementElementsPropertyDescriptorType = pdc["Elements"]?.GetType();
- s_XElementDescendantsPropertyDescriptorType = pdc["Descendants"]?.GetType();
- s_XElementAttributePropertyDescriptorType = pdc["Attribute"]?.GetType();
- s_XElementElementPropertyDescriptorType = pdc["Element"]?.GetType();
+ s_XElementElementsPropertyDescriptorType = pdc["Elements"].GetType();
+ s_XElementDescendantsPropertyDescriptorType = pdc["Descendants"].GetType();
+ s_XElementAttributePropertyDescriptorType = pdc["Attribute"].GetType();
+ s_XElementElementPropertyDescriptorType = pdc["Element"].GetType();
}
// return true if the item is an XElement
diff --git a/src/Microsoft.DotNet.Wpf/test/BranchCommon/data/DrtList.xml b/src/Microsoft.DotNet.Wpf/test/BranchCommon/data/DrtList.xml
new file mode 100644
index 00000000000..a3178d03618
--- /dev/null
+++ b/src/Microsoft.DotNet.Wpf/test/BranchCommon/data/DrtList.xml
@@ -0,0 +1,38 @@
+
+
+
+
+ XamlTestClasses.dll
+ BamlTestClasses40.dll
+ BamlAvoidXmlTest.exe
+ XamlTestClasses.FriendWithKey.dll
+ XamlTestClasses.FriendWithoutKey.dll
+
+
+
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/DrtBase.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/DrtBase.cs
similarity index 98%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/DrtBase.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/DrtBase.cs
index 59d384c5013..79fa006d094 100644
--- a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/DrtBase.cs
+++ b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/DrtBase.cs
@@ -22,7 +22,6 @@
using System.Text;
using Microsoft.Win32;
-using Xunit.Abstractions;
using MS.Internal;
/************************************************************************
@@ -214,7 +213,7 @@ static DrtBase()
Application app = Application.Current; // runs Application.Init(), which sets up Avalon services
}
- protected DrtBase(ITestOutputHelper output)
+ protected DrtBase()
{
string assertExit = Environment.GetEnvironmentVariable("AVALON_ASSERTEXIT");
if (assertExit != null && assertExit.Length > 0)
@@ -233,7 +232,6 @@ protected DrtBase(ITestOutputHelper output)
}
_dispatcher = Dispatcher.CurrentDispatcher;
- _output = output;
}
///
@@ -250,7 +248,7 @@ protected DrtBase(ITestOutputHelper output)
/// DRT exit code -- to be returned from Main()
public int Run(string[] args)
{
- _delayedConsoleOutput = new StringAndFileWriter(DrtName, _output);
+ _delayedConsoleOutput = new StringAndFileWriter(DrtName);
_retcode = ReadCommandLineArguments(args);
@@ -422,7 +420,6 @@ protected virtual bool HandleCommandLineArgument(string arg, bool option, string
case "help":
PrintUsage();
- Xunit.Assert.True(true);
Environment.Exit(0);
break;
@@ -1138,7 +1135,6 @@ public void Assert(bool cond, string message, params object[] arg)
// Write any delayed output for debugging purposes
WriteDelayedOutput();
- Xunit.Assert.True(cond, s);
if (_loudAsserts)
{
@@ -2051,7 +2047,6 @@ void RunNextTest()
_testIndex++;
}
- Xunit.Assert.False(aborting);
// Schedule the next test.
// Special situation: The current test may have called Suspend() and then
@@ -2099,7 +2094,6 @@ private void ReportException(object o)
ReportDrtInfo();
- Xunit.Assert.True(_retcode == 0);
Environment.Exit(_retcode);
}
@@ -2626,10 +2620,9 @@ private static void Win32BlockInput(bool blockIt)
private class StringAndFileWriter : StringWriter
{
- public StringAndFileWriter(string drtName, ITestOutputHelper output) : base(new StringBuilder())
+ public StringAndFileWriter(string drtName) : base(new StringBuilder())
{
_buffer = GetStringBuilder();
- _output = output;
if (string.IsNullOrEmpty(drtName))
{
throw new ArgumentException("DrtName must be defined");
@@ -2715,14 +2708,6 @@ public override void Write(char value)
_logFile.Write(value);
_logFile.Flush();
}
-
- try
- {
- _output.WriteLine($"{value}");
- }
- catch
- {
- }
}
}
@@ -2740,14 +2725,6 @@ public override void Write(char[] buffer, int index, int count)
_logFile.Write(buffer, index, count);
_logFile.Flush();
}
-
- var sb = new StringBuilder();
- sb.Append(buffer, index, count);
- try
- {
- _output.WriteLine(sb.ToString());
- }
- catch { }
}
}
@@ -2777,12 +2754,6 @@ public override void Write(string value)
_logFile.Write(value);
_logFile.Flush();
}
-
- try
- {
- _output.WriteLine(value);
- }
- catch { }
}
}
@@ -2806,8 +2777,6 @@ public void CloseFile()
private StringBuilder _buffer;
private bool _isClosed = false;
private object _instanceLock = new object();
-
- private ITestOutputHelper _output;
}
private class DualWriter : StringWriter
@@ -2920,8 +2889,6 @@ public bool TimedOut
//
private Dispatcher _dispatcher;
- private ITestOutputHelper _output;
-
private HwndSource _source = null;
private Visual _rootElement;
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/DrtBaseGlobalInput.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/DrtBaseGlobalInput.cs
similarity index 100%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/DrtBaseGlobalInput.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/DrtBaseGlobalInput.cs
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/DrtBaseInput.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/DrtBaseInput.cs
similarity index 100%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/DrtBaseInput.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/DrtBaseInput.cs
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Internal/MultiTargetUtilities.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Internal/MultiTargetUtilities.cs
similarity index 100%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Internal/MultiTargetUtilities.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Internal/MultiTargetUtilities.cs
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Internal/PointUtil.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Internal/PointUtil.cs
similarity index 100%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Internal/PointUtil.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Internal/PointUtil.cs
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Internal/SecurityCriticalDataForSet.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Internal/SecurityCriticalDataForSet.cs
similarity index 100%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Internal/SecurityCriticalDataForSet.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Internal/SecurityCriticalDataForSet.cs
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/ExternDll.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/ExternDll.cs
similarity index 100%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/ExternDll.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/ExternDll.cs
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/HandleCollector.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/HandleCollector.cs
similarity index 100%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/HandleCollector.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/HandleCollector.cs
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/NativeMethodsCLR.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/NativeMethodsCLR.cs
similarity index 100%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/NativeMethodsCLR.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/NativeMethodsCLR.cs
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/NativeMethodsOther.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/NativeMethodsOther.cs
similarity index 100%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/NativeMethodsOther.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/NativeMethodsOther.cs
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/NativeMethodsSetLastError.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/NativeMethodsSetLastError.cs
similarity index 100%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/NativeMethodsSetLastError.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/NativeMethodsSetLastError.cs
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/SafeNativeMethodsCLR.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/SafeNativeMethodsCLR.cs
similarity index 100%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/SafeNativeMethodsCLR.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/SafeNativeMethodsCLR.cs
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/SafeNativeMethodsOther.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/SafeNativeMethodsOther.cs
similarity index 100%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/SafeNativeMethodsOther.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/SafeNativeMethodsOther.cs
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/UnsafeNativeMethodsCLR.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/UnsafeNativeMethodsCLR.cs
similarity index 100%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/UnsafeNativeMethodsCLR.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/UnsafeNativeMethodsCLR.cs
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/UnsafeNativeMethodsOther.cs b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/UnsafeNativeMethodsOther.cs
similarity index 100%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/MS/Win32/UnsafeNativeMethodsOther.cs
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/MS/Win32/UnsafeNativeMethodsOther.cs
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/TestServices.csproj b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/TestServices.csproj
similarity index 61%
rename from src/Microsoft.DotNet.Wpf/test/Common/TestServices/TestServices.csproj
rename to src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/TestServices.csproj
index c4d5ad2748d..81436587de5 100644
--- a/src/Microsoft.DotNet.Wpf/test/Common/TestServices/TestServices.csproj
+++ b/src/Microsoft.DotNet.Wpf/test/Common/DRT/TestServices/TestServices.csproj
@@ -1,11 +1,13 @@
- TestServices
- TestServices
- $(DefineConstants);FRAMEWORK_NATIVEMETHODS;CORE_NATIVEMETHODS;DRT
- true
- $(NoWarn);CS0618;0618
- AnyCPU;x64
+ TestServices
+ TestServices
+ $(DefineConstants);FRAMEWORK_NATIVEMETHODS;CORE_NATIVEMETHODS;DRT
+ true
+ $(NoWarn);CS0618;0618
+ AnyCPU;x64
+ false
+ Library
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/Directory.Build.props b/src/Microsoft.DotNet.Wpf/test/Common/Directory.Build.props
new file mode 100644
index 00000000000..66ffd0bbef4
--- /dev/null
+++ b/src/Microsoft.DotNet.Wpf/test/Common/Directory.Build.props
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/keys/TestTrusted.snk b/src/Microsoft.DotNet.Wpf/test/Common/keys/TestTrusted.snk
new file mode 100644
index 00000000000..425dc4d7c7b
Binary files /dev/null and b/src/Microsoft.DotNet.Wpf/test/Common/keys/TestTrusted.snk differ
diff --git a/src/Microsoft.DotNet.Wpf/test/Common/keys/TestUntrusted.snk b/src/Microsoft.DotNet.Wpf/test/Common/keys/TestUntrusted.snk
new file mode 100644
index 00000000000..b36f71bca81
Binary files /dev/null and b/src/Microsoft.DotNet.Wpf/test/Common/keys/TestUntrusted.snk differ
diff --git a/src/Microsoft.DotNet.Wpf/test/DRT/Directory.Build.props b/src/Microsoft.DotNet.Wpf/test/DRT/Directory.Build.props
new file mode 100644
index 00000000000..66ffd0bbef4
--- /dev/null
+++ b/src/Microsoft.DotNet.Wpf/test/DRT/Directory.Build.props
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml.sln b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml.sln
index 37c61ec0292..e9c83d048ac 100644
--- a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml.sln
+++ b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml.sln
@@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28010.2026
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DrtXaml.Tests", "DrtXaml\DrtXaml\DrtXaml.Tests.csproj", "{FAB114A2-2C6C-4372-A6BB-BC087B646E3A}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DrtXaml", "DrtXaml\DrtXaml\DrtXaml.csproj", "{FAB114A2-2C6C-4372-A6BB-BC087B646E3A}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestServices", "..\Common\TestServices\TestServices.csproj", "{387F3700-8C0B-4CEC-A68A-1725F656A249}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestServices", "..\Common\DRT\TestServices\TestServices.csproj", "{387F3700-8C0B-4CEC-A68A-1725F656A249}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XamlTestClasses", "DrtXaml\XamlTestClasses\XamlTestClasses.csproj", "{3C1FC36C-E3E6-4EED-9ECA-CFF2EB950486}"
EndProject
diff --git a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlAvoidXmlTest/BamlAvoidXmlTest.csproj b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlAvoidXmlTest/BamlAvoidXmlTest.csproj
index e5778ec5e8f..6587485ae36 100644
--- a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlAvoidXmlTest/BamlAvoidXmlTest.csproj
+++ b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlAvoidXmlTest/BamlAvoidXmlTest.csproj
@@ -1,4 +1,4 @@
-
+BamlAvoidXmlTestBamlAvoidXmlTest
@@ -10,11 +10,8 @@
Exe
-
-
-
-
+
diff --git a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/BCMarkupExtension.cs b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/BCMarkupExtension.cs
index 90e3c53b5bc..d0f514bfc81 100644
--- a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/BCMarkupExtension.cs
+++ b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/BCMarkupExtension.cs
@@ -32,7 +32,6 @@ public override object ProvideValue(
{
return string.Format("Path: {0} , Mode: {1}", Path, Mode);
}
- [CLSCompliant(false)]
[MarkupExtensionBracketCharacters('(',')')]
[MarkupExtensionBracketCharacters('[',']')]
[ConstructorArgument("value")]
@@ -44,7 +43,6 @@ public string Path
set { _value = value; }
}
- [CLSCompliant(false)]
[ConstructorArgument("value2")]
[MarkupExtensionBracketCharacters('$','^')]
#pragma warning disable CS3021 // Type or member does not need a CLSCompliant attribute because the assembly does not have a CLSCompliant attribute
@@ -71,7 +69,6 @@ public override object ProvideValue(
return Path;
}
- [CLSCompliant(false)]
[MarkupExtensionBracketCharacters('[',']')]
[MarkupExtensionBracketCharacters('(', ')')]
#pragma warning disable CS3021 // Type or member does not need a CLSCompliant attribute because the assembly does not have a CLSCompliant attribute
diff --git a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/BamlTestClasses40.csproj b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/BamlTestClasses40.csproj
index 39d1b6fedcd..8b04041b658 100644
--- a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/BamlTestClasses40.csproj
+++ b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/BamlTestClasses40.csproj
@@ -62,12 +62,14 @@
MSBuild:Compile
-
+
+
+
diff --git a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/TempDPSetOrder1.xaml.cs b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/TempDPSetOrder1.xaml.cs
index ba75f9a5345..0ddeeb78a63 100644
--- a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/TempDPSetOrder1.xaml.cs
+++ b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/TempDPSetOrder1.xaml.cs
@@ -16,47 +16,4 @@ public TempDPSetOrder1()
InitializeComponent();
}
}
-
- public enum Property
- {
- IsSynchronizedWithCurrentItem,
- ItemsSource,
- SelectedIndex
- }
-
- public class TempDPSetOrder1ListBox : ListBox
- {
- public static List Order { get; private set; }
-
- static TempDPSetOrder1ListBox()
- {
- Order = new List();
- }
-
- protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
- {
- base.OnPropertyChanged(e);
- if (e.Property.OwnerType.Equals(typeof(Selector)))
- {
- switch (e.Property.Name)
- {
- case "IsSynchronizedWithCurrentItem":
- Order.Add(Property.IsSynchronizedWithCurrentItem);
- break;
- case "SelectedIndex":
- Order.Add(Property.SelectedIndex);
- break;
- }
- }
- else if (e.Property.OwnerType.Equals(typeof(ItemsControl)))
- {
- switch (e.Property.Name)
- {
- case "ItemsSource":
- Order.Add(Property.ItemsSource);
- break;
- }
- }
- }
- }
}
diff --git a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/TempDPSetOrder1ListBox.cs b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/TempDPSetOrder1ListBox.cs
new file mode 100644
index 00000000000..f9debdad8ce
--- /dev/null
+++ b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/BamlTestClasses40/TempDPSetOrder1ListBox.cs
@@ -0,0 +1,54 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections.Generic;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+
+namespace BamlTestClasses40
+{
+ public enum Property
+ {
+ IsSynchronizedWithCurrentItem,
+ ItemsSource,
+ SelectedIndex
+ }
+
+ public class TempDPSetOrder1ListBox : ListBox
+ {
+ public static List Order { get; private set; }
+
+ static TempDPSetOrder1ListBox()
+ {
+ Order = new List();
+ }
+
+ protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
+ {
+ base.OnPropertyChanged(e);
+ if (e.Property.OwnerType.Equals(typeof(Selector)))
+ {
+ switch (e.Property.Name)
+ {
+ case "IsSynchronizedWithCurrentItem":
+ Order.Add(Property.IsSynchronizedWithCurrentItem);
+ break;
+ case "SelectedIndex":
+ Order.Add(Property.SelectedIndex);
+ break;
+ }
+ }
+ else if (e.Property.OwnerType.Equals(typeof(ItemsControl)))
+ {
+ switch (e.Property.Name)
+ {
+ case "ItemsSource":
+ Order.Add(Property.ItemsSource);
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/Directory.Build.props b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/Directory.Build.props
new file mode 100644
index 00000000000..bf987b61ede
--- /dev/null
+++ b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/Directory.Build.props
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/DrtXaml/DrtXaml.Tests.csproj b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/DrtXaml/DrtXaml.csproj
similarity index 64%
rename from src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/DrtXaml/DrtXaml.Tests.csproj
rename to src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/DrtXaml/DrtXaml.csproj
index 47569961283..028926828d1 100644
--- a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/DrtXaml/DrtXaml.Tests.csproj
+++ b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/DrtXaml/DrtXaml.csproj
@@ -1,21 +1,21 @@
-
+DrtXamlDrtXaml
-
- Library
-
+ console
+ ExeAnyCPU;x64
+ DrtXaml.XamlDrt
+ truetrue
- true
- true
+ false
-
+
@@ -25,12 +25,6 @@
-
-
-
-
-
-
diff --git a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/DrtXaml/DrtXamlBase.cs b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/DrtXaml/DrtXamlBase.cs
index 71b3191ccef..7499fee2047 100644
--- a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/DrtXaml/DrtXamlBase.cs
+++ b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/DrtXaml/DrtXamlBase.cs
@@ -12,94 +12,19 @@
using System.IO;
using DrtXaml.XamlTestFramework;
using System.Xml;
-using Xunit;
-using Xunit.Abstractions;
-using System.Threading.Tasks;
-using System.Threading;
namespace DrtXaml
{
- public class TestFrontEnd
- {
- public TestFrontEnd(ITestOutputHelper testOutputHelper)
- {
- _testOutputHelper = testOutputHelper;
- }
-
- [Theory]
- [InlineData("ValueSerializerSerializationTests")]
- [InlineData("ValueSerializerDeserializationAndRoundtripTest")]
- [InlineData("NameReferenceTests")]
- [InlineData("AdvXamlFeatureTests")]
- [InlineData("AttachablePropertyServicesTests")]
- [InlineData("AvoidSystemXmlTest")]
- [InlineData("BamlTests")]
- [InlineData("BasicXamlTests")]
- [InlineData("CollectionTests")]
- [InlineData("EventTests")]
- [InlineData("FactoryArgumentTests")]
- [InlineData("LoadPermissionTests")]
- [InlineData("MarkupExtensionTests")]
- [InlineData("NodeStreamTests")]
- [InlineData("ObjectReaderTests")]
- [InlineData("ObjectWriterBasicTests")]
- [InlineData("SavedContextTests")]
- [InlineData("SchemaTests")]
- [InlineData("SubreaderTests")]
- [InlineData("TypeArgumentTests")]
- [InlineData("WpfUsageTests")]
- [InlineData("XamlMarkupExtensionWriterTests")]
- [InlineData("XamlXmlWriterTests")]
- [InlineData("XamlXmlReaderTests")]
- [InlineData("XamlTemplateTests")]
- [InlineData("XamlServicesTests")]
- public async Task RunSuite(params string[] data)
- {
- string[] switches = new[] { "-verbose", "-catchexceptions", "-quietasserts" };
-
- var args = new List(switches);
- foreach (var arg in data)
- {
- if (!arg.StartsWith("-"))
- {
- args.Add("-suite");
- }
- args.Add(arg);
- }
-
- await StartSTATask(() => new XamlDrt(_testOutputHelper).RunTests(args.ToArray()));
- }
-
- private static Task StartSTATask(Action action)
- {
- var tcs = new TaskCompletionSource
diff --git a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/XamlTestClasses.FriendWithoutKey/XamlTestClasses.FriendWithoutKey.csproj b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/XamlTestClasses.FriendWithoutKey/XamlTestClasses.FriendWithoutKey.csproj
index 2292641f063..15261c44875 100644
--- a/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/XamlTestClasses.FriendWithoutKey/XamlTestClasses.FriendWithoutKey.csproj
+++ b/src/Microsoft.DotNet.Wpf/test/DRT/DrtXaml/XamlTestClasses.FriendWithoutKey/XamlTestClasses.FriendWithoutKey.csproj
@@ -3,5 +3,6 @@
XamlTestClasses.FriendWithoutKeyXamlTestClasses.FriendWithoutKeyAnyCPU;x64
+ Library
diff --git a/src/Microsoft.DotNet.Wpf/test/Directory.Build.props b/src/Microsoft.DotNet.Wpf/test/Directory.Build.props
index 4ca582bca1e..d0922997f6f 100644
--- a/src/Microsoft.DotNet.Wpf/test/Directory.Build.props
+++ b/src/Microsoft.DotNet.Wpf/test/Directory.Build.props
@@ -2,14 +2,14 @@
true
-
+ $(MsBuildThisFileDirectory)false
- truefalsefalsefalse
+ false
diff --git a/src/Microsoft.DotNet.Wpf/test/MultiTargeting.props b/src/Microsoft.DotNet.Wpf/test/MultiTargeting.props
index 2f9f5d9b14f..f2482461c39 100644
--- a/src/Microsoft.DotNet.Wpf/test/MultiTargeting.props
+++ b/src/Microsoft.DotNet.Wpf/test/MultiTargeting.props
@@ -26,8 +26,12 @@
-
-
+
+ all