PowerShell/test/powershell/Modules/Microsoft.PowerShell.Utility/alias.tests.ps1

134 lines
4.7 KiB
PowerShell

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
Describe "Alias tests" -Tags "CI" {
BeforeAll {
$testPath = Join-Path testdrive:\ ("testAlias\.test")
New-Item -ItemType Directory -Path $testPath -Force | Out-Null
class TestData
{
[string] $testName
[string] $testFile
[string] $expectedError
TestData($name, $file, $errorId)
{
$this.testName = $name
$this.testFile = $file
$this.expectedError = $errorId
}
}
}
Context "Export-Alias literal path" {
BeforeAll {
$csvFile = Join-Path $testPath "alias.csv"
$ps1File = Join-Path $testPath "alias.ps1"
$testCases = @()
$testCases += [TestData]::new("CSV", $csvFile, [NullString]::Value)
$testCases += [TestData]::new("PS1", $ps1File, [NullString]::Value)
$testCases += [TestData]::new("Empty string", "", "ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.ExportAliasCommand")
$testCases += [TestData]::new("Null", [NullString]::Value, "ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ExportAliasCommand")
$testCases += [TestData]::new("Non filesystem provider", 'env:\alias.ps1', "ReadWriteFileNotFileSystemProvider,Microsoft.PowerShell.Commands.ExportAliasCommand")
}
$testCases | ForEach-Object {
It "for $($_.testName)" {
$test = $_
try
{
Export-Alias -LiteralPath $test.testFile -ErrorAction SilentlyContinue
}
catch
{
$exportAliasError = $_
}
if($null -eq $test.expectedError)
{
Test-Path -LiteralPath $test.testFile | Should -BeTrue
}
else
{
$exportAliasError.FullyqualifiedErrorId | Should -Be $test.expectedError
}
}
AfterEach {
Remove-Item -LiteralPath $test.testFile -Force -ErrorAction SilentlyContinue
}
}
It "when file exists with NoClobber" {
Export-Alias -LiteralPath $csvFile
{ Export-Alias -LiteralPath $csvFile -NoClobber } | Should -Throw -ErrorId "NoClobber,Microsoft.PowerShell.Commands.ExportAliasCommand"
}
}
Context "Export-All inside a literal path" {
BeforeEach {
Push-Location -LiteralPath $testPath
}
It "with a CSV file" {
Export-Alias "alias.csv"
Test-Path -LiteralPath (Join-Path $testPath "alias.csv") | Should -BeTrue
}
It "with NoClobber" {
$path = Export-Alias alias.csv
{ Export-Alias alias.csv -NoClobber } | Should -Throw -ErrorId "NoClobber,Microsoft.PowerShell.Commands.ExportAliasCommand"
}
AfterEach {
Pop-Location
}
}
Context "Import-Alias literal path" {
BeforeAll {
$csvFile = Join-Path $testPath "alias.csv"
$ps1File = Join-Path $testPath "alias.ps1"
$testCases = @()
$testCases += [TestData]::new("Empty string", "", "ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.ImportAliasCommand")
$testCases += [TestData]::new("Null", [NullString]::Value, "ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ImportAliasCommand")
$testCases += [TestData]::new("Non filesystem provider", 'env:\alias.ps1', "NotSupported,Microsoft.PowerShell.Commands.ImportAliasCommand")
}
$testCases | ForEach-Object {
It "for $($_.testName)" {
$test = $_
{ Import-Alias -LiteralPath $test.testFile -ErrorAction SilentlyContinue } | Should -Throw -ErrorId $test.expectedError
}
}
It "can be done from a CSV file" {
# alias file definition content
$aliasDefinition = @'
"myuh","update-help","","ReadOnly, AllScope"
'@
$aliasFile = Join-Path $testPath "alias.csv"
$aliasDefinition | Out-File -LiteralPath $aliasFile
Import-Alias -LiteralPath $aliasFile
# Verify that the alias was imported
$definedAlias = Get-Alias myuh
$definedAlias | Should -Not -BeNullOrEmpty
$definedAlias.Name | Should -BeExactly "myuh"
$definedAlias.Definition | Should -Be "update-help"
}
}
}