 Issue 29373596:
  Issue 4838 - Use nodeunit framework for integration tests running in browser  (Closed) 
  Base URL: https://hg.adblockplus.org/adblockpluscore
    
  
    Issue 29373596:
  Issue 4838 - Use nodeunit framework for integration tests running in browser  (Closed) 
  Base URL: https://hg.adblockplus.org/adblockpluscore| Left: | ||
| Right: | 
| OLD | NEW | 
|---|---|
| 1 /* | 1 /* | 
| 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 
| 3 * Copyright (C) 2006-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 Eyeo GmbH | 
| 4 * | 4 * | 
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify | 
| 6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as | 
| 7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. | 
| 8 * | 8 * | 
| 9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, | 
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. | 
| 13 * | 13 * | 
| 14 * You should have received a copy of the GNU General Public License | 14 * You should have received a copy of the GNU General Public License | 
| 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 
| 16 */ | 16 */ | 
| 17 | 17 | 
| 18 "use strict"; | 18 "use strict"; | 
| 19 | 19 | 
| 20 let childProcess = require("child_process"); | |
| 20 let fs = require("fs"); | 21 let fs = require("fs"); | 
| 22 let nodeunit = require("nodeunit"); | |
| 21 let path = require("path"); | 23 let path = require("path"); | 
| 24 let phantomjs = require("phantomjs2"); | |
| 22 let process = require("process"); | 25 let process = require("process"); | 
| 23 let nodeunit = require("nodeunit"); | 26 let url = require("url"); | 
| 24 let qunit = require("node-qunit-phantomjs"); | |
| 25 | 27 | 
| 26 let nodeunitFiles = []; | 28 let nodeunitFiles = []; | 
| 
Felix Dahlke
2017/01/30 14:37:59
Since the browser tests are using nodeunit as well
 
Wladimir Palant
2017/02/24 09:18:55
Done.
 | |
| 27 let qunitFiles = []; | 29 let browserFiles = []; | 
| 28 function addTestPaths(testPaths, recurse) | 30 function addTestPaths(testPaths, recurse) | 
| 29 { | 31 { | 
| 30 for (let testPath of testPaths) | 32 for (let testPath of testPaths) | 
| 31 { | 33 { | 
| 32 let stat = fs.statSync(testPath); | 34 let stat = fs.statSync(testPath); | 
| 33 if (stat.isDirectory()) | 35 if (stat.isDirectory()) | 
| 34 { | 36 { | 
| 35 if (recurse) | 37 if (recurse) | 
| 36 { | 38 { | 
| 37 addTestPaths(fs.readdirSync(testPath).map( | 39 addTestPaths(fs.readdirSync(testPath).map( | 
| 38 file => path.join(testPath, file))); | 40 file => path.join(testPath, file))); | 
| 39 } | 41 } | 
| 40 continue; | 42 continue; | 
| 41 } | 43 } | 
| 42 if (path.basename(testPath).startsWith("_")) | 44 if (path.basename(testPath).startsWith("_")) | 
| 43 continue; | 45 continue; | 
| 44 if (testPath.split(path.sep).includes("browser")) | 46 if (path.extname(testPath) == ".js") | 
| 45 { | 47 { | 
| 46 if (path.extname(testPath) == ".html") | 48 if (testPath.split(path.sep).includes("browser")) | 
| 47 qunitFiles.push(testPath); | 49 browserFiles.push(testPath); | 
| 50 else | |
| 51 nodeunitFiles.push(testPath); | |
| 48 } | 52 } | 
| 49 else if (path.extname(testPath) == ".js") | |
| 50 nodeunitFiles.push(testPath); | |
| 51 } | 53 } | 
| 52 } | 54 } | 
| 53 if (process.argv.length > 2) | 55 if (process.argv.length > 2) | 
| 54 { | 56 { | 
| 55 addTestPaths(process.argv.slice(2), true); | 57 addTestPaths(process.argv.slice(2), true); | 
| 56 } | 58 } | 
| 57 else | 59 else | 
| 58 { | 60 { | 
| 59 addTestPaths( | 61 addTestPaths( | 
| 60 [path.join(__dirname, "test"), path.join(__dirname, "test", "browser")], | 62 [path.join(__dirname, "test"), path.join(__dirname, "test", "browser")], | 
| 61 true | 63 true | 
| 62 ); | 64 ); | 
| 63 } | 65 } | 
| 64 | 66 | 
| 67 if (browserFiles.length) | |
| 68 { | |
| 69 let nodeunitPath = path.join( | |
| 70 path.dirname(require.resolve("nodeunit")), | |
| 71 "examples", "browser", "nodeunit.js" | |
| 72 ); | |
| 73 browserFiles.unshift(nodeunitPath); | |
| 74 | |
| 75 let urls = browserFiles.map(file => | |
| 76 { | |
| 77 return url.format({ | |
| 78 protocol: "file", | |
| 79 slashes: "true", | |
| 80 pathname: path.resolve(process.cwd, file).split(path.sep).join("/") | |
| 81 }); | |
| 82 }); | |
| 83 let args = [path.join(__dirname, "browsertests.js")].concat(urls); | |
| 84 childProcess.execFileSync(phantomjs.path, args, {stdio: "inherit"}); | |
| 85 } | |
| 65 if (nodeunitFiles.length) | 86 if (nodeunitFiles.length) | 
| 
Felix Dahlke
2017/01/30 14:37:59
IMO we should run the unit tests first - should fa
 
Wladimir Palant
2017/02/24 09:18:55
This is not so easy, unit tests are async and we w
 
Felix Dahlke
2017/02/24 10:43:39
Acknowledged.
 | |
| 66 nodeunit.reporters.default.run(nodeunitFiles); | 87 nodeunit.reporters.default.run(nodeunitFiles); | 
| 67 for (let file of qunitFiles) | |
| 68 qunit(file); | |
| OLD | NEW |