{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-core/src/client/reactive/test/active-expression-rewriting/propagation-logic.spec.js"],"names":["chai","expect","sinon","sinonChai","aexpr","reset","getMember","getAndCallMember","setMember","setMemberAddition","setMemberMultiplication","setMemberDivision","getLocal","setLocal","getGlobal","setGlobal","use","describe","it","obj","prop","func","mul","to","equal","spy","onChange","not","be","called","calledOnce","a","b","withArgs","_scope","val","o","params","obj1","obj2","obj3","o1","o2","o3","spy12","spy23","expr","x","y","z","inc","_scope2","value","window","globalValue","calledWithMatch"],"mappings":"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","file":"propagation-logic.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 {\n    aexpr,\n    reset,\n    getMember,\n    getAndCallMember,\n    setMember,\n    setMemberAddition,\n    setMemberMultiplication,\n    setMemberDivision,\n    getLocal,\n    setLocal,\n    getGlobal,\n    setGlobal\n} from '../../active-expression-rewriting/active-expression-rewriting.js';\n\ndescribe('Propagation Logic', function() {\n\n    it('is a transparent wrapper for property accesses', () => {\n        let obj = {\n            prop: 42,\n            func(mul) { return getMember(this, 'prop') * mul}\n        };\n\n        expect(getMember(obj, 'prop')).to.equal(42);\n        expect(getAndCallMember(obj, 'func', [2])).to.equal(84);\n\n        setMemberDivision(obj, \"prop\", 3);\n\n        expect(getMember(obj, 'prop')).to.equal(14);\n        expect(getAndCallMember(obj, 'func', [2])).to.equal(28);\n    });\n\n    it('should be supported with proper integration', () => {\n        let obj = { prop: 42 },\n            spy = sinon.spy();\n\n        aexpr(() => getMember(obj, \"prop\")).onChange(spy);\n\n        expect(spy).not.to.be.called;\n\n        setMember(obj, \"prop\", 17);\n\n        expect(spy).to.be.calledOnce;\n    });\n\n    it('should recalculate to recognize latest changes', () => {\n        let obj = {\n                prop: 'a',\n                a: 15,\n                b: 32\n            },\n            spy = sinon.spy();\n\n        aexpr(() => getMember(obj, getMember(obj, 'prop'))).onChange(spy);\n\n        setMember(obj, \"a\", 17);\n\n        expect(spy.withArgs(17)).to.be.calledOnce;\n\n        setMember(obj, \"prop\", 'b');\n\n        expect(spy.withArgs(32)).to.be.calledOnce;\n\n        setMember(obj, \"a\", 42);\n\n        expect(spy.withArgs(42)).not.to.be.called;\n\n        setMember(obj, \"b\", 33);\n\n        expect(spy.withArgs(33)).to.be.calledOnce;\n    });\n\n    it('applies the given operator', () => {\n        let obj = {\n                a: 5\n            },\n            spy = sinon.spy();\n\n        aexpr(() => getMember(obj, 'a')).onChange(spy);\n\n        setMemberMultiplication(obj, \"a\", 1);\n\n        expect(spy).not.to.be.called;\n\n        setMemberAddition(obj, \"a\", 2);\n\n        expect(spy.withArgs(7)).to.be.calledOnce;\n    });\n\n    it('retain the this reference semantic', () => {\n        let obj = {\n                a: 5,\n                func() {\n                    return getMember(this, 'a') * 3;\n                }\n            },\n            spy = sinon.spy();\n\n        aexpr(() => getAndCallMember(obj, 'func')).onChange(spy);\n\n        setMember(obj, \"a\", 1);\n\n        expect(spy.withArgs(3)).to.be.calledOnce;\n    });\n\n    it('reset all active expressions', () => {\n        let obj = { prop: 42 },\n            spy = sinon.spy();\n\n        aexpr(() => getMember(obj, \"prop\")).onChange(spy);\n\n        reset();\n\n        setMember(obj, \"prop\", 17);\n\n        expect(spy).not.to.be.called;\n    });\n\n    describe('parametrizable aexprs', () => {\n\n        it('handles a single instance binding', () => {\n            let _scope = {};\n            let obj = { val: 17 },\n                spy = sinon.spy();\n\n            aexpr(o => getMember(o, \"val\"), { params: [(getLocal(_scope, \"obj\"), obj)]}).onChange((getLocal(_scope, \"spy\"), spy));\n\n            expect(spy).not.to.be.called;\n\n            setMember(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) => getMember(o1, \"val\") + getMember(o2, \"val\") + getMember(o3, \"val\"), { params: [obj1, obj2, obj3] }).onChange(spy);\n\n            expect(spy).not.to.be.called;\n\n            setMember(obj1, \"val\", 10);\n\n            expect(spy.withArgs(15)).to.be.calledOnce;\n\n            setMember(obj2, \"val\", 20);\n\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) => getMember(o1, \"val\") + getMember(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            setMember(obj1, \"val\", 10);\n\n            expect(spy12.withArgs(12)).to.be.calledOnce;\n            expect(spy23).not.to.be.called;\n\n            obj2.val = 20;\n            setMember(obj2, \"val\", 20);\n\n            expect(spy12.withArgs(30)).to.be.calledOnce;\n            expect(spy23.withArgs(23)).to.be.calledOnce;\n\n            obj3.val = 30;\n            setMember(obj3, \"val\", 30);\n\n            expect(spy12.withArgs(30)).to.be.calledOnce;\n            expect(spy23.withArgs(50)).to.be.calledOnce;\n        });\n    });\n\n    describe('locals', () => {\n\n        it('is a transparent wrapper for local variables', () => {\n            let _scope = {};\n            var x = 0, y = 1, z = 2;\n\n            let func, inc;\n            {\n                let _scope2 = {};\n                let x = 42;\n                func = function() {\n                    return (getLocal(_scope2, 'x'), x);\n                }, setLocal(_scope, 'func'), func;\n                inc = function() {\n                    x += 1, setLocal(_scope2, 'x'), x;\n                }, setLocal(_scope, 'inc'), inc;\n            }\n\n            expect(func()).to.equal(42);\n\n            x = 17, setLocal(_scope, 'x'), x;\n\n            expect(x).to.equal(17);\n            expect(func()).to.equal(42);\n\n            (getLocal(_scope, 'inc'), inc)();\n\n            expect(x).to.equal(17);\n            expect(func()).to.equal(43);\n        });\n\n        it('should be supported with proper integration', () => {\n            let _scope = {};\n            let value = 17,\n                spy = sinon.spy();\n\n            aexpr(() => (getLocal(_scope, 'value'), value)).onChange(spy);\n\n            expect(spy).not.to.be.called;\n\n            value = 42, setLocal(_scope, 'value'), value;\n\n            expect(spy).to.be.calledOnce;\n        });\n\n        it('should recalculate to recognize latest changes', () => {\n            let _scope = {};\n            let obj = { a: 15 },\n                obj2 =obj,\n                spy = sinon.spy();\n\n            aexpr(() => getMember((getLocal(_scope, 'obj'), obj), 'a')).onChange(spy);\n\n            setMember(obj, \"a\", 17);\n\n            expect(spy.withArgs(17)).to.be.calledOnce;\n\n            obj = { a: 32 }, setLocal(_scope, 'obj'), obj;\n\n            expect(spy.withArgs(32)).to.be.calledOnce;\n\n            setMember(obj2, \"a\", 42);\n\n            expect(spy.withArgs(42)).not.to.be.called;\n\n            setMember(obj, \"a\", 33);\n\n            expect(spy.withArgs(33)).to.be.calledOnce;\n        });\n\n        it('reset all active expressions', () => {\n            let _scope = {};\n            let value = 42,\n                spy = sinon.spy();\n\n            aexpr(() => (getLocal(_scope, \"value\"), value)).onChange(spy);\n\n            reset();\n\n            value = 17, setLocal(_scope, \"value\"), value;\n\n            expect(spy).not.to.be.called;\n        });\n    });\n\n    describe('globals', () => {\n        it('interacts with member accesses on global object', () => {\n            window.globalValue = 17;\n            let spy = sinon.spy();\n\n            aexpr(() => (getGlobal('globalValue'), globalValue)).onChange(spy);\n\n            expect(spy).not.to.be.called;\n\n            globalValue = 33, setGlobal('globalValue'), globalValue;\n\n            expect(spy.withArgs(33)).to.be.calledOnce;\n\n            setMember((getGlobal('window'), window), 'globalValue', 42);\n\n            expect(spy).to.be.calledWithMatch(42);\n        });\n\n        it('should be supported with proper integration', () => {\n            let _scope = {};\n            window.globalValue = 17;\n            let spy = sinon.spy();\n\n            aexpr(() => (getGlobal('globalValue'), globalValue)).onChange(spy);\n\n            expect(spy).not.to.be.called;\n\n            globalValue = 42, setGlobal('globalValue'), globalValue;\n\n            expect(spy).to.be.calledOnce;\n        });\n\n        it('reset all active expressions', () => {\n            globalValue = 42;\n                let spy = sinon.spy();\n\n            aexpr(() => (getGlobal(\"globalValue\"), globalValue)).onChange(spy);\n\n            reset();\n\n            globalValue = 17, setGlobal(\"globalValue\"), globalValue;\n\n            expect(spy).not.to.be.called;\n        });\n    });\n});\n"]}