{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-markus/src/client/reactive/test/when.spec.js"],"names":["aexpr","chai","expect","sinon","sinonChai","frameBasedAExpr","when","wait","use","Promise","spy","condition","referenceTime","now","active"],"mappings":"AAAA;;;;;;;;;;;;;;;AAMOA,W;;AALAC,U;AAAOC,Y,sBAAAA,M;;AACPC,W;;AACAC,e;;AAIKC,qB;;AACLC,U;;AAEEC,U,UAAAA,I;;;;;;;;;;;;;;AATKL,oL;;;;;;;;;;;;;;;;;;;;;;;;;;AAAPD,kL;;;;;;;;;;;;;;;;;;;;;;;;;;AACAE,mL;;;;;;;;;;;;;;;;;;;;;;;;;;AACAC,uL;;;;;;;;;;;;;;;;;;;;AACP,yFAAKI,GAAL,wFAASJ,SAAT;;;;;;;;;;AAEOJ,mL;;;;;;;;;;;;;;;;;;;;;;;;;;AACKK,6L;;;;;;;;;;;;;;;;;;;;;;;;;;AACLC,kL;;;;;;;;;;;;;;;;;;;;;;;;;;AAEEC,kL;;;;;;;;;;;;;;;;;;;;AAET,oFAAS,cAAT,EAAyB,YAAW;AAClC,0EAAG,2BAAH,EAAgC,MAAM;AACpC,iNAAOD,IAAP;AACA,wNAAOA,IAAP,wBAAqB,UAArB;AACD,SAHD;AAIA,0EAAG,mBAAH,EAAwB,MAAM;AAC5B,sJAAO,mFAAK,MAAM,CAAE,CAAb,CAAP,0GAA2CG,OAA3C;AACD,SAFD;AAGA,0EAAG,sCAAH,EAA2C,YAAY;AAAA;;AACrD,cAAIC,8EAAM,sFAAMA,GAAN,EAAN,CAAJ;AACA,cAAIC,YAAY,KAAhB;;AAEA,+GAAK;AAAMA;AAAN,WAAL,yFAA2BD,GAA3B;AACA,gBAAM,mFAAK,EAAL,CAAN;AACA,4NAAOA,GAAP;;AAEAC,sBAAY,IAAZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,gBAAM,mFAAK,EAAL,CAAN;AACA,iNAAOD,GAAP;AACD,SAXD;AAYA,0EAAG,+BAAH,EAAoC,YAAY;AAAA;;AAC9C,cAAIA,8EAAM,sFAAMA,GAAN,EAAN,CAAJ;AACA,cAAIC,YAAY,KAAhB;;AAEA,+GAAK,sFAAM;AAAMA;AAAN,WAAN,CAAL,yFAAkCD,GAAlC;AACA,gBAAM,mFAAK,EAAL,CAAN;AACA,4NAAOA,GAAP;;AAEAC,sBAAY,IAAZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,gBAAM,mFAAK,EAAL,CAAN;AACA,iNAAOD,GAAP;AACD,SAXD;AAYA,0EAAG,0BAAH,EAA+B,YAAY;AACzC,gBAAM,mFAAK;AAAM;AAAN,WAAL,CAAN;AACD,SAFD;AAGA,0EAAG,uBAAH,EAA4B,YAAY;AACtC,gBAAM,mFAAK;AAAM;AAAN,WAAL,CAAN;AACD,SAFD;;AAIA,0EAAG,uCAAH,EAA4C,YAAY;AAAA;;AACtD,cAAIA,8EAAM,sFAAMA,GAAN,EAAN,CAAJ;AACA,cAAIE,uFAAgB,sEAAKC,GAAL,EAAhB,CAAJ;;AAEA;AACA,+GAAK;AAAM,gKAAKA,GAAL,OAAc,uGAAMD,aAAN,CAAd;AAAN,WAAL,yFACQF,GADR;;AAGA,gBAAM,mFAAK,EAAL,CAAN;AACA,4NAAOA,GAAP;;AAEA,gBAAM,mFAAK,GAAL,CAAN;AACA,iNAAOA,GAAP;AACD,SAbD;AAcA;AACA,4EAAI,4DAAJ,EAAkE,YAAY;AAAA;;AAC5E,cAAIA,8EAAM,sFAAMA,GAAN,EAAN,CAAJ;;AAEA,+GAAK;AAAM;AAAN,WAAL,EAAiB,EAAEI,QAAQ,KAAV,EAAjB,CAAoC;AAApC,mGACQJ,GADR;;AAGA,gBAAM,mFAAK,EAAL,CAAN;AACA,4NAAOA,GAAP;AACD,SARD;AASD,OA/DD","file":"when.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 aexpr from 'active-expression-rewriting';\nimport * as frameBasedAExpr from \"active-expression-frame-based\";\nimport when from 'src/client/reactive/when.js';\n\nimport { wait } from 'utils';\n\ndescribe(\"when utility\", function() {\n  it(\"is defined and a function\", () => {\n    expect(when).to.be.ok;\n    expect(when).to.be.a('function');\n  });\n  it(\"returns a promise\", () => {\n    expect(when(() => {})).to.be.an.instanceOf(Promise);\n  });\n  it(\"resolves when condition becomes true\", async () => {\n    let spy = sinon.spy();\n    let condition = false;\n    \n    when(() => condition).then(spy);\n    await wait(50);\n    expect(spy).not.to.be.called;\n\n    condition = true;\n    await wait(50);\n    expect(spy).to.be.calledOnce;\n  });\n  it(\"accepts an aexpr as condition\", async () => {\n    let spy = sinon.spy();\n    let condition = false;\n    \n    when(aexpr(() => condition)).then(spy);\n    await wait(50);\n    expect(spy).not.to.be.called;\n\n    condition = true;\n    await wait(50);\n    expect(spy).to.be.calledOnce;\n  });\n  it(\"resolves instantaneously\", async () => {\n    await when(() => true);\n  });\n  it(\"integrates with await\", async () => {\n    await when(() => true);\n  });\n  \n  it(\"allows for other detection strategies\", async () => {\n    let spy = sinon.spy();\n    let referenceTime = Date.now();\n\n    // fires in 100 milliseconds\n    when(() => Date.now() >= 100 + referenceTime)\n      .then(spy);\n\n    await wait(50);\n    expect(spy).not.to.be.called;\n\n    await wait(100);\n    expect(spy).to.be.calledOnce;\n  });\n  // #TODO: waits for .(de)activate functionality\n  xit(\"propagates configuration to the aexpr constructor function\", async () => {\n    let spy = sinon.spy();\n\n    when(() => true, { active: false }) // the internal aexpr is not active\n      .then(spy);\n\n    await wait(50);\n    expect(spy).not.to.be.called;\n  });\n});\n"]}