{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-bp2019/src/client/reactive/test/active-groups/selector.morph.spec.js"],"names":["chai","expect","sinon","sinonChai","select","View","wait","use","createWidget","widget","create","document","timeout","remove","shadow","appendChild","checkedCheckbox","checkedRadio","selection","now","uncheckedCheckbox","selectionCheckbox","checkboxEnterSpy","spy","enter","checkboxExitSpy","exit","selectionRadio","radioEnterSpy","radioExitSpy","resetSpies","reset","uncheckedRadio","secondWidget","enterSpy","exitSpy","secondSelection","secondEnterSpy","secondExitSpy","secondShadow","secondUncheckedCheckbox","secondCheckedCheckbox","secondSel"],"mappings":"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","file":"selector.morph.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 select, { View } from 'active-group';\n\nimport { wait } from 'utils';\n\nasync function createWidget() {\n  const widget = await lively.create('matches-in-shadow', document.body);\n  // document.body.appendChild(widget);\n  return widget;\n}\n\ndescribe(\"Morph.select('css selector')\", async () => {\n  describe(\"matches-in-shadow\", async () => {\n    let widget;\n    beforeEach(async function() {\n      this.timeout(30000);\n      widget = await createWidget();\n    });\n    afterEach(() => {\n      widget.remove();\n    });\n\n    it(\"respondsTo select\", async () => {\n      expect(widget).itself.to.respondTo('select');\n    });\n    it(\"returns a active group\", async () => {\n      expect(widget.select('div')).to.be.an.instanceOf(View);\n    });\n    describe('select elements in shadow root', () => {\n      it(\"View contains elements that already satisfy the condition\", async () => {\n        const shadow = widget.shadowRoot;\n        shadow.appendChild(<input type=\"checkbox\"></input>);\n        const checkedCheckbox = shadow.appendChild(<input type=\"checkbox\" checked></input>);\n        shadow.appendChild(<input type=\"radio\"></input>);\n        const checkedRadio = shadow.appendChild(<input type=\"radio\" checked></input>);\n\n        const selection = widget.select('input:checked');\n        await wait(100);\n\n        expect(selection.now()).to.have.lengthOf(2);\n        expect(selection.now()).to.include(checkedCheckbox);\n        expect(selection.now()).to.include(checkedRadio);\n      });\n      it(\"View contains later added elements\", async () => {\n        const selection = widget.select('input:checked');\n\n        const shadow = widget.shadowRoot;\n        shadow.appendChild(<input type=\"checkbox\"></input>);\n        const checkedCheckbox = shadow.appendChild(<input type=\"checkbox\" checked></input>);\n        shadow.appendChild(<input type=\"radio\"></input>);\n        const checkedRadio = shadow.appendChild(<input type=\"radio\" checked></input>);\n\n        await wait(100);\n\n        expect(selection.now()).to.have.lengthOf(2);\n        expect(selection.now()).to.include(checkedCheckbox);\n        expect(selection.now()).to.include(checkedRadio);\n      });\n      it(\"View contains elements that later satisfy the condition\", async () => {\n        const selection = widget.select('input:checked');\n\n        const shadow = widget.shadowRoot;\n        const uncheckedCheckbox = shadow.appendChild(<input type=\"checkbox\"></input>);\n        const checkedCheckbox = shadow.appendChild(<input type=\"checkbox\" checked></input>);\n\n        await wait(100);\n        expect(selection.now()).not.to.include(uncheckedCheckbox);\n\n        uncheckedCheckbox.checked = true;\n\n        await wait(100);\n        expect(selection.now()).to.include(uncheckedCheckbox);\n      });\n      it(\"View removes elements that not satisfy the condition anymore\", async () => {\n        const selection = widget.select('input:checked');\n\n        const shadow = widget.shadowRoot;\n        const checkedCheckbox = shadow.appendChild(<input type=\"checkbox\" checked></input>);\n\n        await wait(100);\n        expect(selection.now()).to.include(checkedCheckbox);\n\n        checkedCheckbox.checked = null;\n\n        await wait(100);\n        expect(selection.now()).not.to.include(checkedCheckbox);\n      });\n      it(\"View removes elements that are detached from DOM\", async () => {\n        const selection = widget.select('input:checked');\n\n        const shadow = widget.shadowRoot;\n        const checkedCheckbox = shadow.appendChild(<input type=\"checkbox\" checked></input>);\n\n        await wait(100);\n        expect(selection.now()).to.include(checkedCheckbox);\n\n        checkedCheckbox.remove();\n\n        await wait(100);\n        expect(selection.now()).not.to.include(checkedCheckbox);\n      });\n      describe('disjunct conditions', () => {\n        // no need to check for an element to be in both groups as their conditions have to be disjunct\n        it(\"supports multiple disjunct conditions\", async () => {\n          const selectionCheckbox = widget.select('input[type=checkbox]:checked');\n          const checkboxEnterSpy = sinon.spy();\n          selectionCheckbox.enter(checkboxEnterSpy);\n          const checkboxExitSpy = sinon.spy();\n          selectionCheckbox.exit(checkboxExitSpy);\n          const selectionRadio = widget.select('input[type=radio]:checked');\n          const radioEnterSpy = sinon.spy();\n          selectionRadio.enter(radioEnterSpy);\n          const radioExitSpy = sinon.spy();\n          selectionRadio.exit(radioExitSpy);\n          const resetSpies = () => {\n            [checkboxEnterSpy, checkboxExitSpy, radioEnterSpy, radioExitSpy].forEach(spy => spy.reset());\n          };\n\n          const shadow = widget.shadowRoot;\n          const uncheckedCheckbox = shadow.appendChild(<input type=\"checkbox\"></input>);\n          const checkedCheckbox = shadow.appendChild(<input type=\"checkbox\" checked></input>);\n          const uncheckedRadio = shadow.appendChild(<input type=\"radio\"></input>);\n          const checkedRadio = shadow.appendChild(<input type=\"radio\" checked></input>);\n\n          await wait(100);\n          expect(selectionCheckbox.now()).not.to.include(uncheckedCheckbox);\n          expect(selectionCheckbox.now()).to.include(checkedCheckbox);\n          expect(selectionCheckbox.now()).not.to.include(uncheckedRadio);\n          expect(selectionCheckbox.now()).not.to.include(checkedRadio);\n          expect(checkboxEnterSpy).to.be.calledOnce;\n          expect(checkboxExitSpy).not.to.be.called;\n          expect(selectionRadio.now()).not.to.include(uncheckedCheckbox);\n          expect(selectionRadio.now()).not.to.include(checkedCheckbox);\n          expect(selectionRadio.now()).not.to.include(uncheckedRadio);\n          expect(selectionRadio.now()).to.include(checkedRadio);\n          expect(radioEnterSpy).to.be.calledOnce;\n          expect(radioExitSpy).not.to.be.called;\n          resetSpies();\n\n          uncheckedCheckbox.checked = true;\n          await wait(100);\n          expect(selectionCheckbox.now()).to.include(uncheckedCheckbox);\n          expect(checkboxEnterSpy).to.be.calledOnce;\n          expect(checkboxExitSpy).not.to.be.called;\n          expect(selectionRadio.now()).not.to.include(uncheckedCheckbox);\n          expect(radioEnterSpy).not.to.be.called;\n          expect(radioExitSpy).not.to.be.called;\n          resetSpies();\n\n          uncheckedRadio.checked = true;\n          await wait(100);\n          expect(selectionCheckbox.now()).not.to.include(uncheckedRadio);\n          expect(checkboxEnterSpy).not.to.be.called;\n          expect(checkboxExitSpy).not.to.be.called;\n          expect(selectionRadio.now()).to.include(uncheckedRadio);\n          expect(radioEnterSpy).to.be.calledOnce;\n          expect(radioExitSpy).not.to.be.called;\n          resetSpies();\n\n          checkedCheckbox.checked = null;\n          await wait(100);\n          expect(selectionCheckbox.now()).not.to.include(checkedCheckbox);\n          expect(checkboxEnterSpy).not.to.be.called;\n          expect(checkboxExitSpy).to.be.calledOnce;\n          expect(selectionRadio.now()).not.to.include(checkedCheckbox);\n          expect(radioEnterSpy).not.to.be.called;\n          expect(radioExitSpy).not.to.be.called;\n          resetSpies();\n\n          // re-add a previously removed element\n          checkedCheckbox.checked = true;\n          await wait(100);\n          expect(selectionCheckbox.now()).to.include(checkedCheckbox);\n          expect(checkboxEnterSpy).to.be.calledOnce;\n          expect(checkboxExitSpy).not.to.be.called;\n          expect(selectionRadio.now()).not.to.include(checkedCheckbox);\n          expect(radioEnterSpy).not.to.be.called;\n          expect(radioExitSpy).not.to.be.called;\n          resetSpies();\n        });\n      });\n\n      describe('multiple Morphs', () => {\n        let secondWidget;\n        beforeEach(async function() {\n          this.timeout(10000);\n          secondWidget = await createWidget();\n        });\n        afterEach(() => {\n          secondWidget.remove();\n        });\n\n        it(\"multiple Morphs do not conflict with each other\", async () => {\n          const selection = widget.select('input:checked[type=checkbox]');\n          const enterSpy = sinon.spy();\n          selection.enter(enterSpy);\n          const exitSpy = sinon.spy();\n          selection.exit(exitSpy);\n          const secondSelection = secondWidget.select('input[type=checkbox]:checked');\n          const secondEnterSpy = sinon.spy();\n          secondSelection.enter(secondEnterSpy);\n          const secondExitSpy = sinon.spy();\n          secondSelection.exit(secondExitSpy);\n          const resetSpies = () => {\n            [enterSpy, exitSpy, secondEnterSpy, secondExitSpy].forEach(spy => spy.reset());\n          };\n\n          const shadow = widget.shadowRoot;\n          const secondShadow = secondWidget.shadowRoot;\n          const uncheckedCheckbox = shadow.appendChild(<input type=\"checkbox\"></input>);\n          const checkedCheckbox = shadow.appendChild(<input type=\"checkbox\" checked></input>);\n          const secondUncheckedCheckbox = secondShadow.appendChild(<input type=\"checkbox\"></input>);\n          const secondCheckedCheckbox = secondShadow.appendChild(<input type=\"checkbox\" checked></input>);\n\n          await wait(100);\n          expect(selection.now()).not.to.include(uncheckedCheckbox);\n          expect(selection.now()).to.include(checkedCheckbox);\n          expect(selection.now()).not.to.include(secondUncheckedCheckbox);\n          expect(selection.now()).not.to.include(secondCheckedCheckbox);\n          expect(enterSpy).to.be.calledOnce;\n          expect(exitSpy).not.to.be.called;\n          var secondSel = secondSelection.now();\n          expect(secondSel).not.to.include(uncheckedCheckbox);\n          expect(secondSel).not.to.include(checkedCheckbox);\n          expect(secondSel).not.to.include(secondUncheckedCheckbox);\n          expect(secondSel).to.include(secondCheckedCheckbox);\n          expect(secondEnterSpy).to.be.calledOnce;\n          expect(secondExitSpy).not.to.be.called;\n          resetSpies();\n\n          uncheckedCheckbox.checked = true;\n          await wait(100);\n          expect(selection.now()).to.include(uncheckedCheckbox);\n          expect(enterSpy).to.be.calledOnce;\n          expect(exitSpy).not.to.be.called;\n          expect(secondSelection.now()).not.to.include(uncheckedCheckbox);\n          expect(secondEnterSpy).not.to.be.called;\n          expect(secondExitSpy).not.to.be.called;\n          resetSpies();\n\n          shadow.appendChild(secondCheckedCheckbox);\n          await wait(100);\n          expect(selection.now()).to.include(secondCheckedCheckbox);\n          expect(enterSpy).to.be.calledOnce;\n          expect(exitSpy).not.to.be.called;\n          // #TODO: the element is not removed from this View, because the condition is errornous\n          // expect(secondSelection.now()).not.to.include(secondCheckedCheckbox);\n          // expect(secondEnterSpy).not.to.be.called;\n          // expect(secondExitSpy).to.be.calledOnce;\n          resetSpies();\n\n          return;\n\n          checkedCheckbox.checked = null;\n          await wait(100);\n          expect(selection.now()).not.to.include(checkedCheckbox);\n          expect(enterSpy).not.to.be.called;\n          expect(exitSpy).to.be.calledOnce;\n          expect(secondSelection.now()).not.to.include(checkedCheckbox);\n          expect(secondEnterSpy).not.to.be.called;\n          expect(secondExitSpy).not.to.be.called;\n          resetSpies();\n\n          // re-add a previously removed element\n          checkedCheckbox.checked = true;\n          await wait(100);\n          expect(selection.now()).to.include(checkedCheckbox);\n          expect(enterSpy).to.be.calledOnce;\n          expect(exitSpy).not.to.be.called;\n          expect(secondSelection.now()).not.to.include(checkedCheckbox);\n          expect(secondEnterSpy).not.to.be.called;\n          expect(secondExitSpy).not.to.be.called;\n          resetSpies();\n        }).timeout(5000);\n      });\n      xit(\"removing the Morph from DOM stops checking for new matching elements\", async () => {});\n      xit(\"re-adding the removed Morph restarts checking for new matching elements\", async () => {});\n      xit(\"disposing a View removes its listeners\", async () => {});\n    });\n    describe('select child elements', () => {\n      // TODO: basically the same as with shadow root\n    });\n    describe('combined select child elements and elements in shadow root', () => {});\n  });\n});"]}