Welcome to mirror list, hosted at ThFree Co, Russian Federation.

CodeCoverage.targets « Tools-Override - github.com/mono/corefx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 3b1e952ac5d34c49c1fbaadf7aa4c184715c6db7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <!--
    Code coverage package versions go here and in the test-runtime-packages.config
  -->
  <PropertyGroup>
    <OpenCoverVersion>4.6.519</OpenCoverVersion>
    <ReportGeneratorVersion>2.5.0</ReportGeneratorVersion>
    <CoverallsUploaderVersion>1.4</CoverallsUploaderVersion>
  </PropertyGroup>
  
  <!-- Coverage options -->
  <PropertyGroup>
    <CodeCoverageEnabled>false</CodeCoverageEnabled>
    <CodeCoverageEnabled Condition="'$(SkipTests)' != 'true' and '$(RunningOnUnix)' != 'true' and '$(Coverage)' == 'true' and '$(Performance)' != 'true'">true</CodeCoverageEnabled>
    <CoverageReportDir Condition="'$(CoverageReportDir)' == ''">$(TestWorkingDir)coverage\</CoverageReportDir>

    <!-- This targets file has two modes one for individual projects and one for all -->
    <GenerateCodeCoverageReportForAll Condition="'$(GenerateCodeCoverageReportForAll)'==''">false</GenerateCodeCoverageReportForAll>
    <CoverageEnabledForProject Condition="'$(GenerateCodeCoverageReportForAll)'=='true'">false</CoverageEnabledForProject>
    <CoverageEnabledForProject Condition="'$(CoverageEnabledForProject)'=='' and '$(IsTestProject)'=='true'">$(CodeCoverageEnabled)</CoverageEnabledForProject>

    <GenerateIndividualCoverageReport Condition="'$(BuildAllProjects)'!='true' and '$(CoverageEnabledForProject)'=='true'">true</GenerateIndividualCoverageReport>
    <GenerateFullCoverageReport Condition="'$(GenerateCodeCoverageReportForAll)'=='true' and '$(CodeCoverageEnabled)'=='true' and '$(SkipFullCoverageReport)' != 'true'">true</GenerateFullCoverageReport>
    <GenerateVisitedMethodsReport Condition="'$(GenerateCodeCoverageReportForAll)'=='true' and '$(CodeCoverageEnabled)'=='true' and '$(GenerateVisitedReport)' == 'true'">true</GenerateVisitedMethodsReport>

    <!-- We need to filter the data to only the assembly being tested. Otherwise we will gather tons of data about other assemblies. -->
    <_ProjectDirectoryUnderSourceDir Condition="'$(IsTestProject)' == 'true'">$(MSBuildProjectDirectory.SubString($(SourceDir.Length)))</_ProjectDirectoryUnderSourceDir>
    <AssemblyBeingTestedName Condition="'$(IsTestProject)' == 'true'">$(_ProjectDirectoryUnderSourceDir.SubString(0, $(_ProjectDirectoryUnderSourceDir.IndexOfAny("\\/"))))</AssemblyBeingTestedName>

    <!-- 
      When coverage is enabled, we disallow building projects in parallel. 
      There appear to be issues with the OpenCover tool in these scenarios. 
    -->
    <SerializeProjects Condition="'$(CodeCoverageEnabled)'=='true'">true</SerializeProjects>
  </PropertyGroup>

  <Target Name="CreateCoverageFilter" BeforeTargets="GenerateTestExecutionScripts">
    <!-- By default, code coverage data is only gathered for the assembly being tested. 
         CodeCoverageAssemblies can be passed in to the build to gather coverage on additional assemblies. -->
    <ItemGroup>
      <_CodeCoverageAssemblies Include="$(AssemblyBeingTestedName)" /> 
      <_CodeCoverageAssemblies Include="@(AdditionalCodeCoverageAssemblies)" />
      <_CodeCoverageAssemblies Include="$(CodeCoverageAssemblies)" Condition="'$(CodeCoverageAssemblies)' != ''" />
    </ItemGroup>
    <PropertyGroup>
      <CoverageFilter>@(_CodeCoverageAssemblies->'+[%(Identity)]*', ' ')</CoverageFilter>
      <CoverageFilter Condition="'$(CodeCoverageAssemblies)' == 'all'">[*]*</CoverageFilter>
    </PropertyGroup>
  </Target>

  <!-- xUnit command line with coverage enabled -->
  <PropertyGroup Condition="'$(CoverageEnabledForProject)'=='true'">
    <CoverageHost>$(PackagesDir)OpenCover\$(OpenCoverVersion)\tools\OpenCover.Console.exe</CoverageHost>
    <CoverageOutputFilePath>$(CoverageReportDir)$(MSBuildProjectName).coverage.xml</CoverageOutputFilePath>
    <CoverageOptions>-oldStyle -filter:"{CoverageFilter}" -excludebyfile:"*\Common\src\System\SR.*" -nodefaultfilters -excludebyattribute:*.ExcludeFromCodeCoverage* -skipautoprops -hideskipped:All -threshold:1</CoverageOptions>
    <CoverageCommandLine>$(CoverageOptions) -returntargetcode -register:user -target:$(TestProgram) -output:$(CoverageOutputFilePath)</CoverageCommandLine>
    <TestHost>$(CoverageHost)</TestHost>
    <XunitOptions>$(XunitOptions) -parallel none</XunitOptions>
    <TestCommandLine>$(TestHost) $(CoverageCommandLine) -targetargs:"$(TestArguments) {XunitTraitOptions}"</TestCommandLine>
  </PropertyGroup>

  <!-- Report Generator Properties -->
  <PropertyGroup>
    <CoverageReportAssemblyFilters Condition="'$(CodeCoverageAssemblies)' != 'all'">"-assemblyfilters:@(_CodeCoverageAssemblies->'+%(Identity)', ';')"</CoverageReportAssemblyFilters>
    <CoverageReportGeneratorOptions>-targetdir:$(CoverageReportDir) -reporttypes:Html;Badges $(CoverageReportAssemblyFilters)</CoverageReportGeneratorOptions>
    <CoverageReportGeneratorCommandLine>$(PackagesDir)ReportGenerator\$(ReportGeneratorVersion)\tools\ReportGenerator.exe $(CoverageReportGeneratorOptions)</CoverageReportGeneratorCommandLine>
  </PropertyGroup>

  <PropertyGroup Condition="'$(GenerateIndividualCoverageReport)'=='true'">
    <GenerateIndividualCoverageReportAfterTargets Condition="'$(GenerateIndividualCoverageReportAfterTargets)'==''">RunTestsForProject</GenerateIndividualCoverageReportAfterTargets>
  </PropertyGroup>

  <!-- Generate coverage reports for individual projects. -->
  <Target Name="GenerateIndividualCoverageReport"
          AfterTargets="$(GenerateIndividualCoverageReportAfterTargets)"
          Inputs="$(CoverageOutputFilePath)"
          Outputs="$(CoverageReportDir)index.htm"
          Condition="'$(GenerateIndividualCoverageReport)'=='true'">

    <Exec Command="$(CoverageReportGeneratorCommandLine) -reports:$(CoverageOutputFilePath)"
          ContinueOnError="ErrorAndContinue" />

    <Exec Command="start $(CoverageReportDir)index.htm"
          Condition="'$(PopCoverageReport)' == 'true'" />

  </Target>

  <PropertyGroup Condition="'$(GenerateFullCoverageReport)'=='true'">
    <GenerateFullCoverageReportAfterTargets Condition="'$(GenerateFullCoverageReportAfterTargets)'==''">TestAllProjects</GenerateFullCoverageReportAfterTargets>
  </PropertyGroup>

  <!-- Generate coverage report for all the projects. -->
  <Target Name="GenerateFullCoverageReport"
         AfterTargets="$(GenerateFullCoverageReportAfterTargets)"
         Inputs="$(CoverageReportDir)\*.coverage.xml"
         Outputs="$(CoverageReportDir)index.htm"
         Condition="'$(GenerateFullCoverageReport)'=='true'">

    <Exec Command="$(CoverageReportGeneratorCommandLine) -reports:$(CoverageReportDir)\*.coverage.xml"
          ContinueOnError="ErrorAndContinue"
          WorkingDirectory="$(ProjectDir)" />

    <Exec Command="start $(CoverageReportDir)index.htm"
          Condition="'$(PopCoverageReport)' == 'true'" />          

    <PropertyGroup>
      <CoverallsUploaderCommandLine>$(PackagesDir)coveralls.io.$(CoverallsUploaderVersion)\tools\coveralls.net.exe</CoverallsUploaderCommandLine>
      <CoverallsUploaderOptions>--opencover $(CoverageReportDir)\*.coverage.xml --repo-token $(CoverallsToken)</CoverallsUploaderOptions>
    </PropertyGroup>

    <Exec Command="$(CoverallsUploaderCommandLine) $(CoverallsUploaderOptions)"
          ContinueOnError="ErrorAndContinue"
          WorkingDirectory="$(ProjectDir)"
          Condition="'$(UploadCoverallsData)'=='true'" />

  </Target>

  <UsingTask TaskName="ParseTestCoverageInfo" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll"/>

  <!-- Generates VisitedMethodsReport.xml -->
  <Target Name="GenerateVisitedReport"
          AfterTargets="Test"
          Condition="'$(GenerateVisitedMethodsReport)' == 'true'"
          Inputs="$(CoverageReportDir)*.coverage.xml"
          Outputs="$(CoverageReportDir)\VisitedMethodsReport.xml">
    <ItemGroup>
      <Reports Include="$(CoverageReportDir)*.coverage.xml"/>
    </ItemGroup>
    <ParseTestCoverageInfo CoverageReports="@(Reports)"
                           OutputReport="$(CoverageReportDir)\VisitedMethodsReport.xml"/>
  </Target>
  
</Project>