{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-bp2019/src/client/reactive/test/quarantine/time-based.spec.js"],"names":["chai","expect","sinon","sinonChai","wait","use","check","clearDefaultActiveExpressions","obj","a","b","spy","val","withArgs","getCall","val1","val2","spy1","spy2","spy3","expr","checkAndNotify","o","params","obj1","obj2","obj3","o1","o2","o3","spy12","spy23","referenceTime","now","timeMultiplier","ae","dispose","Date"],"mappings":"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","file":"time-based.spec.js","sourcesContent":["'enable aexpr';\n'use strict';\n\nimport chai, {expect} from 'src/external/chai.js';\nimport sinon from 'src/external/sinon-3.2.1.js';\nimport sinonChai from 'src/external/sinon-chai.js';\nchai.use(sinonChai);\n\nimport { wait } from 'utils';\n\nfunction check() {}\nfunction clearDefaultActiveExpressions() {}\n\ndescribe('Time-based Triggers for Active Expressions', () => {\n    it(\"runs a basic aexpr\", () => {\n        let obj = {a: 2, b: 3},\n            spy = sinon.spy();\n\n        aexpr(() => obj.a).onChange(spy);\n\n        expect(spy.called).to.be.false;\n\n        obj.a = 42;\n\n        expect(spy.calledOnce).to.be.true;\n    });\n\n    it(\"recognize changes to local variables\", () => {\n        let val = 17,\n            spy = sinon.spy();\n\n        aexpr(() => val).onChange(spy);\n\n        val = 42;\n\n        expect(spy.calledOnce).to.be.true;\n    });\n\n    it(\"provide the new value of the expression to the callback\", () => {\n        let val = 17,\n            spy = sinon.spy();\n\n        aexpr(() => val).onChange(spy);\n\n        val = 42;\n\n        expect(spy.withArgs(42).calledOnce).to.be.true;\n    });\n\n    it(\"provide additional information (e.g. the last value of the expression) to the callback\", () => {\n        let val = 17,\n            spy = sinon.spy();\n\n        aexpr(() => val).onChange(spy);\n\n        val = 42;\n\n        expect(spy).to.have.been.calledOnce;\n        expect(spy.getCall(0).args[0]).to.equal(42);\n        expect(spy.getCall(0).args[1]).to.have.property('lastValue', 17);\n    });\n\n    describe('check', () => {\n        it(\"run multiple checks only invokes the callback once\", () => {\n            let val = 17,\n                spy = sinon.spy();\n\n            aexpr(() => val).onChange(spy);\n\n            val = 42;\n\n            expect(spy.calledOnce).to.be.true;\n        });\n\n        it(\"check all active expressions if not specified further\", () => {\n            let val1 = 17,\n                val2 = 33,\n                spy1 = sinon.spy(),\n                spy2 = sinon.spy();\n\n            aexpr(() => val1).onChange(spy1);\n            aexpr(() => val2).onChange(spy2);\n\n            val1 = 42;\n            val2 = 51;\n\n            expect(spy1.calledOnce).to.be.true;\n            expect(spy2.calledOnce).to.be.true;\n        });\n\n        it(\"check all active expressions listening on a property\", () => {\n            let val = 17;\n            const spy1 = sinon.spy();\n            const spy2 = sinon.spy();\n            const spy3 = sinon.spy();\n            aexpr(() => val).onChange(spy1);\n            aexpr(() => val).onChange(spy2);\n            aexpr(() => val).onChange(spy3);\n\n            val = 42;\n\n            expect(spy1.calledOnce).to.be.true;\n            expect(spy2.calledOnce).to.be.true;\n            expect(spy3.calledOnce).to.be.true;\n        });\n\n        // TODO: should this really be part of the API?\n        it(\"check a single active expressions\", () => {\n            let val = 17,\n                spy = sinon.spy(),\n                expr = aexpr(() => val).onChange(spy);\n\n            val = 42;\n            expr.checkAndNotify();\n\n            expect(spy.calledOnce).to.be.true;\n        });\n    });\n\n    describe('parametrizable aexprs', () => {\n        it(\"handle aexprs with one single instance-bindong\", () => {\n            let obj = { val: 17 },\n                spy = sinon.spy();\n\n            aexpr(o => o.val, { params: [obj] }).onChange(spy);\n\n            expect(spy).not.to.be.called;\n\n            obj.val = 42;\n\n            expect(spy).to.be.calledOnce;\n        });\n\n        it(\"handle aexprs with one instance-binding with multiple variables\", () => {\n            let obj1 = { val: 1 },\n                obj2 = { val: 2 },\n                obj3 = { val: 3 },\n                spy = sinon.spy();\n\n            aexpr((o1, o2, o3) => o1.val + o2.val + o3.val, { params: [obj1, obj2, obj3] }).onChange(spy);\n\n            expect(spy).not.to.be.called;\n\n            obj1.val = 10;\n            expect(spy.withArgs(15)).to.be.calledOnce;\n\n            obj2.val = 20;\n            expect(spy.withArgs(33)).to.be.calledOnce;\n        });\n\n        it(\"handle aexprs with multiple instance-bindings\", () => {\n            let obj1 = { val: 1 },\n                obj2 = { val: 2 },\n                obj3 = { val: 3 },\n                spy12 = sinon.spy(),\n                spy23 = sinon.spy(),\n                expr = (o1, o2) => o1.val + o2.val;\n\n            aexpr(expr, { params: [obj1, obj2] }).onChange(spy12);\n            aexpr(expr, { params: [obj2, obj3] }).onChange(spy23);\n\n            expect(spy12).not.to.be.called;\n            expect(spy23).not.to.be.called;\n\n            obj1.val = 10;\n            expect(spy12.withArgs(12)).to.be.calledOnce;\n            expect(spy23).not.to.be.called;\n\n            obj2.val = 20;\n            expect(spy12.withArgs(30)).to.be.calledOnce;\n            expect(spy23.withArgs(23)).to.be.calledOnce;\n\n            obj3.val = 30;\n            expect(spy12.withArgs(30)).to.be.calledOnce;\n            expect(spy23.withArgs(50)).to.be.calledOnce;\n        });\n    });\n\n        // TODO: is this useful?\n    describe('Date.now()', () => {\n        \n      // this should not be here!\n        xit(\"300 ms timerx\", async () => {\n          let spy = sinon.spy();\n          let referenceTime = Date.now();\n          let timeMultiplier = 10;\n\n          // fires in 300 milliseconds\n          aexpr(() => Date.now() >= 300*timeMultiplier + referenceTime).onChange(spy);\n\n          await wait(150*timeMultiplier);\n          expect(spy).not.to.be.called;\n\n          await wait(300*timeMultiplier);\n          expect(spy).to.be.calledOnce;\n        });\n\n        it(\"100 ms timer but aexpr disposed in between\", async () => {\n          let spy = sinon.spy();\n          let referenceTime = Date.now();\n\n          // fires in 100 milliseconds\n          const ae = aexpr(() => Date.now() >= 100 + referenceTime).onChange(spy);\n\n          await wait(50);\n          expect(spy).not.to.be.called;\n\n          ae.dispose();\n\n          await wait(100);\n          expect(spy).not.to.be.called;\n        });\n\n        it(\"new Date()/detects the global Date object, referenced as constructor\", async () => {\n          let spy = sinon.spy();\n          let referenceTime = Date.now();\n\n          // fires in 100 milliseconds\n          aexpr(() => new Date().getTime() >= 100 + referenceTime).onChange(spy);\n          \n          await wait(50);\n          expect(spy).not.to.be.called;\n\n          await wait(100);\n          expect(spy).to.be.calledOnce;\n        });\n\n        it(\"date.toFormattedString\", async () => {\n          let spy = sinon.spy();\n\n          aexpr(() => new Date().toFormattedString('hh.mm.ss')).onChange(spy);\n          \n          await wait(1000);\n          expect(spy).to.be.calledOnce;\n        });\n\n    });\n\n});\n"]}