forked from pester/Pester
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TestDrive.ps1
160 lines (127 loc) · 5.08 KB
/
TestDrive.ps1
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#
function New-TestDrive ([Switch]$PassThru, [string] $Path) {
if ($Path -notmatch '\S')
{
$directory = New-RandomTempDirectory
}
else
{
if (-not (& $SafeCommands['Test-Path'] -Path $Path))
{
& $SafeCommands['New-Item'] -ItemType Container -Path $Path | & $SafeCommands['Out-Null']
}
$directory = & $SafeCommands['Get-Item'] $Path
}
$DriveName = "TestDrive"
#setup the test drive
if ( -not (& $SafeCommands['Test-Path'] "${DriveName}:\") )
{
& $SafeCommands['New-PSDrive'] -Name $DriveName -PSProvider FileSystem -Root $directory -Scope Global -Description "Pester test drive" | & $SafeCommands['Out-Null']
}
#publish the global TestDrive variable used in few places within the module
if (-not (& $SafeCommands['Test-Path'] "Variable:Global:$DriveName"))
{
& $SafeCommands['New-Variable'] -Name $DriveName -Scope Global -Value $directory
}
if ( $PassThru ) { & $SafeCommands['Get-PSDrive'] -Name $DriveName }
}
function Clear-TestDrive ([String[]]$Exclude) {
$Path = (& $SafeCommands['Get-PSDrive'] -Name TestDrive).Root
if (& $SafeCommands['Test-Path'] -Path $Path )
{
#Get-ChildItem -Exclude did not seem to work with full paths
& $SafeCommands['Get-ChildItem'] -Recurse -Path $Path |
& $SafeCommands['Sort-Object'] -Descending -Property "FullName" |
& $SafeCommands['Where-Object'] { $Exclude -NotContains $_.FullName } |
& $SafeCommands['Remove-Item'] -Force -Recurse
}
}
function New-RandomTempDirectory {
do
{
$tempPath = Get-TempDirectory
$Path = & $SafeCommands['Join-Path'] -Path $tempPath -ChildPath ([Guid]::NewGuid())
} until (-not (& $SafeCommands['Test-Path'] -Path $Path ))
& $SafeCommands['New-Item'] -ItemType Container -Path $Path
}
function Get-TestDriveItem {
<#
.SYNOPSIS
The Get-TestDriveItem cmdlet gets the item in Pester test drive.
.DESCRIPTION
The Get-TestDriveItem cmdlet gets the item in Pester test drive. It does not
get the contents of the item at the location unless you use a wildcard
character (*) to request all the contents of the item.
The function Get-TestDriveItem is deprecated since Pester v. 4.0
and will be deleted in the next major version of Pester.
.PARAMETER Path
Specifies the path to an item. The path need to be relative to TestDrive:.
This cmdlet gets the item at the specified location. Wildcards are permitted.
This parameter is required, but the parameter name ("Path") is optional.
.EXAMPLE
Get-TestDriveItem MyTestFolder\MyTestFile.txt
This command returns the file MyTestFile.txt located in the folder MyTestFolder
what is located under TestDrive.
.LINK
https://github.com/pester/Pester/wiki/TestDrive
about_TestDrive
#>
#moved here from Pester.psm1
param ([string]$Path)
& $SafeCommands['Write-Warning'] -Message "The function Get-TestDriveItem is deprecated since Pester 4.0.0 and will be removed from Pester 5.0.0."
Assert-DescribeInProgress -CommandName Get-TestDriveItem
& $SafeCommands['Get-Item'] $(& $SafeCommands['Join-Path'] $TestDrive $Path )
}
function Get-TestDriveChildItem {
$Path = (& $SafeCommands['Get-PSDrive'] -Name TestDrive).Root
if (& $SafeCommands['Test-Path'] -Path $Path )
{
& $SafeCommands['Get-ChildItem'] -Recurse -Path $Path
}
}
function Remove-TestDrive {
$DriveName = "TestDrive"
$Drive = & $SafeCommands['Get-PSDrive'] -Name $DriveName -ErrorAction $script:IgnoreErrorPreference
$Path = ($Drive).Root
if ($pwd -like "$DriveName*" ) {
#will staying in the test drive cause issues?
#TODO review this
& $SafeCommands['Write-Warning'] -Message "Your current path is set to ${pwd}:. You should leave ${DriveName}:\ before leaving Describe."
}
if ( $Drive )
{
$Drive | & $SafeCommands['Remove-PSDrive'] -Force -ErrorAction $script:IgnoreErrorPreference
}
if (& $SafeCommands['Test-Path'] -Path $Path)
{
& $SafeCommands['Remove-Item'] -Path $Path -Force -Recurse
}
if (& $SafeCommands['Get-Variable'] -Name $DriveName -Scope Global -ErrorAction $script:IgnoreErrorPreference) {
& $SafeCommands['Remove-Variable'] -Scope Global -Name $DriveName -Force
}
}
function Setup {
<#
.SYNOPSIS
This command is included in the Pester Mocking framework for backwards compatibility. You do not need to call it directly.
#>
param(
[switch]$Dir,
[switch]$File,
$Path,
$Content = "",
[switch]$PassThru
)
Assert-DescribeInProgress -CommandName Setup
$TestDriveName = & $SafeCommands['Get-PSDrive'] TestDrive |
& $SafeCommands['Select-Object'] -ExpandProperty Root
if ($Dir) {
$item = & $SafeCommands['New-Item'] -Name $Path -Path "${TestDriveName}\" -Type Container -Force
}
if ($File) {
$item = $Content | & $SafeCommands['New-Item'] -Name $Path -Path "${TestDriveName}\" -Type File -Force
}
if($PassThru) {
return $item
}
}