Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@ jobs:

- name: Download previous module artifact (if not rebuilt)
if: steps.upload-new.outputs.artifact-id == ''
uses: dawidd6/action-download-artifact@v6
uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11
with:
name: Convert-Module-Universal
path: Artifacts/
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ jobs:

steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5

- name: Download module artifact from CI
if: ${{ github.event_name == 'workflow_run' }}
uses: actions/download-artifact@v4
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e
with:
name: Convert-Module-Universal
path: Artifacts/
Expand All @@ -51,10 +51,10 @@ jobs:
./build.ps1 -PowerShell -Build

- name: Setup Pages
uses: actions/configure-pages@v5
uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b

- name: Cache PowerShell modules
uses: actions/cache@v4
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57
with:
path: ~/.local/share/powershell/Modules
key: ${{ runner.os }}-psmodules-${{ hashFiles('install_modules.ps1') }}
Expand All @@ -68,7 +68,7 @@ jobs:
run: ./.build/Invoke-DocumentationGeneration.ps1 -Force

- name: Setup Python
uses: actions/setup-python@v5
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065
with:
python-version: '3.11'
cache: 'pip'
Expand All @@ -80,7 +80,7 @@ jobs:
run: mkdocs build --strict

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa
with:
path: site/

Expand All @@ -95,4 +95,4 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e
4 changes: 2 additions & 2 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
sparse-checkout: .build/Invoke-PublishModule.ps1
sparse-checkout-cone-mode: false

- name: Download module artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e
with:
name: ${{ env.MODULE_NAME }}-Module-Universal
path: Artifacts/
Expand Down
2 changes: 1 addition & 1 deletion src/Convert/Convert.psd1
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
RootModule = 'Convert.psm1'

# Version number of this module.
ModuleVersion = '2.0.1'
ModuleVersion = '2.0.2'

# Supported PSEditions
CompatiblePSEditions = @(
Expand Down
27 changes: 4 additions & 23 deletions src/Convert/Public/ConvertFrom-MemoryStreamToString.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,8 @@
.DESCRIPTION
Converts MemoryStream to a string.

.PARAMETER MemoryStream
A System.IO.MemoryStream object for conversion.

.PARAMETER Stream
A System.IO.Stream object for conversion.
A System.IO.Stream object for conversion. Accepts any stream type including MemoryStream, FileStream, etc.

.EXAMPLE
$string = 'A string'
Expand Down Expand Up @@ -84,16 +81,9 @@ function ConvertFrom-MemoryStreamToString {
Mandatory = $true,
ValueFromPipeline = $true,
ValueFromPipelineByPropertyName = $true,
ParameterSetName = 'MemoryStream')]
[ValidateNotNullOrEmpty()]
[System.IO.MemoryStream[]]
$MemoryStream,

[Parameter(
Mandatory = $true,
ValueFromPipelineByPropertyName = $true,
ParameterSetName = 'Stream')]
[ValidateNotNullOrEmpty()]
[Alias('MemoryStream')]
[System.IO.Stream[]]
$Stream
)
Expand All @@ -103,18 +93,9 @@ function ConvertFrom-MemoryStreamToString {
}

process {
switch ($PSCmdlet.ParameterSetName) {
'MemoryStream' {
$inputObject = $MemoryStream
}
'Stream' {
$inputObject = $Stream
}
}

foreach ($object in $inputObject) {
foreach ($object in $Stream) {
try {
if ($PSCmdlet.ParameterSetName -eq 'MemoryStream') {
if ($object.CanSeek) {
$object.Position = 0
}
$reader = [System.IO.StreamReader]::new($object)
Expand Down
18 changes: 2 additions & 16 deletions src/Convert/Public/ConvertTo-String.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,8 @@
.PARAMETER Base64EncodedString
A Base64 Encoded String

.PARAMETER MemoryStream
A MemoryStream object for conversion.

.PARAMETER Stream
A System.IO.Stream object for conversion.
A System.IO.Stream object for conversion. Accepts any stream type including MemoryStream, FileStream, etc.

.PARAMETER Encoding
The encoding to use for conversion.
Expand Down Expand Up @@ -105,16 +102,9 @@ function ConvertTo-String {
Mandatory = $true,
ValueFromPipeline = $true,
ValueFromPipelineByPropertyName = $true,
ParameterSetName = 'MemoryStream')]
[ValidateNotNullOrEmpty()]
[System.IO.MemoryStream[]]
$MemoryStream,

[Parameter(
Mandatory = $true,
ValueFromPipelineByPropertyName = $true,
ParameterSetName = 'Stream')]
[ValidateNotNullOrEmpty()]
[Alias('MemoryStream')]
[System.IO.Stream[]]
$Stream,

Expand Down Expand Up @@ -158,10 +148,6 @@ function ConvertTo-String {
}
}

'MemoryStream' {
$MemoryStream | ConvertFrom-MemoryStreamToString -ErrorAction $userErrorActionPreference
}

'Stream' {
$Stream | ConvertFrom-MemoryStreamToString -ErrorAction $userErrorActionPreference
}
Expand Down
95 changes: 95 additions & 0 deletions src/Tests/Unit/ConvertFrom-MemoryStreamToString.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,101 @@ $function = $MyInvocation.MyCommand.Name.Split('.')[0]

Describe -Name $function -Fixture {

Context -Name 'Stream input (non-MemoryStream)' -Fixture {
It -Name 'Converts FileStream using -Stream parameter' -Test {
$string = 'ThisIsMyString'
$tempFile = [System.IO.Path]::GetTempFileName()
$fileStream = $null
try {
[System.IO.File]::WriteAllText($tempFile, $string)
$fileStream = [System.IO.File]::OpenRead($tempFile)

$assertion = ConvertFrom-MemoryStreamToString -Stream $fileStream

$assertion | Should -BeExactly $string
} finally {
if ($fileStream) { $fileStream.Dispose() }
if (Test-Path $tempFile) { Remove-Item $tempFile -Force }
}
}

It -Name 'Converts FileStream from Pipeline' -Test {
$string = 'ThisIsMyString'
$tempFile = [System.IO.Path]::GetTempFileName()
$fileStream = $null
try {
[System.IO.File]::WriteAllText($tempFile, $string)
$fileStream = [System.IO.File]::OpenRead($tempFile)

$assertion = $fileStream | ConvertFrom-MemoryStreamToString

$assertion | Should -BeExactly $string
} finally {
if ($fileStream) { $fileStream.Dispose() }
if (Test-Path $tempFile) { Remove-Item $tempFile -Force }
}
}

It -Name 'Converts BufferedStream to string' -Test {
$string = 'ThisIsMyString'
$memStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($memStream)
$writer.Write($string)
$writer.Flush()

$bufferedStream = [System.IO.BufferedStream]::new($memStream)

$assertion = ConvertFrom-MemoryStreamToString -Stream $bufferedStream

$assertion | Should -BeExactly $string

$bufferedStream.Dispose()
$writer.Dispose()
$memStream.Dispose()
}

It -Name 'Converts array of FileStreams from Pipeline' -Test {
$string = 'ThisIsMyString'
$tempFile1 = [System.IO.Path]::GetTempFileName()
$tempFile2 = [System.IO.Path]::GetTempFileName()
$stream1 = $null
$stream2 = $null
try {
[System.IO.File]::WriteAllText($tempFile1, $string)
[System.IO.File]::WriteAllText($tempFile2, $string)

$stream1 = [System.IO.File]::OpenRead($tempFile1)
$stream2 = [System.IO.File]::OpenRead($tempFile2)

$assertion = @($stream1, $stream2) | ConvertFrom-MemoryStreamToString

$assertion | Should -HaveCount 2
} finally {
if ($stream1) { $stream1.Dispose() }
if ($stream2) { $stream2.Dispose() }
if (Test-Path $tempFile1) { Remove-Item $tempFile1 -Force }
if (Test-Path $tempFile2) { Remove-Item $tempFile2 -Force }
}
}
}

Context -Name 'Alias' -Fixture {
It -Name 'ConvertFrom-StreamToString alias works' -Test {
$string = 'ThisIsMyString'
$stream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stream)
$writer.Write($string)
$writer.Flush()

$assertion = ConvertFrom-StreamToString -Stream $stream

$assertion | Should -BeExactly $string

$stream.Dispose()
$writer.Dispose()
}
}

Context -Name 'Input/Output' -Fixture {
It -Name "Converts a MemoryStream to a string" -Test {
$string = 'ThisIsMyString'
Expand Down
88 changes: 88 additions & 0 deletions src/Tests/Unit/ConvertTo-String.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,94 @@ Describe -Name $function -Fixture {
}
}

Context -Name 'Stream input' -Fixture {
It -Name 'Converts MemoryStream using -Stream parameter' -Test {
$stream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stream)
$writer.Write($String)
$writer.Flush()

$assertion = ConvertTo-String -Stream $stream

$assertion | Should -BeExactly $String

$writer.Dispose()
$stream.Dispose()
}

It -Name 'Converts FileStream to string' -Test {
$tempFile = [System.IO.Path]::GetTempFileName()
$fileStream = $null
try {
[System.IO.File]::WriteAllText($tempFile, $String)
$fileStream = [System.IO.File]::OpenRead($tempFile)

$assertion = ConvertTo-String -Stream $fileStream

$assertion | Should -BeExactly $String
} finally {
if ($fileStream) { $fileStream.Dispose() }
if (Test-Path $tempFile) { Remove-Item $tempFile -Force }
}
}

It -Name 'Converts FileStream from Pipeline' -Test {
$tempFile = [System.IO.Path]::GetTempFileName()
$fileStream = $null
try {
[System.IO.File]::WriteAllText($tempFile, $String)
$fileStream = [System.IO.File]::OpenRead($tempFile)

$assertion = $fileStream | ConvertTo-String

$assertion | Should -BeExactly $String
} finally {
if ($fileStream) { $fileStream.Dispose() }
if (Test-Path $tempFile) { Remove-Item $tempFile -Force }
}
}

It -Name 'Converts BufferedStream to string' -Test {
$memStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($memStream)
$writer.Write($String)
$writer.Flush()

$bufferedStream = [System.IO.BufferedStream]::new($memStream)

$assertion = ConvertTo-String -Stream $bufferedStream

$assertion | Should -BeExactly $String

$bufferedStream.Dispose()
$writer.Dispose()
$memStream.Dispose()
}

It -Name 'Converts array of FileStreams from Pipeline' -Test {
$tempFile1 = [System.IO.Path]::GetTempFileName()
$tempFile2 = [System.IO.Path]::GetTempFileName()
$stream1 = $null
$stream2 = $null
try {
[System.IO.File]::WriteAllText($tempFile1, $String)
[System.IO.File]::WriteAllText($tempFile2, $String)

$stream1 = [System.IO.File]::OpenRead($tempFile1)
$stream2 = [System.IO.File]::OpenRead($tempFile2)

$assertion = @($stream1, $stream2) | ConvertTo-String

$assertion | Should -HaveCount 2
} finally {
if ($stream1) { $stream1.Dispose() }
if ($stream2) { $stream2.Dispose() }
if (Test-Path $tempFile1) { Remove-Item $tempFile1 -Force }
if (Test-Path $tempFile2) { Remove-Item $tempFile2 -Force }
}
}
}

Context -Name 'MemoryStream input' -Fixture {
It -Name 'Converts to base64 correctly' -Test {
$stream = [System.IO.MemoryStream]::new()
Expand Down