mirror of
https://github.com/aphrody-labs/PowerShell.git
synced 2026-10-17 04:36:39 +00:00
also fix archive test to be sure it gets the proper archive module (not the one that's somewhere in the filesystem)
222 lines
8.9 KiB
PowerShell
222 lines
8.9 KiB
PowerShell
# This is a Pester test suite to validate the Format-Hex cmdlet in the Microsoft.PowerShell.Utility module.
|
|
#
|
|
# Copyright (c) Microsoft Corporation, 2015
|
|
#
|
|
|
|
<#
|
|
Purpose:
|
|
Verify that Format-Hex display the Hexa decmial value for the input data.
|
|
|
|
Action:
|
|
Run Format-Fex.
|
|
|
|
Expected Result:
|
|
Hexa decimal equivalent of the input data is displayed.
|
|
#>
|
|
|
|
Describe "FormatHex" -tags "CI" {
|
|
BeforeAll {
|
|
Setup -d FormatHexDataDir
|
|
$inputText1 = 'Hello World'
|
|
$inputText2 = 'This is a bit more text'
|
|
$inputFile1 = setup -f "FormatHexDataDir/SourceFile-1.txt" -content $inputText1 -pass
|
|
$inputFile2 = setup -f "FormatHexDataDir/SourceFile-2.txt" -content $inputText2 -pass
|
|
}
|
|
|
|
# This test is to validate to pipeline support in Format-Hex cmdlet.
|
|
It "ValidatePipelineSupport" {
|
|
|
|
# InputObject Parameter set should get invoked and
|
|
# the input data should be treated as string.
|
|
$result = $inputText1 | Format-Hex
|
|
$result | Should Not Be $null
|
|
$result.GetType().Name | Should Be 'ByteCollection'
|
|
$actualResult = $result.ToString()
|
|
($actualResult -match $inputText1) | Should Be $true
|
|
}
|
|
|
|
# This test is to validate to pipeline support in Format-Hex cmdlet.
|
|
It "ValidateByteArrayInputSupport" {
|
|
|
|
# InputObject Parameter set should get invoked and
|
|
# the input data should be treated as byte[].
|
|
$inputBytes = [System.Text.Encoding]::ASCII.GetBytes($inputText1)
|
|
|
|
$result = Format-Hex -InputObject $inputBytes
|
|
$result | Should Not Be $null
|
|
$result.GetType().Name | Should Be 'ByteCollection'
|
|
$actualResult = $result.ToString()
|
|
($actualResult -match $inputText1) | Should Be $true
|
|
}
|
|
|
|
# This test is to validate to input given through Path paramter set in Format-Hex cmdlet.
|
|
It "ValidatePathParameterSet" {
|
|
|
|
$result = Format-Hex -Path $inputFile1
|
|
$result | Should Not Be $null
|
|
$result.GetType().Name | Should Be 'ByteCollection'
|
|
$actualResult = $result.ToString()
|
|
($actualResult -match $inputText1) | Should Be $true
|
|
}
|
|
|
|
# This test is to validate to Path paramter set is considered as default in Format-Hex cmdlet.
|
|
It "ValidatePathAsDefaultParameterSet" {
|
|
|
|
$result = Format-Hex $inputFile1
|
|
$result | Should Not BeNullOrEmpty
|
|
$result.GetType().Name | Should Be 'ByteCollection'
|
|
$actualResult = $result.ToString()
|
|
($actualResult -match $inputText1) | Should Be $true
|
|
}
|
|
|
|
# This test is to validate to input given through LiteralPath paramter set in Format-Hex cmdlet.
|
|
It "ValidateLiteralPathParameterSet" {
|
|
|
|
$result = Format-Hex -LiteralPath $inputFile1
|
|
$result | Should Not BeNullOrEmpty
|
|
$result.GetType().Name | Should Be 'ByteCollection'
|
|
$actualResult = $result.ToString()
|
|
($actualResult -match $inputText1) | Should Be $true
|
|
}
|
|
|
|
# This test is to validate to input given through pipeline. The input being piped from results of Get-hildItem
|
|
It "ValidateFileInfoPipelineInput" {
|
|
|
|
$result = Get-ChildItem $inputFile1 | Format-Hex
|
|
$result | Should Not BeNullOrEmpty
|
|
$result.GetType().Name | Should Be 'ByteCollection'
|
|
$actualResult = $result.ToString()
|
|
($actualResult -match $inputText1) | Should Be $true
|
|
}
|
|
|
|
# This test is to validate Encoding formats functionality of Format-Hex cmdlet.
|
|
It "ValidateEncodingFormats" {
|
|
|
|
$result = Format-Hex -InputObject $inputText1 -Encoding ASCII
|
|
$result | Should Not BeNullOrEmpty
|
|
$result.GetType().Name | Should Be 'ByteCollection'
|
|
$actualResult = $result.ToString()
|
|
($actualResult -match $inputText1) | Should Be $true
|
|
}
|
|
|
|
# This test is to validate that integers can be piped to the format-hex
|
|
It "ValidateIntegerInput" {
|
|
|
|
$result = 1,2,3,4 | Format-Hex
|
|
$result | Should Not BeNullOrEmpty
|
|
$result.GetType().Name | Should Be 'ByteCollection'
|
|
$actualResult = $result.ToString()
|
|
# whitespace sensitive
|
|
$actualResult | should be "00000000 01 02 03 04 .... "
|
|
}
|
|
|
|
# This test is to validate that integers can be piped to the format-hex
|
|
# and properly represented as characters in the string
|
|
It "ValidateIntegerInputThatPresentAsCharacters" {
|
|
|
|
$result = 65..68 | Format-Hex
|
|
$result | Should Not BeNullOrEmpty
|
|
$result.GetType().Name | Should Be 'ByteCollection'
|
|
$actualResult = $result.ToString()
|
|
# whitespace sensitive
|
|
$actualResult | should be "00000000 41 42 43 44 ABCD "
|
|
}
|
|
|
|
# This test is to validate that integers can be piped to the format-hex
|
|
It "ValidateIntegerRawInput" {
|
|
|
|
$result = 1,2,3,4 | Format-Hex -Raw
|
|
$result | Should Not BeNullOrEmpty
|
|
$result.GetType().Name | Should Be 'ByteCollection'
|
|
$actualResult = $result.ToString()
|
|
# whitespace sensitive
|
|
$actualResult | should be "00000000 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 ................"
|
|
}
|
|
|
|
# handle int64
|
|
It "ValidateInteger64" {
|
|
|
|
$result = [int64]::MaxValue | Format-Hex
|
|
$result | Should Not BeNullOrEmpty
|
|
$result.GetType().Name | Should Be 'ByteCollection'
|
|
$actualResult = $result.ToString()
|
|
# whitespace sensitive
|
|
$actualResult | Should Match "00000000 FF FF FF FF FF FF FF 7F ."
|
|
}
|
|
|
|
# handle bytes, int16, int32, and int64
|
|
It "Validate combined and reduced number formatting" {
|
|
$b = 65 # fits in a byte
|
|
$i16 = 32767 # fits in an int16
|
|
$i32 = 2147483647 # an int32
|
|
$i64 = 9223372036854775807 # an int64
|
|
$result = $b,$i16,$i32,$i64 | format-Hex
|
|
$result.GetType().Name | should be 'ByteCollection'
|
|
$actualResult = $result.ToString()
|
|
$actualResult | should Match "00000000 41 FF 7F FF FF FF 7F FF FF FF FF FF FF FF 7F A"
|
|
}
|
|
|
|
# handle bytes, int16, int32, and int64
|
|
It "Validate combined and with raw number formatting" {
|
|
$b = 65 # fits in a byte
|
|
$i16 = 32767 # fits in an int16
|
|
$i32 = 2147483647 # an int32
|
|
$i64 = 9223372036854775807 # an int64
|
|
# this will cause 2 lines to be emitted
|
|
$result = $b,$i16,$i32,$i64 | format-Hex -Raw
|
|
$result[0].GetType().Name | should be 'ByteCollection'
|
|
$result[1].GetType().Name | should be 'ByteCollection'
|
|
$result0 = $result[0].ToString()
|
|
$result0 | should match "00000000 41 00 00 00 FF 7F 00 00 FF FF FF 7F FF FF FF FF A"
|
|
$result1 = $result[1].ToString()
|
|
$result1 | should match "00000010 FF FF FF 7F .."
|
|
}
|
|
|
|
# This test is to validate that streamed text does not have buffer underrun problems
|
|
It "ValidateEachBufferHasCorrectContentForStreamingText" {
|
|
$result = "a" * 30 | Format-Hex
|
|
$result | Should Not BeNullOrEmpty
|
|
$result.GetType().Name | Should Be 'ByteCollection'
|
|
$actualResult = $result.ToString() -split "`r`n"
|
|
$actualResult.Count | should be 2
|
|
$actualResult[0].ToString() | Should be "00000000 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 aaaaaaaaaaaaaaaa"
|
|
$actualResult[1].ToString() | Should be "00000010 61 61 61 61 61 61 61 61 61 61 61 61 61 61 aaaaaaaaaaaaaa "
|
|
}
|
|
|
|
# This test is to validate that files do not have buffer underrun problems
|
|
It "ValidateEachBufferHasCorrectContentForFiles" {
|
|
$result = Format-Hex -path $InputFile2
|
|
$result | Should Not BeNullOrEmpty
|
|
$result.Count | should be 2
|
|
$result[0].ToString() | Should be "00000000 54 68 69 73 20 69 73 20 61 20 62 69 74 20 6D 6F This is a bit mo"
|
|
if ( $IsCoreCLR ) {
|
|
$result[1].ToString() | Should be "00000010 72 65 20 74 65 78 74 re text "
|
|
}
|
|
}
|
|
|
|
# This test ensures that if we stream bytes from a file, the output is correct
|
|
It "ValidateStreamOfBytesFromFileHasProperOutput" {
|
|
$result = Get-Content $InputFile1 -Encoding Byte | Format-Hex
|
|
$result | Should Not BeNullOrEmpty
|
|
$result.GetType().Name | Should Be "ByteCollection"
|
|
if ( $IsCoreCLR ) {
|
|
$result.ToString() | Should be "00000000 48 65 6C 6C 6F 20 57 6F 72 6C 64 Hello World "
|
|
}
|
|
}
|
|
|
|
# This test is to validate the alias for Format-Hex cmdlet.
|
|
It "ValidateCmdletAlias" {
|
|
|
|
try
|
|
{
|
|
$result = Get-Command fhx -ErrorAction Stop
|
|
$result | Should Not BeNullOrEmpty
|
|
$result.CommandType.ToString() | Should Be "Alias"
|
|
}
|
|
catch
|
|
{
|
|
$_ | Should BeNullOrEmpty
|
|
}
|
|
}
|
|
}
|