Merge pull request #10 from KevinMarquette/develop !deploy
PSScriptAnalyzer integration into Pester tests and correction of any issues
This commit is contained in:
@@ -5,33 +5,37 @@ class Chronometer
|
||||
|
||||
[void]AddBreakpoint([string[]]$Path, [int[]]$LineNumber)
|
||||
{
|
||||
foreach($file in (Resolve-Path $Path -ea 0))
|
||||
if(-not [string]::IsNullOrEmpty($Path))
|
||||
{
|
||||
$script = [MonitoredScript]@{Path=$file.Path}
|
||||
$lines = $script.SetScript($file)
|
||||
if($LineNumber -ne $null)
|
||||
foreach($file in (Resolve-Path $Path -ea 0))
|
||||
{
|
||||
$bpLine = $LineNumber
|
||||
}
|
||||
else
|
||||
{
|
||||
$bpLine = (1..$lines)
|
||||
}
|
||||
$script = [MonitoredScript]@{Path=$file.Path}
|
||||
$lines = $script.SetScript($file)
|
||||
|
||||
$this.fileMap[$file.Path] = $script
|
||||
if($null -ne $LineNumber)
|
||||
{
|
||||
$bpLine = $LineNumber
|
||||
}
|
||||
else
|
||||
{
|
||||
$bpLine = (1..$lines)
|
||||
}
|
||||
|
||||
$breakpointParam = @{
|
||||
Script = $file
|
||||
Line = $bpLine
|
||||
Action = {[ScriptProfiler]::RecordExecution( $_) }
|
||||
$this.fileMap[$file.Path] = $script
|
||||
|
||||
$breakpointParam = @{
|
||||
Script = $file
|
||||
Line = $bpLine
|
||||
Action = {[ScriptProfiler]::RecordExecution( $_) }
|
||||
}
|
||||
$this.breakPoint += Set-PSBreakpoint @breakpointParam
|
||||
}
|
||||
$this.breakPoint += Set-PSBreakpoint @breakpointParam
|
||||
}
|
||||
}
|
||||
|
||||
[void]ClearBreakpoint()
|
||||
{
|
||||
if($this.Breakpoint -ne $null -and $this.Breakpoint.count -gt 0)
|
||||
if($null -ne $this.Breakpoint -and $this.Breakpoint.count -gt 0)
|
||||
{
|
||||
Remove-PSBreakpoint -Breakpoint $this.Breakpoint
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
|
||||
function Write-ScriptLine
|
||||
{
|
||||
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingWriteHost","")]
|
||||
[cmdletbinding()]
|
||||
param(
|
||||
[scriptline]
|
||||
$line,
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
|
||||
|
||||
function Format-Chronometer
|
||||
{
|
||||
<#
|
||||
@@ -9,6 +11,7 @@ function Format-Chronometer
|
||||
$resultes = Get-Chronometer -Path $script.fullname -ScriptBlock {Invoke-Pester C:\workspace\PSGraph}
|
||||
$results | Format-Chronometer -WarnAt 20 -ErrorAt 200
|
||||
#>
|
||||
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingWriteHost","")]
|
||||
[cmdletbinding(DefaultParameterSetName='Script')]
|
||||
param(
|
||||
# This is a MonitoredScript object from Get-Chronometer
|
||||
|
||||
@@ -32,7 +32,7 @@ function Get-Chronometer
|
||||
Write-Verbose "Setting breapoints"
|
||||
$Chronometer.AddBreakpoint($Path,$LineNumber)
|
||||
|
||||
if($Chronometer.breakPoint -ne $null)
|
||||
if($null -ne $Chronometer.breakPoint -and $null -ne $ScriptBlock)
|
||||
{
|
||||
Write-Verbose "Executing Script"
|
||||
[ScriptProfiler]::Start()
|
||||
|
||||
@@ -4,33 +4,47 @@ $moduleName = Split-Path $moduleRoot -Leaf
|
||||
|
||||
Describe "General project validation: $moduleName" -Tags Build {
|
||||
|
||||
$scripts = Get-ChildItem $projectRoot -Include *.ps1,*.psm1,*.psd1 -Recurse | where fullname -notmatch 'classes'
|
||||
Context "Valid Powershell" {
|
||||
$scripts = Get-ChildItem $projectRoot -Include *.ps1,*.psm1,*.psd1 -Recurse | where fullname -notmatch 'classes'
|
||||
# TestCases are splatted to the script so we need hashtables
|
||||
$testCase = $scripts | Foreach-Object{@{file=$_}}
|
||||
|
||||
# TestCases are splatted to the script so we need hashtables
|
||||
$testCase = $scripts | Foreach-Object{@{file=$_}}
|
||||
It "Script <file> should be valid powershell" -TestCases $testCase {
|
||||
param($file)
|
||||
It "Script <file> should be valid powershell" -TestCases $testCase {
|
||||
param($file)
|
||||
|
||||
$file.fullname | Should Exist
|
||||
$file.fullname | Should Exist
|
||||
|
||||
$contents = Get-Content -Path $file.fullname -ErrorAction Stop
|
||||
$errors = $null
|
||||
$null = [System.Management.Automation.PSParser]::Tokenize($contents, [ref]$errors)
|
||||
$errors.Count | Should Be 0
|
||||
$contents = Get-Content -Path $file.fullname -ErrorAction Stop
|
||||
$errors = $null
|
||||
$null = [System.Management.Automation.PSParser]::Tokenize($contents, [ref]$errors)
|
||||
$errors.Count | Should Be 0
|
||||
}
|
||||
|
||||
It "Classes are valid" {
|
||||
$classes = Get-ChildItem $projectRoot -Include *.ps1,*.psm1,*.psd1 -Recurse | where fullname -match 'classes'
|
||||
|
||||
# Must be imported togehter incase they depend on each other
|
||||
$contents = Get-Content -Path $classes.FullName | Out-String
|
||||
|
||||
$errors = $null
|
||||
$null = [System.Management.Automation.PSParser]::Tokenize($contents, [ref]$errors)
|
||||
$errors.Count | Should Be 0
|
||||
}
|
||||
}
|
||||
|
||||
It "Classes are valid" {
|
||||
$classes = Get-ChildItem $projectRoot -Include *.ps1,*.psm1,*.psd1 -Recurse | where fullname -match 'classes'
|
||||
Context "ScriptAnalyzer" {
|
||||
|
||||
# Must be imported togehter incase they depend on each other
|
||||
$contents = Get-Content -Path $classes.FullName | Out-String
|
||||
$scripts = Get-ChildItem $moduleRoot -Include *.ps1,*.psm1,*.psd1 -Recurse | where fullname -notmatch 'classes'
|
||||
$testCase = $scripts | Foreach-Object{@{file=$_}}
|
||||
|
||||
$errors = $null
|
||||
$null = [System.Management.Automation.PSParser]::Tokenize($contents, [ref]$errors)
|
||||
$errors.Count | Should Be 0
|
||||
it "Script <file> should pass ScriptAnalyzer rules" -TestCases $testCase {
|
||||
param($file)
|
||||
|
||||
$file.fullname | Should Exist
|
||||
Invoke-ScriptAnalyzer $file| Should BeNullOrEmpty
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
It "Module '$moduleName' can import cleanly" {
|
||||
{Import-Module (Join-Path $moduleRoot "$moduleName.psm1") -force } | Should Not Throw
|
||||
}
|
||||
|
||||
@@ -11,9 +11,9 @@ param ($Task = 'Default')
|
||||
# Grab nuget bits, install modules, set build variables, start build.
|
||||
Get-PackageProvider -Name NuGet -ForceBootstrap | Out-Null
|
||||
|
||||
Install-Module Psake, PSDeploy, BuildHelpers -force
|
||||
Install-Module Psake, PSDeploy, BuildHelpers, PSScriptAnalyzer -force
|
||||
Install-Module Pester -Force -SkipPublisherCheck
|
||||
Import-Module Psake, BuildHelpers
|
||||
Import-Module Psake, BuildHelpers, PSScriptAnalyzer
|
||||
|
||||
Set-BuildEnvironment
|
||||
|
||||
|
||||
Reference in New Issue
Block a user