{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-active-expression-proxies/src/client/reactive/test/active-expression-rewriting/dependency-tracking.spec.js"],"names":["reset","chai","expect","sinon","sinonChai","frameBasedAExpr","use","moduleScopedVariable","myIdentifier","_","a","b","readP0Spy","spy","readP0I0Spy","readP0I1Spy","readP0I2Spy","readP1Spy","readP2Spy","writeP0Spy","writeP0I0Spy","writeP0I1Spy","writeP0RestSpy","writeP1Spy","writeRestSpy","obj","p0","p1","p2","v","c","rest","x","i","x0","y","window","x2","keys","x3","x4","holder","prop","A","constructor","arg","B","double","new","target","func","mul","withArgs","calcProp","_scope","val","o","params","obj1","obj2","obj3","o1","o2","o3","spy12","spy23","expr","z","inc","value","globalValue","spyA","spyB","arr","monitor","push","rect","extent","width","spyExtent","spyWidth","d","e","f","b2","c2","d2","e2","c3","d3","e3","d4","e4","e5","f2","f3","f4","f5","computedProp","basicProp","fn","fn2"],"mappings":"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","file":"dependency-tracking.spec.js","sourcesContent":["\"enable aexpr\";\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 {reset} from 'active-expression-rewriting';\nimport * as frameBasedAExpr from \"active-expression-frame-based\";\n\naexpr(()=>{});\n\nlet moduleScopedVariable = 1;\n\n// #TODO: does not yet detect changes to the iterator variable itself\ndescribe('simplify locals', function() {\n  it('easier get', () => {\n    let myIdentifier = 0;\n    let _;\n\n    aexpr(() => myIdentifier).onChange(()=>{});\n\n    _ =  myIdentifier = 2;\n  });\n});\ndescribe('destructuring', function() {\n  it('baseline: do not alter semantics', () => {\n    var [a, b] = [1,2];\n  });\n  xit('baseline: do not alter semantics (complex)', () => {\n    const readP0Spy = sinon.spy();\n    const readP0I0Spy = sinon.spy();\n    const readP0I1Spy = sinon.spy();\n    const readP0I2Spy = sinon.spy();\n    const readP1Spy = sinon.spy();\n    const readP2Spy = sinon.spy();\n\n    const writeP0Spy = sinon.spy();\n    const writeP0I0Spy = sinon.spy();\n    const writeP0I1Spy = sinon.spy();\n    const writeP0RestSpy = sinon.spy();\n    const writeP1Spy = sinon.spy();\n    const writeRestSpy = sinon.spy();\n\n    const obj = {\n      get p0() {\n        readP0Spy();\n        return 'p0'\n      },\n      get p1() {\n        readP0Spy();\n        return 'p1'\n      },\n      get p2() {\n        readP0Spy();\n        return 'p2'\n      }\n    };\n    \n    const a = {\n      set p0(v) {\n        return writeP0Spy(v);\n      }\n    }\n    \n    const b = {\n      set p1(v) {\n        return writeP1Spy(v);\n      }\n    }\n    \n    const c = {\n      set rest(v) {\n        return writeRestSpy(v);\n      }\n    }\n    \n    //({p: [a.p, b.p], p2:c.p, ...e} = o);\n    let x = 0;\n    const spy = sinon.spy();\n    aexpr(() => x).onChange(spy);\n\n    for(var i = 0; i < 3; i += 1) {\n      x += i;\n    }\n    expect(spy).to.be.calledTwice;\n    expect(spy).to.be.calledWithMatch(1);\n    expect(spy).to.be.calledWithMatch(3);\n  });\n});\ndescribe('loop constructs', function() {\n  it('examples that should compile and run', () => {\n    \n    const spy = sinon.spy();\n    for(let x0 = 0;x0 < 5; x0++) {\n      x0;\n      x0 += 1\n      spy(x0)\n    }\n    expect(spy).to.have.been.calledThrice;\n    spy.reset();\n    \n    for(var x0 = 0;x0 < 5; x0++) {\n      x0;\n      x0 += 1\n      spy(x0)\n    }\n    expect(spy).to.have.been.calledThrice;\n    \n    // #TODO: test properly\n    var y =8;\n    for(var x in window) {\n      // console.log(\"x: \" + x)\n      y += x\n      x = 42;\n    }\n    \n    for(var x2 of Object.keys(window)) {\n      // console.log(\"x2: \" + x2)\n      y += x2\n      x2 = 42;\n    }\n    \n    (async () => {\n      for await (var x3 of Object.keys(window)) {\n        // console.log(\"x3: \" + x3)\n        y += x3\n        x3 = 42;\n      }\n    })();\n\n    for(let x4 in window) {\n      // console.log(\"x4: \" + x4)\n      y += x4\n      x4 = 42;\n    }\n\n  });\n  \n  it('for loop/local variable (var)', () => {\n    let x = 0;\n    const spy = sinon.spy();\n    aexpr(() => x).onChange(spy);\n\n    for(var i = 0; i < 3; i += 1) {\n      x += i;\n    }\n    expect(spy).to.be.calledTwice;\n    expect(spy).to.be.calledWithMatch(1);\n    expect(spy).to.be.calledWithMatch(3);\n  });\n  \n  it('for loop/local variable (let)', () => {\n    let x = 0;\n    const spy = sinon.spy();\n    aexpr(() => x).onChange(spy);\n\n    for(let i = 0; i < 3; i += 1) {\n      x += i;\n    }\n    expect(spy).to.be.calledTwice;\n    expect(spy).to.be.calledWithMatch(1);\n    expect(spy).to.be.calledWithMatch(3);\n  });\n  // TODO: we do not yet support tracking iterator variables\n  xit('track changes on iterator variable (var)', () => {\n    const spy = sinon.spy();\n    const holder = {};\n\n    for(var i = 0; i < 3; i += 1) {\n      holder.aexpr = holder.aexpr || aexpr(() => i).onChange(spy);\n    }\n    expect(spy).to.be.calledThrice;\n    expect(spy).to.be.calledWithMatch(1);\n    expect(spy).to.be.calledWithMatch(2);\n    expect(spy).to.be.calledWithMatch(3);\n  });\n  xit('track changes on iterator variable (let)', () => {\n    const spy = sinon.spy();\n    const holder = {};\n\n    for(let i = 0; i < 3; i += 1) {\n      holder.aexpr = holder.aexpr || aexpr(() => i).onChange(spy);\n    }\n    expect(spy).to.be.calledThrice;\n    expect(spy).to.be.calledWithMatch(1);\n    expect(spy).to.be.calledWithMatch(2);\n    expect(spy).to.be.calledWithMatch(3);\n  });\n  it('for-in/local variable (var)', () => {\n    let x = 0;\n    const obj = { a: 42, b: 17 };\n    const spy = sinon.spy();\n    aexpr(() => x).onChange(spy);\n\n    for(var i in obj) {\n      x += obj[i];\n    }\n    expect(spy).to.be.calledTwice;\n    expect(spy).to.be.calledWithMatch(42);\n    expect(spy).to.be.calledWithMatch(59);\n  });\n  it('for-in/local variable (let)', () => {\n    let x = 0;\n    const obj = { a: 42, b: 17 };\n    const spy = sinon.spy();\n    aexpr(() => x).onChange(spy);\n\n    for(let i in obj) {\n      x += obj[i];\n    }\n    expect(spy).to.be.calledTwice;\n    expect(spy).to.be.calledWithMatch(42);\n    expect(spy).to.be.calledWithMatch(59);\n  });\n  it('for-of/local variable (var)', () => {\n    let x = 0;\n    const spy = sinon.spy();\n    aexpr(() => x).onChange(spy);\n\n    for (var a of [1,2,3]) {\n      x += a;\n    }\n    expect(spy).to.be.calledThrice;\n    expect(spy).to.be.calledWithMatch(1);\n    expect(spy).to.be.calledWithMatch(3);\n    expect(spy).to.be.calledWithMatch(6);\n  });\n  it('for-of/local variable (var, defined outside)', () => {\n    let x = 0;\n    const spy = sinon.spy();\n    aexpr(() => x).onChange(spy);\n\n    var a;\n    for (a of [1,2,3]) {\n      x += a;\n    }\n    expect(spy).to.be.calledThrice;\n    expect(spy).to.be.calledWithMatch(1);\n    expect(spy).to.be.calledWithMatch(3);\n    expect(spy).to.be.calledWithMatch(6);\n  });\n  it('for-of/local variable (let)', () => {\n    let x = 0;\n    const spy = sinon.spy();\n    aexpr(() => x).onChange(spy);\n\n    for (let a of [1,2,3]) {\n      x += a;\n    }\n    expect(spy).to.be.calledThrice;\n    expect(spy).to.be.calledWithMatch(1);\n    expect(spy).to.be.calledWithMatch(3);\n    expect(spy).to.be.calledWithMatch(6);\n  });\n  // TODO: we do not yet support tracking quasi-assignments in loops\n  xit('for-of/object member', () => {\n    let obj = { prop: 0 };\n    const spy = sinon.spy();\n    aexpr(() => obj.prop).onChange(spy);\n\n    for (obj.prop of [1,2,3]) {\n    }\n    expect(spy).to.be.calledThrice;\n    expect(spy).to.be.calledWithMatch(1);\n    expect(spy).to.be.calledWithMatch(3);\n    expect(spy).to.be.calledWithMatch(6);\n  });\n  xit('for-of/destructuring to members', () => {\n    let obj = { prop: 0 };\n    const spy = sinon.spy();\n    aexpr(() => obj.prop).onChange(spy);\n\n    for ([obj.prop] of [[1],[2],[3]]) {\n    }\n    expect(spy).to.be.calledThrice;\n    expect(spy).to.be.calledWithMatch(1);\n    expect(spy).to.be.calledWithMatch(3);\n    expect(spy).to.be.calledWithMatch(6);\n  });\n  xit('for-of/destructuring to var and members', () => {\n    var a = 0;\n    const spy = sinon.spy();\n    aexpr(() => a).onChange(spy);\n\n    for ([a] of [[1],[2],[3]]) {\n    }\n    expect(spy).to.be.calledThrice;\n    expect(spy).to.be.calledWithMatch(1);\n    expect(spy).to.be.calledWithMatch(3);\n    expect(spy).to.be.calledWithMatch(6);\n  });\n});\n\n// #TODO: spread arguments\n\ndescribe('super', () => {\n  \n  it('source transform allows for super', () => {\n    class A {\n      constructor(arg) {\n        this.value = 42 + arg;\n      }\n    }\n    \n    class B extends A {\n      constructor(arg) {\n        super(arg);\n      }\n    }\n    \n    expect(new B('b')).to.have.property('value', '42b');\n  });\n\n  it('source transform allows for super.func(x)', () => {\n    class A {\n      double(arg) {\n        return arg * 2;\n      }\n    }\n    \n    class B extends A {\n      double(arg) {\n        return super.double(arg) * 3;\n      }\n    }\n    \n    expect(new B().double(1)).to.equal(6);\n  });\n\n});\n\ndescribe('new.target', () => {\n  \n  it('source transform allows for new.target', () => {\n    class A {\n      constructor() {\n        this.myClass = new.target;\n      }\n    }\n    \n    expect(new A()).to.have.property('myClass', A);\n  });\n\n  it('new.target works correctly for subclasses', () => {\n    class A {\n      constructor() {\n        this.myClass = new.target;\n      }\n    }\n    \n    class B extends A {\n      constructor() {\n        super();\n        expect(new.target).to.equal(B);\n      }\n    }\n    \n    expect(new B()).to.have.property('myClass', B);\n  });\n\n  it('new.target as part of a member expression', () => {\n    class A {\n      constructor() {\n        this.myClassName = new.target.name;\n      }\n    }\n    \n    expect(new A()).to.have.property('myClassName', 'A');\n  });\n\n});\n\ndescribe('Propagation Logic', function() {\n  it('is a transparent wrapper for property accesses', () => {\n    let obj = {\n      prop: 42,\n      func(mul) { return this.prop * mul}\n    };\n\n    expect(obj.prop).to.equal(42);\n    expect(obj.func(2)).to.equal(84);\n\n    obj.prop /= 3;\n\n    expect(obj.prop).to.equal(14);\n    expect(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(() => obj.prop).onChange(spy);\n    expect(spy).not.to.be.called;\n\n    obj.prop = 17;\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    let spy = sinon.spy();\n\n    aexpr(() => obj[obj.prop]).onChange(spy);\n\n    obj.a = 17;\n    expect(spy.withArgs(17)).to.be.calledOnce;\n\n    obj.prop = 'b';\n    expect(spy.withArgs(32)).to.be.calledOnce;\n\n    obj.a = 42;\n    expect(spy.withArgs(42)).not.to.be.called;\n\n    obj.b = 33;\n    expect(spy.withArgs(33)).to.be.calledOnce;\n  });\n\n  it('applies the given operator', () => {\n    let obj = {\n      a: 5\n    };\n    let spy = sinon.spy();\n\n    aexpr(() => obj.a).onChange(spy);\n\n    obj.a *= 1;\n    expect(spy).not.to.be.called;\n\n    obj.a += 2;\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() { return this.a * 3; }\n    };\n    let spy = sinon.spy();\n\n    aexpr(() => obj.func()).onChange(spy);\n\n    obj.a = 1;\n\n    expect(spy.withArgs(3)).to.be.calledOnce;\n  });\n  \n  it('reset all active expressions', () => {\n    const obj = {\n      get calcProp() { return this.x + this.y; },\n      x: 42,\n      y: 17\n    },\n        spy = sinon.spy();\n\n    aexpr(() => obj.calcProp).onChange(spy);\n\n    obj.x = 33;\n    expect(spy).to.be.calledWith(50);\n  });\n\n  it('reset all active expressions', () => {\n    let obj = { prop: 42 },\n        spy = sinon.spy();\n\n    aexpr(() => obj.prop).onChange(spy);\n\n    reset();\n\n    obj.prop = 17;\n    expect(spy).not.to.be.called;\n  });\n\n  describe('parametrizable aexprs', () => {\n    afterEach(() => {\n      reset();\n    });\n\n    it('handles a single instance binding', () => {\n      let _scope = {};\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\n      expect(spy.withArgs(15)).to.be.calledOnce;\n\n      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) => 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\n      expect(spy12.withArgs(12)).to.be.calledOnce;\n      expect(spy23).not.to.be.called;\n\n      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\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      var x = 0, y = 1, z = 2;\n\n      let func, inc;\n      {\n        let x = 42;\n        func = function() {\n          return x;\n        };\n        inc = function() {\n          x += 1;\n        };\n      }\n\n      expect(func()).to.equal(42);\n\n      x = 17;\n\n      expect(x).to.equal(17);\n      expect(func()).to.equal(42);\n\n      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 value = 17,\n          spy = sinon.spy();\n\n      aexpr(() => value).onChange(spy);\n\n      expect(spy).not.to.be.called;\n\n      value = 42;\n      expect(spy).to.be.calledOnce;\n    });\n\n    it('should recalculate to recognize latest changes', () => {\n      let obj = { a: 15 },\n          obj2 = obj,\n          spy = sinon.spy();\n\n      aexpr(() => obj.a).onChange(spy);\n\n      obj.a = 17;\n      expect(spy.withArgs(17)).to.be.calledOnce;\n\n      obj = { a: 32 };\n      expect(spy.withArgs(32)).to.be.calledOnce;\n\n      obj2.a = 42;\n      expect(spy.withArgs(42)).not.to.be.called;\n\n      obj.a = 33;\n      expect(spy.withArgs(33)).to.be.calledOnce;\n    });\n\n    it('reset all active expressions', () => {\n      let value = 42,\n          spy = sinon.spy();\n\n      aexpr(() => value).onChange(spy);\n\n      reset();\n\n      value = 17;\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(() => globalValue).onChange(spy);\n      expect(spy).not.to.be.called;\n\n      globalValue = 33;\n      expect(spy.withArgs(33)).to.be.calledOnce;\n\n      window.globalValue = 42;\n      expect(spy).to.be.calledWithMatch(42);\n    });\n\n    it('should be supported with proper integration', () => {\n      window.globalValue = 17;\n      let spy = sinon.spy();\n\n      aexpr(() => globalValue).onChange(spy);\n      expect(spy).not.to.be.called;\n\n      globalValue = 42;\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(() => globalValue).onChange(spy);\n\n      reset();\n\n      globalValue = 17;\n      expect(spy).not.to.be.called;\n    });\n  });\n\n  it('aexpr ordering', () => {\n    let a = 1;\n    let b = 1;\n    let spyA = sinon.spy(),\n        spyB = sinon.spy();\n\n    aexpr(() => a).onChange(spyA);\n    aexpr(() => b).onChange(spyB);\n\n    a = b = 2;\n    expect(spyA).to.be.calledAfter(spyB);\n  });\n\n  xit('support assignments in aexprs', () => {\n    let a = 1;\n    let b = 1;\n    let spy = sinon.spy();\n\n    aexpr(() => {\n      b = b + 1; // #TODO: do we even want to support this?\n      return a;\n    }).onChange(spy);\n\n    a = 2;\n    expect(spy).to.be.calledOnce;\n  });\n\n  xit('monitor collections for change', () => {\n    let arr = [1,2];\n    let spy = sinon.spy();\n    \n    monitorCollection(); // or\n    arr::monitor().onChange(spy);\n    \n    arr.push(3);\n    expect(spy).to.be.calledOnce;\n  });\n\n  describe('module-scoped variables', () => {\n    it('track assignment to module-scoped variable', () => {\n      const spy = sinon.spy();\n\n      aexpr(() => moduleScopedVariable).onChange(spy);\n      expect(spy).not.to.be.called;\n\n      moduleScopedVariable = 2;\n      expect(spy).to.be.calledWithMatch(2);\n    })\n  });\n\n  describe('members', () => {\n    it('triggers correct callbacks', () => {\n      let rect = {\n        extent: { x: 2, y: 2 },\n        width() { return this.extent.x; }\n      };\n\n      let spyExtent = sinon.spy(),\n          spyWidth = sinon.spy();\n\n      aexpr(() => rect.width()).onChange(spyWidth);\n      aexpr(() => rect.extent).onChange(spyExtent);\n\n      rect.extent = { x: 2, y: 2 };\n      expect(spyWidth).not.to.be.called;\n      expect(spyExtent).to.be.calledWithMatch({ x: 2, y: 2 });\n      spyExtent.reset();\n\n      rect.extent.x = 3;\n      expect(spyWidth).to.be.calledWithMatch(3);\n      expect(spyExtent).not.to.be.called;\n    });    \n\n    describe('nested members', () => {\n      it('handle nested members', () => {\n        let a = { b: { c: { d: { e: { f: 1 } } } } };\n        let spy = sinon.spy();\n\n        aexpr(() => a.b.c.d.e.f).onChange(spy);\n\n        a.b = { c: { d: { e: { f: 2 } } } };\n        expect(spy).to.be.calledWithMatch(2);\n\n        a.b.c = { d: { e: { f: 3 } } };\n        expect(spy).to.be.calledWithMatch(3);\n\n        a.b.c.d = { e: { f: 4 } };\n        expect(spy).to.be.calledWithMatch(4);\n\n        a.b.c.d.e = { f: 5 };\n        expect(spy).to.be.calledWithMatch(5);\n\n        a.b.c.d.e.f = 6;\n        expect(spy).to.be.calledWithMatch(6);\n      });\n      \n      it('handle nested member functions', () => {\n        let a = { b() { return b; } };\n        let b = { c() { return c; } };\n        let c = { d() { return d; } };\n        let d = { e() { return e; } };\n        let e = { f() { return 1; } };\n        let b2 = { c() { return c2; } };\n        let c2 = { d() { return d2; } };\n        let d2 = { e() { return e2; } };\n        let e2 = { f() { return 2; } };\n        let c3 = { d() { return d3; } };\n        let d3 = { e() { return e3; } };\n        let e3 = { f() { return 3; } };\n        let d4 = { e() { return e4; } };\n        let e4 = { f() { return 4; } };\n        let e5 = { f() { return 5; } };\n        let spy = sinon.spy();\n\n        aexpr(() => a.b().c().d().e().f()).onChange(spy);\n        \n        a.b = () => b2;\n        expect(spy).to.be.calledWithMatch(2);\n\n        a.b().c = () => c3;\n        expect(spy).to.be.calledWithMatch(3);\n\n        a.b().c().d = () => d4;\n        expect(spy).to.be.calledWithMatch(4);\n\n        a.b().c().d().e = () => e5;\n        expect(spy).to.be.calledWithMatch(5);\n      });\n      \n      it('handle nested mixed members and member functions', () => {\n        let f = 1;\n        let d = { e: { f() { return f; } } };\n        let b = { c: { d() { return d; } } };\n        let a = { b() { return b; } };\n\n        let f2 = 2;\n        let e2 = { f() { return f2; } };\n        let d2 = { e: e2 };\n        let c2 = { d() { return d2; } };\n        let b2 = { c: c2 };\n        \n        let f3 = 3;\n        let e3 = { f() { return f3; } };\n        let d3 = { e: e3 };\n        let c3 = { d() { return d3; } };\n\n        let f4 = 4;\n        let e4 = { f() { return f4; } };\n        let d4 = { e: e4 };\n\n        let f5 = 5;\n        let e5 = { f() { return f5; } };\n\n        let spy = sinon.spy();\n\n        aexpr(() => a.b().c.d().e.f()).onChange(spy);\n\n        a.b = () => b2;\n        expect(spy).to.be.calledWithMatch(2);\n\n        a.b().c = c3;\n        expect(spy).to.be.calledWithMatch(3);\n\n        a.b().c.d = () => d4;\n        expect(spy).to.be.calledWithMatch(4);\n\n        a.b().c.d().e = e5;\n        expect(spy).to.be.calledWithMatch(5);\n\n        a.b().c.d().e = { f() { return 6; }};\n        expect(spy).to.be.calledWithMatch(6);\n      });\n    });\n    it('binds `this` correctly', () => {\n      const obj = {\n        get computedProp() { return this.basicProp + 1 },\n        set computedProp(value) { return this.basicProp = value -1; },\n        basicProp: 'basicProp'\n      }\n      const spy = sinon.spy();\n\n      expect(obj.computedProp).to.equal(obj.basicProp + 1);\n      \n      aexpr(() => obj.computedProp).onChange(spy);\n\n      obj.computedProp = 5;\n      expect(spy).to.be.calledOnce;\n      expect(spy).to.be.calledWith(5);\n      expect(obj.basicProp).to.equal(4);\n    });\n  });\n});\n\ndescribe(\"misc\", () => {\n  it(\"rewrite call expression in sequence expression does not result in stack overflow\", () => {\n    const obj = {\n      x: 3,\n      fn() {\n        return this.x;\n      }\n    };\n    \n    (obj.fn(), obj.fn());\n  });\n  it(\"rewrite member expression with Identifier as property\", () => {\n    const obj = {\n      x: 3,\n      fn() {\n        return this.x;\n      }\n    };\n    const func = \"fn\";    \n    const spy = sinon.spy();\n    \n    aexpr(() => obj[func]()).onChange(spy);\n    obj.x = 2;\n    \n    expect(spy).to.be.calledOnce;\n    expect(spy).to.be.calledWithMatch(2);\n  });\n  it(\"rewrite member expression with StringLiteral as property\", () => {\n    const obj = {\n      x: 3,\n      fn() {\n        return this.x;\n      }\n    };\n    const spy = sinon.spy();\n    \n    aexpr(() => obj[\"fn\"]()).onChange(spy);\n    obj.x = 2;\n    \n    expect(spy).to.be.calledOnce;\n    expect(spy).to.be.calledWithMatch(2);\n  });\n  it(\"rewrite assignment to member expression with StringLiteral as property\", () => {\n    const obj = {\n      x: 3,\n      fn() {\n        return this.x;\n      }\n    };\n    const spy = sinon.spy();\n    \n    aexpr(() => obj.fn()).onChange(spy);\n    obj[\"x\"] = 2;\n    \n    expect(spy).to.be.calledOnce;\n    expect(spy).to.be.calledWithMatch(2);\n  });\n  // #TODO: this is not checking, whether changes to a bindExpression are detected!\n  it(\"bind expression as expression\", () => {\n    const obj = {\n      x: 3,\n      fn() {\n        return this.x;\n      }\n    };\n    const spy = sinon.spy();\n    \n    aexpr(::obj.fn).onChange(spy);\n    obj.x = 2;\n    \n    expect(spy).to.be.calledOnce;\n    expect(spy).to.be.calledWithMatch(2);\n  });\n  it(\"this as object of MemberExpression\", () => {\n    const obj = {\n      x: 3,\n      fn2() { return this.x; },\n      fn() { return this.fn2(); }\n    };\n    const spy = sinon.spy();\n    \n    aexpr(() => obj.fn()).onChange(spy);\n    obj.x = 2;\n    \n    expect(spy).to.be.calledOnce;\n    expect(spy).to.be.calledWithMatch(2);\n  });\n})\n"]}