{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-active-expression-proxies/src/client/reactive/test/active-expression/baseActiveExpression.spec.js"],"names":["chai","expect","sinon","sinonChai","BaseActiveExpression","use","describe","it","spy","obj","a","aexpr","onChange","not","to","be","called","checkAndNotify","calledOnce","done","Promise","resolve","reject","setTimeout","o","params","obj1","val","obj2","obj3","o1","o2","o3","calledWith","respondTo","actual","meta","value","equal","get","expr","have","been","getCall","args","property"],"mappings":"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","file":"baseActiveExpression.spec.js","sourcesContent":["'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 { BaseActiveExpression } from '../../active-expression/active-expression.js';\n\ndescribe('Base Active Expressions', () => {\n    it(\"basic callback\", () => {\n        let spy = sinon.spy(),\n            obj = {a:1},\n            aexpr = new BaseActiveExpression(() => obj.a)\n                .onChange(spy);\n      \n        expect(spy).not.to.be.called;\n\n        obj.a = 2;\n        aexpr.checkAndNotify();\n\n        expect(spy).to.be.calledOnce;\n    });\n  \n    it(\"works with promises\", (done) => {\n          let spy = sinon.spy(),\n              obj = {a:1},\n              aexpr = new BaseActiveExpression(() => {\n                return new Promise((resolve, reject) => {\n                  setTimeout(resolve, 1, obj.a);\n                });\n              }).onChange(spy);\n\n          setTimeout(() => {\n            expect(spy).not.to.be.called;\n\n            obj.a = 2;\n            aexpr.checkAndNotify();\n\n            setTimeout(() => {\n              expect(spy).to.be.calledOnce;\n              done();\n            }, 2);\n          }, 2);\n      });\n\n    describe('Parameters', () => {\n        it(\"single parameter\", () => {\n            let spy = sinon.spy(),\n                obj = {a:1},\n                aexpr = new BaseActiveExpression(o => o.a, { params: [obj] })\n                    .onChange(spy);\n\n            expect(spy).not.to.be.called;\n\n            obj.a = 2;\n            aexpr.checkAndNotify();\n\n            expect(spy).to.be.calledOnce;\n        });\n\n        it(\"multiple parameters\", () => {\n            let spy = sinon.spy(),\n                obj1 = {val:1},\n                obj2 = {val:2},\n                obj3 = {val:3},\n                aexpr = new BaseActiveExpression((o1, o2, o3) => o1.val + o2.val + o3.val, { params: [obj1, obj2, obj3] })\n                    .onChange(spy);\n\n            expect(spy).not.to.be.called;\n\n            obj1.val = 10;\n            aexpr.checkAndNotify();\n\n            expect(spy).to.be.calledWith(15);\n\n            obj2.val = 20;\n            aexpr.checkAndNotify();\n\n            expect(spy).to.be.calledWith(33);\n        });\n\n    });\n  describe('meta', () => {\n    it('responds to meta', () => {\n      expect(BaseActiveExpression).to.respondTo('meta');\n    });\n    it('meta is chainable', () => {\n      let aexpr = new BaseActiveExpression(() => {});\n\n      let actual = aexpr.meta({ value: 'expect' });\n      expect(actual).to.equal(aexpr);\n    });\n    it('stores values conveniently', () => {\n      let aexpr = new BaseActiveExpression(() => {});\n\n      aexpr.meta({ value: 'expected' });\n      expect(aexpr.meta().get('value')).to.equal('expected');\n    });\n  });\n  describe('callback parameters', () => {\n    it('params include new value', () => {\n        let spy = sinon.spy(),\n            val = 17,\n            aexpr = new BaseActiveExpression(() => val)\n                .onChange(spy);\n      \n        val = 42;\n        aexpr.checkAndNotify();\n\n        expect(spy).to.be.calledOnce;\n        expect(spy).to.be.calledWith(42);\n    });\n    it('params include analysed function', () => {\n        let val = 17,\n            expr = () => val,\n            spy = sinon.spy(),\n            aexpr = new BaseActiveExpression(expr)\n              .onChange(spy);\n      \n        val = 42;\n        aexpr.checkAndNotify();\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('expr', expr);\n        expect(spy.getCall(0).args[1]).to.have.property('lastValue', 17);\n        expect(spy.getCall(0).args[1]).to.have.property('aexpr', aexpr);\n    });\n  });\n});\n"]}