PowerShell/test/powershell/Set-PSBreakpoint.Tests.ps1

230 lines
7.4 KiB
PowerShell
Raw Normal View History

$ps = Join-Path -Path $PsHome -ChildPath "powershell"
2016-04-20 19:48:08 +02:00
Describe "Set-PSBreakpoint DRT Unit Tests" -Tags DRT {
#Set up
2016-04-11 08:30:46 +02:00
$scriptFileName = Join-Path $TestDrive -ChildPath breakpointTestScript.ps1
2016-04-13 05:27:38 +02:00
$scriptFileNameBug = Join-Path -Path $TestDrive -ChildPath SetPSBreakpointTests.ExposeBug154112.ps1
2016-04-20 19:48:08 +02:00
2016-04-11 08:30:46 +02:00
$contents = @"
function Hello
{
`$greeting = 'Hello, world!'
write-host `$greeting
}
function Goodbye
{
`$message = 'Good bye, cruel world!'
write-host `$message
}
Hello
Goodbye
2016-04-20 19:48:08 +02:00
# The following 2 statements produce null tokens (needed to verify 105473)
#
2016-04-11 08:30:46 +02:00
`$table = @{}
2016-04-20 19:48:08 +02:00
return
"@
$contentsBug = @"
set-psbreakpoint -variable foo
set-psbreakpoint -command foo
2016-04-11 08:30:46 +02:00
"@
$contents > $scriptFileName
2016-04-13 05:27:38 +02:00
$contentsBug > $scriptFileNameBug
2016-04-11 08:30:46 +02:00
2016-04-13 05:27:38 +02:00
It "Should be able to set psbreakpoints for -Line" {
$brk = Set-PSBreakpoint -Line 13 -Script $scriptFileName
$brk.Line | Should Be 13
2016-04-11 08:30:46 +02:00
Remove-PSBreakPoint -Id $brk.Id
2016-04-13 05:27:38 +02:00
}
2016-04-11 08:30:46 +02:00
2016-04-13 05:27:38 +02:00
It "Should be able to set psbreakpoints for -Line and -column" {
$brk = set-psbreakpoint -line 13 -column 1 -script $scriptFileName
$brk.Line | Should Be 13
$brk.Column | Should Be 1
2016-04-11 08:30:46 +02:00
Remove-PSBreakPoint -Id $brk.Id
2016-04-13 05:27:38 +02:00
}
2016-04-11 08:30:46 +02:00
2016-04-13 05:27:38 +02:00
It "Should be able to set psbreakpoints for -Line and -action" {
$brk = set-psbreakpoint -line 13 -action {{ break; }} -script $scriptFileName
$brk.Line | Should Be 13
$brk.Action | Should Match "break"
2016-04-11 08:30:46 +02:00
Remove-PSBreakPoint -Id $brk.Id
2016-04-13 05:27:38 +02:00
}
2016-04-11 08:30:46 +02:00
2016-04-13 05:27:38 +02:00
It "Should be able to set psbreakpoints for -Line, -column and -action" {
$brk = set-psbreakpoint -line 13 -column 1 -action {{ break; }} -script $scriptFileName
$brk.Line | Should Be 13
$brk.Column | Should Be 1
$brk.Action | Should Match "break"
2016-04-11 08:30:46 +02:00
Remove-PSBreakPoint -Id $brk.Id
}
It "-script and -line can take multiple items" {
2016-04-20 19:48:08 +02:00
$brk = sbp -line 11,12,13 -column 1 -script $scriptFileName,$scriptFileName
2016-04-13 05:27:38 +02:00
$brk.Line | Should Be 11,12,13
$brk.Column | Should Be 1
Remove-PSBreakPoint -Id $brk.Id
2016-04-11 08:30:46 +02:00
}
2016-04-13 05:27:38 +02:00
It "-script and -line are positional" {
2016-04-20 19:48:08 +02:00
$brk = sbp $scriptFileName 13
2016-04-13 05:27:38 +02:00
$brk.Line | Should Be 13
Remove-PSBreakPoint -Id $brk.Id
}
2016-04-11 08:30:46 +02:00
2016-04-13 05:27:38 +02:00
It "-script, -line and -column are positional" {
$brk = sbp $scriptFileName 13 1
$brk.Line | Should Be 13
$brk.Column | Should Be 1
Remove-PSBreakPoint -Id $brk.Id
2016-04-11 08:30:46 +02:00
}
It "Should throw Exception when missing mandatory parameter -line" -Pending {
$output = & $ps -noninteractive -command "sbp -column 1 -script $scriptFileName"
[system.string]::Join(" ", $output) | Should Match "MissingMandatoryParameter,Microsoft.PowerShell.Commands.SetPSBreakpointCommand"
2016-04-11 08:30:46 +02:00
}
It "Should throw Exception when missing mandatory parameter" -Pending {
$output = & $ps -noprofile -noninteractive -command "sbp -line 1"
[system.string]::Join(" ", $output) | Should Match "MissingMandatoryParameter,Microsoft.PowerShell.Commands.SetPSBreakpointCommand"
2016-04-20 19:48:08 +02:00
}
2016-04-13 05:27:38 +02:00
It "Should be able to set psbreakpoints for -command" {
2016-04-20 19:48:08 +02:00
$brk = set-psbreakpoint -command "write-host"
2016-04-11 08:30:46 +02:00
$brk.Command | Should Be "write-host"
Remove-PSBreakPoint -Id $brk.Id
2016-04-13 05:27:38 +02:00
}
2016-04-20 19:48:08 +02:00
2016-04-13 05:27:38 +02:00
It "Should be able to set psbreakpoints for -command, -script" {
2016-04-20 19:48:08 +02:00
$brk = set-psbreakpoint -command "write-host" -script $scriptFileName
2016-04-11 08:30:46 +02:00
$brk.Command | Should Be "write-host"
2016-04-13 05:27:38 +02:00
Remove-PSBreakPoint -Id $brk.Id
2016-04-20 19:48:08 +02:00
}
2016-04-11 08:30:46 +02:00
2016-04-13 05:27:38 +02:00
It "Should be able to set psbreakpoints for -command, -action and -script" {
2016-04-20 19:48:08 +02:00
$brk = set-psbreakpoint -command "write-host" -action {{ break; }} -script $scriptFileName
2016-04-11 08:30:46 +02:00
$brk.Action | Should Match "break"
Remove-PSBreakPoint -Id $brk.Id
}
It "-Command can take multiple items" {
2016-04-13 05:27:38 +02:00
$brk = set-psbreakpoint -command write-host,Hello
$brk.Command | Should Be write-host,Hello
2016-04-11 08:30:46 +02:00
Remove-PSBreakPoint -Id $brk.Id
}
It "-Script is positional" {
$brk = set-psbreakpoint -command "Hello" $scriptFileName
2016-04-20 19:48:08 +02:00
$brk.Command | Should Be "Hello"
2016-04-11 08:30:46 +02:00
Remove-PSBreakPoint -Id $brk.Id
2016-04-20 19:48:08 +02:00
$brk = set-psbreakpoint $scriptFileName -command "Hello"
2016-04-11 08:30:46 +02:00
$brk.Command | Should Be "Hello"
Remove-PSBreakPoint -Id $brk.Id
}
It "Should be able to set breakpoints on functions" {
2016-04-20 19:48:08 +02:00
$brk = set-psbreakpoint -command Hello,Goodbye -script $scriptFileName
$brk.Command | Should Be Hello,Goodbye
2016-04-11 08:30:46 +02:00
Remove-PSBreakPoint -Id $brk.Id
2016-04-13 05:27:38 +02:00
}
2016-04-11 08:30:46 +02:00
2016-04-13 05:27:38 +02:00
It "Should be throw Exception when Column number less than 1" {
try {
2016-04-20 19:48:08 +02:00
set-psbreakpoint -line 1 -column -1 -script $scriptFileName
2016-04-13 05:27:38 +02:00
Throw "Execution OK"
}
catch {
$_.FullyQualifiedErrorId | Should Be "ParameterArgumentValidationError,Microsoft.PowerShell.Commands.SetPSBreakpointCommand"
}
}
It "Should be throw Exception when Line number less than 1" {
$ErrorActionPreference = "Stop"
try {
set-psbreakpoint -line -1 -script $scriptFileName
2016-04-20 19:48:08 +02:00
Throw "Execution OK"
2016-04-13 05:27:38 +02:00
}
catch {
$_.FullyQualifiedErrorId | Should Be "SetPSBreakpoint:LineLessThanOne,Microsoft.PowerShell.Commands.SetPSBreakpointCommand"
}
$ErrorActionPreference = "SilentlyContinue"
}
2016-04-20 19:48:08 +02:00
It "Remove implicit script from 'set-psbreakpoint -script'" {
& $ps -noprofile $scriptFileNameBug
2016-04-13 05:27:38 +02:00
$breakpoint = Get-PSBreakpoint -Script $scriptFileNameBug
2016-04-20 19:48:08 +02:00
$breakpoint | Should BeNullOrEmpty
2016-04-11 08:30:46 +02:00
}
2016-04-13 05:27:38 +02:00
It "Fail to set psbreakpoints when script is a file of wrong type" {
$tempFile = [System.IO.Path]::GetTempFileName()
$ErrorActionPreference = "Stop"
2016-04-20 19:48:08 +02:00
{
Set-PSBreakpoint -Script $tempFile -Line 1
2016-04-13 05:27:38 +02:00
} | Should Throw
$ErrorActionPreference = "SilentlyContinue"
Remove-Item $tempFile -Force
2016-04-20 19:48:08 +02:00
}
2016-04-13 05:27:38 +02:00
It "Fail to set psbreakpoints when script file does not exist" {
$ErrorActionPreference = "Stop"
${script.ps1} = 10
{
2016-04-20 19:48:08 +02:00
Set-PSBreakpoint -Script variable:\script.ps1 -Line 1
2016-04-13 05:27:38 +02:00
} | Should Throw
$ErrorActionPreference = "SilentlyContinue"
2016-04-20 19:48:08 +02:00
}
2016-04-13 05:27:38 +02:00
2016-04-20 19:48:08 +02:00
# clean up
2016-04-11 08:30:46 +02:00
Remove-Item -Path $scriptFileName -Force
2016-04-13 05:27:38 +02:00
Remove-Item -Path $scriptFileNameBug -Force
2016-04-11 08:30:46 +02:00
}
Describe "Set-PSBreakpoint" {
2015-12-28 20:05:48 +01:00
# Set up test script
$testScript = Join-Path -Path $PSScriptRoot -ChildPath psbreakpointtestscript.ps1
2015-12-28 20:05:48 +01:00
"`$var = 1 " > $testScript
It "Should be able to set a psbreakpoint on a line" {
2016-04-20 19:48:08 +02:00
$lineNumber = 1
$brk = Set-PSBreakpoint -Line $lineNumber -Script $testScript
$brk.Line | Should Be $lineNumber
Remove-PSBreakPoint -Id $brk.Id
2015-12-28 20:05:48 +01:00
}
It "Should throw when a string is entered for a line number" {
2016-04-20 19:48:08 +02:00
{
$lineNumber = "one"
Set-PSBreakpoint -Line $lineNumber -Script $testScript
2015-12-28 20:05:48 +01:00
2016-04-20 19:48:08 +02:00
} | Should Throw
2015-12-28 20:05:48 +01:00
}
It "Should be able to set a psbreakpoint on a Command" {
2016-04-20 19:48:08 +02:00
$command = "theCommand"
$brk = Set-PSBreakpoint -Command $command -Script $testScript
$brk.Command | Should Be $command
Remove-PSBreakPoint -Id $brk.Id
2015-12-28 20:05:48 +01:00
}
It "Should be able to set a psbreakpoint on a variable" {
2016-04-20 19:48:08 +02:00
$var = "theVariable"
$brk = Set-PSBreakpoint -Command $var -Script $testScript
$brk.Command | Should Be $var
Remove-PSBreakPoint -Id $brk.Id
2015-12-28 20:05:48 +01:00
}
# clean up after ourselves
Remove-Item -Path $testScript
2015-10-22 18:15:19 +02:00
}