Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 1 | // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
Yang Guo | b7a4426 | 2019-11-05 15:25:23 +0100 | [diff] [blame] | 5 | const childProcess = require('child_process'); |
| 6 | const fs = require('fs'); |
| 7 | const path = require('path'); |
Yang Guo | b7a4426 | 2019-11-05 15:25:23 +0100 | [diff] [blame] | 8 | const utils = require('./utils'); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 9 | |
Yang Guo | b7a4426 | 2019-11-05 15:25:23 +0100 | [diff] [blame] | 10 | const Flags = { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 11 | DEBUG_DEVTOOLS: '--debug-devtools', |
| 12 | DEBUG_DEVTOOLS_SHORTHAND: '-d', |
| 13 | FETCH_CONTENT_SHELL: '--fetch-content-shell', |
| 14 | CHROMIUM_PATH: '--chromium-path', // useful for bisecting |
| 15 | TARGET: '--target', // build sub-directory (e.g. Release, Default) |
| 16 | }; |
| 17 | |
Yang Guo | b7a4426 | 2019-11-05 15:25:23 +0100 | [diff] [blame] | 18 | const IS_DEBUG_ENABLED = |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 19 | utils.includes(process.argv, Flags.DEBUG_DEVTOOLS) || utils.includes(process.argv, Flags.DEBUG_DEVTOOLS_SHORTHAND); |
Yang Guo | b7a4426 | 2019-11-05 15:25:23 +0100 | [diff] [blame] | 20 | const CUSTOM_CHROMIUM_PATH = utils.parseArgs(process.argv)[Flags.CHROMIUM_PATH]; |
Yang Guo | b7a4426 | 2019-11-05 15:25:23 +0100 | [diff] [blame] | 21 | const TARGET = utils.parseArgs(process.argv)[Flags.TARGET] || 'Release'; |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 22 | |
Paul Lewis | 4d806b9 | 2020-03-13 14:51:06 +0000 | [diff] [blame] | 23 | const CURRENT_PATH = process.env.PWD || process.cwd(); // Using env.PWD to account for symlinks. |
Mathias Bynens | 9866999 | 2019-11-28 08:50:08 +0100 | [diff] [blame] | 24 | const isThirdParty = CURRENT_PATH.includes('third_party'); |
| 25 | const CHROMIUM_SRC_PATH = CUSTOM_CHROMIUM_PATH || getChromiumSrcPath(isThirdParty); |
Yang Guo | b7a4426 | 2019-11-05 15:25:23 +0100 | [diff] [blame] | 26 | const RELEASE_PATH = path.resolve(CHROMIUM_SRC_PATH, 'out', TARGET); |
| 27 | const BLINK_TEST_PATH = path.resolve(CHROMIUM_SRC_PATH, 'third_party', 'blink', 'tools', 'run_web_tests.py'); |
| 28 | const DEVTOOLS_PATH = path.resolve(CHROMIUM_SRC_PATH, 'third_party', 'devtools-frontend', 'src'); |
| 29 | const CACHE_PATH = path.resolve(DEVTOOLS_PATH, '.test_cache'); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 30 | |
| 31 | function main() { |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 32 | if (!utils.isDir(CACHE_PATH)) { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 33 | fs.mkdirSync(CACHE_PATH); |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 34 | } |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 35 | |
Mathias Bynens | 9866999 | 2019-11-28 08:50:08 +0100 | [diff] [blame] | 36 | const hasUserCompiledContentShell = utils.isFile(getContentShellBinaryPath(RELEASE_PATH)); |
Tim van der Lippe | 26bb5ad | 2020-06-01 11:54:14 +0100 | [diff] [blame] | 37 | if (!hasUserCompiledContentShell) { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 38 | return; |
| 39 | } |
Tim van der Lippe | 26bb5ad | 2020-06-01 11:54:14 +0100 | [diff] [blame] | 40 | const outDir = path.resolve(RELEASE_PATH, '..'); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 41 | |
Tim van der Lippe | 26bb5ad | 2020-06-01 11:54:14 +0100 | [diff] [blame] | 42 | runTests(outDir, IS_DEBUG_ENABLED); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 43 | } |
| 44 | main(); |
| 45 | |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 46 | |
Mathias Bynens | 9866999 | 2019-11-28 08:50:08 +0100 | [diff] [blame] | 47 | function getChromiumSrcPath(isThirdParty) { |
| 48 | if (isThirdParty) |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 49 | // Assume we're in `chromium/src/third_party/devtools-frontend/src`. |
| 50 | { |
Mathias Bynens | 9866999 | 2019-11-28 08:50:08 +0100 | [diff] [blame] | 51 | return path.resolve(CURRENT_PATH, '..', '..', '..'); |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 52 | } |
Mathias Bynens | 9866999 | 2019-11-28 08:50:08 +0100 | [diff] [blame] | 53 | // Assume we're in `devtools/devtools-frontend`, where `devtools` is |
| 54 | // on the same level as `chromium`. |
| 55 | const srcPath = path.resolve(CURRENT_PATH, '..', '..', 'chromium', 'src'); |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 56 | if (!utils.isDir(srcPath)) { |
| 57 | throw new Error( |
| 58 | `Chromium source directory not found at \`${srcPath}\`. ` + |
| 59 | 'Either move your standalone `devtools/devtools-frontend` checkout ' + |
| 60 | 'so that `devtools` is at the same level as `chromium` in ' + |
| 61 | '`chromium/src`, or use `--chromium-path`.'); |
| 62 | } |
Mathias Bynens | 9866999 | 2019-11-28 08:50:08 +0100 | [diff] [blame] | 63 | return srcPath; |
| 64 | } |
| 65 | |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 66 | function getContentShellBinaryPath(dirPath) { |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 67 | if (process.platform === 'linux') { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 68 | return path.resolve(dirPath, 'content_shell'); |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 69 | } |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 70 | |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 71 | if (process.platform === 'win32') { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 72 | return path.resolve(dirPath, 'content_shell.exe'); |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 73 | } |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 74 | |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 75 | if (process.platform === 'darwin') { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 76 | return path.resolve(dirPath, 'Content Shell.app', 'Contents', 'MacOS', 'Content Shell'); |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 77 | } |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 78 | } |
| 79 | |
| 80 | function runTests(buildDirectoryPath, useDebugDevtools) { |
Mathias Bynens | 9866999 | 2019-11-28 08:50:08 +0100 | [diff] [blame] | 81 | const testArgs = getInspectorTests().concat([ |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 82 | '--build-directory', |
| 83 | buildDirectoryPath, |
| 84 | '--target', |
| 85 | TARGET, |
| 86 | ]); |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 87 | if (useDebugDevtools) { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 88 | testArgs.push('--additional-driver-flag=--debug-devtools'); |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 89 | } else { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 90 | console.log('TIP: You can debug a test using: npm run debug-test inspector/test-name.html'); |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 91 | } |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 92 | |
| 93 | if (IS_DEBUG_ENABLED) { |
| 94 | testArgs.push('--additional-driver-flag=--remote-debugging-port=9222'); |
| 95 | testArgs.push('--time-out-ms=6000000'); |
| 96 | console.log('\n============================================='); |
Mathias Bynens | 9866999 | 2019-11-28 08:50:08 +0100 | [diff] [blame] | 97 | const unitTest = testArgs.find(arg => arg.includes('http/tests/devtools/unit/')); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 98 | if (unitTest) { |
Mathias Bynens | 9866999 | 2019-11-28 08:50:08 +0100 | [diff] [blame] | 99 | const unitTestPath = `http://localhost:8080/${unitTest.slice('http/tests/'.length)}`; |
| 100 | const link = |
Yang Guo | 49346f1 | 2020-02-06 10:52:02 +0100 | [diff] [blame] | 101 | `http://localhost:8080/inspector-sources/debug/integration_test_runner.html?test=${unitTestPath}`; |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 102 | console.log('1) Go to: ', link); |
| 103 | console.log('2) Go to: http://localhost:9222/, click on "inspected-page.html", and copy the ws query parameter'); |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 104 | console.log('3) Open DevTools on DevTools and you can refresh to re-run the test'); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 105 | } else { |
| 106 | console.log('Go to: http://localhost:9222/'); |
| 107 | console.log('Click on link and in console execute: test()'); |
| 108 | } |
| 109 | console.log('=============================================\n'); |
| 110 | } |
Tim van der Lippe | 03097b0 | 2020-11-27 16:25:37 +0000 | [diff] [blame^] | 111 | const args = [...testArgs, ...getTestFlags()]; |
Mathias Bynens | b0693f2 | 2020-01-23 13:17:15 +0100 | [diff] [blame] | 112 | console.log(`Running web tests with args: ${args.join(' ')}`); |
Tim van der Lippe | 03097b0 | 2020-11-27 16:25:37 +0000 | [diff] [blame^] | 113 | childProcess.spawn(BLINK_TEST_PATH, args, {stdio: 'inherit'}); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 114 | } |
| 115 | |
| 116 | function getTestFlags() { |
Mathias Bynens | 9866999 | 2019-11-28 08:50:08 +0100 | [diff] [blame] | 117 | const flagValues = Object.keys(Flags).map(key => Flags[key]); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 118 | return process.argv.slice(2).filter(arg => { |
Mathias Bynens | 9866999 | 2019-11-28 08:50:08 +0100 | [diff] [blame] | 119 | const flagName = utils.includes(arg, '=') ? arg.slice(0, arg.indexOf('=')) : arg; |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 120 | return !utils.includes(flagValues, flagName) && !utils.includes(arg, 'inspector') && |
| 121 | !utils.includes(arg, 'http/tests/devtools'); |
| 122 | }); |
| 123 | } |
| 124 | |
| 125 | function getInspectorTests() { |
Mathias Bynens | 9866999 | 2019-11-28 08:50:08 +0100 | [diff] [blame] | 126 | const specificTests = |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 127 | process.argv.filter(arg => utils.includes(arg, 'inspector') || utils.includes(arg, 'http/tests/devtools')); |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 128 | if (specificTests.length) { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 129 | return specificTests; |
Tim van der Lippe | ba26b2b | 2020-03-11 14:40:00 +0000 | [diff] [blame] | 130 | } |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 131 | return [ |
| 132 | 'inspector*', |
| 133 | 'http/tests/inspector*', |
| 134 | 'http/tests/devtools', |
| 135 | ]; |
Kent Tamura | d3d3f04 | 2018-12-12 02:45:28 +0000 | [diff] [blame] | 136 | } |