Clean up Pester tests
This commit is contained in:
126
Docs/en-US/Format-Chronometer.md
Normal file
126
Docs/en-US/Format-Chronometer.md
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
---
|
||||||
|
external help file: chronometer-help.xml
|
||||||
|
Module Name: chronometer
|
||||||
|
online version:
|
||||||
|
schema: 2.0.0
|
||||||
|
---
|
||||||
|
|
||||||
|
# Format-Chronometer
|
||||||
|
|
||||||
|
## SYNOPSIS
|
||||||
|
|
||||||
|
## SYNTAX
|
||||||
|
|
||||||
|
### Script (Default)
|
||||||
|
```
|
||||||
|
Format-Chronometer [-InputObject <MonitoredScript[]>] [-WarningAt <Int32>] [-ErrorAt <Int32>] [-ShowAll]
|
||||||
|
[<CommonParameters>]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Line
|
||||||
|
```
|
||||||
|
Format-Chronometer [-Line <ScriptLine[]>] [-WarningAt <Int32>] [-ErrorAt <Int32>] [-ShowAll]
|
||||||
|
[<CommonParameters>]
|
||||||
|
```
|
||||||
|
|
||||||
|
## DESCRIPTION
|
||||||
|
Generates a report from a Chronometer
|
||||||
|
|
||||||
|
## EXAMPLES
|
||||||
|
|
||||||
|
### EXAMPLE 1
|
||||||
|
```
|
||||||
|
$script = ls C:\workspace\PSGraph\PSGraph -Recurse -Filter *.ps1
|
||||||
|
```
|
||||||
|
|
||||||
|
$resultes = Get-Chronometer -Path $script.fullname -ScriptBlock {Invoke-Pester C:\workspace\PSGraph}
|
||||||
|
$results | Format-Chronometer -WarnAt 20 -ErrorAt 200
|
||||||
|
|
||||||
|
## PARAMETERS
|
||||||
|
|
||||||
|
### -ErrorAt
|
||||||
|
If the average time of a comamand is more than this, the output is red
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: Int32
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: Named
|
||||||
|
Default value: 200
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -InputObject
|
||||||
|
This is a MonitoredScript object from Get-Chronometer
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: MonitoredScript[]
|
||||||
|
Parameter Sets: Script
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: True (ByValue)
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -Line
|
||||||
|
This is a ScriptLine object from a MonitoredScript object
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: ScriptLine[]
|
||||||
|
Parameter Sets: Line
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: True (ByValue)
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -ShowAll
|
||||||
|
Forces the report to show scripts with no execution time
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: SwitchParameter
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: Named
|
||||||
|
Default value: False
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -WarningAt
|
||||||
|
If the average time of a command is more than this, the output is yellow
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: Int32
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: Named
|
||||||
|
Default value: 20
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### CommonParameters
|
||||||
|
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable.
|
||||||
|
For more information, see about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).
|
||||||
|
|
||||||
|
## INPUTS
|
||||||
|
|
||||||
|
## OUTPUTS
|
||||||
|
|
||||||
|
## NOTES
|
||||||
|
|
||||||
|
## RELATED LINKS
|
||||||
88
Docs/en-US/Get-Chronometer.md
Normal file
88
Docs/en-US/Get-Chronometer.md
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
---
|
||||||
|
external help file: chronometer-help.xml
|
||||||
|
Module Name: chronometer
|
||||||
|
online version:
|
||||||
|
schema: 2.0.0
|
||||||
|
---
|
||||||
|
|
||||||
|
# Get-Chronometer
|
||||||
|
|
||||||
|
## SYNOPSIS
|
||||||
|
|
||||||
|
## SYNTAX
|
||||||
|
|
||||||
|
```
|
||||||
|
Get-Chronometer [-Path <Object[]>] [-LineNumber <Int32[]>] [[-ScriptBlock] <ScriptBlock>] [<CommonParameters>]
|
||||||
|
```
|
||||||
|
|
||||||
|
## DESCRIPTION
|
||||||
|
Loads a script and then tracks the line by line execution times
|
||||||
|
|
||||||
|
## EXAMPLES
|
||||||
|
|
||||||
|
### EXAMPLE 1
|
||||||
|
```
|
||||||
|
Get-Chronometer -Path .\example.ps1 -Script {
|
||||||
|
```
|
||||||
|
|
||||||
|
.\example.ps1
|
||||||
|
}
|
||||||
|
|
||||||
|
## PARAMETERS
|
||||||
|
|
||||||
|
### -LineNumber
|
||||||
|
Line numbers within the script file to measure
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: Int32[]
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -Path
|
||||||
|
Script file to measure execution times on
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: Object[]
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: True (ByValue)
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -ScriptBlock
|
||||||
|
The script to start the scrupt or execute other commands
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: ScriptBlock
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases: Script, CommandScript
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: 1
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### CommonParameters
|
||||||
|
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable.
|
||||||
|
For more information, see about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).
|
||||||
|
|
||||||
|
## INPUTS
|
||||||
|
|
||||||
|
## OUTPUTS
|
||||||
|
|
||||||
|
## NOTES
|
||||||
|
|
||||||
|
## RELATED LINKS
|
||||||
19
Docs/en-US/chronometer.md
Normal file
19
Docs/en-US/chronometer.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
Module Name: chronometer
|
||||||
|
Module Guid: f3719c3c-008a-4b25-b94d-fc9f587f62dd
|
||||||
|
Download Help Link: {{Please enter FwLink manually}}
|
||||||
|
Help Version: {{Please enter version of help manually (X.X.X.X) format}}
|
||||||
|
Locale: en-US
|
||||||
|
---
|
||||||
|
|
||||||
|
# chronometer Module
|
||||||
|
## Description
|
||||||
|
{{Manually Enter Description Here}}
|
||||||
|
|
||||||
|
## chronometer Cmdlets
|
||||||
|
### [Format-Chronometer](Format-Chronometer.md)
|
||||||
|
{{Manually Enter Format-Chronometer Description Here}}
|
||||||
|
|
||||||
|
### [Get-Chronometer](Get-Chronometer.md)
|
||||||
|
{{Manually Enter Get-Chronometer Description Here}}
|
||||||
|
|
||||||
16
Tests/Classes/MonitoredScript.Tests.ps1
Normal file
16
Tests/Classes/MonitoredScript.Tests.ps1
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
InModuleScope Chronometer {
|
||||||
|
|
||||||
|
Describe "Class: MonitoredScript" -Tag Build {
|
||||||
|
|
||||||
|
It "Creates an object" {
|
||||||
|
{[MonitoredScript]::New()} | Should Not Throw
|
||||||
|
}
|
||||||
|
|
||||||
|
It "SetScript()" {
|
||||||
|
|
||||||
|
$monitor = [MonitoredScript]::New()
|
||||||
|
{$monitor.SetScript("$PSScriptRoot\..\..\scratchfiles\example.ps1")} | Should Not Throw
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
16
Tests/Classes/ScriptLine.Tests.ps1
Normal file
16
Tests/Classes/ScriptLine.Tests.ps1
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
InModuleScope Chronometer {
|
||||||
|
Describe "Class: ScriptLine" -Tag Build {
|
||||||
|
|
||||||
|
It "Creates an Object" {
|
||||||
|
{[ScriptLine]::New()} | Should Not Throw
|
||||||
|
}
|
||||||
|
|
||||||
|
It "ToString()" {
|
||||||
|
{[ScriptLine]::New().toString()} | Should Not Throw
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Creates an Object" {
|
||||||
|
{[ScriptLine]::New().AddExecutionTime(1)} | Should Not Throw
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
13
Tests/Classes/ScriptProfiler.Tests.ps1
Normal file
13
Tests/Classes/ScriptProfiler.Tests.ps1
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
InModuleScope Chronometer {
|
||||||
|
|
||||||
|
Describe "Class: ScriptProfiler" -Tag Build {
|
||||||
|
|
||||||
|
It "Creates an Object" {
|
||||||
|
{[ScriptProfiler]::New()} | Should Not Throw
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Start()" {
|
||||||
|
{[ScriptProfiler]::Start()} | Should Not Throw
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
Tests/Format-Chronometer.Tests.ps1
Normal file
11
Tests/Format-Chronometer.Tests.ps1
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
Describe "Function: Format-Chronometer" -Tag Build {
|
||||||
|
|
||||||
|
It "Does not throw" {
|
||||||
|
{$null | Format-Chronometer } | Should Not Throw
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Can process a result object without throwing" {
|
||||||
|
$results = Get-Chronometer -Path $PSScriptRoot\..\ScratchFiles\example.ps1 -Script {. "$PSScriptRoot\..\ScratchFiles\example.ps1"}
|
||||||
|
$results | Format-Chronometer *>&1 | Should Not BeNullOrEmpty
|
||||||
|
}
|
||||||
|
}
|
||||||
23
Tests/Get-Chronometer.Tests.ps1
Normal file
23
Tests/Get-Chronometer.Tests.ps1
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
Describe "Function: Get-Chronometer" -Tag Build {
|
||||||
|
It "Does not throw" {
|
||||||
|
# Get-Chronometer -Path ScratchFiles\example.ps1 -Script {"Test"}
|
||||||
|
{Get-Chronometer -Path $PSScriptRoot\..\ScratchFiles\example.ps1 -Script {"Test"} } | Should Not Throw
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Executes a script and gives results" {
|
||||||
|
# Get-Chronometer -Path ScratchFiles\example.ps1 -Script {"Test"}
|
||||||
|
$results = Get-Chronometer -Path $PSScriptRoot\..\ScratchFiles\example.ps1 -Script {. "$PSScriptRoot\..\ScratchFiles\example.ps1"}
|
||||||
|
$results | Should Not BeNullOrEmpty
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Executes a script with linenumbers and gives results" {
|
||||||
|
# Get-Chronometer -Path ScratchFiles\example.ps1 -Script {"Test"}
|
||||||
|
$params = @{
|
||||||
|
Path = "$PSScriptRoot\..\ScratchFiles\example.ps1"
|
||||||
|
Script = {. "$PSScriptRoot\..\ScratchFiles\example.ps1"}
|
||||||
|
LineNumber = 2,3,5,6
|
||||||
|
}
|
||||||
|
$results = Get-Chronometer @params
|
||||||
|
$results | Should Not BeNullOrEmpty
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
$projectRoot = Resolve-Path "$PSScriptRoot\.."
|
|
||||||
$moduleRoot = Split-Path (Resolve-Path "$projectRoot\*\*.psm1")
|
|
||||||
$moduleName = Split-Path $moduleRoot -Leaf
|
|
||||||
|
|
||||||
|
|
||||||
Describe "Help tests for $moduleName" -Tags Build {
|
|
||||||
|
|
||||||
Import-Module (Join-Path $moduleRoot "$moduleName.psm1") -force
|
|
||||||
|
|
||||||
$functions = Get-Command -Module $moduleName
|
|
||||||
$help = $functions | %{Get-Help $_.name}
|
|
||||||
foreach($node in $help)
|
|
||||||
{
|
|
||||||
Context $node.name {
|
|
||||||
|
|
||||||
it "has a description" {
|
|
||||||
$node.description | Should Not BeNullOrEmpty
|
|
||||||
}
|
|
||||||
it "has an example" {
|
|
||||||
$node.examples | Should Not BeNullOrEmpty
|
|
||||||
}
|
|
||||||
foreach($parameter in $node.parameters.parameter)
|
|
||||||
{
|
|
||||||
it "parameter $($parameter.name) has a description" {
|
|
||||||
$parameter.Description.text | Should Not BeNullOrEmpty
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
$projectRoot = Resolve-Path "$PSScriptRoot\.."
|
|
||||||
$moduleRoot = Split-Path (Resolve-Path "$projectRoot\*\*.psd1")
|
|
||||||
$moduleName = Split-Path $moduleRoot -Leaf
|
|
||||||
|
|
||||||
Describe "General project validation: $moduleName" -Tags Build {
|
|
||||||
|
|
||||||
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=$_}}
|
|
||||||
|
|
||||||
It "Script <file> should be valid powershell" -TestCases $testCase {
|
|
||||||
param($file)
|
|
||||||
|
|
||||||
$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
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Context "ScriptAnalyzer" {
|
|
||||||
|
|
||||||
$scripts = Get-ChildItem $moduleRoot -Include *.ps1,*.psm1,*.psd1 -Recurse | where fullname -notmatch 'classes'
|
|
||||||
$testCase = $scripts | Foreach-Object{@{file=$_}}
|
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
$projectRoot = Resolve-Path "$PSScriptRoot\.."
|
|
||||||
$moduleRoot = Split-Path (Resolve-Path "$projectRoot\*\*.psd1")
|
|
||||||
$moduleName = Split-Path $moduleRoot -Leaf
|
|
||||||
|
|
||||||
Describe "Basic unit tests" -Tags Build {
|
|
||||||
|
|
||||||
Import-Module (Join-Path $moduleRoot "$moduleName.psm1") -force
|
|
||||||
|
|
||||||
Context "Function: Get-Chronometer" {
|
|
||||||
it "Does not throw" {
|
|
||||||
# Get-Chronometer -Path ScratchFiles\example.ps1 -Script {"Test"}
|
|
||||||
{Get-Chronometer -Path $PSScriptRoot\..\ScratchFiles\example.ps1 -Script {"Test"} } | Should Not Throw
|
|
||||||
}
|
|
||||||
|
|
||||||
it "Executes a script and gives results" {
|
|
||||||
# Get-Chronometer -Path ScratchFiles\example.ps1 -Script {"Test"}
|
|
||||||
$results = Get-Chronometer -Path $PSScriptRoot\..\ScratchFiles\example.ps1 -Script {. "$PSScriptRoot\..\ScratchFiles\example.ps1"}
|
|
||||||
$results | Should Not BeNullOrEmpty
|
|
||||||
}
|
|
||||||
|
|
||||||
it "Executes a script with linenumbers and gives results" {
|
|
||||||
# Get-Chronometer -Path ScratchFiles\example.ps1 -Script {"Test"}
|
|
||||||
$params = @{
|
|
||||||
Path = "$PSScriptRoot\..\ScratchFiles\example.ps1"
|
|
||||||
Script = {. "$PSScriptRoot\..\ScratchFiles\example.ps1"}
|
|
||||||
LineNumber = 2,3,5,6
|
|
||||||
}
|
|
||||||
$results = Get-Chronometer @params
|
|
||||||
$results | Should Not BeNullOrEmpty
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Context "Function: Format-Chronometer" {
|
|
||||||
|
|
||||||
it "Does not throw" {
|
|
||||||
{$null | Format-Chronometer } | Should Not Throw
|
|
||||||
}
|
|
||||||
|
|
||||||
it "Can process a result object without throwing" {
|
|
||||||
$results = Get-Chronometer -Path $PSScriptRoot\..\ScratchFiles\example.ps1 -Script {. "$PSScriptRoot\..\ScratchFiles\example.ps1"}
|
|
||||||
$results | Format-Chronometer *>&1 | Should Not BeNullOrEmpty
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
InModuleScope $moduleName {
|
|
||||||
Context "Class: ScriptLine" {
|
|
||||||
|
|
||||||
it "Creates an Object" {
|
|
||||||
{[ScriptLine]::New()} | Should Not Throw
|
|
||||||
}
|
|
||||||
it "ToString()" {
|
|
||||||
{[ScriptLine]::New().toString()} | Should Not Throw
|
|
||||||
}
|
|
||||||
it "Creates an Object" {
|
|
||||||
{[ScriptLine]::New().AddExecutionTime(1)} | Should Not Throw
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Context "Class: ScriptProfiler" {
|
|
||||||
|
|
||||||
it "Creates an Object" {
|
|
||||||
{[ScriptProfiler]::New()} | Should Not Throw
|
|
||||||
}
|
|
||||||
it "Start()" {
|
|
||||||
{[ScriptProfiler]::Start()} | Should Not Throw
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Context "Class: MonitoredScript" {
|
|
||||||
it "Creates an object" {
|
|
||||||
{[MonitoredScript]::New()} | Should Not Throw
|
|
||||||
}
|
|
||||||
|
|
||||||
it "SetScript()" {
|
|
||||||
pushd $projectRoot
|
|
||||||
$monitor = [MonitoredScript]::New()
|
|
||||||
{$monitor.SetScript(".\scratchfiles\example.ps1")} | Should Not Throw
|
|
||||||
popd
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user