Skip to content

Commit 2027d31

Browse files
committed
Merge pull request #1720 from Microsoft/users/praga/vstestfixm100
Fixing support for testsettings file
2 parents ba4fb4d + fc3eb20 commit 2027d31

6 files changed

+133
-89
lines changed

Tasks/VsTest/Helpers.ps1

Lines changed: 91 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,99 +1,107 @@
11
function CmdletHasMember {
2-
[cmdletbinding()]
3-
[OutputType([System.Boolean])]
4-
param(
5-
[string]$memberName
6-
)
7-
8-
$publishParameters = (gcm Publish-TestResults).Parameters.Keys.Contains($memberName)
9-
return $publishParameters
2+
[cmdletbinding()]
3+
[OutputType([System.Boolean])]
4+
param(
5+
[string]$memberName
6+
)
7+
8+
$publishParameters = (gcm Publish-TestResults).Parameters.Keys.Contains($memberName)
9+
return $publishParameters
1010
}
1111

1212
function SetRegistryKeyForParallel {
13-
[cmdletbinding()]
14-
param(
15-
[string]$vsTestVersion
16-
)
17-
18-
$regkey = "HKCU\SOFTWARE\Microsoft\VisualStudio\" + $vsTestVersion + "_Config\FeatureFlags\TestingTools\UnitTesting\Taef"
19-
reg add $regkey /v Value /t REG_DWORD /d 1 /f /reg:32 > $null
13+
[cmdletbinding()]
14+
param(
15+
[string]$vsTestVersion
16+
)
17+
18+
$regkey = "HKCU\SOFTWARE\Microsoft\VisualStudio\" + $vsTestVersion + "_Config\FeatureFlags\TestingTools\UnitTesting\Taef"
19+
reg add $regkey /v Value /t REG_DWORD /d 1 /f /reg:32 > $null
2020
}
2121

2222
function IsVisualStudio2015Update1OrHigherInstalled {
23-
[cmdletbinding()]
24-
[OutputType([System.Boolean])]
25-
param(
26-
[string]$vsTestVersion
27-
)
28-
29-
if ([string]::IsNullOrWhiteSpace($vsTestVersion)){
30-
$vsTestVersion = Locate-VSVersion
31-
}
32-
33-
$version = [int]($vsTestVersion)
34-
if($version -ge 14)
35-
{
36-
# checking for dll introduced in vs2015 update1
37-
# since path of the dll will change in dev15+ using vstestversion>14 as a blanket yes
38-
if((Test-Path -Path "$env:VS140COMNTools\..\IDE\CommonExtensions\Microsoft\TestWindow\TE.TestModes.dll") -Or ($version -gt 14))
39-
{
40-
# ensure the registry is set otherwise you need to launch VSIDE
41-
SetRegistryKeyForParallel $vsTestVersion
42-
43-
return $true
44-
}
45-
}
46-
47-
return $false
23+
[cmdletbinding()]
24+
[OutputType([System.Boolean])]
25+
param(
26+
[string]$vsTestVersion
27+
)
28+
29+
if ([string]::IsNullOrWhiteSpace($vsTestVersion)){
30+
$vsTestVersion = Locate-VSVersion
31+
}
32+
33+
$version = [int]($vsTestVersion)
34+
if($version -ge 14)
35+
{
36+
# checking for dll introduced in vs2015 update1
37+
# since path of the dll will change in dev15+ using vstestversion>14 as a blanket yes
38+
if((Test-Path -Path "$env:VS140COMNTools\..\IDE\CommonExtensions\Microsoft\TestWindow\TE.TestModes.dll") -Or ($version -gt 14))
39+
{
40+
# ensure the registry is set otherwise you need to launch VSIDE
41+
SetRegistryKeyForParallel $vsTestVersion
42+
43+
return $true
44+
}
45+
}
46+
47+
return $false
4848
}
4949

5050
function SetupRunSettingsFileForParallel {
51-
[cmdletbinding()]
52-
[OutputType([System.String])]
53-
param(
54-
[string]$runInParallelFlag,
55-
[string]$runSettingsFilePath,
56-
[string]$defaultCpuCount
57-
)
51+
[cmdletbinding()]
52+
[OutputType([System.String])]
53+
param(
54+
[string]$runInParallelFlag,
55+
[string]$runSettingsFilePath,
56+
[string]$defaultCpuCount
57+
)
5858

59-
if($runInParallelFlag -eq "True")
60-
{
61-
$runSettingsForParallel = [xml]'<?xml version="1.0" encoding="utf-8"?>'
62-
if([System.String]::IsNullOrWhiteSpace($runSettingsFilePath) -Or ([string]::Compare([io.path]::GetExtension($runSettingsFilePath), ".runsettings", $True) -ne 0) -Or (Test-Path $runSettingsFilePath -pathtype container)) # no file provided so create one and use it for the run
63-
{
64-
Write-Verbose "No runsettings file provided"
65-
$runSettingsForParallel = [xml]'<?xml version="1.0" encoding="utf-8"?>
66-
<RunSettings>
67-
<RunConfiguration>
68-
<MaxCpuCount>0</MaxCpuCount>
69-
</RunConfiguration>
70-
</RunSettings>
71-
'
72-
}
73-
else
74-
{
75-
Write-Verbose "Adding maxcpucount element to runsettings file provided"
76-
$runSettingsForParallel = [System.Xml.XmlDocument](Get-Content $runSettingsFilePath)
77-
$runConfigurationElement = $runSettingsForParallel.SelectNodes("//RunSettings/RunConfiguration")
78-
if($runConfigurationElement.Count -eq 0)
79-
{
80-
$runConfigurationElement = $runSettingsForParallel.RunSettings.AppendChild($runSettingsForParallel.CreateElement("RunConfiguration"))
81-
}
59+
if($runInParallelFlag -eq "True")
60+
{
61+
if([string]::Compare([io.path]::GetExtension($runSettingsFilePath), ".testsettings", $True) -eq 0)
62+
{
63+
Write-Warning "Run in Parallel is not supported with testsettings file."
64+
}
65+
else
66+
{
67+
$runSettingsForParallel = [xml]'<?xml version="1.0" encoding="utf-8"?>'
68+
if([System.String]::IsNullOrWhiteSpace($runSettingsFilePath) -Or ([string]::Compare([io.path]::GetExtension($runSettingsFilePath), ".runsettings", $True) -ne 0) -Or (Test-Path $runSettingsFilePath -pathtype container)) # no file provided so create one and use it for the run
69+
{
70+
Write-Verbose "No runsettings file provided"
71+
$runSettingsForParallel = [xml]'<?xml version="1.0" encoding="utf-8"?>
72+
<RunSettings>
73+
<RunConfiguration>
74+
<MaxCpuCount>0</MaxCpuCount>
75+
</RunConfiguration>
76+
</RunSettings>
77+
'
78+
}
79+
else
80+
{
81+
Write-Verbose "Adding maxcpucount element to runsettings file provided"
82+
$runSettingsForParallel = [System.Xml.XmlDocument](Get-Content $runSettingsFilePath)
83+
$runConfigurationElement = $runSettingsForParallel.SelectNodes("//RunSettings/RunConfiguration")
84+
if($runConfigurationElement.Count -eq 0)
85+
{
86+
$runConfigurationElement = $runSettingsForParallel.RunSettings.AppendChild($runSettingsForParallel.CreateElement("RunConfiguration"))
87+
}
8288

83-
$maxCpuCountElement = $runSettingsForParallel.SelectNodes("//RunSettings/RunConfiguration/MaxCpuCount")
84-
if($maxCpuCountElement.Count -eq 0)
85-
{
86-
$newMaxCpuCountElement = $runConfigurationElement.AppendChild($runSettingsForParallel.CreateElement("MaxCpuCount"))
87-
}
88-
}
89+
$maxCpuCountElement = $runSettingsForParallel.SelectNodes("//RunSettings/RunConfiguration/MaxCpuCount")
90+
if($maxCpuCountElement.Count -eq 0)
91+
{
92+
$newMaxCpuCountElement = $runConfigurationElement.AppendChild($runSettingsForParallel.CreateElement("MaxCpuCount"))
93+
}
94+
}
8995

90-
$runSettingsForParallel.RunSettings.RunConfiguration.MaxCpuCount = $defaultCpuCount
91-
$tempFile = [io.path]::GetTempFileName()
92-
$runSettingsForParallel.Save($tempFile)
93-
Write-Verbose "Temporary runsettings file created at $tempFile"
94-
return $tempFile
95-
}
96-
return $runSettingsFilePath
96+
$runSettingsForParallel.RunSettings.RunConfiguration.MaxCpuCount = $defaultCpuCount
97+
$tempFile = [io.path]::GetTempFileName()
98+
$runSettingsForParallel.Save($tempFile)
99+
Write-Verbose "Temporary runsettings file created at $tempFile"
100+
return $tempFile
101+
}
102+
}
103+
104+
return $runSettingsFilePath
97105
}
98106

99107
function Get-SubKeysInFloatFormat($keys)

Tasks/VsTest/task.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"version": {
1414
"Major": 1,
1515
"Minor": 0,
16-
"Patch": 36
16+
"Patch": 37
1717
},
1818
"demands": [
1919
"vstest"

Tasks/VsTest/task.loc.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"version": {
1414
"Major": 1,
1515
"Minor": 0,
16-
"Patch": 36
16+
"Patch": 37
1717
},
1818
"demands": [
1919
"vstest"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Register-Mock Get-TaskVariable
99
. $PSScriptRoot\..\..\..\Tasks\VsTest\Helpers.ps1
1010

1111
$cpuCount="1"
12-
$temptestsettingsfile = [io.path]::ChangeExtension([io.path]::GetTempFileName(),"testsettings")
12+
$temptestsettingsfile = [io.path]::ChangeExtension([io.path]::GetTempFileName(),"xml")
1313
$testsettings = @('<?xml version="1.0" encoding="utf-8"?>
1414
<TestSettings name="Empty Test Settings">
1515
<Description>Empty testsettings</Description>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
[cmdletbinding()]
2+
param()
3+
4+
# Arrange.
5+
. $PSScriptRoot\..\..\lib\Initialize-Test.ps1
6+
Register-Mock Get-LocalizedString { $OFS = " " ; "$args" }
7+
Register-Mock Get-TaskVariable
8+
9+
. $PSScriptRoot\..\..\..\Tasks\VsTest\Helpers.ps1
10+
11+
$cpuCount="1"
12+
$temptestsettingsfile = [io.path]::ChangeExtension([io.path]::GetTempFileName(),"testsettings")
13+
$testsettings = @('<?xml version="1.0" encoding="utf-8"?>
14+
<TestSettings name="Empty Test Settings">
15+
<Description>Empty testsettings</Description>
16+
</TestSettings>
17+
')
18+
Set-Content -Value $testsettings -Path $temptestsettingsfile
19+
20+
$returnedFilePath = SetupRunSettingsFileForParallel "true" $temptestsettingsfile $cpuCount
21+
22+
$fileExists = Test-Path $returnedFilePath
23+
Assert-AreEqual $true $fileExists
24+
25+
Assert-AreEqual $temptestsettingsfile $returnedFilePath
26+
27+
#cleanup
28+
if($fileExists){
29+
Remove-Item $returnedFilePath
30+
}
31+
if(Test-Path $temptestsettingsfile){
32+
Remove-Item $temptestsettingsfile
33+
}

Tests/L0/VsTest/_suite.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,17 @@ describe('VsTest Suite', function () {
6767
it('(RunSettingsForParallel.ReturnsNewFileIfParallelIsTrueAndFileNameIsADirectory) returns new file if parallel flag is true and runsettings input is a directory', (done) => {
6868
psr.run(path.join(__dirname, 'RunSettingsForParallel.ReturnsNewFileIfParallelIsTrueAndFileNameIsADirectory.ps1'), done);
6969
})
70-
it('(RunSettingsForParallel.ReturnsNewFileIfParallelIsTrueAndFileNameIsANonRunsettingsFile) returns new file if parallel flag is true and runsettings input is not a runsettings file', (done) => {
71-
psr.run(path.join(__dirname, 'RunSettingsForParallel.ReturnsNewFileIfParallelIsTrueAndFileNameIsANonRunsettingsFile.ps1'), done);
70+
it('(RunSettingsForParallel.ReturnsNewFileIfParallelIsTrueAndFileNameIsANonRunsettingsNonTestSettingsFile) returns new file if parallel flag is true and runsettings input is not a runsettings or testsettings file', (done) => {
71+
psr.run(path.join(__dirname, 'RunSettingsForParallel.ReturnsNewFileIfParallelIsTrueAndFileNameIsANonRunsettingsNonTestSettingsFile.ps1'), done);
7272
})
7373
it('ValidateTestAssembliesAreSplit) tests if the input test assembiles are properly passed to cmdlet', (done) => {
7474
psr.run(path.join(__dirname, 'ValidateTestAssembliesAreSplit.ps1'), done);
7575
})
76-
it('ValidateTestAssembliesAreSplit) tests if the input test assembiles are properly passed to cmdlet', (done) => {
76+
it('ValidateTestAssembliesAreSplit) tests if the input test assembiles are properly passed to cmdlet', (done) => {
7777
psr.run(path.join(__dirname, 'ValidateTestAssembliesAreNotSplit.ps1'), done);
78+
})
79+
it('(RunSettingsForParallel.ReturnsSameFileIfParallelIsTrueAndFileNameIsTestSettingsFile) returns same file if parallel flag is true and runsettings input is a testsettings file', (done) => {
80+
psr.run(path.join(__dirname, 'RunSettingsForParallel.ReturnsSameFileIfParallelIsTrueAndFileNameIsTestSettingsFile.ps1'), done);
7881
})
7982
}
8083
});

0 commit comments

Comments
 (0)