forked from ScoopInstaller/Scoop
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathScoop-Core.Tests.ps1
240 lines (189 loc) · 7.08 KB
/
Scoop-Core.Tests.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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
. "$psscriptroot\..\lib\core.ps1"
. "$psscriptroot\..\lib\install.ps1"
. "$psscriptroot\..\lib\unix.ps1"
. "$psscriptroot\Scoop-TestLib.ps1"
$repo_dir = (Get-Item $MyInvocation.MyCommand.Path).directory.parent.FullName
$isUnix = is_unix
describe "is_directory" {
beforeall {
$working_dir = setup_working "is_directory"
}
it "is_directory recognize directories" {
is_directory "$working_dir\i_am_a_directory" | Should be $true
}
it "is_directory recognize files" {
is_directory "$working_dir\i_am_a_file.txt" | Should be $false
}
it "is_directory is falsey on unknown path" {
is_directory "$working_dir\i_do_not_exist" | Should be $false
}
}
describe "movedir" {
$extract_dir = "subdir"
$extract_to = $null
beforeall {
$working_dir = setup_working "movedir"
}
it "moves directories with no spaces in path" -skip:$isUnix {
$dir = "$working_dir\user"
movedir "$dir\_tmp\$extract_dir" "$dir\$extract_to"
"$dir\test.txt" | should FileContentMatch "this is the one"
"$dir\_tmp\$extract_dir" | should not exist
}
it "moves directories with spaces in path" -skip:$isUnix {
$dir = "$working_dir\user with space"
movedir "$dir\_tmp\$extract_dir" "$dir\$extract_to"
"$dir\test.txt" | should FileContentMatch "this is the one"
"$dir\_tmp\$extract_dir" | should not exist
# test trailing \ in from dir
movedir "$dir\_tmp\$null" "$dir\another"
"$dir\another\test.txt" | should FileContentMatch "testing"
"$dir\_tmp" | should not exist
}
it "moves directories with quotes in path" -skip:$isUnix {
$dir = "$working_dir\user with 'quote"
movedir "$dir\_tmp\$extract_dir" "$dir\$extract_to"
"$dir\test.txt" | should FileContentMatch "this is the one"
"$dir\_tmp\$extract_dir" | should not exist
}
}
describe "unzip_old" {
beforeall {
$working_dir = setup_working "unzip_old"
}
function test-unzip($from) {
$to = strip_ext $from
if(is_unix) {
unzip_old ($from -replace '\\','/') ($to -replace '\\','/')
} else {
unzip_old ($from -replace '/','\') ($to -replace '/','\')
}
$to
}
context "zip file size is zero bytes" {
$zerobyte = "$working_dir\zerobyte.zip"
$zerobyte | should exist
it "unzips file with zero bytes without error" -skip:$isUnix {
# some combination of pester, COM (used within unzip_old), and Win10 causes a bugged return value from test-unzip
# `$to = test-unzip $zerobyte` * RETURN_VAL has a leading space and complains of $null usage when used in PoSH functions
$to = ([string](test-unzip $zerobyte)).trimStart()
$to | should not match '^\s'
$to | should not be NullOrEmpty
$to | should exist
(gci $to).count | should be 0
}
}
context "zip file is small in size" {
$small = "$working_dir\small.zip"
$small | should exist
it "unzips file which is small in size" -skip:$isUnix {
# some combination of pester, COM (used within unzip_old), and Win10 causes a bugged return value from test-unzip
# `$to = test-unzip $small` * RETURN_VAL has a leading space and complains of $null usage when used in PoSH functions
$to = ([string](test-unzip $small)).trimStart()
$to | should not match '^\s'
$to | should not be NullOrEmpty
$to | should exist
# these don't work for some reason on appveyor
#join-path $to "empty" | should exist
#(gci $to).count | should be 1
}
}
}
describe "shim" {
beforeall {
$working_dir = setup_working "shim"
$shimdir = shimdir
$(ensure_in_path $shimdir) | out-null
}
it "links a file onto the user's path" -skip:$isUnix {
{ get-command "shim-test" -ea stop } | should throw
{ get-command "shim-test.ps1" -ea stop } | should throw
{ get-command "shim-test.cmd" -ea stop } | should throw
{ shim-test } | should throw
shim "$working_dir\shim-test.ps1" $false "shim-test"
{ get-command "shim-test" -ea stop } | should not throw
{ get-command "shim-test.ps1" -ea stop } | should not throw
{ get-command "shim-test.cmd" -ea stop } | should not throw
shim-test | should be "Hello, world!"
}
context "user with quote" {
it "shims a file with quote in path" -skip:$isUnix {
{ get-command "shim-test" -ea stop } | should throw
{ shim-test } | should throw
shim "$working_dir\user with 'quote\shim-test.ps1" $false "shim-test"
{ get-command "shim-test" -ea stop } | should not throw
shim-test | should be "Hello, world!"
}
}
aftereach {
rm_shim "shim-test" $shimdir
}
}
describe "rm_shim" {
beforeall {
$working_dir = setup_working "shim"
$shimdir = shimdir
$(ensure_in_path $shimdir) | out-null
}
it "removes shim from path" -skip:$isUnix {
shim "$working_dir\shim-test.ps1" $false "shim-test"
rm_shim "shim-test" $shimdir
{ get-command "shim-test" -ea stop } | should throw
{ get-command "shim-test.ps1" -ea stop } | should throw
{ get-command "shim-test.cmd" -ea stop } | should throw
{ shim-test } | should throw
}
}
describe "ensure_robocopy_in_path" {
$shimdir = shimdir $false
mock versiondir { $repo_dir }
beforeall {
reset_aliases
}
context "robocopy is not in path" {
it "shims robocopy when not on path" -skip:$isUnix {
mock gcm { $false }
gcm robocopy | should be $false
ensure_robocopy_in_path
"$shimdir/robocopy.ps1" | should exist
"$shimdir/robocopy.exe" | should exist
# clean up
rm_shim robocopy $(shimdir $false) | out-null
}
}
context "robocopy is in path" {
it "does not shim robocopy when it is in path" -skip:$isUnix {
mock gcm { $true }
ensure_robocopy_in_path
"$shimdir/robocopy.ps1" | should not exist
"$shimdir/robocopy.exe" | should not exist
}
}
}
describe 'sanitary_path' {
it 'removes invalid path characters from a string' {
$path = 'test?.json'
$valid_path = sanitary_path $path
$valid_path | should be "test.json"
}
}
describe 'app' {
it 'parses the bucket name from an app query' {
$query = "test"
$app, $bucket = app $query
$app | should be "test"
$bucket | should be $null
$query = "extras/enso"
$app, $bucket = app $query
$app | should be "enso"
$bucket | should be "extras"
$query = "test-app"
$app, $bucket = app $query
$app | should be "test-app"
$bucket | should be $null
$query = "test-bucket/test-app"
$app, $bucket = app $query
$app | should be "test-app"
$bucket | should be "test-bucket"
}
}