import { test } from 'node:test'; import assert from 'node:assert/strict'; import { signal } from '../../YouleNexus/assets/framework/core/reactive.ts'; test('signal: value 读写', () => { const s = signal(1); assert.equal(s.value, 1); s.value = 2; assert.equal(s.value, 2); }); test('signal: subscribe 收到 (value, prev)', () => { const s = signal(1); let got: [number, number] | null = null; s.subscribe((v, p) => { got = [v, p]; }); s.value = 5; assert.deepEqual(got, [5, 1]); }); test('signal: 退订后不再收到', () => { const s = signal(0); let count = 0; const un = s.subscribe(() => { count++; }); s.value = 1; un(); s.value = 2; assert.equal(count, 1); }); test('signal: Object.is 判等,值未变不通知', () => { const s = signal(7); let count = 0; s.subscribe(() => { count++; }); s.value = 7; assert.equal(count, 0); }); test('signal: 一个订阅者抛错不影响其它', () => { const s = signal(0); let reached = false; s.subscribe(() => { throw new Error('boom'); }); s.subscribe(() => { reached = true; }); s.value = 1; assert.equal(reached, true); });