From ddf30c4008cf6a12a60e6f79ca4fbef2619c955e Mon Sep 17 00:00:00 2001 From: Douglas Thrift Date: Tue, 13 Sep 2016 13:34:44 -0700 Subject: [PATCH] Use a variable instead of a file for testing args * Use a variable (which can be indexed by line) instead of a file to test the output of arguments passed to echoargs * Add comments explaining the tests --- .../NativeCommandArguments.Tests.ps1 | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/test/powershell/Scripting/NativeExecution/NativeCommandArguments.Tests.ps1 b/test/powershell/Scripting/NativeExecution/NativeCommandArguments.Tests.ps1 index 716aea86a..a55d56ed4 100644 --- a/test/powershell/Scripting/NativeExecution/NativeCommandArguments.Tests.ps1 +++ b/test/powershell/Scripting/NativeExecution/NativeCommandArguments.Tests.ps1 @@ -1,22 +1,41 @@ Describe "Native Command Arguments" -tags "CI" { - $testPath = 'TestDrive:\test.txt' + # Find where test/powershell is so we can find the echoargs command relative to it $powershellTestDir = $PSScriptRoot while ($powershellTestDir -notmatch 'test[\\/]powershell$') { $powershellTestDir = Split-Path $powershellTestDir } $echoArgs = Join-Path (Split-Path $powershellTestDir) tools/EchoArgs/bin/echoargs + # When passing arguments to native commands, quoted segments that contain + # spaces need to be quoted with '"' characters when they are passed to the + # native command (or to bash or sh on Linux). + # + # This test checks that the proper quoting is occuring by passing arguments + # to the echoargs native command and looking at how it got the arguments. It "Should handle quoted spaces correctly" { $a = 'a"b c"d' - & $echoArgs $a 'a"b c"d' a"b c"d >$testPath - $testPath | Should Contain 'Arg 0 is ' - $testPath | Should Contain 'Arg 1 is ' - $testPath | Should Contain 'Arg 2 is ' + $lines = & $echoArgs $a 'a"b c"d' a"b c"d + ($lines | measure).Count | Should Be 3 + $lines[0] | Should Be 'Arg 0 is ' + $lines[1] | Should Be 'Arg 1 is ' + $lines[2] | Should Be 'Arg 2 is ' } + # In order to pass '"' characters so they are actually part of command line + # arguments for native commands, they need to be escaped with a '\' (this + # is in addition to the '`' escaping needed inside '"' quoted strings in + # PowerShell). + # + # This functionality was broken in PowerShell 5.0 and 5.1, so this test + # will fail on those versions unless the fix is backported to them. + # + # This test checks that the proper quoting and escaping is occurring by + # passing arguments with escaped quotes to the echoargs native command and + # looking at how it got the arguments. It "Should handle spaces between escaped quotes" { - & $echoArgs 'a\"b c\"d' "a\`"b c\`"d" >$testPath - $testPath | Should Contain 'Arg 0 is ' - $testPath | Should Contain 'Arg 1 is ' + $lines = & $echoArgs 'a\"b c\"d' "a\`"b c\`"d" + ($lines | measure).Count | Should Be 2 + $lines[0] | Should Be 'Arg 0 is ' + $lines[1] | Should Be 'Arg 1 is ' } }