import { describe, expect, it } from 'bun:test' import { firstPort, kernelPorts, modeLabel } from './dashboard.ts' describe('运行模式', () => { it('三个已知模式有中文名', () => { expect(modeLabel('rule')).toBe('规则') expect(modeLabel('global')).toBe('全局') expect(modeLabel('direct')).toBe('直连') }) it('没见过的值原样显示,缺省是破折号', () => { expect(modeLabel('script')).toBe('script') expect(modeLabel(undefined)).toBe('—') expect(modeLabel('')).toBe('—') }) }) describe('代理端口', () => { it('挑出大于 0 的端口,按固定顺序', () => { expect(kernelPorts({ 'mixed-port': 7890, port: 7891, 'socks-port': 0 })).toEqual([ { name: 'port', port: 7891 }, { name: 'mixed-port', port: 7890 }, ]) }) it('0、缺省和非数字都不算启用', () => { expect(kernelPorts({ port: 0, 'socks-port': 'abc' })).toEqual([]) }) it('字符串端口号也认得', () => { expect(kernelPorts({ port: '7890' })).toEqual([{ name: 'port', port: 7890 }]) }) }) describe('探测端口', () => { it('单个端口直接用', () => { expect(firstPort('7890')).toBe(7890) }) it('多端口和区间取第一个数', () => { expect(firstPort('200,302')).toBe(200) expect(firstPort('401-429')).toBe(401) }) it('解析不出或越界返回 null', () => { expect(firstPort('')).toBeNull() expect(firstPort('abc')).toBeNull() expect(firstPort('70000')).toBeNull() }) })