Skip to content

Commit 31bf7b2

Browse files
authored
Issue 5 (#7)
* added XSLT transform (from here: https://github.com/nunit/nunit-transforms ). Now tests are uploaded in Junit format. * Upgrade Nunit version. include info page viewd on TFS Extension page.
1 parent cb91f3c commit 31bf7b2

File tree

10 files changed

+109
-18
lines changed

10 files changed

+109
-18
lines changed

TFSExtension/BuildResultsEnhancer/src/enhancer/status.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ export class StatusSection extends Controls.BaseControl {
1414

1515
public initialize(): void {
1616
super.initialize();
17+
18+
1719

18-
1920
// Get configuration that's shared between extension and the extension host
2021
var sharedConfig: TFS_Build_Extension_Contracts.IBuildResultsViewExtensionConfig = VSS.getConfiguration();
2122

TFSExtension/RunNunitWithOpenCover/RunOpenCover.ps1

+7-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ param (
99
)
1010

1111
$ocToolPath = "dist\OpenCover.4.6.519\tools"
12-
$nuToolPath = "dist\NUnit.ConsoleRunner.3.2.1\tools"
12+
$nuToolPath = "dist\NUnit.ConsoleRunner.3.4.1\tools"
1313
$rgToolPath = "dist\ReportGenerator.2.4.5.0\tools"
1414
$restHelperPath = "dist\RestHelper"
1515

@@ -65,7 +65,7 @@ $nunitproject = $nunitproject + "
6565

6666
$cmd = ".\${ocToolPath}\OpenCover.Console.exe"
6767
$arg1 = "-target:"".\$nuToolPath\nunit3-console.exe"""
68-
$arg2 = "-targetargs:""$filelist --work=$outputPath"""
68+
$arg2 = "-targetargs:""$filelist --work=$outputPath --result=junit-results.xml;transform=.\dist\nunit3-junit.xslt"""
6969
$arg3 = "-filter:""$coverageFilter"""
7070
$arg4 = "-register:$registerOption"
7171
$arg5 = "-coverbytest:*"
@@ -85,9 +85,12 @@ if ($generateReport -eq "true") {
8585

8686
Publish-BuildArtifact "OpenCoverResult" $outputPath
8787

88-
$exampleResult = Resolve-Path ".\dist\ResultDummy.xml"
88+
#the result file (from XSLT in Nunit call) is not UTF8 encoded :-( -> we have to do this here in en extra step!
89+
Get-Content $outputPath\junit-results.xml | Set-Content -Encoding utf8 $outputPath\junit-results-utf8.xml
90+
91+
$testResult = Resolve-Path "$outputPath\junit-results-utf8.xml"
8992
$RunTitle = "OpenCover_TestRun_$env:BUILD_BUILDNUMBER"
90-
Publish-TestResults -TestRunner "NUnit" -TestResultsFiles $exampleResult -MergeResults $true -Context $distributedTaskContext -PublishRunLevelAttachments $true -RunTitle $RunTitle
93+
Publish-TestResults -TestRunner "JUnit" -TestResultsFiles $testResult -MergeResults $true -Context $distributedTaskContext -PublishRunLevelAttachments $true -RunTitle $RunTitle
9194

9295
$cmd = ".\${restHelperPath}\TFSRestTool.exe"
9396
$arg1 = "$env:SYSTEM_TEAMFOUNDATIONSERVERURI$env:SYSTEM_TEAMPROJECTID/"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
3+
<xsl:output method="xml" indent="yes"/>
4+
5+
<xsl:template match="/test-run">
6+
<testsuites tests="{@testcasecount}" failures="{@failed}" disabled="{@skipped}" time="{@duration}">
7+
<xsl:apply-templates/>
8+
</testsuites>
9+
</xsl:template>
10+
11+
<xsl:template match="test-suite">
12+
<xsl:if test="test-case">
13+
<testsuite tests="{@testcasecount}" time="{@duration}" errors="{@testcasecount - @passed - @skipped - @failed}" failures="{@failed}" skipped="{@skipped}" timestamp="{@start-time}">
14+
<xsl:attribute name="name">
15+
<xsl:for-each select="ancestor-or-self::test-suite/@name">
16+
<xsl:value-of select="concat(., '.')"/>
17+
</xsl:for-each>
18+
</xsl:attribute>
19+
<xsl:apply-templates select="test-case"/>
20+
</testsuite>
21+
<xsl:apply-templates select="test-suite"/>
22+
</xsl:if>
23+
<xsl:if test="not(test-case)">
24+
<xsl:apply-templates/>
25+
</xsl:if>
26+
</xsl:template>
27+
28+
<xsl:template match="test-case">
29+
<testcase name="{@name}" assertions="{@asserts}" time="{@duration}" status="{@result}" classname="{@classname}">
30+
<xsl:if test="@runstate = 'Skipped' or @runstate = 'Ignored'">
31+
<skipped/>
32+
</xsl:if>
33+
34+
<xsl:apply-templates/>
35+
</testcase>
36+
</xsl:template>
37+
38+
<xsl:template match="command-line"/>
39+
<xsl:template match="settings"/>
40+
41+
<xsl:template match="output">
42+
<system-out>
43+
<xsl:value-of select="output"/>
44+
</system-out>
45+
</xsl:template>
46+
47+
<xsl:template match="stack-trace">
48+
</xsl:template>
49+
50+
<xsl:template match="test-case/failure">
51+
<failure message="{./message}">
52+
<xsl:value-of select="./stack-trace"/>
53+
</failure>
54+
</xsl:template>
55+
56+
<xsl:template match="test-suite/failure"/>
57+
58+
<xsl:template match="test-case/reason">
59+
<skipped message="{./message}"/>
60+
</xsl:template>
61+
62+
<xsl:template match="test-suite/reason"/>
63+
64+
<xsl:template match="properties"/>
65+
</xsl:stylesheet>
66+

TFSExtension/RunNunitWithOpenCover/task.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"version": {
1414
"Major": 0,
1515
"Minor": 0,
16-
"Patch": 3
16+
"Patch": 4
1717
},
1818
"demands": [
1919
"Cmd"

TFSExtension/TFSExtension.sln

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio 14
4-
VisualStudioVersion = 14.0.25123.0
4+
VisualStudioVersion = 14.0.25420.1
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TFSRestTool", "TFSRestTool\TFSRestTool.csproj", "{783DCCBC-8A8B-4A47-9CB6-6317DC1676CD}"
77
EndProject
88
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{6AB4E37D-4913-4E35-975F-847E29340BC4}"
99
ProjectSection(SolutionItems) = preProject
1010
build.bat = build.bat
1111
clean.bat = clean.bat
12+
details.md = details.md
1213
extension-icon128.png = extension-icon128.png
1314
..\README.md = ..\README.md
1415
vss-extension.json = vss-extension.json
@@ -18,6 +19,7 @@ EndProject
1819
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RunNunitWithOpenCover", "RunNunitWithOpenCover", "{1BC2C287-01A6-41D4-88D9-8D9049047ADC}"
1920
ProjectSection(SolutionItems) = preProject
2021
RunNunitWithOpenCover\icon.png = RunNunitWithOpenCover\icon.png
22+
RunNunitWithOpenCover\nunit3-junit.xslt = RunNunitWithOpenCover\nunit3-junit.xslt
2123
RunNunitWithOpenCover\ResultDummy.xml = RunNunitWithOpenCover\ResultDummy.xml
2224
RunNunitWithOpenCover\RunOpenCover.ps1 = RunNunitWithOpenCover\RunOpenCover.ps1
2325
RunNunitWithOpenCover\task.json = RunNunitWithOpenCover\task.json

TFSExtension/TFSRestTool/packages.config

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3-
<package id="NUnit.ConsoleRunner" version="3.2.1" targetFramework="net461" />
4-
<package id="NUnit.Extension.NUnitProjectLoader" version="3.2.1" targetFramework="net461" />
5-
<package id="NUnit.Extension.NUnitV2Driver" version="3.2.1" targetFramework="net461" />
6-
<package id="NUnit.Extension.NUnitV2ResultWriter" version="3.2.1" targetFramework="net461" />
7-
<package id="NUnit.Extension.VSProjectLoader" version="3.2.1" targetFramework="net461" />
8-
<package id="NUnit.Runners" version="3.2.1" targetFramework="net461" />
3+
<package id="NUnit.ConsoleRunner" version="3.4.1" targetFramework="net461" />
4+
<package id="NUnit.Extension.NUnitProjectLoader" version="3.4.1" targetFramework="net461" />
5+
<package id="NUnit.Extension.NUnitV2Driver" version="3.4.1" targetFramework="net461" />
6+
<package id="NUnit.Extension.NUnitV2ResultWriter" version="3.4.1" targetFramework="net461" />
7+
<package id="NUnit.Extension.TeamCityEventListener" version="1.0.1" targetFramework="net461" />
8+
<package id="NUnit.Extension.VSProjectLoader" version="3.4.1" targetFramework="net461" />
9+
<package id="NUnit.Runners" version="3.4.1" targetFramework="net461" />
910
<package id="OpenCover" version="4.6.519" targetFramework="net461" />
1011
<package id="ReportGenerator" version="2.4.5.0" targetFramework="net461" />
1112
<package id="RestSharp" version="105.2.3" targetFramework="net461" />

TFSExtension/build.bat

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ call tsc
1313
if %errorlevel% neq 0 exit /b %errorlevel%
1414
cd ..
1515
echo Building RunOpenCoverTask
16-
xcopy /S /I .\packages\NUnit.ConsoleRunner.3.2.1 .\RunNunitWithOpenCover\dist\NUnit.ConsoleRunner.3.2.1
17-
xcopy /S /I .\packages\NUnit.Extension.NUnitProjectLoader.3.2.1 .\RunNunitWithOpenCover\dist\NUnit.Extension.NUnitProjectLoader.3.2.1
16+
xcopy /S /I .\packages\NUnit.ConsoleRunner.3.4.1 .\RunNunitWithOpenCover\dist\NUnit.ConsoleRunner.3.4.1
17+
xcopy /S /I .\packages\NUnit.Extension.NUnitProjectLoader.3.4.1 .\RunNunitWithOpenCover\dist\NUnit.Extension.NUnitProjectLoader.3.4.1
1818
xcopy /S /I .\packages\OpenCover.4.6.519\tools .\RunNunitWithOpenCover\dist\OpenCover.4.6.519\tools
1919
xcopy /S /I /Exclude:xcopy1.excl .\packages\ReportGenerator.2.4.5.0 .\RunNunitWithOpenCover\dist\ReportGenerator.2.4.5.0
20-
xcopy .\RunNunitWithOpenCover\ResultDummy.xml .\RunNunitWithOpenCover\dist\
20+
xcopy .\RunNunitWithOpenCover\nunit3-junit.xslt .\RunNunitWithOpenCover\dist\
2121
xcopy /S /I .\TFSRestTool\bin\Debug .\RunNunitWithOpenCover\dist\RestHelper
2222

2323
tfx extension create --manifest-globs vss-extension.json --output-path ./bin

TFSExtension/details.md

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
This extension includes build step to run Nunit3 with OpenCover and displays result on build page.
2+
3+
The Custom build step is bundeled with the public available nuget packages of
4+
NUnit 3.4.1 https://github.com/nunit/nunit.org and https://github.com/nunit/nunit-transforms
5+
OpenCover 4.6.519 https://github.com/OpenCover/opencover
6+
ReportGenerator 2.4.5.0 https://github.com/danielpalme/ReportGenerator
7+
8+
For Licence Info see the included directories or the corresponding web pages.

TFSExtension/vss-extension.json

+11-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"manifestVersion": 1,
33
"id": "coverage-build-tasks",
44
"name": "RKOS Build Tools",
5-
"version": "0.0.3",
5+
"version": "0.0.4",
66
"publisher": "RKOS",
77
"targets": [
88
{
@@ -17,6 +17,16 @@
1717
"icons": {
1818
"default": "extension-icon128.png"
1919
},
20+
"links": {
21+
"learn": {
22+
"uri": "https://github.com/RobertK66/vsts-opencover"
23+
}
24+
},
25+
"content": {
26+
"details": {
27+
"path": "details.md"
28+
}
29+
},
2030
"files": [
2131
{
2232
"path": "RunNunitWithOpenCover/dist"

docs/build.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ The toolchain for building this Extensions consists of <br>
1313
* e. [Team Foundation command line interface](https://github.com/Microsoft/tfs-cli)(`npm install -g tfx-cli`)
1414

1515
* The versions used for building 0.0.3 are:
16-
* Vs2015-Update2 (including TypeScript tools for Visual Studio 1.8.29.0)
16+
* Vs2015-Update3 (including TypeScript tools for Visual Studio 1.8.34.0)
1717
* node v4.4.4
1818
* npm 3.9.0
1919
* bower 1.7.9

0 commit comments

Comments
 (0)