281 lines
16 KiB
Plaintext
281 lines
16 KiB
Plaintext
|
<?xml version="1.0" encoding="utf-8"?>
|
||
|
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||
|
|
||
|
<!-- This is the target that copies the test assets to the test output -->
|
||
|
<Import Project="$(MSBuildThisFileDirectory)publishtest.targets" />
|
||
|
<UsingTask TaskName="GenerateTestExecutionScripts" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll"/>
|
||
|
<UsingTask TaskName="GetTargetMachineInfo" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll"/>
|
||
|
|
||
|
<!-- Which categories of tests to run by default -->
|
||
|
<PropertyGroup>
|
||
|
<TestDisabled>false</TestDisabled>
|
||
|
<TestDisabled Condition="'$(IsTestProject)'!='true' Or '$(SkipTests)'=='true' Or '$(RunTestsForProject)'=='false'">true</TestDisabled>
|
||
|
<TestsSuccessfulSemaphore>tests.passed</TestsSuccessfulSemaphore>
|
||
|
<RunningOnNetFx Condition="'$(_bc_TargetGroup)' == 'netfx'">true</RunningOnNetFx>
|
||
|
</PropertyGroup>
|
||
|
|
||
|
<!-- In case that TestPath is not yet set, default it here -->
|
||
|
<PropertyGroup>
|
||
|
<TestPath Condition="'$(TestPath)'==''">$(OutDir)</TestPath>
|
||
|
</PropertyGroup>
|
||
|
|
||
|
<ItemGroup>
|
||
|
<!-- Split semicolon separated lists -->
|
||
|
<WithCategoriesItems Include="$(WithCategories)" />
|
||
|
<WithoutCategoriesItems Include="$(WithoutCategories)" />
|
||
|
<DefaultNoCategories Include="$(DefaultNoCategories)" />
|
||
|
<UnsupportedPlatformsItems Include="$(UnsupportedPlatforms)"/>
|
||
|
</ItemGroup>
|
||
|
|
||
|
<PropertyGroup Condition="'$(RunningOnNetFx)' != 'true'">
|
||
|
<XunitRuntimeConfig>$(ToolsDir)\xunit.console.netcore.runtimeconfig.json</XunitRuntimeConfig>
|
||
|
<TestRuntimeEnvVar Condition="'$(OS)' == 'Windows_NT'">%RUNTIME_PATH%\</TestRuntimeEnvVar>
|
||
|
<TestRuntimeEnvVar Condition="'$(OS)' != 'Windows_NT'">$RUNTIME_PATH/</TestRuntimeEnvVar>
|
||
|
<TestHostExecutablePath Condition="'$(OS)'=='Windows_NT' AND '$(TestHostExecutablePath)' == ''">$(TestRuntimeEnvVar)dotnet.exe</TestHostExecutablePath>
|
||
|
<TestHostExecutablePath Condition="'$(OS)'!='Windows_NT' AND '$(TestHostExecutablePath)' == ''">$(TestRuntimeEnvVar)dotnet</TestHostExecutablePath>
|
||
|
|
||
|
<XunitExecutable Condition="'$(XunitExecutable)' == ''">xunit.console.netcore.exe</XunitExecutable>
|
||
|
|
||
|
<DebugEngines>{2E36F1D4-B23C-435D-AB41-18E608940038}</DebugEngines>
|
||
|
</PropertyGroup>
|
||
|
|
||
|
<PropertyGroup Condition="'$(RunningOnNetFx)' == 'true'">
|
||
|
<XunitExecutable Condition="'$(XunitExecutable)' == ''">xunit.console.exe</XunitExecutable>
|
||
|
</PropertyGroup>
|
||
|
|
||
|
<!-- General xunit options -->
|
||
|
<PropertyGroup>
|
||
|
<XunitResultsFileName>testResults.xml</XunitResultsFileName>
|
||
|
|
||
|
<XunitOptions Condition="'$(RunningOnNetFx)' == 'true'">$(XunitOptions) -noshadow </XunitOptions>
|
||
|
<XunitOptions>$(XunitOptions) -xml $(XunitResultsFileName)</XunitOptions>
|
||
|
|
||
|
<XunitOptions Condition="'$(Performance)'!='true'">$(XunitOptions) -notrait Benchmark=true</XunitOptions>
|
||
|
|
||
|
<XunitOptions Condition="'$(UseDotNetNativeToolchain)'=='true'">$(XunitOptions) -redirectoutput</XunitOptions>
|
||
|
|
||
|
<!-- Temporary till we fix the whole filtering with TargetGroup -->
|
||
|
<XunitOptions Condition="'$(RunningOnNetFx)' != 'true'">$(XunitOptions) -notrait category=nonnetcoreapp1.1tests</XunitOptions>
|
||
|
|
||
|
<XunitOptions Condition="'$(XunitMaxThreads)'!=''">$(XunitOptions) -maxthreads $(XunitMaxThreads)</XunitOptions>
|
||
|
<XunitTestAssembly Condition="'$(XunitTestAssembly)' == ''">$(TargetFileName)</XunitTestAssembly>
|
||
|
<XunitArguments>$(XunitTestAssembly) $(XunitOptions)</XunitArguments>
|
||
|
|
||
|
<TestProgram Condition="'$(TestHostExecutablePath)'!=''">$(TestHostExecutablePath)</TestProgram>
|
||
|
<TestArguments Condition="'$(TestHostExecutablePath)'!=''">$(XunitExecutable) $(XunitArguments)</TestArguments>
|
||
|
|
||
|
<TestProgram Condition="'$(TestHostExecutablePath)'==''">$(XunitExecutable)</TestProgram>
|
||
|
<TestArguments Condition="'$(TestHostExecutablePath)'==''">$(XunitArguments)</TestArguments>
|
||
|
|
||
|
<TestCommandLine Condition="'$(Performance)'!='true'">$(TestProgram) $(TestArguments) {XunitTraitOptions}</TestCommandLine>
|
||
|
</PropertyGroup>
|
||
|
|
||
|
<!-- The Code Coverage targets will override TestHost and TestCommandLine if coverage is enabled -->
|
||
|
<Import Project="$(MSBuildThisFileDirectory)CodeCoverage.targets" />
|
||
|
|
||
|
<!-- In VS (2015 Preview or later currently required): Debug to run unit tests on CoreCLR. -->
|
||
|
<PropertyGroup Condition="'$(IsTestProject)'=='true'">
|
||
|
<StartWorkingDirectory Condition="'$(StartWorkingDirectory)'==''">$(TestPath)</StartWorkingDirectory>
|
||
|
<StartAction Condition="'$(StartAction)'==''">Program</StartAction>
|
||
|
<StartProgram Condition="'$(StartProgram)'==''">$(TestSharedFxDir)\dotnet.exe</StartProgram>
|
||
|
<StartArguments Condition="'$(StartArguments)'==''">$(TestArguments) -wait -parallel none</StartArguments>
|
||
|
</PropertyGroup>
|
||
|
|
||
|
<Target Name="DiscoverTestInputs" DependsOnTargets="ResolveReferences;GetCopyToOutputDirectoryItems">
|
||
|
<ItemGroup>
|
||
|
<RunTestsForProjectInputs Include="@(ReferenceCopyLocalPaths)" />
|
||
|
<RunTestsForProjectInputs Include="@(Content)" />
|
||
|
<RunTestsForProjectInputs Include="@(IntermediateAssembly)" />
|
||
|
<RunTestsForProjectInputs Include="@(_DebugSymbolsIntermediatePath)" />
|
||
|
<RunTestsForProjectInputs Include="@(AllItemsFullPathWithTargetPath)" />
|
||
|
</ItemGroup>
|
||
|
<ItemGroup Condition="'$(RunningOnNetFx)' != 'true'">
|
||
|
<SupplementalTestData Include="$(XunitRuntimeConfig)" />
|
||
|
<SupplementalTestData Include="$(RuntimePath)xunit.console.netcore.exe" />
|
||
|
</ItemGroup>
|
||
|
<ItemGroup Condition="'$(RunningOnNetFx)' == 'true'">
|
||
|
<SupplementalTestData Include="$(RuntimePath)xunit*.*" />
|
||
|
<SupplementalTestData Include="$(RuntimePath)*.xslt" />
|
||
|
</ItemGroup>
|
||
|
</Target>
|
||
|
|
||
|
<!-- Generate the script to run the tests. The script performs two high-level steps:
|
||
|
1. Copies the common test runtime dependencies calculated in DiscoverTestDependencies to the test
|
||
|
execution directory. Each copy command no-ops if the file already exists in the test execution
|
||
|
directory.
|
||
|
2. Runs the tests. -->
|
||
|
<Target Name="GenerateTestExecutionScripts"
|
||
|
DependsOnTargets="DiscoverTestInputs;SetupTestProperties">
|
||
|
<PropertyGroup>
|
||
|
<TargetOSTrait Condition="'$(TargetOS)'=='Windows_NT'">nonwindowstests</TargetOSTrait>
|
||
|
<TargetOSTrait Condition="'$(TargetOS)'=='Linux'">nonlinuxtests</TargetOSTrait>
|
||
|
<TargetOSTrait Condition="'$(TargetOS)'=='OSX'">nonosxtests</TargetOSTrait>
|
||
|
<TargetOSTrait Condition="'$(TargetOS)'=='FreeBSD'">nonfreebsdtests</TargetOSTrait>
|
||
|
<TargetOSTrait Condition="'$(TargetOS)'=='NetBSD'">nonnetbsdtests</TargetOSTrait>
|
||
|
</PropertyGroup>
|
||
|
<Error Condition="'$(TargetOSTrait)' == ''" Text="TargetOS [$(TargetOS)] is unknown so we don't know how to configure the test run for this project [$(MSBuildProjectName)]" />
|
||
|
|
||
|
<ItemGroup>
|
||
|
<RunWithoutTraits Condition="'$(TargetOSTrait)'!=''" Include="$(TargetOSTrait)" />
|
||
|
</ItemGroup>
|
||
|
|
||
|
<PropertyGroup>
|
||
|
<RunnerScriptName Condition="'$(TargetOS)'=='Windows_NT'" >RunTests.cmd</RunnerScriptName>
|
||
|
<RunnerTemplateName Condition="'$(TargetOS)'=='Windows_NT'" >RunnerTemplate.Windows.txt</RunnerTemplateName>
|
||
|
<RunnerScriptName Condition="'$(TargetOS)'!='Windows_NT'" >RunTests.sh</RunnerScriptName>
|
||
|
<RunnerTemplateName Condition="'$(TargetOS)'!='Windows_NT'" >RunnerTemplate.Unix.txt</RunnerTemplateName>
|
||
|
</PropertyGroup>
|
||
|
|
||
|
<PropertyGroup>
|
||
|
<XunitTraitOptions Condition="'@(RunWithTraits)'!=''">$(XunitTraitOptions) -trait category=@(RunWithTraits, ' -trait category=') </XunitTraitOptions>
|
||
|
<XunitTraitOptions Condition="'@(RunWithoutTraits)'!=''">$(XunitTraitOptions) -notrait category=@(RunWithoutTraits, ' -notrait category=') </XunitTraitOptions>
|
||
|
</PropertyGroup>
|
||
|
|
||
|
<!-- Replace the {XunitTraitOptions} place holder with the actual traits. We use the place holder
|
||
|
because code coverage needs to have a bit of the test command line after the traits (it adds ending quotes
|
||
|
to one of its options). Simply appending the traits would break code coverage.
|
||
|
Additionally, replace CoreRun.exe with ./corerun on Non-Windows OSes (this is the only difference in the command)
|
||
|
Future refactoring will allow us to construct this correctly initially, but we don't always know the TargetOS
|
||
|
when the properties are set currently. -->
|
||
|
<PropertyGroup>
|
||
|
<TestCommandLine>$(TestCommandLine.Replace('{XunitTraitOptions}', '$(XunitTraitOptions)'))</TestCommandLine>
|
||
|
|
||
|
<!-- We also need to replace {CoverageFilter} with its true value, which should be evaluated correctly at this point. -->
|
||
|
<TestCommandLine>$(TestCommandLine.Replace('{CoverageFilter}', '$(CoverageFilter)'))</TestCommandLine>
|
||
|
|
||
|
<OutputFolderForScriptGenerator>$(TestPath)</OutputFolderForScriptGenerator>
|
||
|
<OutputPathForScriptGenerator>$(OutputFolderForScriptGenerator)/$(RunnerScriptName)</OutputPathForScriptGenerator>
|
||
|
<OutputFolderForTestDependencies>$(BinDir)/TestDependencies</OutputFolderForTestDependencies>
|
||
|
</PropertyGroup>
|
||
|
|
||
|
<MakeDir Condition="'$(CoverageEnabledForProject)'=='true'" Directories="$(CoverageReportDir)" />
|
||
|
|
||
|
<MakeDir Directories="$(OutputFolderForTestDependencies)" />
|
||
|
<PropertyGroup>
|
||
|
<_TestDependencyListRoot>$(MSBuildProjectName)-$(TestConfiguration)</_TestDependencyListRoot>
|
||
|
<_TestDependencyListFileName>$(_TestDependencyListRoot).dependencylist.txt</_TestDependencyListFileName>
|
||
|
<TestDependencyListFilePath>$(OutputFolderForTestDependencies)/$(_TestDependencyListFileName)</TestDependencyListFilePath>
|
||
|
</PropertyGroup>
|
||
|
<Message Text="Generating $(TestDependencyListFilePath)" />
|
||
|
<WriteLinesToFile
|
||
|
File="$(TestDependencyListFilePath)"
|
||
|
Lines="@(IncludedFileForRunnerScript -> '%(PackageRelativePath)')"
|
||
|
Overwrite="true"
|
||
|
Encoding="Ascii" />
|
||
|
|
||
|
<!-- For .NET Native compilation, we first need to generate a native executable if possible. -->
|
||
|
<ItemGroup Condition="'$(UseDotNetNativeToolchain)' == 'true' AND '$(Performance)'!='true'" >
|
||
|
<TestCommandLines Include="copy /y $(TestILCFolder)\default.rd.xml %EXECUTION_DIR%" />
|
||
|
<TestCommandLines Include="$(TestILCFolder)\ilc.exe -usecustomframework -ExeName xunit.console.netcore.exe -in %EXECUTION_DIR% -out %EXECUTION_DIR%\native -usedefaultpinvoke -buildtype ret -v diag || exit /b %ERRORLEVEL%"/>
|
||
|
<TestCommandLines Include="copy /y $(TestILCFolder)\CRT\vcruntime140_app.dll %EXECUTION_DIR%\native" />
|
||
|
<TestCommandLines Include="echo > %EXECUTION_DIR%\native\$(XunitTestAssembly)"/>
|
||
|
<TestCommandLines Include="cd native"/>
|
||
|
</ItemGroup>
|
||
|
|
||
|
<ItemGroup Condition="'$(Performance)'!='true'">
|
||
|
<!-- On Windows, call prevents the test command from making execution end prematurely -->
|
||
|
<TestCommandLines Condition="'$(TargetOS)'=='Windows_NT'" Include="call $(TestCommandLine)"/>
|
||
|
<TestCommandLines Condition="'$(TargetOS)'!='Windows_NT'" Include="$(TestCommandLine)"/>
|
||
|
</ItemGroup>
|
||
|
|
||
|
<!-- Currently all netcore50 implementations of System.Console actually write to a noop stream -->
|
||
|
<!-- Workaround is to have the exe detect this and use Console.SetOut to write to a text file. -->
|
||
|
<ItemGroup Condition="'$(UseDotNetNativeToolchain)' == 'true' AND '$(Performance)'!='true'" >
|
||
|
<TestCommandLines Include="type Xunit.Console.Output.txt" />
|
||
|
<TestCommandLines Include="copy /y testResults.xml %EXECUTION_DIR%\" />
|
||
|
</ItemGroup>
|
||
|
|
||
|
<!-- Do not put anything between this Item Group and the GenerateTestExecutionScripts invocation -->
|
||
|
<ItemGroup>
|
||
|
<TestCommandLines Include="@(PostExecutionTestCommandLines)" />
|
||
|
</ItemGroup>
|
||
|
|
||
|
<GenerateTestExecutionScripts
|
||
|
TestCommands="@(TestCommandLines)"
|
||
|
TestDependencies="@(DontIncludeAnything)"
|
||
|
RunnerScriptTemplate="$(MSBuildThisFileDirectory)/$(RunnerTemplateName)"
|
||
|
ScriptOutputPath ="$(OutputPathForScriptGenerator)"
|
||
|
/>
|
||
|
</Target>
|
||
|
|
||
|
<Target Name="RunTestsForProject"
|
||
|
Condition="'$(TestDisabled)' != 'true'"
|
||
|
DependsOnTargets="DiscoverTestInputs;CheckTestCategories"
|
||
|
Inputs="@(RunTestsForProjectInputs)"
|
||
|
Outputs="$(TestsSuccessfulSemaphore);$(TestPath)/$(XunitResultsFileName);$(CoverageOutputFilePath)"
|
||
|
>
|
||
|
|
||
|
<MakeDir Condition="'$(CoverageEnabledForProject)'=='true'" Directories="$(CoverageReportDir)" />
|
||
|
|
||
|
<Exec Command="$(TestPath)/$(RunnerScriptName) $(TestSharedFxDir)"
|
||
|
CustomErrorRegularExpression="Failed: [^0]"
|
||
|
ContinueOnError="true"
|
||
|
IgnoreStandardErrorWarningFormat="true"
|
||
|
>
|
||
|
<Output PropertyName="TestRunExitCode" TaskParameter="ExitCode" />
|
||
|
</Exec>
|
||
|
|
||
|
<Error Condition="'$(TestDisabled)'!='true' And '$(TestRunExitCode)' != '0'" Text="One or more tests failed while running tests from '$(MSBuildProjectName)' please check $(TestPath)$(XunitResultsFileName) for details!" />
|
||
|
<Touch Condition="'$(TestRunExitCode)' == '0'" Files="$(TestsSuccessfulSemaphore)" AlwaysCreate="true" />
|
||
|
</Target>
|
||
|
|
||
|
<!-- Needs to run before RunTestsForProject target as it computes categories and set TestDisabled -->
|
||
|
<Target Name="CheckTestCategories">
|
||
|
|
||
|
<!-- Default behavior is to disable OuterLoop and failing tests if not specified in WithCategories. -->
|
||
|
<ItemGroup>
|
||
|
<DefaultNoCategories Condition="'$(Outerloop)'!='true'" Include="OuterLoop" />
|
||
|
<DefaultNoCategories Include="failing" />
|
||
|
<WithoutCategoriesItems Include="@(DefaultNoCategories)" Exclude="@(WithCategoriesItems)" />
|
||
|
<WithoutCategoriesItemsDistinct Include="@(WithoutCategoriesItems->Distinct())" />
|
||
|
</ItemGroup>
|
||
|
|
||
|
<ItemGroup>
|
||
|
<RunWithTraits Condition="'@(WithCategoriesItems)'!=''" Include="@(WithCategoriesItems)" />
|
||
|
<RunWithoutTraits Condition="'@(WithoutCategoriesItemsDistinct)'!=''" Include="@(WithoutCategoriesItemsDistinct)" />
|
||
|
</ItemGroup>
|
||
|
|
||
|
<PropertyGroup>
|
||
|
<TestsSuccessfulSemaphore Condition="'@(RunWithTraits)' != ''">$(TestsSuccessfulSemaphore).with.@(RunWithTraits, '.')</TestsSuccessfulSemaphore>
|
||
|
<TestsSuccessfulSemaphore Condition="'@(RunWithoutTraits)' != ''">$(TestsSuccessfulSemaphore).without.@(RunWithoutTraits, '.')</TestsSuccessfulSemaphore>
|
||
|
<TestsSuccessfulSemaphore>$(TestPath)/$(TestsSuccessfulSemaphore)</TestsSuccessfulSemaphore>
|
||
|
</PropertyGroup>
|
||
|
|
||
|
<Delete Condition="'$(ForceRunTests)'=='true' And Exists($(TestsSuccessfulSemaphore))"
|
||
|
Files="$(TestsSuccessfulSemaphore)" />
|
||
|
</Target>
|
||
|
|
||
|
<Target Name="CheckTestPlatforms">
|
||
|
<GetTargetMachineInfo Condition="'$(TargetOS)' == ''">
|
||
|
<Output TaskParameter="TargetOS" PropertyName="TargetOS" />
|
||
|
</GetTargetMachineInfo>
|
||
|
<PropertyGroup>
|
||
|
<TestDisabled Condition="'%(UnsupportedPlatformsItems.Identity)' == '$(TargetOS)' Or '$(ConfigurationErrorMsg)' != ''">true</TestDisabled>
|
||
|
</PropertyGroup>
|
||
|
<Message Text="CheckTestPlatforms found TargetOS of [$(TargetOS)]." Importance="Low" />
|
||
|
<Message Condition="'%(UnsupportedPlatformsItems.Identity)' == '$(TargetOS)'"
|
||
|
Text="Skipping tests in $(AssemblyName) because it is not supported on $(TargetOS)" />
|
||
|
<Message Condition="'$(ConfigurationErrorMsg)' != ''"
|
||
|
Text="Skipping tests in $(AssemblyName) because there is no configuration compatible with the current BuildConfiguration." />
|
||
|
</Target>
|
||
|
|
||
|
<Target Name="SetupTestProperties" DependsOnTargets="CheckTestPlatforms;CheckTestCategories" />
|
||
|
|
||
|
<PropertyGroup>
|
||
|
<TestDependsOn>
|
||
|
$(TestDependsOn);
|
||
|
CopySupplementalTestData;
|
||
|
GenerateTestExecutionScripts;
|
||
|
RunTestsForProject;
|
||
|
ArchiveTestBuild
|
||
|
</TestDependsOn>
|
||
|
</PropertyGroup>
|
||
|
|
||
|
<Target Name="Test" DependsOnTargets="$(TestDependsOn)" />
|
||
|
<Target Name="BuildAndTest" DependsOnTargets="Build;Test" />
|
||
|
<Target Name="RebuildAndTest" DependsOnTargets="Rebuild;Test" />
|
||
|
|
||
|
<!-- This helps collect crash dumps and requires python installed -->
|
||
|
<Import Project="$(MSBuildThisFileDirectory)Dumpling.targets" Condition="'$(EnableDumpling)' == 'true' OR '$(EnableCloudTest)' == 'true'" />
|
||
|
</Project>
|