{"version":3,"names":["TestRunner","isTestFile","fileName","match","cop","Morph","testDir","get","setTestPath","path","value","initialize","windowTitle","registerButtons","addEventListener","event","keyCode","onRunButton","stopPropagation","preventDefault","querySelector","mochadiv","document","createElement","id","appendChild","innerHTML","lively","loadCSSThroughDOM","lively4url","resetMocha","getAttribute","e","testDirChanged","findTestFilesInDir","dir","files","walkDir","console","error","filter","findTestFiles","dirs","file","startsWith","substring","URL","href","infoString","statFile","type","JSON","parse","list","split","log","newFiles","concat","clearTests","mocha","suite","tests","length","suites","loadTestsInOrder","testFiles","url","name","replace","reloadModule","System","import","loadTests","Promise","all","map","textContent","runTests","self","run","failures","prevState","isRunning","window","history","pushState","prevLocation","undefined","fixHTML","onResetButton","loadJavaScriptThroughDOM","then","setup","querySelectorAll","forEach","ea","onclick","evt","state","location","toString","grep","mochastate","onTestDirChanged","runMocha","resolve","reject","compact","pluck","loadedTests","include","flatten","Error","join","reporter","Reporter","runner","on","test","t","detect","fullTitle","update","showError","stack","duration","attachErrorToTest","parentTests","parent","invoke","livelyMigrate","other","livelyPrepareSave","setAttribute"],"sources":["lively-testrunner.js"],"sourcesContent":["import * as cop from \"src/client/ContextJS/src/contextjs.js\"\nimport Morph from 'src/components/widgets/lively-morph.js';\n\n\n/*MD # Testrunner \n\n[doc](browse://doc/tools/test-runner.md)\n\n![](../../../doc/tools/media/test-runner.png){width=400px}\n\nMD*/\n\n//     Mocha.utils.parseQuery()\n\n// var parseQueryLayer = cop.create(\"MochaParseQueryLayer\");\n// parseQueryLayer.layerObject(Mocha.utils, {\n\n// });\n\nexport function isTestFile(fileName) {\n  return fileName.match(/(-|\\.)(spec|test)\\.js$/);\n}\n\nexport default class TestRunner extends Morph {\n  get testDir() { return this.get('#testDir'); }\n  setTestPath(path) {\n    this.testDir.value = path;\n  }\n\n  initialize() {\n    \n    this.windowTitle = \"Test Runner\"\n    this.registerButtons();\n    // lively.html.registerInputs(this)\n    this.testDir.addEventListener('keydown', event => {\n      if (event.keyCode == 13) { // ENTER\n        this.onRunButton();\n        event.stopPropagation();\n        event.preventDefault();\n      }\n    });\n\n    if (!this.querySelector(\"#mocha\")) {\n      this.mochadiv = document.createElement(\"div\");\n      this.mochadiv.id = \"mocha\";\n      this.appendChild(this.mochadiv);\n    } else {\n      this.mochadiv = this.querySelector(\"#mocha\");\n    }\n    this.querySelector(\"#mocha\").innerHTML = \"\";\n\n    lively.loadCSSThroughDOM(\"mochaCSS\", lively4url + \"/src/external/mocha.css\");\n\n    this.resetMocha();\n\n    var testDir =  this.getAttribute('testDir');\n    if (testDir) {\n      this.testDir.value = testDir;\n    }\n    this.testDir.addEventListener(\"input\", e => this.testDirChanged(e));\n  }\n\n  async findTestFilesInDir(dir) {\n    try {\n      var files = await lively.files.walkDir(lively4url + dir);\n    } catch(e) {\n      console.error(e)\n      files = []\n    }\n    return files.filter(isTestFile);\n  }\n\n  async findTestFiles() {\n    const dirs = this.testDir.value;\n    \n    // single file?\n    if (isTestFile(dirs)) {\n      try {\n        var file = dirs.startsWith('/') ? dirs.substring(1) : dirs;\n        file = new URL(file, lively4url+'/').href\n        const infoString = await lively.files.statFile(file);\n        const { type } = JSON.parse(infoString);\n        if (type === 'file') {\n          return [file];\n        }\n      } catch(e) {}\n    }\n\n    var files = []\n    var list = dirs.split(\",\")\n    console.log(\"[testrunner] findTestFiles: \" + list)\n\n    // await Promise.all(list.map((dir) => {\n    //   console.log(\"find test file in dir: \" + dir)\n    //   return this.findTestFilesInDir(dir).then(newFiles => {\n    //     files = files.concat(newFiles)\n    //   })\n    // }));\n\n    for (let dir of list) {\n      let newFiles = await this.findTestFilesInDir(dir)\n      files = files.concat(newFiles)\n    }\n\n    return files\n    // #WhyNotThis\n    // return [\"/test/\", \"/test/templates/\"].reduce(async (sum, ea) => {\n    //     return sum.concat(await this.findTestFilesInDir(ea))\n    // }, [])\n  }\n  // await that.findTestFilesInDir( \"/test/templates/\")\n\n  clearTests() {\n    if (mocha.suite) {\n      mocha.suite.tests.length = 0; \n      mocha.suite.suites.length = 0; \n    }\n    this.querySelector(\"#mocha\").innerHTML= \"\";\n  }\n\n  async loadTestsInOrder() {\n    \n    var testFiles = await this.findTestFiles()\n    for(var url of testFiles) {\n      var name = url.replace(/.*\\//,\"\").replace(/\\/\\.[^\\.]*/,\"\");\n      // lively.notify(\"loadTest: \" + name)\n      await lively.reloadModule(url);\n      await System.import(url);\n    }\n  }\n\n  \n  async loadTests() {\n    var testFiles = await this.findTestFiles()\n    return Promise.all(testFiles.map(async url => {\n      var name = url.replace(/.*\\//,\"\").replace(/\\/\\.[^\\.]*/,\"\");\n      await lively.reloadModule(url);\n      await System.import(url);\n      this.get(\"#log\").textContent += \"loaded Test: \" + name + \"\\n\"\n    }))\n  }\n\n  runTests() {\n    this.get(\"#log\").textContent = \"\"\n    var self = this;\n    mocha.run(failures => {\n      if (self.prevState) {\n        this.isRunning = false\n        window.history.pushState(self.prevState, '', self.prevLocation + \"&grep=.*\");\n        self.prevState = self.prevLocation = undefined;\n      }\n      self.fixHTML();\n    });\n  }\n\n  async onRunButton() {\n    this.clearTests();\n    \n    await this.loadTests();\n    this.runTests();\n  }\n\n  async onResetButton() {\n    this.clearTests();\n    this.resetMocha();\n  }\n\n  // some tests, e.g. ContextJS manage to break mocha, so that they can be only once... without this\n  resetMocha() {\n    return lively.loadJavaScriptThroughDOM(\"mochaJS\", lively4url + \"/src/external/mocha.js\", true).then(() => {\n      mocha.setup(\"bdd\");\n    });\n  }\n\n  //  window.history.pushState({ mochastate: true }, '',        window.location);\n  fixHTML() {\n    var self = this;\n    this.mochadiv.querySelectorAll(\".replay\").forEach(ea => {\n      ea.innerHTML = \"R\";\n      ea.onclick = (evt) => {\n        evt.preventDefault();\n        self.prevState = window.history.state;\n        self.prevLocation = window.location.toString().replace(/&grep=[^&]+/, '');\n        var grep = ea.href.replace(/.*(&grep.*)/, '$1');\n        window.history.pushState({ mochastate: true }, '', self.prevLocation + grep);\n        self.onRunButton();\n        return false;\n      };\n    });\n  }\n\n  async onTestDirChanged() {\n    this.onRunButton()\n  }\n\n  runMocha() {\n    // #TODO port this to Lively4\n  var self = this;\n\n// this.runTestFile(\"http://localhost:9001/lively-mocha-tester/tests/test-test.js\")\n\n  return new Promise((resolve, reject) => {\n      var files = mocha.suite.suites.compact().pluck(\"file\")\n      var tests = this.state.loadedTests.filter(ea => files.include(ea.file)).pluck(\"tests\").flatten();\n\n      if (!tests || !tests.length)\n        return reject(new Error(`Trying to run tests of ${files.join(\", \")} but cannot find them in loaded tests!`));\n\n      mocha.reporter(function Reporter(runner) {\n        // this.done = (failures) => show(\"done \" + failures)\n        // runner.on(\"suite\", function (x) { show(\"suite %s\", x) });\n        // runner.on(\"pending\", function (x) { show(\"pending %s\", x) });\n\n        runner.on(\"test\", test => {\n          try {\n            var t = tests.detect(ea => ea.fullTitle === test.fullTitle());\n            t.state = \"running\";\n            self.update();\n          } catch (e) { self.showError(\"runner on test error: \" + e.stack); }\n        });\n\n        // runner.on(\"test end\", test => {\n        //   try {\n        //     var t = tests.tests.detect(ea => ea.fullTitle === test.fullTitle();\n        //     t.state = \"finished\";\n        // self.update();\n        //   } catch (e) { self.showError(\"error: \" + e.stack); }\n        // });\n\n        runner.on(\"pass\", test => {\n          try {\n            var t = tests.detect(ea => ea.fullTitle === test.fullTitle());\n            t.state = \"succeeded\";\n            t.duration = test.duration;\n            self.update();\n          } catch (e) { self.showError(\"runner on pass error: \" + e.stack); }\n        });\n\n        runner.on(\"fail\", (test, error) => {\n          try {\n            var t = tests.detect(ea => ea.fullTitle === test.fullTitle());\n            if (t) attachErrorToTest(t, error, test.duration);\n            else { // \"test\" is a hook...\n              var parentTests = test.parent.tests.invoke(\"fullTitle\")\n              tests\n                .filter(ea => parentTests.include(ea.fullTitle))\n                .forEach(ea => attachErrorToTest(ea, error, test.duration))\n            }\n\n            self.update();\n\n            function attachErrorToTest(test, error, duration) {\n              test.state = \"failed\";\n              test.duration = test.duration;\n              test.error = error;\n            }\n\n          } catch (e) { self.showError(\"runner on fail error: \" + e.stack); }\n        });\n\n        // runner.on(\"start\", test => { show(\"START %o\", lively.printInspect(test ,1)) });\n        // runner.on(\"end\", test => { show(\"end %o\", lively.printInspect(test ,1)) });\n\n        // runner.on(\"hook end\", function (x) { show(\"hook end %s\", x) });\n        // runner.on(\"suite end\", function (x) { show(\"suite end %s\", x) });\n      });\n\n      mocha.run(failures => resolve());\n    });\n  }\n\n  livelyMigrate(other) {\n    this.testDir.value = other.testDir.value;\n  }\n\n  livelyPrepareSave() {\n    this.setAttribute('testDir', this.testDir.value);\n  }\n\n  testDirChanged(e) {\n    this.setAttribute('testDir', this.testDir.value);\n  }\n}\n"],"mappings":"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"}