mirror of
https://github.com/PowerShell/PowerShell
synced 2026-06-08 12:12:50 +00:00
Make module name matching for get-module -FullyQualifiedName… (#10329)
This commit is contained in:
committed by
Aditya Patwardhan
parent
3444925019
commit
11d8cd3230
@@ -573,9 +573,11 @@ namespace Microsoft.PowerShell.Commands
|
||||
IDictionary<string, ModuleSpecification> moduleSpecTable,
|
||||
PSModuleInfo module)
|
||||
{
|
||||
const WildcardOptions options = WildcardOptions.IgnoreCase | WildcardOptions.CultureInvariant;
|
||||
foreach (ModuleSpecification moduleSpec in moduleSpecTable.Values)
|
||||
{
|
||||
if (moduleSpec.Name == module.Name || moduleSpec.Name == module.Path || module.Path.Contains(moduleSpec.Name))
|
||||
WildcardPattern namePattern = WildcardPattern.Get(moduleSpec.Name, options);
|
||||
if (namePattern.IsMatch(module.Name) || moduleSpec.Name == module.Path || module.Path.Contains(moduleSpec.Name))
|
||||
{
|
||||
yield return moduleSpec;
|
||||
}
|
||||
|
||||
@@ -33,6 +33,35 @@ Describe "Get-Module -ListAvailable" -Tags "CI" {
|
||||
@{ ModPath = "$TestDrive\Modules\Zoo\Too\Zoo.psm1"; Name = 'Zoo'; Version = '0.0'; Count = 1 }
|
||||
)
|
||||
|
||||
$listModuleNameTestCases = @(
|
||||
@{
|
||||
Name = 'Foo'
|
||||
TestCaseName = 'Match case'
|
||||
ExpectedName = 'Foo'
|
||||
ModuleVersion = '2.0'
|
||||
}
|
||||
@{
|
||||
Name = 'foo'
|
||||
TestCaseName = 'Mismatched case'
|
||||
ExpectedName = 'Foo'
|
||||
ModuleVersion = '2.0'
|
||||
}
|
||||
)
|
||||
$loadedModuleNameTestCases = @(
|
||||
@{
|
||||
Name = 'Microsoft.PowerShell.Managemen*'
|
||||
TestCaseName = 'Wildcard'
|
||||
ExpectedName = 'Microsoft.PowerShell.Management'
|
||||
ModuleVersion = '6.1.0.0'
|
||||
}
|
||||
@{
|
||||
Name = 'microsoft.powershell.managemen*'
|
||||
TestCaseName = 'Mismatched case'
|
||||
ExpectedName = 'Microsoft.PowerShell.Management'
|
||||
ModuleVersion = '6.1.0.0'
|
||||
}
|
||||
)
|
||||
|
||||
$env:PSModulePath = Join-Path $testdrive "Modules"
|
||||
}
|
||||
|
||||
@@ -114,12 +143,38 @@ Describe "Get-Module -ListAvailable" -Tags "CI" {
|
||||
$modules[4].Path | Should -BeExactly (Resolve-Path "$testdrive\Modules\Zoo\Too\Zoo.psm1").Path
|
||||
}
|
||||
|
||||
It "Get-Module -FullyQualifiedName <FullyQualifiedName> -ListAvailable" {
|
||||
$moduleSpecification = @{ModuleName = "Foo"; ModuleVersion = "2.0"}
|
||||
It "Get-Module -FullyQualifiedName @{ModuleName = '<Name>' ; ModuleVersion = '<ModuleVersion>'} -ListAvailable - <TestCaseName>" -TestCases $listModuleNameTestCases {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
$Name,
|
||||
$TestCaseName,
|
||||
[Parameter(Mandatory = $true)]
|
||||
$ExpectedName,
|
||||
$ModuleVersion
|
||||
)
|
||||
|
||||
$moduleSpecification = @{ModuleName = $name ; ModuleVersion = $ModuleVersion}
|
||||
$modules = Get-Module -FullyQualifiedName $moduleSpecification -ListAvailable
|
||||
$modules | Should -HaveCount 1
|
||||
$modules.Name | Should -BeExactly "Foo"
|
||||
$modules.Version | Should -BeExactly "2.0"
|
||||
$modules.Name | Should -BeExactly $ExpectedName
|
||||
$modules.Version | Should -BeExactly $ModuleVersion
|
||||
}
|
||||
|
||||
It "Get-Module -FullyQualifiedName @{ModuleName = '<Name>' ; ModuleVersion = '<ModuleVersion>'} - <TestCaseName>" -TestCases $loadedModuleNameTestCases {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
$Name,
|
||||
$TestCaseName,
|
||||
[Parameter(Mandatory = $true)]
|
||||
$ExpectedName,
|
||||
$ModuleVersion
|
||||
)
|
||||
|
||||
$moduleSpecification = @{ModuleName = $name ; ModuleVersion = $ModuleVersion}
|
||||
$modules = Get-Module -FullyQualifiedName $moduleSpecification
|
||||
$modules | Should -HaveCount 1
|
||||
$modules.Name | Should -BeExactly $ExpectedName
|
||||
$modules.Version | Should -BeExactly $ModuleVersion
|
||||
}
|
||||
|
||||
It "Get-Module <Name> -Refresh -ListAvailable" {
|
||||
@@ -219,7 +274,7 @@ Describe "Get-Module -ListAvailable" -Tags "CI" {
|
||||
|
||||
It "'Get-Module -ListAvailable' should not load the module assembly" {
|
||||
## $fullName should be null and thus the result should just be the module's name.
|
||||
$result = pwsh -c "`$env:PSModulePath = '$tempModulePath'; `$module = Get-Module -ListAvailable; `$fullName = [System.AppDomain]::CurrentDomain.GetAssemblies() | Where-Object Location -eq $assemblyPath | Foreach-Object FullName; `$module.Name + `$fullName"
|
||||
$result = pwsh -noprofile -c "`$env:PSModulePath = '$tempModulePath'; `$module = Get-Module -ListAvailable; `$fullName = [System.AppDomain]::CurrentDomain.GetAssemblies() | Where-Object Location -eq $assemblyPath | Foreach-Object FullName; `$module.Name + `$fullName"
|
||||
$result | Should -BeExactly "MyModuelTest"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user