feat: webapp topbar and tab switching
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
// 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, '原数组不应被改动');
|
||||
});
|
||||
Reference in New Issue
Block a user