{"version":3,"names":["TestRunner","__SystemJSRewritingHack","isTestFile","fileName","match","_export","default","setters","_reactiveJsx","_addSourceLocation","addSourceLocation","_srcClientContextJSSrcContextjsJs","cop","_srcComponentsWidgetsLivelyMorphJs","Morph","execute","_recorder_","_src_components_tools_lively_testrunner_js","Object","defineProperty","get","set","thisIsVererySecretVariableName","enumerable","configurable","testDir","setTestPath","path","value","initialize","windowTitle","registerButtons","addEventListener","event","keyCode","onRunButton","stopPropagation","preventDefault","querySelector","mochadiv","document","createElement","file","end","column","line","start","id","appendChild","innerHTML","lively","loadCSSThroughDOM","lively4url","resetMocha","getAttribute","e","testDirChanged","findTestFilesInDir","dir","files","walkDir","console","error","filter","findTestFiles","dirs","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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"}