{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-tom/src/client/reactive/test/active-expression/utility-methods.spec.js"],"names":["chai","expect","sinon","sinonChai","use","ae","gotDisposed","dispose","prom","sleep","isDisposed","val","j","v","values","loop","iterationCounts","all","forEach","gen","iter","next","i","resolve","Promise","obj","a","spy","axp","waitingForChange","nextValue","reset"],"mappings":"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","file":"utility-methods.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\ndescribe('Iterators and Utility Methods for Active Expressions', () => {\n\n  describe('.gotDisposed', () => {\n\n    it(\"aexprs define .gotDisposed\", () => {\n      expect(aexpr(() => {})).to.respondTo('gotDisposed');\n    });\n\n    it(\"caches its Promise\", () => {\n      const ae = aexpr(() => {});\n      expect(ae.gotDisposed()).to.equal(ae.gotDisposed());\n    });\n\n    it(\"Promise resolved if already disposed\", async () => {\n      const ae = aexpr(() => {});\n      ae.dispose();\n      const prom = ae.gotDisposed();\n\n      // promise resolved\n      await prom;\n    });\n\n    it(\"Promise resolves later when ae gets disposed\", async () => {\n      const ae = aexpr(() => {});\n      const prom = ae.gotDisposed();\n\n      lively.sleep(30).then(() => ae.dispose());\n      \n      await lively.sleep(15);\n      expect(ae.isDisposed()).to.be.false;\n      \n      // promise resolved\n      await prom;\n    });\n\n  });\n\n  describe('.values', () => {\n\n    it(\"aexprs define .values\", () => {\n      expect(aexpr(() => {})).to.respondTo('values');\n    });\n\n    it(\".values\", async () => {\n      let val = 0;\n\n      const ae = aexpr(() => val);\n\n      (async () => {\n        // #TODO: do instantaneous change get applied for '.values()'?\n        await lively.sleep(10);\n        val++;\n        await lively.sleep(10);\n        val++;\n        await lively.sleep(10);\n        val++;\n\n        await lively.sleep(10);\n        ae.dispose();\n\n        await lively.sleep(10);\n        val++;\n      })();\n\n      let j = 0;\n      for await (let v of ae.values()) {\n        j++;\n        expect(v).to.equal(j);\n      }\n      expect(j).to.equal(3);\n    });\n\n    it(\".values can deal with multiple changes in a synchronous execution\", async () => {\n      let val = 0;\n\n      const ae = aexpr(() => val);\n\n      (async () => {\n        await lively.sleep(10);\n        val++;\n        val++;\n        val++;\n        ae.dispose();\n        val++;\n      })();\n\n      let j = 0;\n      for await (let v of ae.values()) {\n        j++;\n        expect(v).to.equal(j);\n      }\n      expect(j).to.equal(3);\n    });\n\n    it(\"multiple .values can co-exist\", async () => {\n      let val = 0;\n\n      const ae = aexpr(() => val);\n\n      (async () => {\n        await lively.sleep(10);\n        val++;\n        val++;\n        val++;\n        ae.dispose();\n        val++;\n      })();\n\n      async function loop() {\n        let j = 0;\n        for await (let v of ae.values()) {\n          j++;\n          expect(v).to.equal(j);\n        }\n        return j;\n      }\n      \n      const iterationCounts = await Promise.all((2).times(loop));\n      iterationCounts.forEach(j => {\n        expect(j).to.equal(3);\n      });\n    });\n\n    describe('understanding generators', () => {\n\n      it(\"plain generators\", () => {\n        function* gen() {\n          yield 1;\n          yield 2;\n          yield 3;\n        }\n\n        const iter = gen()\n\n        expect(iter.next().value).to.equal(1);\n        expect(iter.next().value).to.equal(2);\n        expect(iter.next().value).to.equal(3);\n        expect(iter.next().done).to.equal(true);\n      });\n\n      it(\"generators and for loops\", () => {\n        function* gen() {\n          yield 1;\n          yield 2;\n          yield 3;\n        }\n\n        let j = 0;\n        for (let i of gen()) {\n          j++;\n          expect(i).to.equal(j);\n        }\n        expect(j).to.equal(3);\n      });\n\n      it(\"async generators and for await loops\", async () => {\n        async function* gen() {\n          lively.sleep(1);\n          yield 1;\n          lively.sleep(1);\n          yield Promise.resolve(2);\n          lively.sleep(1);\n          yield 3;\n        }\n\n        let j = 0;\n        for await  (let i of gen()) {\n          j++;\n          expect(i).to.equal(j);\n        }\n        expect(j).to.equal(3);\n      });\n\n    });\n\n  });\n\n  describe('nextValue', () => {\n\n    it(\"aexprs define nextValue\", () => {\n      expect(aexpr(() => {})).to.respondTo('nextValue');\n    });\n\n    it(\"nextValue returns a Promise\", () => {\n      expect(aexpr(() => {}).nextValue()).to.be.an.instanceof(Promise);\n    });\n\n    it(\"nextValue resolves on first change of monitored expression\", async () => {\n      let obj = {a: 1},\n          spy = sinon.spy();\n\n      let axp = aexpr(() => obj.a);\n\n      async function waitingForChange() {\n        const v = await axp.nextValue();\n        spy(v);\n      }\n      \n      waitingForChange();\n      \n      expect(spy).not.to.be.called;\n      \n      obj.a = 42;\n      // await is resolved as a separate micro task\n      expect(spy).not.to.be.called;\n      \n      await lively.sleep(10);\n      \n      expect(spy).to.be.calledOnce;\n      expect(spy).to.be.calledWith(42);\n      spy.reset();\n\n      obj.a = 43;\n\n      await lively.sleep(10);\n      expect(spy).not.to.be.called;\n    });\n\n  });\n\n});\n"]}