| Index: test_runner.js | 
| =================================================================== | 
| --- a/test_runner.js | 
| +++ b/test_runner.js | 
| @@ -14,26 +14,27 @@ | 
| * You should have received a copy of the GNU General Public License | 
| * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. | 
| */ | 
|  | 
| /* eslint-env node */ | 
|  | 
| "use strict"; | 
|  | 
| -const childProcess = require("child_process"); | 
| const fs = require("fs"); | 
| +const path = require("path"); | 
| +const url = require("url"); | 
| + | 
| const nodeunit = require("nodeunit"); | 
| -const path = require("path"); | 
| -const phantomjs = require("phantomjs2"); | 
| -const process = require("process"); | 
| -const url = require("url"); | 
| + | 
| +const chromiumProcess = require("./chromium_process"); | 
|  | 
| let unitFiles = []; | 
| let browserFiles = []; | 
| + | 
| function addTestPaths(testPaths, recurse) | 
| { | 
| for (let testPath of testPaths) | 
| { | 
| let stat = fs.statSync(testPath); | 
| if (stat.isDirectory()) | 
| { | 
| if (recurse) | 
| @@ -49,39 +50,58 @@ function addTestPaths(testPaths, recurse | 
| { | 
| if (testPath.split(path.sep).includes("browser")) | 
| browserFiles.push(testPath); | 
| else | 
| unitFiles.push(testPath); | 
| } | 
| } | 
| } | 
| + | 
| +function getFileURL(filePath) | 
| +{ | 
| +  return url.format({ | 
| +    protocol: "file", | 
| +    slashes: "true", | 
| +    pathname: path.resolve(process.cwd(), filePath).split(path.sep).join("/") | 
| +  }); | 
| +} | 
| + | 
| +function runBrowserTests() | 
| +{ | 
| +  if (!browserFiles.length) | 
| +    return; | 
| + | 
| +  // Navigate to this directory because about:blank won't be allowed to load | 
| +  // file:/// URLs. | 
| +  let initialPage = getFileURL(__dirname); | 
| +  let bootstrapPath = path.join(__dirname, "test", "browser", | 
| +                                "_bootstrap.js"); | 
| +  let nodeunitPath = path.join( | 
| +    path.dirname(require.resolve("nodeunit")), | 
| +    "examples", "browser", "nodeunit.js" | 
| +  ); | 
| +  let args = [ | 
| +    getFileURL(nodeunitPath), | 
| +    ...browserFiles.map(getFileURL) | 
| +  ]; | 
| +  return chromiumProcess(initialPage, bootstrapPath, args); | 
| +} | 
| + | 
| if (process.argv.length > 2) | 
| addTestPaths(process.argv.slice(2), true); | 
| else | 
| { | 
| addTestPaths( | 
| [path.join(__dirname, "test"), path.join(__dirname, "test", "browser")], | 
| true | 
| ); | 
| } | 
|  | 
| -if (browserFiles.length) | 
| +Promise.resolve(runBrowserTests()).catch(error => | 
| { | 
| -  let nodeunitPath = path.join( | 
| -    path.dirname(require.resolve("nodeunit")), | 
| -    "examples", "browser", "nodeunit.js" | 
| -  ); | 
| -  browserFiles.unshift(nodeunitPath); | 
| - | 
| -  let urls = browserFiles.map(file => | 
| -  { | 
| -    return url.format({ | 
| -      protocol: "file", | 
| -      slashes: "true", | 
| -      pathname: path.resolve(process.cwd(), file).split(path.sep).join("/") | 
| -    }); | 
| -  }); | 
| -  let args = [path.join(__dirname, "browsertests.js")].concat(urls); | 
| -  childProcess.execFileSync(phantomjs.path, args, {stdio: "inherit"}); | 
| -} | 
| -if (unitFiles.length) | 
| -  nodeunit.reporters.default.run(unitFiles); | 
| +  console.error("Failed running browser tests"); | 
| +  console.error(error); | 
| +}).then(() => | 
| +{ | 
| +  if (unitFiles.length) | 
| +    nodeunit.reporters.default.run(unitFiles); | 
| +}); | 
|  |