Fix tab completion for parameters so that it shows common parameters as available (#10850)

This commit is contained in:
Steve Lee
2019-10-31 13:09:37 -07:00
committed by Dongbo Wang
parent 229762737d
commit df811929eb
3 changed files with 74 additions and 75 deletions
@@ -513,7 +513,7 @@ namespace System.Management.Automation
}
}
if (filteredParameters.Count == 1)
if (tryExactMatching && filteredParameters.Count == 1)
{
matchingParameters = filteredParameters;
}
@@ -895,6 +895,20 @@ dir -Recurse `
$res.CompletionMatches | Should -HaveCount 33
$res.CompletionMatches[0].CompletionText | Should -BeExactly "Commands"
}
It "Test completion with common parameters" {
$inputStr = 'invoke-webrequest -out'
$res = TabExpansion2 -inputScript $inputStr -cursorColumn $inputStr.Length
$res.CompletionMatches | Should -HaveCount 3
[string]::Join(',', ($res.CompletionMatches.completiontext | Sort-Object)) | Should -BeExactly "-OutBuffer,-OutFile,-OutVariable"
}
It "Test completion with exact match" {
$inputStr = 'get-content -wa'
$res = TabExpansion2 -inputScript $inputStr -cursorColumn $inputStr.Length
$res.CompletionMatches | Should -HaveCount 4
[string]::Join(',', ($res.CompletionMatches.completiontext | Sort-Object)) | Should -BeExactly "-wa,-Wait,-WarningAction,-WarningVariable"
}
}
Context "Module completion for 'using module'" {
@@ -1322,7 +1336,7 @@ Describe "WSMan Config Provider tab complete tests" -Tags Feature,RequireAdminOn
}
It "Tab completion gets dynamic parameters for '<path>' using '<parameter>'" -TestCases @(
@{path = ""; parameter = "-co"; expected = "ConnectionURI"},
@{path = ""; parameter = "-conn"; expected = "ConnectionURI"},
@{path = ""; parameter = "-op"; expected = "OptionSet"},
@{path = ""; parameter = "-au"; expected = "Authentication"},
@{path = ""; parameter = "-ce"; expected = "CertificateThumbprint"},
@@ -2,43 +2,43 @@
# Licensed under the MIT License.
Describe "Get-Member" -Tags "CI" {
It "Should be able to be called on string objects, ints, arrays, etc" {
$a = 1 #test numbers
$b = 1.3
$c = $false #test bools
$d = @(1,3) # test arrays
$e = "anoeduntodeu" #test strings
$f = 'asntoheusth' #test strings
$a = 1 #test numbers
$b = 1.3
$c = $false #test bools
$d = @(1, 3) # test arrays
$e = "anoeduntodeu" #test strings
$f = 'asntoheusth' #test strings
Get-Member -InputObject $a | Should -Not -BeNullOrEmpty
Get-Member -InputObject $b | Should -Not -BeNullOrEmpty
Get-Member -InputObject $c | Should -Not -BeNullOrEmpty
Get-Member -InputObject $d | Should -Not -BeNullOrEmpty
Get-Member -InputObject $e | Should -Not -BeNullOrEmpty
Get-Member -InputObject $f | Should -Not -BeNullOrEmpty
Get-Member -InputObject $a | Should -Not -BeNullOrEmpty
Get-Member -InputObject $b | Should -Not -BeNullOrEmpty
Get-Member -InputObject $c | Should -Not -BeNullOrEmpty
Get-Member -InputObject $d | Should -Not -BeNullOrEmpty
Get-Member -InputObject $e | Should -Not -BeNullOrEmpty
Get-Member -InputObject $f | Should -Not -BeNullOrEmpty
}
It "Should be able to extract a field from string objects, ints, arrays, etc" {
$a = 1 #test numbers
$b = 1.3
$c = $false #test bools
$d = @(1,3) # test arrays
$e = "anoeduntodeu" #test strings
$f = 'asntoheusth' #test strings
$a = 1 #test numbers
$b = 1.3
$c = $false #test bools
$d = @(1, 3) # test arrays
$e = "anoeduntodeu" #test strings
$f = 'asntoheusth' #test strings
$a | Should -BeOfType 'Int32'
$b | Should -BeOfType 'Double'
$c | Should -BeOfType 'Boolean'
,$d | Should -BeOfType 'Object[]'
$e | Should -BeOfType 'String'
$f | Should -BeOfType 'String'
$a | Should -BeOfType 'Int32'
$b | Should -BeOfType 'Double'
$c | Should -BeOfType 'Boolean'
, $d | Should -BeOfType 'Object[]'
$e | Should -BeOfType 'String'
$f | Should -BeOfType 'String'
}
It "Should be able to be called on a newly created PSObject" {
$o = New-Object psobject
# this creates a dependency on the Add-Member cmdlet.
Add-Member -InputObject $o -MemberType NoteProperty -Name proppy -Value "superVal"
$o = New-Object psobject
# this creates a dependency on the Add-Member cmdlet.
Add-Member -InputObject $o -MemberType NoteProperty -Name proppy -Value "superVal"
Get-Member -InputObject $o | Should -Not -BeNullOrEmpty
Get-Member -InputObject $o | Should -Not -BeNullOrEmpty
}
It "Should be able to be called on IntPtr" {
@@ -47,13 +47,17 @@ Describe "Get-Member" -Tags "CI" {
$results[0].Name | Should -BeExactly 'Size'
$results[1].Name | Should -BeExactly 'Zero'
}
It "Should work with incomplete parameter '-i'" {
$a = 1
{ Get-Member -i $a } | Should -Not -Throw
}
}
Describe "Get-Member DRT Unit Tests" -Tags "CI" {
Context "Verify Get-Member with Class" {
if(-not ([System.Management.Automation.PSTypeName]'Employee').Type)
{
Add-Type -TypeDefinition @"
if (-not ([System.Management.Automation.PSTypeName]'Employee').Type) {
Add-Type -TypeDefinition @"
public class Employee
{
private string firstName;
@@ -104,10 +108,10 @@ Describe "Get-Member DRT Unit Tests" -Tags "CI" {
}
}
"@
}
}
$fileToDeleteName = Join-Path $TestDrive -ChildPath "getMemberTest.ps1xml"
$XMLFile= @"
$XMLFile = @"
<Types>
<Type>
<Name>Employee</Name>
@@ -175,19 +179,15 @@ Describe "Get-Member DRT Unit Tests" -Tags "CI" {
$results.Length | Should -Be $methodList.Length
$methodFound = @()
for ($i = 0;$i -lt $methodList.Length;$i++)
{
for ($j = 0;$j -lt $results.Length;$j++)
{
if ($results[$j].Name.Equals($methodList[$i]))
{
for ($i = 0; $i -lt $methodList.Length; $i++) {
for ($j = 0; $j -lt $results.Length; $j++) {
if ($results[$j].Name.Equals($methodList[$i])) {
$methodFound += $true
}
}
}
for ($i = 0;$i -lt $methodList.Length;$i++)
{
for ($i = 0; $i -lt $methodList.Length; $i++) {
$methodFound[$i] | Should -BeTrue
}
}
@@ -206,12 +206,9 @@ Describe "Get-Member DRT Unit Tests" -Tags "CI" {
$obj = New-Object -TypeName System.Int32
$results = $obj | Get-Member -Static
$members = "MaxValue", "MinValue", "Parse", "TryParse"
foreach ($member in $members)
{
foreach ($result in $results)
{
if($result.Name.Equals($member))
{
foreach ($member in $members) {
foreach ($result in $results) {
if ($result.Name.Equals($member)) {
return $true
}
}
@@ -222,12 +219,9 @@ Describe "Get-Member DRT Unit Tests" -Tags "CI" {
It "Get the static properties and methods of int instance" {
$results = 1 | Get-Member -Static
$members = "MaxValue", "MinValue", "Parse", "TryParse"
foreach ($member in $members)
{
foreach ($result in $results)
{
if($result.Name.Equals($member))
{
foreach ($member in $members) {
foreach ($result in $results) {
if ($result.Name.Equals($member)) {
return $true
}
}
@@ -238,12 +232,9 @@ Describe "Get-Member DRT Unit Tests" -Tags "CI" {
It "Get the static properties and methods of int instance Wrapped" {
$results = [pscustomobject]1 | Get-Member -Static
$members = "MaxValue", "MinValue", "Parse", "TryParse"
foreach ($member in $members)
{
foreach ($result in $results)
{
if($result.Name.Equals($member))
{
foreach ($member in $members) {
foreach ($result in $results) {
if ($result.Name.Equals($member)) {
return $true
}
}
@@ -260,15 +251,12 @@ Describe "Get-Member DRT Unit Tests" -Tags "CI" {
$results | Where-Object Name -eq CreateNode | Should -Not -BeNullOrEmpty
}
It 'Get hidden members'{
It 'Get hidden members' {
$results = 'abc' | Get-Member -force
$hiddenMembers = "psbase", "psextended", "psadapted", "pstypenames", "psobject"
foreach ($member in $hiddenMembers)
{
foreach ($result in $results)
{
if($result.Name.Equals($member))
{
foreach ($member in $hiddenMembers) {
foreach ($result in $results) {
if ($result.Name.Equals($member)) {
return $true
}
}
@@ -276,15 +264,12 @@ Describe "Get-Member DRT Unit Tests" -Tags "CI" {
}
}
It 'Get Set Property Accessors On PsBase'{
It 'Get Set Property Accessors On PsBase' {
$results = ('abc').psbase | Get-Member -force get_*
$expectedMembers = "get_Chars", "get_Length"
foreach ($member in $expectedMembers)
{
foreach ($result in $results)
{
if($result.Name.Equals($member))
{
foreach ($member in $expectedMembers) {
foreach ($result in $results) {
if ($result.Name.Equals($member)) {
return $true
}
}