// tabs.js 纯函数测试:不可变风格,验证 add/remove/switchTo // tabs.js pure-function tests: immutable style, verify add/remove/switchTo const { test } = require('node:test'); const assert = require('node:assert'); const { add, remove, switchTo } = require('../app/src/main/assets/h5/js/webapp/tabs.js'); test('add 不存在时新增并激活,已存在时不重复', () => { let tabs = []; tabs = add(tabs, 'a', '云音乐'); tabs = add(tabs, 'b', '天气'); tabs = add(tabs, 'a', '云音乐'); assert.strictEqual(tabs.length, 2, '重复 id 不应重复添加'); assert.strictEqual(tabs.filter(t => t.active).length, 1, '仅一个激活标签'); assert.strictEqual(tabs.find(t => t.active).id, 'a', '重复添加应重新激活该 id'); }); test('add 不修改传入数组(不可变)', () => { const before = []; const after = add(before, 'a', 'x'); assert.strictEqual(before.length, 0, '原数组不应被改动'); assert.strictEqual(after.length, 1); }); test('remove 删除指定标签', () => { let tabs = [{ id: 'a', name: 'x', active: false }, { id: 'b', name: 'y', active: true }]; tabs = remove(tabs, 'a'); assert.strictEqual(tabs.length, 1); assert.strictEqual(tabs[0].id, 'b'); }); test('switchTo 激活指定 id 且不修改原数组', () => { const before = [{ id: 'a', name: 'x', active: true }, { id: 'b', name: 'y', active: false }]; const after = switchTo(before, 'b'); assert.strictEqual(after.find(t => t.id === 'b').active, true); assert.strictEqual(after.filter(t => t.active).length, 1); assert.strictEqual(before.find(t => t.id === 'b').active, false, '原数组不应被改动'); });