[Tizen] Add BuildTools 2.1.0-rc1-02804-05
[platform/upstream/coreclr.git] / packages / microsoft.dotnet.buildtools / 2.1.0-rc1-02804-05 / lib / CodeCoverage.targets
1 <?xml version="1.0" encoding="utf-8"?>
2 <Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
4   <!--
5     Code coverage package versions go here and in the test-runtime-packages.config
6   -->
7   <PropertyGroup>
8     <OpenCoverVersion>4.6.519</OpenCoverVersion>
9     <ReportGeneratorVersion>3.0.1</ReportGeneratorVersion>
10     <CoverallsUploaderVersion>1.4</CoverallsUploaderVersion>
11   </PropertyGroup>
12   
13   <!-- Coverage options -->
14   <PropertyGroup>
15     <CodeCoverageEnabled>false</CodeCoverageEnabled>
16     <CodeCoverageEnabled Condition="'$(SkipTests)' != 'true' and '$(RunningOnUnix)' != 'true' and '$(Coverage)' == 'true' and '$(Performance)' != 'true'">true</CodeCoverageEnabled>
17     <CoverageReportDir Condition="'$(CoverageReportDir)' == ''">$(TestWorkingDir)coverage\</CoverageReportDir>
18
19     <!-- This targets file has two modes one for individual projects and one for all -->
20     <GenerateCodeCoverageReportForAll Condition="'$(GenerateCodeCoverageReportForAll)'==''">false</GenerateCodeCoverageReportForAll>
21     <CoverageEnabledForProject Condition="'$(GenerateCodeCoverageReportForAll)'=='true'">false</CoverageEnabledForProject>
22     <CoverageEnabledForProject Condition="'$(CoverageEnabledForProject)'=='' and '$(IsTestProject)'=='true'">$(CodeCoverageEnabled)</CoverageEnabledForProject>
23
24     <GenerateIndividualCoverageReport Condition="'$(BuildAllProjects)'!='true' and '$(CoverageEnabledForProject)'=='true'">true</GenerateIndividualCoverageReport>
25     <GenerateFullCoverageReport Condition="'$(GenerateCodeCoverageReportForAll)'=='true' and '$(CodeCoverageEnabled)'=='true' and '$(SkipFullCoverageReport)' != 'true'">true</GenerateFullCoverageReport>
26     <GenerateVisitedMethodsReport Condition="'$(GenerateCodeCoverageReportForAll)'=='true' and '$(CodeCoverageEnabled)'=='true' and '$(GenerateVisitedReport)' == 'true'">true</GenerateVisitedMethodsReport>
27
28     <!-- We need to filter the data to only the assembly being tested. Otherwise we will gather tons of data about other assemblies. -->
29     <_ProjectDirectoryUnderSourceDir Condition="'$(IsTestProject)' == 'true'">$(MSBuildProjectDirectory.SubString($(SourceDir.Length)))</_ProjectDirectoryUnderSourceDir>
30     <AssemblyBeingTestedName Condition="'$(IsTestProject)' == 'true'">$(_ProjectDirectoryUnderSourceDir.SubString(0, $(_ProjectDirectoryUnderSourceDir.IndexOfAny("\\/"))))</AssemblyBeingTestedName>
31
32     <!-- 
33       When coverage is enabled, we disallow building projects in parallel. 
34       There appear to be issues with the OpenCover tool in these scenarios. 
35     -->
36     <SerializeProjects Condition="'$(CodeCoverageEnabled)'=='true'">true</SerializeProjects>
37   </PropertyGroup>
38
39   <Target Name="CreateCoverageFilter" BeforeTargets="GenerateTestExecutionScripts">
40     <!-- By default, code coverage data is only gathered for the assembly being tested. 
41          CodeCoverageAssemblies can be passed in to the build to gather coverage on additional assemblies. -->
42     <ItemGroup>
43       <_CodeCoverageAssemblies Include="$(AssemblyBeingTestedName)" />
44       <_CodeCoverageAssemblies Include="@(AdditionalCodeCoverageAssemblies)" />
45       <_CodeCoverageAssemblies Include="$(CodeCoverageAssemblies)" Condition="'$(CodeCoverageAssemblies)' != ''" />
46     </ItemGroup>
47     <PropertyGroup>
48       <CoverageFilter>@(_CodeCoverageAssemblies->'+[%(Identity)]*', ' ')</CoverageFilter>
49       <CoverageFilter Condition="'$(CodeCoverageAssemblies)' == 'all'">[*]*</CoverageFilter>
50     </PropertyGroup>
51   </Target>
52
53   <!-- *********************************************************************************************** -->
54   <!-- As of 10/2017 OpenCover does not support portable PDBs, but we want the builds to generate
55        portable PDBs.  Thus we generate windows PDBs from portable PDBs here.   Can be removed
56        when OpenCover directly supports Portable PDBs (probably by early 2018) -->
57
58   <Target Name="GenerateWindowsPdbsForAssemblyBeingTested" 
59     BeforeTargets="GenerateTestExecutionScripts"
60     Condition="'$(CodeCoverageEnabled)' == 'true' and '$(TargetOS)'=='Windows_NT'">
61
62     <!-- We look for the DLL being tested for coverage and its PDB create a WindowsPDB\*.pdb which has
63          the windows PDB.  -->
64     <ItemGroup>
65       <PortableDllsToConvert Include="$(NETCoreAppTestSharedFrameworkPath)$(AssemblyBeingTestedName).dll">
66         <PdbPath>$(NETCoreAppTestSharedFrameworkPath)$(AssemblyBeingTestedName).pdb</PdbPath>
67         <TargetPath>$(NETCoreAppTestSharedFrameworkPath)WindowsPDB/$(AssemblyBeingTestedName).pdb</TargetPath>
68       </PortableDllsToConvert>
69
70       <ExistingPortableDllsToConvert Include="@(PortableDllsToConvert)" Condition="Exists('%(PortableDllsToConvert.Identity)') AND Exists('%(PortableDllsToConvert.PdbPath)')"/>
71     </ItemGroup>
72
73     <!-- There are two file in CoreFX, (System.Security.Permissions and Microsoft.Win32.Registry.AccessControl.pdb)  
74          are generated by the GenFacades task and lack a Debug diretory (see https://github.com/dotnet/buildtools/issues/1739)
75          This causes ConvertPortablePdbsToWindowsPdbs to fail.    Work around it right now by using WarnAndContinue 
76          Soon we won't need this code, (since OpenCover will support portable PDBs) so it is OK to just give up for now.  -->
77     <ConvertPortablePdbsToWindowsPdbs Files="@(ExistingPortableDllsToConvert)" ContinueOnError="WarnAndContinue"/>
78
79     <!-- This is a work around because it seems that OpenCover does not seem to accept the PDB unless 
80          it is right next to the DLL it is for.  (-searchDir:XXX does not seem to work).   
81          This code puts next to the DLL as a work-around.   However doing thi also clobbers 
82          the original portable PDB in the runtime directory in the process.   I don't like this but 
83          it does unblock things and this is all intended to be temporary until OpenCover supports 
84          portable PDBs directly  -->
85     <Message Importance="high" Text="Replacing Portable PDB with Windows Pdb in place!" />
86     <Copy SourceFiles="%(ExistingPortableDllsToConvert.TargetPath)" DestinationFolder="$(NETCoreAppTestSharedFrameworkPath)" Condition="Exists('%(ExistingPortableDllsToConvert.TargetPath)')"/>
87   </Target>
88   <!-- *********************************************************************************************** -->
89
90   <!-- xUnit command line with coverage enabled -->
91   <PropertyGroup Condition="'$(CoverageEnabledForProject)'=='true'">
92     <CoverageHost>$(PackagesDir)OpenCover\$(OpenCoverVersion)\tools\OpenCover.Console.exe</CoverageHost>
93     <CoverageOutputFilePath>$(CoverageReportDir)$(MSBuildProjectName).coverage.xml</CoverageOutputFilePath>
94     <CoverageOptions>-oldStyle -filter:"{CoverageFilter}" -excludebyfile:"*\Common\src\System\SR.*" -nodefaultfilters -excludebyattribute:*.ExcludeFromCodeCoverage* -skipautoprops -hideskipped:All -threshold:1</CoverageOptions>
95     <CoverageCommandLine>$(CoverageOptions) -returntargetcode -register:user -target:$(TestProgram) -output:$(CoverageOutputFilePath)</CoverageCommandLine>
96     <TestHost>$(CoverageHost)</TestHost>
97     <TestCommandLine>$(TestHost) $(CoverageCommandLine) -targetargs:"$(TestArguments) {XunitTraitOptions} -notrait Benchmark=true"</TestCommandLine>
98   </PropertyGroup>
99
100   <!-- Report Generator Properties -->
101   <PropertyGroup>
102     <CoverageReportAssemblyFilters Condition="'$(CodeCoverageAssemblies)' != 'all'">"-assemblyfilters:@(_CodeCoverageAssemblies->'+%(Identity)', ';')"</CoverageReportAssemblyFilters>
103     <CoverageReportGeneratorOptions>-targetdir:$(CoverageReportDir) -reporttypes:Html;Badges $(CoverageReportAssemblyFilters)</CoverageReportGeneratorOptions>
104     <CoverageReportGeneratorCommandLine>$(PackagesDir)ReportGenerator\$(ReportGeneratorVersion)\tools\ReportGenerator.exe $(CoverageReportGeneratorOptions)</CoverageReportGeneratorCommandLine>
105   </PropertyGroup>
106
107   <PropertyGroup Condition="'$(GenerateIndividualCoverageReport)'=='true'">
108     <GenerateIndividualCoverageReportAfterTargets Condition="'$(GenerateIndividualCoverageReportAfterTargets)'==''">RunTestsForProject</GenerateIndividualCoverageReportAfterTargets>
109   </PropertyGroup>
110
111   <!-- Generate coverage reports for individual projects. -->
112   <Target Name="GenerateIndividualCoverageReport"
113           AfterTargets="$(GenerateIndividualCoverageReportAfterTargets)"
114           Inputs="$(CoverageOutputFilePath)"
115           Outputs="$(CoverageReportDir)index.htm"
116           Condition="'$(GenerateIndividualCoverageReport)'=='true'">
117
118     <Exec Command="$(CoverageReportGeneratorCommandLine) -reports:$(CoverageOutputFilePath)"
119           ContinueOnError="ErrorAndContinue" />
120
121     <Exec Command="start $(CoverageReportDir)index.htm"
122           Condition="'$(PopCoverageReport)' == 'true'" />
123
124   </Target>
125
126   <PropertyGroup Condition="'$(GenerateFullCoverageReport)'=='true'">
127     <GenerateFullCoverageReportAfterTargets Condition="'$(GenerateFullCoverageReportAfterTargets)'==''">TestAllProjects</GenerateFullCoverageReportAfterTargets>
128   </PropertyGroup>
129
130   <!-- Generate coverage report for all the projects. -->
131   <Target Name="GenerateFullCoverageReport"
132          AfterTargets="$(GenerateFullCoverageReportAfterTargets)"
133          Inputs="$(CoverageReportDir)\*.coverage.xml"
134          Outputs="$(CoverageReportDir)index.htm"
135          Condition="'$(GenerateFullCoverageReport)'=='true'">
136
137     <Exec Command="$(CoverageReportGeneratorCommandLine) -reports:$(CoverageReportDir)\*.coverage.xml"
138           ContinueOnError="ErrorAndContinue"
139           WorkingDirectory="$(ProjectDir)" />
140
141     <Exec Command="start $(CoverageReportDir)index.htm"
142           Condition="'$(PopCoverageReport)' == 'true'" />          
143
144     <PropertyGroup>
145       <CoverallsUploaderCommandLine>$(PackagesDir)coveralls.io.$(CoverallsUploaderVersion)\tools\coveralls.net.exe</CoverallsUploaderCommandLine>
146       <CoverallsUploaderOptions>--opencover $(CoverageReportDir)\*.coverage.xml --repo-token $(CoverallsToken)</CoverallsUploaderOptions>
147     </PropertyGroup>
148
149     <Exec Command="$(CoverallsUploaderCommandLine) $(CoverallsUploaderOptions)"
150           ContinueOnError="ErrorAndContinue"
151           WorkingDirectory="$(ProjectDir)"
152           Condition="'$(UploadCoverallsData)'=='true'" />
153
154   </Target>
155
156   <UsingTask TaskName="ParseTestCoverageInfo" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll"/>
157
158   <!-- Generates VisitedMethodsReport.xml -->
159   <Target Name="GenerateVisitedReport"
160           AfterTargets="Test"
161           Condition="'$(GenerateVisitedMethodsReport)' == 'true'"
162           Inputs="$(CoverageReportDir)*.coverage.xml"
163           Outputs="$(CoverageReportDir)\VisitedMethodsReport.xml">
164     <ItemGroup>
165       <Reports Include="$(CoverageReportDir)*.coverage.xml"/>
166     </ItemGroup>
167     <ParseTestCoverageInfo CoverageReports="@(Reports)"
168                            OutputReport="$(CoverageReportDir)\VisitedMethodsReport.xml"/>
169   </Target>
170   
171 </Project>