PowerShell/test/powershell/Language/Scripting/CmdletDeclaration.Tests.ps1

123 lines
3.8 KiB
PowerShell

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
Describe "Cmdlet declaration statement" -Tags "CI" {
$testData = @(
@{ Name = 'Verify non-cmdlet formatted names are allowed';
Script = '
function foo
{
[CmdletBinding()]
param()
$a
}' },
@{ Name = 'Valid cmdlet names case 1';
Script = '
function foo
{
[CmdletBinding()]
param()
$a
}' },
@{ Name = 'Valid cmdlet names case 2';
Script = '
function get-foo
{
[CmdletBinding()]
param()
$a
}' },
@{ Name = 'Valid cmdlet names case 3';
Script = '
{
[CmdletBinding()]
param()
$a
}' },
@{
Name ='Using parameter annotation in script cmdlets';
Script = '
function get-foo
{
param([Parameter(mandatory=$true)]$a)
$a
}'},
@{
Name = 'Cmdlet declaration parameter: should process';
Script = '
function get-foo
{
[CmdletBinding(SupportsShouldProcess=$true)]
param([Parameter(mandatory=$true)]$a)
$a
}' },
@{
Name = 'Cmdlet declaration parameter: confirm impact';
Script = '
function get-foo
{
[CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact="low")]
param([Parameter(mandatory=$true)]$a)
$a
}'},
@{
Name = 'Cmdlet declaration parameter: defaultparametersetname';
Script = '
function get-foo
{
[CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact="low", defaultparametersetname="set1")]
param([Parameter(mandatory=$true)]$a)
$a
}'},
@{
Name = 'cmdlet declaration within as cmdlet';
Script = '
function get-foo {
[CmdletBinding()]
param()
function get-bar
{
param([Parameter(mandatory=$true)]$a)
$a
}
}'}
@{
Name = 'cmdlet declaration within scriptblock';
Script = '
{
param([Parameter(mandatory=$true)]$a)
$a
}'},
@{
Name = 'cmdlet declaration within scriptblock 2';
Script = '
{
param([Parameter(mandatory=$true)]$a)
$a
}'},
@{
Name = 'cmdlet declaration within scriptblock 3';
Script = '
{
[CmdletBinding(SupportsShouldProcess=$true)]
param([Parameter(mandatory=$true)]$a)
$a
}'})
It '<Name>' -TestCases $testData {
param($Name, $script)
$syntaxerrors = $null
$null = [system.management.automation.psparser]::tokenize($script, [ref] $syntaxerrors)
#Error should not be reported
$syntaxerrors.Count | Should -Be 0
}
}