const test = require('node:test'); const assert = require('node:assert/strict'); const { parsePlatforms, discoverPlatforms, toArchTag } = require('../lib/platforms.js'); test('parsePlatforms handles empty and undefined input', () => { assert.deepEqual(parsePlatforms(''), []); assert.deepEqual(parsePlatforms(null), []); assert.deepEqual(parsePlatforms(undefined), []); assert.deepEqual(parsePlatforms(' '), []); }); test('parsePlatforms parses comma-separated architectures and adds linux/ prefix if omitted', () => { const result = parsePlatforms('amd64, arm64, linux/arm/v7'); assert.deepEqual(result, ['linux/amd64', 'linux/arm64', 'linux/arm/v7']); }); test('discoverPlatforms extracts unique architectures from OCI image manifests', () => { const headManifest = JSON.stringify({ manifests: [ { platform: { architecture: 'amd64', os: 'linux' } }, { platform: { architecture: 'arm64', os: 'linux' } }, { platform: { architecture: 'unknown', os: 'unknown' } }, ], }); const targetManifest = JSON.stringify({ manifests: [ { platform: { architecture: 'amd64', os: 'linux' } }, { platform: { architecture: 'arm', os: 'linux', variant: 'v7' } }, ], }); const result = discoverPlatforms(headManifest, targetManifest); assert.deepEqual(result, ['linux/amd64', 'linux/arm/v7', 'linux/arm64']); }); test('discoverPlatforms safely handles invalid or missing manifest JSON', () => { assert.deepEqual(discoverPlatforms('invalid json', null), []); assert.deepEqual(discoverPlatforms('', '{}'), []); }); test('toArchTag converts platform strings to filesystem-safe arch tags', () => { assert.equal(toArchTag('linux/amd64'), 'amd64'); assert.equal(toArchTag('linux/arm64'), 'arm64'); assert.equal(toArchTag('linux/arm/v7'), 'arm-v7'); assert.equal(toArchTag('amd64'), 'amd64'); });