tmagic-editor/packages/dep/tests/Target.spec.ts
2026-05-14 15:26:22 +08:00

96 lines
2.8 KiB
TypeScript

import { describe, expect, test } from 'vitest';
import Target from '../src/Target';
describe('Target', () => {
test('instance', () => {
const target = new Target({
isTarget: () => true,
id: 'target',
});
expect(target).toBeInstanceOf(Target);
});
test('default target type', () => {
const defaultTarget = new Target({
isTarget: () => true,
id: 'default',
type: 'default',
});
const target = new Target({
isTarget: () => true,
id: 'target',
type: 'target',
});
expect(defaultTarget.type).toBe('default');
expect(target.type).toBe('target');
});
test('initialDeps / name / isCollectByDefault 默认值', () => {
const t = new Target({
isTarget: () => true,
id: 't1',
name: 'first',
initialDeps: { node_1: { name: 'n', keys: ['k1'] } },
});
expect(t.name).toBe('first');
expect(t.deps.node_1.keys).toEqual(['k1']);
expect(t.isCollectByDefault).toBe(true);
const t2 = new Target({
isTarget: () => true,
id: 't2',
isCollectByDefault: false,
});
expect(t2.isCollectByDefault).toBe(false);
});
test('updateDep 累加 keys 并保留 name/data', () => {
const t = new Target({ isTarget: () => true, id: 't' });
t.updateDep({ id: 'n1', name: 'n1-name', key: 'key1', data: { foo: 1 } });
expect(t.deps.n1.name).toBe('n1-name');
expect(t.deps.n1.keys).toEqual(['key1']);
expect((t.deps.n1 as any).data).toEqual({ foo: 1 });
t.updateDep({ id: 'n1', name: 'n1-name', key: 'key2', data: { foo: 2 } });
expect(t.deps.n1.keys).toEqual(['key1', 'key2']);
t.updateDep({ id: 'n1', name: 'n1-name', key: 'key1', data: { foo: 3 } });
expect(t.deps.n1.keys).toEqual(['key1', 'key2']);
});
test('removeDep 全删 / 删指定 id / 按 key 删', () => {
const t = new Target({ isTarget: () => true, id: 't' });
t.updateDep({ id: 'n1', name: 'n', key: 'k1', data: {} });
t.updateDep({ id: 'n1', name: 'n', key: 'k2', data: {} });
t.updateDep({ id: 'n2', name: 'n', key: 'k1', data: {} });
t.removeDep('n1', 'k1');
expect(t.deps.n1.keys).toEqual(['k2']);
t.removeDep('n1', 'k2');
expect(t.deps.n1).toBeUndefined();
t.removeDep('n2');
expect(t.deps.n2).toBeUndefined();
t.updateDep({ id: 'a', name: 'a', key: 'k', data: {} });
t.updateDep({ id: 'b', name: 'b', key: 'k', data: {} });
t.removeDep();
expect(Object.keys(t.deps)).toHaveLength(0);
t.removeDep('not-exist');
});
test('hasDep / destroy', () => {
const t = new Target({ isTarget: () => true, id: 't' });
t.updateDep({ id: 'n1', name: 'n', key: 'k', data: {} });
expect(t.hasDep('n1', 'k')).toBe(true);
expect(t.hasDep('n1', 'other')).toBe(false);
expect(t.hasDep('not-exist', 'k')).toBe(false);
t.destroy();
expect(t.deps).toEqual({});
});
});