rdesign/frontend/node_modules/signal-polyfill/tests/behaviors/dynamic-dependencies.test.ts

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));
});