this repo has no description
at main 115 lines 4.3 kB view raw
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})