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