31 lines
1.1 KiB
TypeScript
31 lines
1.1 KiB
TypeScript
import {describe, expect, it} from 'vitest';
|
|
import {Signal} from '../../src/wrapper.js';
|
|
|
|
describe('Dynamic dependencies', () => {
|
|
function run(live) {
|
|
const states = Array.from('abcdefgh').map((s) => new Signal.State(s));
|
|
const sources = new Signal.State(states);
|
|
const computed = new Signal.Computed(() => {
|
|
let str = '';
|
|
for (const state of sources.get()) str += state.get();
|
|
return str;
|
|
});
|
|
if (live) {
|
|
const w = new Signal.subtle.Watcher(() => {});
|
|
w.watch(computed);
|
|
}
|
|
expect(computed.get()).toBe('abcdefgh');
|
|
expect(Signal.subtle.introspectSources(computed).slice(1)).toStrictEqual(states);
|
|
|
|
sources.set(states.slice(0, 5));
|
|
expect(computed.get()).toBe('abcde');
|
|
expect(Signal.subtle.introspectSources(computed).slice(1)).toStrictEqual(states.slice(0, 5));
|
|
|
|
sources.set(states.slice(3));
|
|
expect(computed.get()).toBe('defgh');
|
|
expect(Signal.subtle.introspectSources(computed).slice(1)).toStrictEqual(states.slice(3));
|
|
}
|
|
it('works live', () => run(true));
|
|
it('works not live', () => run(false));
|
|
});
|