this repo has no description
1import assert from 'node:assert/strict'
2import { describe, test } from 'node:test'
3import { findBestAsset, getPlatformInfo, matchAssetName } from '../src/platform.js'
4
5describe('Platform Detection', () => {
6 test('getPlatformInfo returns valid platform info', () => {
7 const info = getPlatformInfo()
8 assert.equal(typeof info.platform, 'string')
9 assert.equal(typeof info.arch, 'string')
10 assert.equal(typeof info.combined, 'string')
11 assert.equal(info.combined, `${info.platform}-${info.arch}`)
12 })
13
14 test('matchAssetName detects macOS assets correctly', () => {
15 const platform = {
16 platform: 'darwin',
17 arch: 'x64',
18 combined: 'darwin-x64',
19 }
20
21 assert.equal(matchAssetName('app-v1.0.0-x86_64-apple-darwin.tar.gz', platform), true)
22 assert.equal(matchAssetName('app-v1.0.0-amd64-macos.zip', platform), true)
23 assert.equal(matchAssetName('app-v1.0.0-x64-darwin.tar.gz', platform), true)
24 assert.equal(matchAssetName('app-v1.0.0-x86_64-apple.tar.gz', platform), true)
25 })
26
27 test('matchAssetName detects Linux assets correctly', () => {
28 const platform = { platform: 'linux', arch: 'x64', combined: 'linux-x64' }
29
30 assert.equal(matchAssetName('app-v1.0.0-x86_64-unknown-linux-gnu.tar.gz', platform), true)
31 assert.equal(matchAssetName('app-v1.0.0-amd64-linux.tar.gz', platform), true)
32 assert.equal(matchAssetName('app-v1.0.0-x64-linux-gnu.tar.gz', platform), true)
33 })
34
35 test('matchAssetName detects Windows assets correctly', () => {
36 const platform = { platform: 'win32', arch: 'x64', combined: 'win32-x64' }
37
38 assert.equal(matchAssetName('app-v1.0.0-x86_64-pc-windows-msvc.zip', platform), true)
39 assert.equal(matchAssetName('app-v1.0.0-amd64-windows.zip', platform), true)
40 assert.equal(matchAssetName('app-v1.0.0-x64-win64.zip', platform), true)
41 assert.equal(matchAssetName('app-v1.0.0-x86_64-win32.zip', platform), true)
42 })
43
44 test('matchAssetName detects ARM64 assets correctly', () => {
45 const platform = {
46 platform: 'darwin',
47 arch: 'arm64',
48 combined: 'darwin-arm64',
49 }
50
51 assert.equal(matchAssetName('app-v1.0.0-aarch64-apple-darwin.tar.gz', platform), true)
52 assert.equal(matchAssetName('app-v1.0.0-arm64-macos.tar.gz', platform), true)
53 })
54
55 test('matchAssetName rejects non-matching assets', () => {
56 const platform = {
57 platform: 'darwin',
58 arch: 'x64',
59 combined: 'darwin-x64',
60 }
61
62 assert.equal(matchAssetName('app-v1.0.0-x86_64-unknown-linux-gnu.tar.gz', platform), false)
63 assert.equal(matchAssetName('app-v1.0.0-aarch64-apple-darwin.tar.gz', platform), false)
64 assert.equal(matchAssetName('app-v1.0.0-x86_64-pc-windows-msvc.zip', platform), false)
65 assert.equal(matchAssetName('app-v1.0.0-source.tar.gz', platform), false)
66 })
67
68 test('findBestAsset returns null for no matches', () => {
69 const platform = {
70 platform: 'darwin',
71 arch: 'x64',
72 combined: 'darwin-x64',
73 }
74 const assets = [
75 'app-v1.0.0-x86_64-unknown-linux-gnu.tar.gz',
76 'app-v1.0.0-aarch64-apple-darwin.tar.gz',
77 'app-v1.0.0-source.tar.gz',
78 ]
79
80 assert.equal(findBestAsset(assets, platform), null)
81 })
82
83 test('findBestAsset returns single match', () => {
84 const platform = {
85 platform: 'darwin',
86 arch: 'x64',
87 combined: 'darwin-x64',
88 }
89 const assets = [
90 'app-v1.0.0-x86_64-unknown-linux-gnu.tar.gz',
91 'app-v1.0.0-x86_64-apple-darwin.tar.gz',
92 'app-v1.0.0-source.tar.gz',
93 ]
94
95 assert.equal(findBestAsset(assets, platform), 'app-v1.0.0-x86_64-apple-darwin.tar.gz')
96 })
97
98 test('findBestAsset prefers tar.gz over zip on non-Windows', () => {
99 const platform = {
100 platform: 'darwin',
101 arch: 'x64',
102 combined: 'darwin-x64',
103 }
104 const assets = ['app-v1.0.0-x86_64-apple-darwin.zip', 'app-v1.0.0-x86_64-apple-darwin.tar.gz']
105
106 assert.equal(findBestAsset(assets, platform), 'app-v1.0.0-x86_64-apple-darwin.tar.gz')
107 })
108
109 test('findBestAsset returns first match when no tar.gz preference', () => {
110 const platform = { platform: 'win32', arch: 'x64', combined: 'win32-x64' }
111 const assets = ['app-v1.0.0-x86_64-pc-windows-msvc.zip', 'app-v1.0.0-x64-windows.zip']
112
113 assert.equal(findBestAsset(assets, platform), 'app-v1.0.0-x86_64-pc-windows-msvc.zip')
114 })
115})