UNPKG

@akala/core

Version:
38 lines 1.65 kB
// eslint-disable-next-line @typescript-eslint/no-var-requires import { Parser } from '../index.js'; import { Binding, ObservableObject } from '../observables/object.js'; import assert from 'assert'; import { it } from 'node:test'; const target = { foo: { bar: { a: 1, b: 'x', c: true } } }; it('bindings should work', () => { let changeEventCalled = 0; const binding = new Binding(target, Parser.parameterLess.parse('foo?.bar?.a')); binding.onChanged(ev => { assert.ok(ev.value === undefined || ev.value > 1); changeEventCalled++; }); let subChangeEventCalled = 0; const fooBinding = new Binding(target, Parser.parameterLess.parse('foo?')); const pipedBinding = new Binding(fooBinding, Parser.parameterLess.parse('bar?.a')); pipedBinding.onChanged(ev => { subChangeEventCalled++; }); new ObservableObject(target).setValue('foo', { baz: { d: 2, e: 'y', f: false } }); assert.strictEqual(changeEventCalled, 1); assert.strictEqual(target.foo.bar, undefined); assert.strictEqual(target.foo['baz']['d'], 2); changeEventCalled = 0; new ObservableObject(target.foo).setValue('bar', { a: 2, b: 'y', c: false }); assert.strictEqual(changeEventCalled, 1); assert.strictEqual(target.foo.bar.a, 2); assert.strictEqual(target.foo['baz']['d'], 2); changeEventCalled = 0; new ObservableObject(target.foo.bar).setValue('a', 3); assert.strictEqual(changeEventCalled, 1); assert.strictEqual(target.foo.bar.a, 3); assert.strictEqual(target.foo['baz']['d'], 2); assert.strictEqual(subChangeEventCalled, 3); }); //# sourceMappingURL=binder.js.map