@spearwolf/twopoint5d
Version:
a library to create 2.5d realtime graphics and pixelart with three.js
65 lines • 2.97 kB
JavaScript
import { Vector2 } from 'three';
import { describe, expect, test } from 'vitest';
import { Dependencies } from './Dependencies.js';
const refEquals = (a, b) => a?.current === b?.current;
describe('Dependencies', () => {
test('construction', () => {
const deps = new Dependencies([]);
expect(deps).toBeDefined();
});
test('equals without equality callback', () => {
const deps = new Dependencies(['a', 'b']);
deps.update({ a: 1, b: 'foo' });
expect(deps.equals({ a: 1, b: 'foo' })).toBe(true);
});
test('equals with equality callback', () => {
const deps = new Dependencies([
['a', (a, b) => a === b],
['b', { equals: (a, b) => a === b }],
['c', { equals: refEquals }],
]);
const c = { current: {} };
deps.update({ a: 1, b: 'foo', c });
expect(deps.equals({ a: 1, b: 'foo', c })).toBe(true);
expect(deps.equals({ a: 1, b: 'foo', c: { current: c.current } })).toBe(true);
expect(deps.equals({ a: 2, b: 'foo', c })).toBe(false);
expect(deps.equals({ a: 1, b: 'bar', c })).toBe(false);
expect(deps.equals({ a: 2, b: 'bar', c })).toBe(false);
expect(deps.equals({ a: 1, b: 'foo', c: { current: {} } })).toBe(false);
expect(deps.equals({ a: 1, b: 'foo', c: null })).toBe(false);
expect(deps.equals({ a: 1, b: 'foo', c: undefined })).toBe(false);
expect(deps.equals({ a: 1, b: 'foo' })).toBe(false);
expect(deps.equals({})).toBe(false);
});
test('changed() updates the state', () => {
const deps = new Dependencies([
['a', (a, b) => b === a],
['b', { equals: (a, b) => b === a }],
'c',
'd',
]);
deps.update({ a: 1, b: 'foo', c: undefined });
expect(deps.changed({ a: 2, b: 'fooXXX', c: 23 })).toBe(true);
expect(deps.equals({ a: 2, b: 'fooXXX', c: 23 })).toBe(true);
expect(deps.changed({ a: 2, b: 'fooXXX', c: 23 })).toBe(false);
expect(deps.equals({ a: 2, b: 'fooXXX', c: 23 })).toBe(true);
});
test('copy and clone', () => {
const deps = new Dependencies([Dependencies.cloneable('v')]);
expect(deps.changed({ v: new Vector2() })).toBe(true);
expect(deps.changed({ v: new Vector2() })).toBe(false);
const v = new Vector2(1, 2);
expect(deps.changed({ v })).toBe(true);
const vDeps = { v };
expect(deps.changed(vDeps)).toBe(false);
v.set(2, 3);
expect(deps.changed(vDeps)).toBe(true);
expect(v.equals(new Vector2(2, 3))).toBe(true);
expect(deps.value('v').equals(new Vector2(2, 3))).toBe(true);
expect(deps.value('v')).not.toBe(v);
expect(deps.changed({ v: null })).toBe(true);
expect(deps.changed({ v: undefined })).toBe(false);
expect(deps.changed({})).toBe(false);
});
});
//# sourceMappingURL=Dependencies.spec.js.map