forked from ScoopInstaller/Scoop
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Scoop-Manifest.Tests.ps1
86 lines (82 loc) · 4.12 KB
/
Scoop-Manifest.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
BeforeAll {
. "$PSScriptRoot\..\lib\json.ps1"
. "$PSScriptRoot\..\lib\manifest.ps1"
}
Describe 'JSON parse and beautify' -Tag 'Scoop' {
Context 'Parse JSON' {
It 'success with valid json' {
{ parse_json "$PSScriptRoot\fixtures\manifest\wget.json" } | Should -Not -Throw
}
It 'fails with invalid json' {
{ parse_json "$PSScriptRoot\fixtures\manifest\broken_wget.json" } | Should -Throw
}
}
Context 'Beautify JSON' {
BeforeDiscovery {
$manifests = (Get-ChildItem "$PSScriptRoot\fixtures\format\formatted" -File -Filter '*.json').Name
}
BeforeAll {
$format = "$PSScriptRoot\fixtures\format"
}
It '<_>' -ForEach $manifests {
$pretty_json = (parse_json "$format\unformatted\$_") | ConvertToPrettyJson
$correct = (Get-Content "$format\formatted\$_") -join "`r`n"
$correct.CompareTo($pretty_json) | Should -Be 0
}
}
}
Describe 'Handle ARM64 and correctly fallback' -Tag 'Scoop' {
It 'Should return "arm64" if supported' {
$manifest1 = @{ url = 'test'; architecture = @{ 'arm64' = @{ pre_install = 'test' } } }
$manifest2 = @{ url = 'test'; pre_install = "'arm64'" }
$manifest3 = @{ architecture = @{ 'arm64' = @{ url = 'test' } } }
Get-SupportedArchitecture $manifest1 'arm64' | Should -Be 'arm64'
Get-SupportedArchitecture $manifest2 'arm64' | Should -Be 'arm64'
Get-SupportedArchitecture $manifest3 'arm64' | Should -Be 'arm64'
}
It 'Should return "64bit" if unsupported on Windows 11' {
$WindowsBuild = 22000
$manifest1 = @{ url = 'test' }
$manifest2 = @{ architecture = @{ '64bit' = @{ url = 'test' } } }
Get-SupportedArchitecture $manifest1 'arm64' | Should -Be '64bit'
Get-SupportedArchitecture $manifest2 'arm64' | Should -Be '64bit'
}
It 'Should return "32bit" if unsupported on Windows 10' {
$WindowsBuild = 19044
$manifest2 = @{ url = 'test' }
$manifest1 = @{ url = 'test'; architecture = @{ '64bit' = @{ pre_install = 'test' } } }
$manifest3 = @{ architecture = @{ '64bit' = @{ url = 'test' } } }
Get-SupportedArchitecture $manifest1 'arm64' | Should -Be '32bit'
Get-SupportedArchitecture $manifest2 'arm64' | Should -Be '32bit'
Get-SupportedArchitecture $manifest3 'arm64' | Should -BeNullOrEmpty
}
}
Describe 'Manifest Validator' -Tag 'Validator' {
# Could not use backslash '\' in Linux/macOS for .NET object 'Scoop.Validator'
BeforeAll {
Add-Type -Path "$PSScriptRoot\..\supporting\validator\bin\Scoop.Validator.dll"
$schema = "$PSScriptRoot/../schema.json"
}
It 'Scoop.Validator is available' {
([System.Management.Automation.PSTypeName]'Scoop.Validator').Type | Should -Be 'Scoop.Validator'
}
It 'fails with broken schema' {
$validator = New-Object Scoop.Validator("$PSScriptRoot/fixtures/manifest/broken_schema.json", $true)
$validator.Validate("$PSScriptRoot/fixtures/manifest/wget.json") | Should -BeFalse
$validator.Errors.Count | Should -Be 1
$validator.Errors | Select-Object -First 1 | Should -Match 'broken_schema.*(line 6).*(position 4)'
}
It 'fails with broken manifest' {
$validator = New-Object Scoop.Validator($schema, $true)
$validator.Validate("$PSScriptRoot/fixtures/manifest/broken_wget.json") | Should -BeFalse
$validator.Errors.Count | Should -Be 1
$validator.Errors | Select-Object -First 1 | Should -Match 'broken_wget.*(line 5).*(position 4)'
}
It 'fails with invalid manifest' {
$validator = New-Object Scoop.Validator($schema, $true)
$validator.Validate("$PSScriptRoot/fixtures/manifest/invalid_wget.json") | Should -BeFalse
$validator.Errors.Count | Should -Be 16
$validator.Errors | Select-Object -First 1 | Should -Match "Property 'randomproperty' has not been defined and the schema does not allow additional properties\."
$validator.Errors | Select-Object -Last 1 | Should -Match 'Required properties are missing from object: version\.'
}
}