{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-active-expression-proxies/src/client/reactive/test/active-expression-rewriting/error-handling.spec.js"],"names":["chai","expect","sinon","sinonChai","use","value","throwError","spy","ae","Error","v","beforeSpy","afterSpy","reset","error","hasCallbacks","onChange","callback","offChange"],"mappings":"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","file":"error-handling.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\ndescribe('Error in Expression analysis', () => {\n\n  it('throwing an error does not update ', () => {\n    let value = 17;\n    let throwError = false;\n\n    const spy = sinon.spy();\n    const ae = aexpr(() => {\n      if (throwError) {\n        throw new Error('wups');\n      } else {\n        return value;\n      }\n    }).onChange(spy);\n\n    throwError = true;\n\n    expect(spy).not.to.have.been.called;\n  });\n\n  it('initial error does not propagate', () => {\n    aexpr(() => {\n      throw new Error('wups');\n    });\n  });\n\n  xit('silent is default mode ', () => {});\n\n  // #TODO: maybe by generic .on function\n  xit('onError callback', () => {});\n\n  xit('explicit error handlers are called', () => {});\n});\n\ndescribe('Error in comparison and storage', () => {\n\n  xit('read 0', () => {\n    expect(0).to.equal(0);\n  });\n});\n\ndescribe('Error in Callbacks', () => {\n\n  it('errors bubble to callee', () => {\n    let value = 1;\n    const ae = aexpr(() => value).onChange(v => {\n      throw new Error('expected');\n    });\n\n    expect(() => value++).to.throw('expected');\n    expect(value).to.equal(2);\n\n    expect(() => value++).to.throw('expected');\n    expect(value).to.equal(3);\n  });\n\n  it('callbacks called until the first callback throws an error', () => {\n    let value = 1;\n    let beforeSpy = sinon.spy();\n    let afterSpy = sinon.spy();\n    const ae = aexpr(() => value).onChange(beforeSpy).onChange(() => {\n      throw new Error('expected');\n    }).onChange(afterSpy);\n\n    expect(() => value++).to.throw('expected');\n    expect(beforeSpy).to.have.been.calledOnce;\n    expect(afterSpy).to.not.have.been.called;\n    expect(value).to.equal(2);\n    beforeSpy.reset();\n    afterSpy.reset();\n\n    expect(() => value++).to.throw('expected');\n    expect(beforeSpy).to.have.been.calledOnce;\n    expect(afterSpy).to.not.have.been.called;\n    expect(value).to.equal(3);\n    beforeSpy.reset();\n    afterSpy.reset();\n  });\n\n  xit('callbacks called until the first callback throws an error', () => {\n    let value = 1;\n    const ae = aexpr(() => value).onChange(() => {\n      throw new Error('expected');\n    }, { error: 'silent' });\n  });\n\n  xit('callbacks called until the first callback throws an error', () => {\n    let value = 1;\n    let spy = sinon.spy();\n    const ae = aexpr(() => value).onChange(() => {\n      throw new Error('expected');\n    }, { error: spy });\n  });\n\n});\n\ndescribe('has callbacks', () => {\n\n  it('no callbacks at the start, add one', () => {\n    const ae = aexpr(() => {});\n\n    expect(ae.hasCallbacks()).to.be.false;\n    ae.onChange(() => {});\n    expect(ae.hasCallbacks()).to.be.true;\n  });\n\n  it('one callback in the start, remove that one', () => {\n    const callback = () => {};\n    const ae = aexpr(() => {}).onChange(callback);\n\n    expect(ae.hasCallbacks()).to.be.true;\n    ae.offChange(callback);\n    expect(ae.hasCallbacks()).to.be.false;\n  });\n\n});\n\ndescribe('Errors in Non-onChange Callbacks', () => {\n\n  // #TODO: should this be visible?\n  xit('error in on(\"dispose\")', () => {\n    const ae = aexpr(() => {}).on('dispose', () => {\n      throw new Error('expected');\n    });\n  });\n\n});\n"]}