/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; /* eslint-env node */ // The `*testPaths` defined below for test paths are the main path formats we // prefer to support for tests as they are commonly used across the tree. // We prefer the tests to be in named directories as this makes it easier // to identify the types of tests developers are working with. Additionally, // it is not possible to scope ESLint rules to individual files based on .ini // files without a build step that would break editors, or an expensive loading // cycle. // Please do not add more cases of multiple test types in a single // directory. This may cause ESLint rules to be incorrectly applied to the wrong // tests, leading to false negatives. It could cause the wrong sets of globals // to be defined in the scope, causing false positives when checking for no // undefined variables. // See https://firefox-source-docs.mozilla.org/code-quality/lint/linters/eslint.html#i-m-adding-tests-how-do-i-set-up-the-right-configuration // for more information. const browserTestPaths = ["**/test*/**/browser*/"]; const chromeTestPaths = ["**/test*/chrome/"]; const mochitestTestPaths = [ // Note: we do not want to match testing/mochitest as that would apply // too many globals for that directory. "**/test/mochitest*/", "**/tests/mochitest*/", "testing/mochitest/tests/SimpleTest/", "testing/mochitest/tests/Harness_sanity/", ]; const xpcshellTestPaths = [ "**/test*/unit*/**/", "**/test*/*/unit*/", "**/test*/xpcshell/**/", ]; // NOTE: Before adding to the list below, please see the note at the top // of the file. const extraXpcshellTestPaths = [ "devtools/platform/tests/xpcshell/", "dom/file/tests/", "dom/ipc/tests/", "intl/benchmarks/", "intl/l10n/test/", "ipc/testshell/tests/", "memory/replace/dmd/test/", "netwerk/test/httpserver/test/", "testing/modules/tests/xpcshell/", "toolkit/components/backgroundhangmonitor/tests/", "toolkit/components/downloads/test/data/", "toolkit/components/mozintl/test/", "toolkit/components/places/tests/", "toolkit/components/places/tests/bookmarks/", "toolkit/components/places/tests/expiration/", "toolkit/components/places/tests/favicons/", "toolkit/components/places/tests/history/", "toolkit/components/places/tests/legacy/", "toolkit/components/places/tests/migration/", "toolkit/components/places/tests/queries/", "toolkit/components/thumbnails/test/", "toolkit/modules/tests/modules/", "toolkit/mozapps/update/tests/data/", "toolkit/profile/xpcshell/", "toolkit/xre/test/", "widget/headless/tests/", ]; // NOTE: Before adding to the list below, please see the note at the top // of the file. const extraBrowserTestPaths = [ "dom/ipc/tests/", "toolkit/components/thumbnails/test/", "toolkit/xre/test/", "browser/base/content/test/about/", "browser/base/content/test/alerts/", "browser/base/content/test/backforward/", "browser/base/content/test/caps/", "browser/base/content/test/captivePortal/", "browser/base/content/test/contentTheme/", "browser/base/content/test/contextMenu/", "browser/base/content/test/favicons/", "browser/base/content/test/forms/", "browser/base/content/test/fullscreen/", "browser/base/content/test/general/", "browser/base/content/test/gesture/", "browser/base/content/test/historySwipeAnimation/", "browser/base/content/test/keyboard/", "browser/base/content/test/menubar/", "browser/base/content/test/metaTags/", "browser/base/content/test/notificationbox/", "browser/base/content/test/outOfProcess/", "browser/base/content/test/pageActions/", "browser/base/content/test/pageStyle/", "browser/base/content/test/pageinfo/", "browser/base/content/test/performance/", "browser/base/content/test/permissions/", "browser/base/content/test/plugins/", "browser/base/content/test/popupNotifications/", "browser/base/content/test/popups/", "browser/base/content/test/privateBrowsing/", "browser/base/content/test/protectionsUI/", "browser/base/content/test/referrer/", "browser/base/content/test/sanitize/", "browser/base/content/test/sidebar/", "browser/base/content/test/siteIdentity/", "browser/base/content/test/startup/", "browser/base/content/test/static/", "browser/base/content/test/statuspanel/", "browser/base/content/test/sync/", "browser/base/content/test/tabMediaIndicator/", "browser/base/content/test/tabPrompts/", "browser/base/content/test/tabcrashed/", "browser/base/content/test/tabdialogs/", "browser/base/content/test/tabs/", "browser/base/content/test/touch/", "browser/base/content/test/utilityOverlay/", "browser/base/content/test/webextensions/", "browser/base/content/test/webrtc/", "browser/base/content/test/zoom/", "browser/components/customizableui/test/", "browser/components/pocket/test/", "browser/components/preferences/tests/", "browser/components/safebrowsing/content/test/", "browser/components/sessionstore/test/", "browser/components/shell/test/", "browser/components/touchbar/tests/", "browser/components/uitour/test/", "browser/extensions/report-site-issue/test/browser/", "browser/tools/mozscreenshots/", "caps/tests/mochitest/", "devtools/client/debugger/test/mochitest/", "devtools/client/dom/test/", "devtools/client/framework/browser-toolbox/test/", "devtools/client/framework/test/", "devtools/client/inspector/animation/test/", "devtools/client/inspector/boxmodel/test/", "devtools/client/inspector/changes/test/", "devtools/client/inspector/computed/test/", "devtools/client/inspector/extensions/test/", "devtools/client/inspector/flexbox/test/", "devtools/client/inspector/fonts/test/", "devtools/client/inspector/grids/test/", "devtools/client/inspector/markup/test/", "devtools/client/inspector/rules/test/", "devtools/client/inspector/shared/test/", "devtools/client/inspector/test/", "devtools/client/jsonview/test/", "devtools/client/memory/test/browser/", "devtools/client/netmonitor/src/har/test/", "devtools/client/netmonitor/test/", "devtools/client/shared/sourceeditor/test/", "devtools/client/shared/test/", "devtools/client/storage/test/", "devtools/client/styleeditor/test/", "devtools/shared/commands/inspected-window/tests/", "devtools/shared/commands/inspector/tests/", "devtools/shared/commands/network/tests/", "devtools/shared/commands/resource/tests/", "devtools/shared/commands/script/tests/", "devtools/shared/commands/target-configuration/tests/", "devtools/shared/commands/target/tests/", "devtools/shared/commands/thread-configuration/tests/", "devtools/shared/test-helpers/", "docshell/test/navigation/", "dom/base/test/", "dom/broadcastchannel/tests/", "dom/events/test/", "dom/fetch/tests/", "dom/file/ipc/tests/", "dom/html/test/", "dom/indexedDB/test/", "dom/ipc/tests/", "dom/l10n/tests/mochitest/", "dom/localstorage/test/", "dom/manifest/test/", "dom/midi/tests/", "dom/payments/test/", "dom/plugins/test/mochitest/", "dom/reporting/tests/", "dom/security/test/cors/", "dom/security/test/csp/", "dom/security/test/general/", "dom/security/test/https-first/", "dom/security/test/https-only/", "dom/security/test/mixedcontentblocker/", "dom/security/test/referrer-policy/", "dom/security/test/sec-fetch/", "dom/serviceworkers/test/", "dom/tests/browser/", "dom/url/tests/", "dom/workers/test/", "dom/xhr/tests/", "editor/libeditor/tests/", "extensions/permissions/test/", "layout/base/tests/", "layout/style/test/", "layout/xul/test/", "netwerk/test/useragent/", "parser/htmlparser/tests/mochitest/", "security/sandbox/test/", "testing/mochitest/baselinecoverage/browser_chrome/", "testing/mochitest/tests/python/files/", "toolkit/components/alerts/test/", "toolkit/components/mozprotocol/tests/", "toolkit/components/narrate/test/", "toolkit/components/pdfjs/test/", "toolkit/components/pictureinpicture/tests/", "toolkit/components/printing/tests/", "toolkit/components/reader/test/", "toolkit/components/thumbnails/test/", "toolkit/components/tooltiptext/tests/", "toolkit/components/windowcreator/test/", "toolkit/components/windowwatcher/test/", "toolkit/mozapps/extensions/test/xpinstall/", "uriloader/exthandler/tests/mochitest/", ]; // NOTE: Before adding to the list below, please see the note at the top // of the file. const extraChromeTestPaths = [ "devtools/shared/security/tests/chrome/", "devtools/shared/webconsole/test/chrome/", "dom/base/test/", "dom/battery/test/", "dom/bindings/test/", "dom/console/tests/", "dom/encoding/test/", "dom/events/test/", "dom/flex/test/", "dom/grid/test/", "dom/html/test/", "dom/html/test/forms/", "dom/indexedDB/test/", "dom/messagechannel/tests/", "dom/network/tests/", "dom/promise/tests/", "dom/security/test/general/", "dom/security/test/sec-fetch/", "dom/serviceworkers/test/", "dom/system/tests/", "dom/url/tests/", "dom/websocket/tests/", "dom/workers/test/", "dom/xul/test/", "editor/composer/test/", "extensions/universalchardet/tests/", "gfx/layers/apz/test/mochitest/", "image/test/mochitest/", "layout/forms/test/", "layout/generic/test/", "layout/mathml/tests/", "layout/svg/tests/", "layout/xul/test/", "toolkit/components/aboutmemory/tests/", "toolkit/components/printing/tests/", "toolkit/components/url-classifier/tests/mochitest/", "toolkit/components/viewsource/test/", "toolkit/components/windowcreator/test/", "toolkit/components/windowwatcher/test/", "toolkit/components/workerloader/tests/", "toolkit/content/tests/widgets/", "toolkit/profile/test/", "widget/tests/", "xpfe/appshell/test/", ]; // NOTE: Before adding to the list below, please see the note at the top // of the file. const extraMochitestTestPaths = [ "dom/ipc/tests/", "toolkit/xre/test/", "accessible/tests/crashtests/", "browser/components/protocolhandler/test/", "caps/tests/mochitest/", "docshell/test/iframesandbox/", "docshell/test/navigation/", "dom/abort/tests/", "dom/animation/test/mozilla/", "dom/animation/test/style/", "dom/base/test/", "dom/battery/test/", "dom/bindings/test/", "dom/broadcastchannel/tests/", "dom/canvas/test/", "dom/console/tests/", "dom/credentialmanagement/tests/", "dom/crypto/test/", "dom/encoding/test/", "dom/events/test/", "dom/file/tests/", "dom/file/ipc/tests/", "dom/filesystem/compat/tests/", "dom/filesystem/tests/", "dom/html/test/", "dom/html/test/forms/", "dom/indexedDB/test/", "dom/ipc/tests/", "dom/jsurl/test/", "dom/localstorage/test/", "dom/locks/test/", "dom/manifest/test/", "dom/media/mediasession/test/", "dom/media/mediasource/test/", "dom/media/test/", "dom/media/webaudio/test/", "dom/media/webcodecs/test/", "dom/media/webspeech/recognition/test/", "dom/media/webspeech/synth/test/", "dom/messagechannel/tests/", "dom/midi/tests/", "dom/network/tests/", "dom/payments/test/", "dom/performance/tests/", "dom/permission/tests/", "dom/plugins/test/mochitest/", "dom/promise/tests/", "dom/push/test/", "dom/quota/test/modules/content/", "dom/reporting/tests/", "dom/security/test/cors/", "dom/security/test/csp/", "dom/security/test/https-only/", "dom/security/test/mixedcontentblocker/", "dom/security/test/referrer-policy/", "dom/security/test/sec-fetch/", "dom/security/test/sri/", "dom/serviceworkers/test/", "dom/smil/test/", "dom/svg/test/", "dom/system/tests/", "dom/u2f/tests/", "dom/url/tests/", "dom/webauthn/tests/", "dom/websocket/tests/", "dom/workers/test/", "dom/worklet/tests/", "dom/xhr/tests/", "dom/xml/test/", "dom/xul/test/", "editor/composer/test/", "editor/libeditor/tests/", "editor/spellchecker/tests/", "extensions/permissions/test/", "gfx/layers/apz/test/mochitest/", "image/test/mochitest/", "intl/uconv/tests/", "layout/base/tests/", "layout/forms/test/", "layout/generic/test/", "layout/inspector/tests/", "layout/style/test/", "layout/svg/tests/", "layout/tables/test/", "layout/xul/test/", "parser/htmlparser/tests/mochitest/", "services/sync/tests/tps/", "testing/mochitest/baselinecoverage/plain/", "testing/mochitest/tests/python/files/", "toolkit/components/alerts/test/", "toolkit/components/passwordmgr/test/mochitest/", "toolkit/components/prompts/test/", "toolkit/components/satchel/test/", "toolkit/components/url-classifier/tests/mochitest/", "toolkit/components/windowcreator/test/", "toolkit/components/windowwatcher/test/", "toolkit/content/tests/widgets/", "toolkit/xre/test/", "uriloader/exthandler/tests/mochitest/", "widget/tests/", ]; // Please DO NOT add more entries to the list below. // Doing so may cause conflicts in ESLint rules and globals, and cause // unexpected issues to be raised or missed. let expectedDupePaths = new Set([ "caps/tests/mochitest/", "docshell/test/navigation/", "dom/base/test/", "dom/battery/test/", "dom/bindings/test/", "dom/broadcastchannel/tests/", "dom/console/tests/", "dom/encoding/test/", "dom/events/test/", "dom/file/tests/", "dom/file/ipc/tests/", "dom/indexedDB/test/", "dom/ipc/tests/", "dom/localstorage/test/", "dom/html/test/", "dom/html/test/forms/", "dom/manifest/test/", "dom/messagechannel/tests/", "dom/midi/tests/", "dom/network/tests/", "dom/payments/test/", "dom/plugins/test/mochitest/", "dom/promise/tests/", "dom/reporting/tests/", "dom/security/test/cors/", "dom/security/test/csp/", "dom/security/test/general/", "dom/security/test/https-only/", "dom/security/test/mixedcontentblocker/", "dom/security/test/referrer-policy/", "dom/security/test/sec-fetch/", "dom/serviceworkers/test/", "dom/system/tests/", "dom/url/tests/", "dom/websocket/tests/", "dom/workers/test/", "dom/xhr/tests/", "dom/xul/test/", "editor/composer/test/", "editor/libeditor/tests/", "extensions/permissions/test/", "gfx/layers/apz/test/mochitest/", "image/test/mochitest/", "layout/base/tests/", "layout/forms/test/", "layout/generic/test/", "layout/style/test/", "layout/svg/tests/", "layout/xul/test/", "parser/htmlparser/tests/mochitest/", "testing/mochitest/tests/python/files/", "toolkit/components/alerts/test/", "toolkit/components/printing/tests/", "toolkit/components/thumbnails/test/", "toolkit/components/url-classifier/tests/mochitest/", "toolkit/components/windowcreator/test/", "toolkit/components/windowwatcher/test/", "toolkit/content/tests/widgets/", "toolkit/xre/test/", "uriloader/exthandler/tests/mochitest/", "widget/tests/", ]); // Please DO NOT add more paths to the list above. let paths = new Set(extraXpcshellTestPaths); for (let path of [ ...extraBrowserTestPaths, ...extraChromeTestPaths, ...extraMochitestTestPaths, ]) { if (paths.has(path) && !expectedDupePaths.has(path)) { throw new Error(` Unexpected directory containing different test types: ${path} Please do not add new paths containing different test types. Please use separate directories. Having different test types in the same directory may cause ESLint rules to be incorrectly applied. `); } paths.add(path); } module.exports = { testPaths: { browser: [...browserTestPaths, ...extraBrowserTestPaths], chrome: [...chromeTestPaths, ...extraChromeTestPaths], mochitest: [...mochitestTestPaths, ...extraMochitestTestPaths], xpcshell: [...xpcshellTestPaths, ...extraXpcshellTestPaths], }, };