Make Join-String -InputObject 1,2,3 result equal to 1,2,3 | Join-String result (#8611)

Make `Join-String -InputObject 1,2,3` result equal to `1,2,3 | Join-String` result.

Fix #8610
This commit is contained in:
Sergey Vasin 2019-01-24 23:53:37 +03:00 committed by Travis Plunk
parent 863528881f
commit a9841d98fa
2 changed files with 44 additions and 32 deletions

View file

@ -1,4 +1,4 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
using System; using System;
@ -90,7 +90,7 @@ namespace Microsoft.PowerShell.Commands.Utility
/// Gets or sets the input object to join into text. /// Gets or sets the input object to join into text.
/// </summary> /// </summary>
[Parameter(ValueFromPipeline = true)] [Parameter(ValueFromPipeline = true)]
public PSObject InputObject { get; set; } public PSObject[] InputObject { get; set; }
/// <inheritdoc /> /// <inheritdoc />
protected override void BeginProcessing() protected override void BeginProcessing()
@ -106,40 +106,46 @@ namespace Microsoft.PowerShell.Commands.Utility
/// <inheritdoc /> /// <inheritdoc />
protected override void ProcessRecord() protected override void ProcessRecord()
{ {
if (InputObject != null && InputObject != AutomationNull.Value) if (InputObject != null)
{ {
var inputValue = Property == null foreach (PSObject inputObject in InputObject)
? InputObject {
: Property.GetValues(InputObject, false, true).FirstOrDefault()?.Result; if (inputObject != null && inputObject != AutomationNull.Value)
{
var inputValue = Property == null
? inputObject
: Property.GetValues(inputObject, false, true).FirstOrDefault()?.Result;
// conversion to string always succeeds. // conversion to string always succeeds.
if (!LanguagePrimitives.TryConvertTo<string>(inputValue, _cultureInfo, out var stringValue)) if (!LanguagePrimitives.TryConvertTo<string>(inputValue, _cultureInfo, out var stringValue))
{ {
throw new PSInvalidCastException("InvalidCastFromAnyTypeToString", ExtendedTypeSystem.InvalidCastCannotRetrieveString, null); throw new PSInvalidCastException("InvalidCastFromAnyTypeToString", ExtendedTypeSystem.InvalidCastCannotRetrieveString, null);
} }
if (_firstInputObject) if (_firstInputObject)
{ {
_firstInputObject = false; _firstInputObject = false;
} }
else else
{ {
_outputBuilder.Append(Separator); _outputBuilder.Append(Separator);
} }
if (_quoteChar != char.MinValue) if (_quoteChar != char.MinValue)
{ {
_outputBuilder.Append(_quoteChar); _outputBuilder.Append(_quoteChar);
_outputBuilder.Append(stringValue); _outputBuilder.Append(stringValue);
_outputBuilder.Append(_quoteChar); _outputBuilder.Append(_quoteChar);
} }
else if (string.IsNullOrEmpty(FormatString)) else if (string.IsNullOrEmpty(FormatString))
{ {
_outputBuilder.Append(stringValue); _outputBuilder.Append(stringValue);
} }
else else
{ {
_outputBuilder.AppendFormat(_cultureInfo, FormatString, inputValue); _outputBuilder.AppendFormat(_cultureInfo, FormatString, inputValue);
}
}
} }
} }
} }

View file

@ -11,6 +11,12 @@ Describe "Join-String" -Tags "CI" {
{ Join-String -InputObject $testObject } | Should -Not -Throw { Join-String -InputObject $testObject } | Should -Not -Throw
} }
It "'Input | Join-String' should be equal to 'Join-String -InputObject Input'" {
$result1 = $testObject | Join-String
$result2 = Join-String -InputObject $testObject
$result1 | Should -BeExactly $result2
}
It "Should return a single string" { It "Should return a single string" {
$actual = $testObject | Join-String $actual = $testObject | Join-String