@@ -36,19 +36,21 @@ Param (
3636 $SkipTest ,
3737
3838 [string []]
39- $CommandPath = @ (" $PSScriptRoot \..\..\ functions" , " $PSScriptRoot \.. \..\internal\functions" ),
39+ $CommandPath = @ (" $global :testroot \..\functions" , " $global :testroot \..\internal\functions" ),
4040
4141 [string ]
4242 $ModuleName = " PSUtil" ,
4343
4444 [string ]
45- $ExceptionsFile = " $PSScriptRoot \Help.Exceptions.ps1"
45+ $ExceptionsFile = " $global :testroot \general \Help.Exceptions.ps1"
4646)
4747if ($SkipTest ) { return }
4848. $ExceptionsFile
4949
5050$includedNames = (Get-ChildItem $CommandPath - Recurse - File | Where-Object Name -like " *.ps1" ).BaseName
51- $commands = Get-Command - Module (Get-Module $ModuleName ) - CommandType Cmdlet, Function, Workflow | Where-Object Name -in $includedNames
51+ $commandTypes = @ (' Cmdlet' , ' Function' )
52+ if ($PSVersionTable.PSEdition -eq ' Desktop' ) { $commandTypes += ' Workflow' }
53+ $commands = Get-Command - Module (Get-Module $ModuleName ) - CommandType $commandTypes | Where-Object Name -In $includedNames
5254
5355# # When testing help, remember that help is cached at the beginning of each session.
5456# # To test, restart session.
@@ -62,138 +64,83 @@ foreach ($command in $commands) {
6264
6365 # The module-qualified command fails on Microsoft.PowerShell.Archive cmdlets
6466 $Help = Get-Help $commandName - ErrorAction SilentlyContinue
65- $testhelperrors = 0
66- $testhelpall = 0
67- Describe " Test help for $commandName " {
68-
69- $testhelpall += 1
70- if ($Help.Synopsis -like ' *`[`<CommonParameters`>`]*' ) {
71- # If help is not found, synopsis in auto-generated help is the syntax diagram
72- It " should not be auto-generated" {
73- $Help.Synopsis | Should -Not - BeLike ' *`[`<CommonParameters`>`]*'
74- }
75- $testhelperrors += 1
76- }
77-
78- $testhelpall += 1
79- if ([String ]::IsNullOrEmpty($Help.Description.Text )) {
80- # Should be a description for every function
81- It " gets description for $commandName " {
82- $Help.Description | Should -Not - BeNullOrEmpty
83- }
84- $testhelperrors += 1
85- }
67+
68+ Describe " Test help for $commandName " {
8669
87- $testhelpall += 1
88- if ([String ]::IsNullOrEmpty(($Help.Examples.Example | Select-Object - First 1 ).Code)) {
89- # Should be at least one example
90- It " gets example code from $commandName " {
91- ($Help.Examples.Example | Select-Object - First 1 ).Code | Should -Not - BeNullOrEmpty
92- }
93- $testhelperrors += 1
94- }
70+ # If help is not found, synopsis in auto-generated help is the syntax diagram
71+ It " should not be auto-generated" - TestCases @ { Help = $Help } {
72+ $Help.Synopsis | Should -Not - BeLike ' *`[`<CommonParameters`>`]*'
73+ }
9574
96- $testhelpall += 1
97- if ([String ]::IsNullOrEmpty(($Help.Examples.Example.Remarks | Select-Object - First 1 ).Text)) {
98- # Should be at least one example description
99- It " gets example help from $commandName " {
100- ($Help.Examples.Example.Remarks | Select-Object - First 1 ).Text | Should -Not - BeNullOrEmpty
101- }
102- $testhelperrors += 1
103- }
75+ # Should be a description for every function
76+ It " gets description for $commandName " - TestCases @ { Help = $Help } {
77+ $Help.Description | Should -Not - BeNullOrEmpty
78+ }
10479
105- if ($testhelperrors -eq 0 ) {
106- It " Ran silently $testhelpall tests" {
107- $testhelperrors | Should - be 0
108- }
109- }
80+ # Should be at least one example
81+ It " gets example code from $commandName " - TestCases @ { Help = $Help } {
82+ ($Help.Examples.Example | Select-Object - First 1 ).Code | Should -Not - BeNullOrEmpty
83+ }
84+
85+ # Should be at least one example description
86+ It " gets example help from $commandName " - TestCases @ { Help = $Help } {
87+ ($Help.Examples.Example.Remarks | Select-Object - First 1 ).Text | Should -Not - BeNullOrEmpty
88+ }
11089
111- $testparamsall = 0
112- $testparamserrors = 0
11390 Context " Test parameter help for $commandName " {
11491
115- $Common = ' Debug' , ' ErrorAction' , ' ErrorVariable' , ' InformationAction' , ' InformationVariable' , ' OutBuffer' , ' OutVariable' ,
116- ' PipelineVariable' , ' Verbose' , ' WarningAction' , ' WarningVariable'
92+ $common = ' Debug' , ' ErrorAction' , ' ErrorVariable' , ' InformationAction' , ' InformationVariable' , ' OutBuffer' , ' OutVariable' , ' PipelineVariable' , ' Verbose' , ' WarningAction' , ' WarningVariable'
11793
11894 $parameters = $command.ParameterSets.Parameters | Sort-Object - Property Name - Unique | Where-Object Name -notin $common
11995 $parameterNames = $parameters.Name
12096 $HelpParameterNames = $Help.Parameters.Parameter.Name | Sort-Object - Unique
12197 foreach ($parameter in $parameters ) {
12298 $parameterName = $parameter.Name
12399 $parameterHelp = $Help.parameters.parameter | Where-Object Name -EQ $parameterName
100+
101+ # Should be a description for every parameter
102+ It " gets help for parameter: $parameterName : in $commandName " - TestCases @ { parameterHelp = $parameterHelp } {
103+ $parameterHelp.Description.Text | Should -Not - BeNullOrEmpty
104+ }
124105
125- $testparamsall += 1
126- if ([String ]::IsNullOrEmpty($parameterHelp.Description.Text )) {
127- # Should be a description for every parameter
128- It " gets help for parameter: $parameterName : in $commandName " {
129- $parameterHelp.Description.Text | Should -Not - BeNullOrEmpty
130- }
131- $testparamserrors += 1
132- }
133-
134- $testparamsall += 1
135106 $codeMandatory = $parameter.IsMandatory.toString ()
136- if ($parameterHelp.Required -ne $codeMandatory ) {
137- # Required value in Help should match IsMandatory property of parameter
138- It " help for $parameterName parameter in $commandName has correct Mandatory value" {
139- $parameterHelp.Required | Should - Be $codeMandatory
140- }
141- $testparamserrors += 1
142- }
107+ It " help for $parameterName parameter in $commandName has correct Mandatory value" - TestCases @ { parameterHelp = $parameterHelp ; codeMandatory = $codeMandatory } {
108+ $parameterHelp.Required | Should - Be $codeMandatory
109+ }
143110
144111 if ($HelpTestSkipParameterType [$commandName ] -contains $parameterName ) { continue }
145112
146113 $codeType = $parameter.ParameterType.Name
147114
148- $testparamsall += 1
149115 if ($parameter.ParameterType.IsEnum ) {
150116 # Enumerations often have issues with the typename not being reliably available
151117 $names = $parameter.ParameterType ::GetNames($parameter.ParameterType )
152- if ($parameterHelp.parameterValueGroup.parameterValue -ne $names ) {
153- # Parameter type in Help should match code
154- It " help for $commandName has correct parameter type for $parameterName " {
155- $parameterHelp.parameterValueGroup.parameterValue | Should - be $names
156- }
157- $testparamserrors += 1
158- }
118+ # Parameter type in Help should match code
119+ It " help for $commandName has correct parameter type for $parameterName " - TestCases @ { parameterHelp = $parameterHelp ; names = $names } {
120+ $parameterHelp.parameterValueGroup.parameterValue | Should - be $names
121+ }
159122 }
160123 elseif ($parameter.ParameterType.FullName -in $HelpTestEnumeratedArrays ) {
161124 # Enumerations often have issues with the typename not being reliably available
162125 $names = [Enum ]::GetNames($parameter.ParameterType.DeclaredMembers [0 ].ReturnType)
163- if ($parameterHelp.parameterValueGroup.parameterValue -ne $names ) {
164- # Parameter type in Help should match code
165- It " help for $commandName has correct parameter type for $parameterName " {
166- $parameterHelp.parameterValueGroup.parameterValue | Should - be $names
167- }
168- $testparamserrors += 1
169- }
126+ It " help for $commandName has correct parameter type for $parameterName " - TestCases @ { parameterHelp = $parameterHelp ; names = $names } {
127+ $parameterHelp.parameterValueGroup.parameterValue | Should - be $names
128+ }
170129 }
171130 else {
172131 # To avoid calling Trim method on a null object.
173132 $helpType = if ($parameterHelp.parameterValue ) { $parameterHelp.parameterValue.Trim () }
174- if ($helpType -ne $codeType ) {
175- # Parameter type in Help should match code
176- It " help for $commandName has correct parameter type for $parameterName " {
177- $helpType | Should - be $codeType
178- }
179- $testparamserrors += 1
180- }
133+ # Parameter type in Help should match code
134+ It " help for $commandName has correct parameter type for $parameterName " - TestCases @ { helpType = $helpType ; codeType = $codeType } {
135+ $helpType | Should - be $codeType
136+ }
181137 }
182138 }
183139 foreach ($helpParm in $HelpParameterNames ) {
184- $testparamsall += 1
185- if ($helpParm -notin $parameterNames ) {
186- # Shouldn't find extra parameters in help.
187- It " finds help parameter in code: $helpParm " {
188- $helpParm -in $parameterNames | Should - Be $true
189- }
190- $testparamserrors += 1
191- }
192- }
193- if ($testparamserrors -eq 0 ) {
194- It " Ran silently $testparamsall tests" {
195- $testparamserrors | Should - be 0
196- }
140+ # Shouldn't find extra parameters in help.
141+ It " finds help parameter in code: $helpParm " - TestCases @ { helpParm = $helpParm ; parameterNames = $parameterNames } {
142+ $helpParm -in $parameterNames | Should - Be $true
143+ }
197144 }
198145 }
199146 }
0 commit comments