forked from PowerShell/PowerShell
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathNativeCommandBytePiping.Tests.ps1
More file actions
75 lines (62 loc) · 2.7 KB
/
Copy pathNativeCommandBytePiping.Tests.ps1
File metadata and controls
75 lines (62 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# Functional tests to verify that output from native executables is not encoded
# and decoded when piping to another native executable.
Describe 'Native command byte piping tests' -Tags 'CI' {
BeforeAll {
$originalDefaultParameterValues = $PSDefaultParameterValues.Clone()
# Without this the test would otherwise be hard coded to a specific set
# of [Console]::OutputEncoding/$OutputEncoding settings.
$mangledFFByte = $OutputEncoding.GetBytes(
[Console]::OutputEncoding.GetString(0xFF) + [Environment]::NewLine).
ForEach{ '{0:X2}' -f [int]$_ }
}
AfterAll {
$global:PSDefaultParameterValues = $originalDefaultParameterValues
}
It 'Bytes are retained between native executables' {
testexe -writebytes FF | testexe -readbytes | Should -BeExactly FF
}
It 'Byte literals are retained when piped directly' {
0xFFuy | testexe -readbytes | Should -BeExactly FF
0xBEuy, 0xEFuy | testexe -readbytes | Should -BeExactly BE, EF
,[byte[]](0xBEuy, 0xEFuy) | testexe -readbytes | Should -BeExactly BE, EF
}
It 'Output behavior falls back when stderr is redirected to stdout' {
testexe -writebytes FF 2>&1 | testexe -readbytes | Should -BeExactly $mangledFFByte
}
It 'Bytes are retained when using SMA.PowerShell' {
$ps = $null
try {
$ps = [powershell]::Create().
AddCommand('testexe').AddArgument('-writebytes').AddArgument('FF').
AddCommand('testexe').AddArgument('-readbytes')
$ps.Invoke() | Should -BeExactly 'FF'
} finally {
($ps)?.Dispose()
}
}
It 'Bytes are retained when using SteppablePipeline' {
$pipe = $null
try {
$pipe = { testexe -writebytes FF | testexe -readbytes }.GetSteppablePipeline('Internal')
$pipe.Begin($false)
$pipe.Process()
$pipe.End() | Should -BeExactly 'FF'
} finally {
($pipe)?.Dispose()
}
}
It 'Bytes are retained when redirecting to a file' {
testexe -writebytes FF > $TestDrive/content.bin | Should -BeNullOrEmpty
Get-Content -LiteralPath $TestDrive/content.bin -AsByteStream | Should -Be 0xFFuy
}
It 'Bytes are retained when redirecting to a file and Out-Default is downstream' {
testexe -writebytes FF > $TestDrive/content2.bin | Out-Default
Get-Content -LiteralPath $TestDrive/content2.bin -AsByteStream | Should -Be 0xFFuy
}
It 'Redirecting to $null should emit no output' {
testexe -writebytes FF > $null | Should -BeNullOrEmpty
}
}