-
Notifications
You must be signed in to change notification settings - Fork 283
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[e2e/command/autocomplete] Add autocomplete-posh-vcpkg.Tests.ps1
- Loading branch information
1 parent
886dd02
commit e14a7c2
Showing
4 changed files
with
368 additions
and
0 deletions.
There are no files selected for viewing
307 changes: 307 additions & 0 deletions
307
azure-pipelines/e2e-specs/autocomplete-posh-vcpkg.Tests.ps1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,307 @@ | ||
param ( | ||
[Parameter(Mandatory)][string]$poshVcpkgModulePath, | ||
[Parameter(Mandatory)][string]$vcpkgExeDir | ||
) | ||
|
||
BeforeAll { | ||
Import-Module $poshVcpkgModulePath | ||
|
||
$env:PATH = $vcpkgExeDir + [System.IO.Path]::PathSeparator + $env:PATH | ||
|
||
function Complete-InputCaret { | ||
[OutputType([string[]])] | ||
param ( | ||
[Parameter(Mandatory, Position = 0, ValueFromPipeline)] | ||
[string]$InputCaretScript | ||
) | ||
$positionMatches = [regex]::Matches($InputCaretScript, '\^') | ||
if ($positionMatches.Count -ne 1) { | ||
throw 'Invalid caret cursor command, please indicate by only one ^ character' | ||
} | ||
$command = [string]$InputCaretScript.Replace('^', '') | ||
$cursorPosition = [int]$positionMatches[0].Index | ||
$result = [System.Management.Automation.CommandCompletion]::CompleteInput($command, $cursorPosition, $null) | ||
return $result.CompletionMatches | Select-Object -ExpandProperty CompletionText | ||
} | ||
} | ||
|
||
Describe 'Prerequisites tests' { | ||
Context 'Internal function Complete-InputCaret tests' { | ||
It 'Complete-InputCaret 1 caret string should success' { | ||
{ 'aaaa^' | Complete-InputCaret } | Should -Not -Throw | ||
} | ||
|
||
It 'Complete-InputCaret 0 caret string should throw' { | ||
{ 'aaaa' | Complete-InputCaret } | Should -Throw | ||
} | ||
|
||
It 'Complete-InputCaret 2 caret string should throw' { | ||
{ 'aaaa^^' | Complete-InputCaret } | Should -Throw | ||
} | ||
|
||
It 'Complete-InputCaret self should success' { | ||
'Complete-InputCaret^' | Complete-InputCaret | Should -Contain 'Complete-InputCaret' | ||
} | ||
} | ||
|
||
Context 'Exist module and command tests' { | ||
It 'Should imported module posh-vcpkg' { | ||
(Get-Module -Name posh-vcpkg).Name | Should -Be 'posh-vcpkg' | ||
} | ||
|
||
It 'Should have command vcpkg' { | ||
Get-Command -Name vcpkg | Should -Not -BeNullOrEmpty | ||
} | ||
} | ||
} | ||
|
||
Describe 'Module posh-vcpkg tests' { | ||
} | ||
|
||
Describe 'Complete position tests' { | ||
} | ||
|
||
Describe 'Complete append tests' { | ||
Context 'Complete command tests' { | ||
It 'Should exact match command completions [vcpkg ver^] be [version]' { | ||
'vcpkg ver^' | Complete-InputCaret | Should -Be 'version' | ||
} | ||
|
||
It 'Should complete command [vcpkg in^] contain [install]' { | ||
'vcpkg in^' | Complete-InputCaret | Should -Contain 'install' | ||
} | ||
|
||
It 'Should complete command [vcpkg in^] contain [integrate]' { | ||
'vcpkg in^' | Complete-InputCaret | Should -Contain 'integrate' | ||
} | ||
} | ||
|
||
Context 'Complete command list tests' { | ||
It 'Should complete command for blank space [vcpkg ^] contain [<_>]' -ForEach @( | ||
'help' | ||
'install' | ||
'list' | ||
'remove' | ||
'version' | ||
) { | ||
'vcpkg ^' | Complete-InputCaret | Should -Contain $_ | ||
} | ||
|
||
It 'Should exact match command completions for blank space [vcpkg ^]' { | ||
$completions = 'vcpkg ^' | Complete-InputCaret | ||
$expected = @( | ||
'acquire', 'create', 'env', 'format-manifest', 'integrate', 'portsdiff', 'upgrade', 'x-check-support' | ||
'x-set-installed', 'acquire_project', 'deactivate', 'export', 'hash', 'list', 'remove', 'use' | ||
'x-init-registry', 'x-update-baseline', 'activate', 'depend-info', 'fetch', 'help', 'new', 'search' | ||
'version', 'x-package-info', 'x-update-registry', 'add', 'edit', 'find', 'install', 'owns', 'update' | ||
'x-add-version', 'x-regenerate', 'x-vsinstances' | ||
) | ||
Compare-Object $completions $expected | Should -BeNullOrEmpty | ||
} | ||
} | ||
|
||
Context 'Complete common option tests' { | ||
It 'Should not complete common option for blank space [vcpkg ^] not yet contain [<_>]' -ForEach @( | ||
'--host-triplet', '--host-triplet=' | ||
'--triplet', '--triplet=' | ||
'--vcpkg-root', '--vcpkg-root=' | ||
) { | ||
'vcpkg ^' | Complete-InputCaret | Should -Not -Contain $_ | ||
} | ||
} | ||
|
||
Context 'Complete common option argument tests' { | ||
It 'Should not complete common option arguments for [vcpkg <argument>^] not yet contain [<expected>]' -ForEach @( | ||
@{ argument = '--triplet=' ; expected = '--triplet=x64-windows' } | ||
@{ argument = '--triplet=x64' ; expected = '--triplet=x64-windows' } | ||
) { | ||
'vcpkg {0}^' -f $argument | Complete-InputCaret | Should -Not -Contain $expected | ||
} | ||
} | ||
|
||
# Skip due to https://github.com/PowerShell/PowerShell/issues/2912 | ||
Context 'Complete command option list tests conditionally - CoreOnly' -Tag CoreOnly { | ||
|
||
It 'Should complete option flags with single minus [vcpkg <command> -^] contain [<expected>]' -ForEach @( | ||
@{ command = 'install' ; expected = '--editable' } | ||
@{ command = 'remove' ; expected = '--dry-run' } | ||
) { | ||
'vcpkg {0} -^' -f $command | Complete-InputCaret | Should -Contain $expected | ||
} | ||
|
||
It 'Should complete option flags with double minus [vcpkg <command> --^] contain [<expected>]' -ForEach @( | ||
@{ command = 'install' ; expected = '--editable' } | ||
@{ command = 'remove' ; expected = '--dry-run' } | ||
) { | ||
'vcpkg {0} --^' -f $command | Complete-InputCaret | Should -Contain $expected | ||
} | ||
|
||
It 'Should exact match command options for double minus [vcpkg <command> --^]' -ForEach @( | ||
@{ | ||
command = 'install' | ||
expected = @( | ||
'--allow-unsupported', '--clean-after-build', '--clean-buildtrees-after-build' | ||
'--clean-downloads-after-build', '--clean-packages-after-build', '--dry-run', '--editable' | ||
'--enforce-port-checks', '--head', '--keep-going', '--no-downloads', '--no-print-usage' | ||
'--only-binarycaching', '--only-downloads', '--recurse', '--x-feature', '--x-no-default-features' | ||
'--x-prohibit-backcompat-features', '--x-use-aria2', '--x-write-nuget-packages-config', '--x-xunit' | ||
) | ||
} | ||
@{ | ||
command = 'remove' | ||
expected = @('--dry-run', '--outdated', '--purge', '--recurse') | ||
} | ||
) { | ||
$completions = ('vcpkg {0} --^' -f $command) | Complete-InputCaret | ||
Compare-Object $completions $expected | Should -BeNullOrEmpty | ||
} | ||
} | ||
|
||
Context 'Complete command argument tests conditionally' { | ||
It 'Should complete install with port name [<caretCmd>] contain [<expected>]' -ForEach @( | ||
@{ caretCmd = 'vcpkg install vcpkg-^' ; expected = 'vcpkg-cmake' } | ||
) { | ||
$caretCmd | Complete-InputCaret | Should -Contain $expected | ||
} | ||
|
||
It 'Should complete install port with triplet [<caretCmd>] contain [<expected>]' -ForEach @( | ||
@{ caretCmd = 'vcpkg install vcpkg-cmake:^' ; expected = 'vcpkg-cmake:x64-windows' } | ||
) { | ||
$caretCmd | Complete-InputCaret | Should -Contain $expected | ||
} | ||
|
||
It 'Should complete integrate with subcommand [vcpkg integrate ^] contain [powershell] - WindowsOnly' -Tag WindowsOnly { | ||
'vcpkg integrate ^' | Complete-InputCaret | Should -Contain 'powershell' | ||
} | ||
|
||
It 'Should complete integrate with subcommand [vcpkg integrate ^] contain [bash] - NonWindowsOnly' -Tag NonWindowsOnly { | ||
'vcpkg integrate ^' | Complete-InputCaret | Should -Contain 'bash' | ||
} | ||
|
||
It 'Should exact match command subcommands [vcpkg integrate ^] - WindowsOnly' -Tag WindowsOnly { | ||
$expected = @('install', 'remove', 'powershell', 'project') | ||
$completions = 'vcpkg integrate ^' | Complete-InputCaret | ||
Compare-Object $completions $expected | Should -BeNullOrEmpty | ||
} | ||
|
||
It 'Should exact match command subcommands [vcpkg integrate ^] - NonWindowsOnly' -Tag NonWindowsOnly { | ||
$expected = @('install', 'remove', 'bash', 'x-fish', 'zsh') | ||
$completions = 'vcpkg integrate ^' | Complete-InputCaret | ||
Compare-Object $completions $expected | Should -BeNullOrEmpty | ||
} | ||
} | ||
} | ||
|
||
# Context 'Complete command name tests' { | ||
|
||
# It -Skip 'Should complete command list with blank space [<caretCmd>]' -TestCases ( | ||
# @{ caretCmd = 'vcpkg ^' ; expected = 'version'; comment = 'without word' }, | ||
# @{ caretCmd = 'vcpkg ver^' ; expected = 'version'; comment = 'with word' }, | ||
# @{ caretCmd = 'vcpkg.exe ver^' ; expected = 'version'; comment = 'with native exe' }, | ||
# @{ caretCmd = './vcpkg ver^' ; expected = 'version'; comment = 'with dot slash' }, | ||
# @{ caretCmd = '.\vcpkg ver^' ; expected = 'version'; comment = 'with dot backslash' } | ||
# ) { | ||
# param($caretCmd, $expected, $comment) | ||
# $caretCmd | Complete-InputCaret | Should -Contain $expected | ||
# } | ||
|
||
# It -Skip 'Should complete command word [<expected>] with [<caretCmd>] with <comment>' -TestCases ( | ||
# @{ caretCmd = 'vcpkg ^' ; expected = 'version'; comment = 'without word' }, | ||
# @{ caretCmd = 'vcpkg ver^' ; expected = 'version'; comment = 'with word' }, | ||
# @{ caretCmd = 'vcpkg.exe ver^' ; expected = 'version'; comment = 'with native exe' }, | ||
# @{ caretCmd = './vcpkg ver^' ; expected = 'version'; comment = 'with dot slash' }, | ||
# @{ caretCmd = '.\vcpkg ver^' ; expected = 'version'; comment = 'with dot backslash' } | ||
# ) { | ||
# param($caretCmd, $expected, $comment) | ||
# $caretCmd | Complete-InputCaret | Should -Contain $expected | ||
# } | ||
|
||
# } | ||
|
||
# Context -Skip 'Complete command spaces tests' { | ||
|
||
# It 'Should complete command <comment> [<caretCmd>]' -TestCases ( | ||
# @{ comment = 'spaces without argument'; caretCmd = 'vcpkg ^'; expected = 'version' }, | ||
# @{ comment = 'before remaining'; caretCmd = 'vcpkg ver^'; expected = 'version' }, | ||
# # @{ comment = 'with trailing spaces'; caretCmd = 'vcpkg ver ^'; expected = 'version' }, | ||
# @{ comment = 'with leading spaces'; caretCmd = ' vcpkg ver^'; expected = 'version' } | ||
# ) { | ||
# param($caretCmd, $expected, $comment) | ||
# $caretCmd | Complete-InputCaret | Should -Contain $expected | ||
# } | ||
|
||
# It 'Should complete command with trailing spaces [vcpkg ver ^]' -Skip { | ||
# 'vcpkg ver ^' | Complete-InputCaret | Should -Contain 'version' | ||
# } | ||
|
||
# } | ||
|
||
# Context -Skip 'Complete command quotation tests' { | ||
|
||
# It "Should complete command with quoted word [vcpkg 'ver'^]" { | ||
# "vcpkg 'ver'^" | Complete-InputCaret | Should -Contain 'version' | ||
# } | ||
|
||
# It "Should complete command with quoted space [vcpkg ' '^]" { | ||
# "vcpkg 'ver'^" | Complete-InputCaret | Should -Contain 'version' | ||
# } | ||
|
||
# It "Should complete command with quoted word [vcpkg 'version'^]" { | ||
# "vcpkg 'ver'^" | Complete-InputCaret | Should -Contain 'version' | ||
# } | ||
|
||
# } | ||
|
||
# Context -Skip 'Complete command intermediate tests' { | ||
|
||
# It 'Should complete command <comment> [<caretCmd>]' -TestCases ( | ||
# @{ comment = 'end of word'; caretCmd = 'vcpkg version^'; expected = 'version' }, | ||
# @{ comment = 'middle of word'; caretCmd = 'vcpkg ver^sion'; expected = 'version' }, | ||
# @{ comment = 'front of word'; caretCmd = 'vcpkg ^version'; expected = 'version' } | ||
# ) { | ||
# param($caretCmd, $expected, $comment) | ||
# $caretCmd | Complete-InputCaret | Should -Contain $expected | ||
# } | ||
|
||
# } | ||
|
||
# Context -Skip 'Complete subcommand tests' { | ||
|
||
# It 'Should complete subcommand [<expected>] from [<caretCmd>]' -TestCases ( | ||
# @{ caretCmd = 'vcpkg depend^'; expected = 'depend-info' }, | ||
# @{ caretCmd = 'vcpkg inst^'; expected = 'install' }, | ||
# @{ caretCmd = 'vcpkg int^'; expected = 'integrate' }, | ||
# @{ caretCmd = 'vcpkg rem^'; expected = 'remove' } | ||
# ) { | ||
# param($caretCmd, $expected) | ||
# @($caretCmd | Complete-InputCaret)[0] | Should -BeExactly $expected | ||
# } | ||
|
||
# It 'Should complete subcommand two-level [powershell] from [vcpkg integrate power^]' -Skip { | ||
# 'vcpkg integrate power^' | Complete-InputCaret | Should -Contain 'powershell' | ||
# } | ||
|
||
# } | ||
|
||
# Context -Skip 'Complete subcommand argument and options tests' { | ||
|
||
# It 'Should complete argument [<expected>] from [<caretCmd>]' -TestCases ( | ||
# @{ caretCmd = 'vcpkg install vcpkg-cmake^'; expected = 'vcpkg-cmake-get-vars' }, | ||
# @{ caretCmd = 'vcpkg install vcpkg-cmake --^'; expected = '--dry-run' } | ||
# ) { | ||
# param($caretCmd, $expected) | ||
# $caretCmd | Complete-InputCaret | Should -Contain $expected | ||
# } | ||
|
||
# } | ||
|
||
# Context -Skip 'Complete complex tests' { | ||
|
||
# It 'Should complete complex line [<expected>] from [<caretCmd>]' -TestCases ( | ||
# @{ caretCmd = 'echo powershell | % { vcpkg ver^ $_ }; echo $?'; expected = 'version' } | ||
# ) { | ||
# param($caretCmd, $expected) | ||
# $caretCmd | Complete-InputCaret | Should -Contain $expected | ||
# } | ||
|
||
# } |
36 changes: 36 additions & 0 deletions
36
azure-pipelines/end-to-end-tests-dir/autocomplete-posh-vcpkg.ps1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
|
||
[string]$poshVcpkgModulePath = "$PSScriptRoot/../../scripts/posh-vcpkg.psd1" | ||
[string]$vcpkgExeDir = $VcpkgItem.Directory.FullName | ||
|
||
[string]$TestSpecsDir = "$PSScriptRoot/../e2e-specs" | ||
|
||
$containerPosh = New-PesterContainer -Path @( | ||
"$TestSpecsDir/autocomplete-posh-vcpkg.Tests.ps1" | ||
) -Data @( | ||
@{ | ||
poshVcpkgModulePath = $poshVcpkgModulePath | ||
vcpkgExeDir = $vcpkgExeDir | ||
} | ||
) | ||
|
||
if ($null -eq $IsWindows) { Set-Variable IsWindows $true } | ||
|
||
$configuration = [PesterConfiguration]@{ | ||
Run = @{ | ||
Container = @( | ||
$containerPosh | ||
) | ||
} | ||
Output = @{ | ||
Verbosity = 'Detailed' | ||
} | ||
Filter = @{ | ||
ExcludeTag = @{ | ||
NonWindowsOnly = -not $IsWindows | ||
WindowsOnly = $IsWindows | ||
CoreOnly = 'Core' -eq $PSEdition | ||
}.GetEnumerator().Where{ -not $_.Value }.ForEach{ $_.Name } | ||
} | ||
} | ||
|
||
Invoke-Pester -Configuration $configuration |
11 changes: 11 additions & 0 deletions
11
azure-pipelines/end-to-end-tests-dir/autocomplete-posh-z-fail-linux.ps1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
|
||
Write-Host 'Fail for Linux.' | ||
|
||
if ($IsLinux) { | ||
BeforeAll { | ||
Import-Module $PSScriptRoot/posh-vcpkg | ||
} | ||
Describe 'Module posh-vcpkg tests' { | ||
It 'Expect fail with BeforeAll' {} | ||
} | ||
} |
14 changes: 14 additions & 0 deletions
14
azure-pipelines/end-to-end-tests-dir/autocomplete-posh-z-fail-win.ps1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
|
||
Write-Host 'Fail for Windows.' | ||
|
||
if ($IsWindows) { | ||
BeforeAll { | ||
Import-Module $PSScriptRoot/../../scripts/posh-vcpkg.psd1 | ||
} | ||
Describe 'Module posh-vcpkg tests' { | ||
It 'Expect pass' {} | ||
It 'Expect fail with InvalidResult' { | ||
Should -Be 'fail' | ||
} | ||
} | ||
} |