{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-tom/src/client/reactive/test/active-expression/disable.spec.js"],"names":["chai","expect","sinon","sinonChai","BaseActiveExpression","use","ae","assertEnabled","isEnabled","isDisabled","assertDisabled","enable","disable","disabled","enableSpy","disableSpy","fixture","options","spy","reset","x","checkAndNotify","check","dataflow","setExpression"],"mappings":"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","file":"disable.spec.js","sourcesContent":["\"enable aexpr\";\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('disable (Active Expressions)', () => {\n\n  it(\"supported\", () => {\n    const ae = new BaseActiveExpression(() => {});\n\n    expect(ae).to.respondTo('enable');\n    expect(ae).to.respondTo('disable');\n    expect(ae).to.respondTo('isEnabled');\n    expect(ae).to.respondTo('isDisabled');\n  });\n\n  function assertEnabled(ae) {\n    expect(ae.isEnabled()).to.be.true;\n    expect(ae.isDisabled()).to.be.false;\n  }\n  function assertDisabled(ae) {\n    expect(ae.isEnabled()).to.be.false;\n    expect(ae.isDisabled()).to.be.true;\n  }\n  it('basic state management', () => {\n    const ae = new BaseActiveExpression(() => {})\n    assertEnabled(ae);\n    \n    ae.enable();\n    assertEnabled(ae);\n\n    ae.disable();\n    assertDisabled(ae);\n\n    ae.disable();\n    assertDisabled(ae);\n\n    ae.enable();\n    assertEnabled(ae);\n\n    ae.enable();\n    assertEnabled(ae);\n  });\n\n  it('starts disabled', () => {\n    const ae = new BaseActiveExpression(() => {}, { disabled: true });\n    assertDisabled(ae);\n  });\n\n  describe('enable/disable events', () => {\n    \n    let ae, enableSpy, disableSpy;\n    \n    const fixture = ((options) => {\n      enableSpy = sinon.spy();\n      disableSpy = sinon.spy();\n      ae = new BaseActiveExpression(() => {}, options)\n        .on('enable', enableSpy)\n        .on('disable', disableSpy);\n    });\n\n    it('no events fired initially', () => {\n      fixture();\n      expect(enableSpy).not.to.be.called;\n      expect(disableSpy).not.to.be.called;\n    });\n\n    it('disable once', () => {\n      fixture();\n      ae.disable();\n      expect(enableSpy).not.to.be.called;\n      expect(disableSpy).to.be.calledOnce;     \n    });\n\n    it('disable twice', () => {\n      fixture();\n      ae.disable();\n      disableSpy.reset();\n\n      ae.disable();\n      expect(enableSpy).not.to.be.called;\n      expect(disableSpy).not.to.be.called;     \n    });\n\n    it('enable once after disable', () => {\n      fixture();\n      ae.disable();\n      disableSpy.reset();\n\n      ae.enable();\n      expect(enableSpy).to.be.calledOnce;\n      expect(disableSpy).not.to.be.called;\n    });\n\n    it('enable twice after disable', () => {\n      fixture();\n      ae.disable();\n      disableSpy.reset();\n\n      ae.enable();\n      enableSpy.reset();\n\n      ae.enable();\n      expect(enableSpy).not.to.be.called;\n      expect(disableSpy).not.to.be.called;\n    });\n\n    it('(start disabled) no events fired initially', () => {\n      fixture({ disabled: true });\n      expect(enableSpy).not.to.be.called;\n      expect(disableSpy).not.to.be.called;\n    });\n\n    it('(start disabled) disable once', () => {\n      fixture({ disabled: true });\n      ae.disable();\n      expect(enableSpy).not.to.be.called;\n      expect(disableSpy).not.to.be.called;     \n    });\n\n    it('(start disabled) enable once', () => {\n      fixture({ disabled: true });\n\n      ae.enable();\n      expect(enableSpy).to.be.calledOnce;\n      expect(disableSpy).not.to.be.called;\n    });\n\n    it('(start disabled) enable twice after disable', () => {\n      fixture({ disabled: true });\n\n      ae.enable();\n      enableSpy.reset();\n\n      ae.enable();\n      expect(enableSpy).not.to.be.called;\n      expect(disableSpy).not.to.be.called;\n    });\n\n  });\n\n  describe('obey _isEnabled', () => {\n    \n    let ae, enableSpy, disableSpy;\n    \n    const fixture = ((options) => {\n      enableSpy = sinon.spy();\n      disableSpy = sinon.spy();\n      ae = new BaseActiveExpression(() => {}, options)\n        .on('enable', enableSpy)\n        .on('disable', disableSpy);\n    });\n\n    it('.checkAndNotify while disabled', () => {\n      var x = 42;\n      const spy = sinon.spy();\n      let ae = new BaseActiveExpression(() => x).onChange(spy)\n      \n      ae.disable();\n      \n      x = 17;\n      ae.checkAndNotify();\n\n      expect(spy).not.to.be.called;\n    });\n\n    it('.checkAndNotify while enabled', () => {\n      var x = 42;\n      const spy = sinon.spy();\n      let ae = new BaseActiveExpression(() => x, { disabled: true }).onChange(spy)\n      \n      ae.enable();\n      \n      x = 17;\n      ae.checkAndNotify();\n\n      expect(spy).to.be.calledOnce;\n    });\n\n    it('check via .enable', () => {\n      var x = 42;\n      const spy = sinon.spy();\n      let ae = new BaseActiveExpression(() => x, { disabled: true }).onChange(spy)\n      \n      x = 17;\n      ae.enable();\n\n      expect(spy).to.be.calledOnce;\n    });\n\n    it('not check via .enable', () => {\n      var x = 1;\n      const spy = sinon.spy();\n      let ae = new BaseActiveExpression(() => x, { disabled: true }).onChange(spy)\n      \n      x = 2;\n      ae.enable({ check: false });\n      expect(spy).not.to.be.called;\n\n      x = 3;\n      ae.checkAndNotify();\n      expect(spy).to.be.calledOnce;\n      // #TODO: x = 2; should be the last value\n      expect(spy.firstCall.args[1].lastValue).to.equal(2)\n    });\n\n    xit('.dataflow while disabled', () => {\n      const ae = new BaseActiveExpression(() => 17, { disabled: true });\n      \n      const spy = sinon.spy();\n      ae.dataflow(spy);\n\n      // #TODO: what is the intended semantics here\n      expect(spy).not.to.be.called;\n    });\n\n    it('.setExpression while disabled', () => {\n      const spy = sinon.spy();\n      let ae = new BaseActiveExpression(() => 1, { disabled: true }).onChange(spy)\n\n      ae.setExpression(() => 2);\n      expect(spy).not.to.be.called;\n\n      ae.enable();\n      expect(spy).to.be.calledOnce;\n      expect(spy.firstCall.args[1].lastValue).to.equal(1)\n    });\n\n  });\n\n});\n"]}