'use strict' const assert = require('node:assert/strict') const path = require('node:path') const test = require('node:test') const { APP_DIR_NAME, serverExeName, xdgDataHome, xdgConfigHome } = require('./platform') // 用绝对路径字符串拼测试目录,避免依赖运行平台的盘符写法 const HOME = path.resolve('/home/operator') const XDG_DATA = path.resolve('/xdg/data') const XDG_CONFIG = path.resolve('/xdg/config') test('目录名两个平台一致,只有它上面那一级不同', () => { assert.equal(APP_DIR_NAME, 'ScoreboardConsole') }) test('服务端可执行文件名按平台取:Windows 带 .exe,Linux 没有后缀', () => { assert.equal(serverExeName('win32'), 'scoreboard.exe') assert.equal(serverExeName('linux'), 'scoreboard') // 不传平台时按 Windows 解析:这是这些纯函数改动前就有的口径 assert.equal(serverExeName(), 'scoreboard.exe') }) test('Linux 用户数据基座:$XDG_DATA_HOME 优先,缺省用 ~/.local/share', () => { assert.equal(xdgDataHome({ XDG_DATA_HOME: XDG_DATA, HOME }), XDG_DATA) assert.equal(xdgDataHome({ HOME }), path.join(HOME, '.local', 'share')) // 空串与纯空格都算「没设」,否则会拼出一个以空格命名的目录 assert.equal(xdgDataHome({ XDG_DATA_HOME: '', HOME }), path.join(HOME, '.local', 'share')) assert.equal(xdgDataHome({ XDG_DATA_HOME: ' ', HOME }), path.join(HOME, '.local', 'share')) }) test('$XDG_DATA_HOME 是相对路径时按规范忽略(规范要求它必须是绝对路径)', () => { assert.equal(xdgDataHome({ XDG_DATA_HOME: 'xdg-data', HOME }), path.join(HOME, '.local', 'share')) }) test('拿不到 $XDG_DATA_HOME 也拿不到 $HOME 时返回 null,由调用方回落安装目录', () => { assert.equal(xdgDataHome({}), null) assert.equal(xdgDataHome(undefined), null) // HOME 是相对路径同样不认:拼出来会是个「相对当前目录」的路径,比没有更糟 assert.equal(xdgDataHome({ HOME: 'home/operator' }), null) }) test('自启目录的基座 $XDG_CONFIG_HOME 是同一套规格', () => { assert.equal(xdgConfigHome({ XDG_CONFIG_HOME: XDG_CONFIG, HOME }), XDG_CONFIG) assert.equal(xdgConfigHome({ HOME }), path.join(HOME, '.config')) assert.equal(xdgConfigHome({ XDG_CONFIG_HOME: 'cfg', HOME }), path.join(HOME, '.config')) assert.equal(xdgConfigHome({}), null) })