Since now we load dark-theme to the code, we don't need reload when apply. Also moved touched tests to karma. Also removed related rules in build. Change-Id: Ie1375596ae1e3aab8dcba4534ca16a5c698a915b
334 lines
15 KiB
JavaScript
334 lines
15 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright (C) 2017 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
const testFiles = [];
|
|
const scriptsPath = '../scripts/';
|
|
const elementsPath = '../elements/';
|
|
const behaviorsPath = '../behaviors/';
|
|
const servicesPath = '../services/';
|
|
|
|
// Elements tests.
|
|
/* eslint-disable max-len */
|
|
const elements = [
|
|
// This seemed to be flaky when it was farther down the list. Keep at the
|
|
// beginning.
|
|
'gr-app_test.html',
|
|
'admin/gr-admin-group-list/gr-admin-group-list_test.html',
|
|
'admin/gr-admin-view/gr-admin-view_test.html',
|
|
'admin/gr-confirm-delete-item-dialog/gr-confirm-delete-item-dialog_test.html',
|
|
'admin/gr-create-change-dialog/gr-create-change-dialog_test.html',
|
|
'admin/gr-create-group-dialog/gr-create-group-dialog_test.html',
|
|
'admin/gr-create-pointer-dialog/gr-create-pointer-dialog_test.html',
|
|
'admin/gr-create-repo-dialog/gr-create-repo-dialog_test.html',
|
|
'admin/gr-group-audit-log/gr-group-audit-log_test.html',
|
|
'admin/gr-group-members/gr-group-members_test.html',
|
|
'admin/gr-group/gr-group_test.html',
|
|
'admin/gr-permission/gr-permission_test.html',
|
|
'admin/gr-plugin-config-array-editor/gr-plugin-config-array-editor_test.html',
|
|
'admin/gr-plugin-list/gr-plugin-list_test.html',
|
|
'admin/gr-repo-access/gr-repo-access_test.html',
|
|
'admin/gr-repo-commands/gr-repo-commands_test.html',
|
|
'admin/gr-repo-dashboards/gr-repo-dashboards_test.html',
|
|
'admin/gr-repo-detail-list/gr-repo-detail-list_test.html',
|
|
'admin/gr-repo-list/gr-repo-list_test.html',
|
|
'admin/gr-repo-plugin-config/gr-repo-plugin-config_test.html',
|
|
'admin/gr-repo/gr-repo_test.html',
|
|
'admin/gr-rule-editor/gr-rule-editor_test.html',
|
|
'change-list/gr-change-list-item/gr-change-list-item_test.html',
|
|
'change-list/gr-change-list-view/gr-change-list-view_test.html',
|
|
'change-list/gr-change-list/gr-change-list_test.html',
|
|
'change-list/gr-create-commands-dialog/gr-create-commands-dialog_test.html',
|
|
'change-list/gr-create-change-help/gr-create-change-help_test.html',
|
|
'change-list/gr-dashboard-view/gr-dashboard-view_test.html',
|
|
'change-list/gr-repo-header/gr-repo-header_test.html',
|
|
'change-list/gr-user-header/gr-user-header_test.html',
|
|
'change/gr-change-actions/gr-change-actions_test.html',
|
|
'change/gr-change-metadata/gr-change-metadata-it_test.html',
|
|
'change/gr-change-metadata/gr-change-metadata_test.html',
|
|
'change/gr-change-requirements/gr-change-requirements_test.html',
|
|
'change/gr-comment-list/gr-comment-list_test.html',
|
|
'change/gr-commit-info/gr-commit-info_test.html',
|
|
'change/gr-confirm-abandon-dialog/gr-confirm-abandon-dialog_test.html',
|
|
'change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog_test.html',
|
|
'change/gr-confirm-cherrypick-conflict-dialog/gr-confirm-cherrypick-conflict-dialog_test.html',
|
|
'change/gr-confirm-move-dialog/gr-confirm-move-dialog_test.html',
|
|
'change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_test.html',
|
|
'change/gr-confirm-revert-dialog/gr-confirm-revert-dialog_test.html',
|
|
'change/gr-confirm-submit-dialog/gr-confirm-submit-dialog_test.html',
|
|
'change/gr-download-dialog/gr-download-dialog_test.html',
|
|
'change/gr-file-list-header/gr-file-list-header_test.html',
|
|
'change/gr-file-list/gr-file-list_test.html',
|
|
'change/gr-included-in-dialog/gr-included-in-dialog_test.html',
|
|
'change/gr-label-score-row/gr-label-score-row_test.html',
|
|
'change/gr-label-scores/gr-label-scores_test.html',
|
|
'change/gr-message/gr-message_test.html',
|
|
'change/gr-messages-list/gr-messages-list_test.html',
|
|
'change/gr-messages-list/gr-messages-list-experimental_test.html',
|
|
'change/gr-related-changes-list/gr-related-changes-list_test.html',
|
|
'change/gr-reply-dialog/gr-reply-dialog-it_test.html',
|
|
'change/gr-reply-dialog/gr-reply-dialog_test.html',
|
|
'change/gr-reviewer-list/gr-reviewer-list_test.html',
|
|
'change/gr-thread-list/gr-thread-list_test.html',
|
|
'change/gr-upload-help-dialog/gr-upload-help-dialog_test.html',
|
|
'core/gr-account-dropdown/gr-account-dropdown_test.html',
|
|
'core/gr-error-dialog/gr-error-dialog_test.html',
|
|
'core/gr-error-manager/gr-error-manager_test.html',
|
|
'core/gr-key-binding-display/gr-key-binding-display_test.html',
|
|
'core/gr-keyboard-shortcuts-dialog/gr-keyboard-shortcuts-dialog_test.html',
|
|
'core/gr-main-header/gr-main-header_test.html',
|
|
'core/gr-navigation/gr-navigation_test.html',
|
|
'core/gr-router/gr-router_test.html',
|
|
'core/gr-search-bar/gr-search-bar_test.html',
|
|
'core/gr-smart-search/gr-smart-search_test.html',
|
|
'diff/gr-comment-api/gr-comment-api_test.html',
|
|
'diff/gr-coverage-layer/gr-coverage-layer_test.html',
|
|
'diff/gr-diff-builder/gr-diff-builder-element_test.html',
|
|
'diff/gr-diff-builder/gr-diff-builder-unified_test.html',
|
|
'diff/gr-diff-cursor/gr-diff-cursor_test.html',
|
|
'diff/gr-diff-highlight/gr-annotation_test.html',
|
|
'diff/gr-diff-highlight/gr-diff-highlight_test.html',
|
|
'diff/gr-diff-host/gr-diff-host_test.html',
|
|
'diff/gr-diff-mode-selector/gr-diff-mode-selector_test.html',
|
|
'diff/gr-diff-preferences-dialog/gr-diff-preferences-dialog_test.html',
|
|
'diff/gr-diff-processor/gr-diff-processor_test.html',
|
|
'diff/gr-diff-selection/gr-diff-selection_test.html',
|
|
'diff/gr-diff-view/gr-diff-view_test.html',
|
|
'diff/gr-diff/gr-diff-group_test.html',
|
|
'diff/gr-apply-fix-dialog/gr-apply-fix-dialog_test.html',
|
|
'diff/gr-patch-range-select/gr-patch-range-select_test.html',
|
|
'diff/gr-ranged-comment-layer/gr-ranged-comment-layer_test.html',
|
|
'diff/gr-selection-action-box/gr-selection-action-box_test.html',
|
|
'diff/gr-syntax-layer/gr-syntax-layer_test.html',
|
|
'documentation/gr-documentation-search/gr-documentation-search_test.html',
|
|
'edit/gr-default-editor/gr-default-editor_test.html',
|
|
'edit/gr-edit-controls/gr-edit-controls_test.html',
|
|
'edit/gr-edit-file-controls/gr-edit-file-controls_test.html',
|
|
'edit/gr-editor-view/gr-editor-view_test.html',
|
|
'plugins/gr-admin-api/gr-admin-api_test.html',
|
|
'plugins/gr-styles-api/gr-styles-api_test.html',
|
|
'plugins/gr-attribute-helper/gr-attribute-helper_test.html',
|
|
'plugins/gr-dom-hooks/gr-dom-hooks_test.html',
|
|
'plugins/gr-endpoint-decorator/gr-endpoint-decorator_test.html',
|
|
'plugins/gr-event-helper/gr-event-helper_test.html',
|
|
'plugins/gr-external-style/gr-external-style_test.html',
|
|
'plugins/gr-plugin-host/gr-plugin-host_test.html',
|
|
'plugins/gr-popup-interface/gr-plugin-popup_test.html',
|
|
'plugins/gr-popup-interface/gr-popup-interface_test.html',
|
|
'plugins/gr-repo-api/gr-repo-api_test.html',
|
|
'plugins/gr-settings-api/gr-settings-api_test.html',
|
|
'plugins/gr-theme-api/gr-theme-api_test.html',
|
|
'settings/gr-account-info/gr-account-info_test.html',
|
|
'settings/gr-agreements-list/gr-agreements-list_test.html',
|
|
'settings/gr-change-table-editor/gr-change-table-editor_test.html',
|
|
'settings/gr-cla-view/gr-cla-view_test.html',
|
|
'settings/gr-edit-preferences/gr-edit-preferences_test.html',
|
|
'settings/gr-email-editor/gr-email-editor_test.html',
|
|
'settings/gr-gpg-editor/gr-gpg-editor_test.html',
|
|
'settings/gr-group-list/gr-group-list_test.html',
|
|
'settings/gr-http-password/gr-http-password_test.html',
|
|
'settings/gr-identities/gr-identities_test.html',
|
|
'settings/gr-menu-editor/gr-menu-editor_test.html',
|
|
'settings/gr-registration-dialog/gr-registration-dialog_test.html',
|
|
'settings/gr-ssh-editor/gr-ssh-editor_test.html',
|
|
'settings/gr-watched-projects-editor/gr-watched-projects-editor_test.html',
|
|
'shared/gr-account-entry/gr-account-entry_test.html',
|
|
'shared/gr-account-label/gr-account-label_test.html',
|
|
'shared/gr-account-list/gr-account-list_test.html',
|
|
'shared/gr-account-link/gr-account-link_test.html',
|
|
'shared/gr-alert/gr-alert_test.html',
|
|
'shared/gr-autocomplete-dropdown/gr-autocomplete-dropdown_test.html',
|
|
'shared/gr-avatar/gr-avatar_test.html',
|
|
'shared/gr-button/gr-button_test.html',
|
|
'shared/gr-change-star/gr-change-star_test.html',
|
|
'shared/gr-change-status/gr-change-status_test.html',
|
|
'shared/gr-comment-thread/gr-comment-thread_test.html',
|
|
'shared/gr-comment/gr-comment_test.html',
|
|
'shared/gr-copy-clipboard/gr-copy-clipboard_test.html',
|
|
'shared/gr-count-string-formatter/gr-count-string-formatter_test.html',
|
|
'shared/gr-date-formatter/gr-date-formatter_test.html',
|
|
'shared/gr-dialog/gr-dialog_test.html',
|
|
'shared/gr-diff-preferences/gr-diff-preferences_test.html',
|
|
'shared/gr-download-commands/gr-download-commands_test.html',
|
|
'shared/gr-dropdown/gr-dropdown_test.html',
|
|
'shared/gr-dropdown-list/gr-dropdown-list_test.html',
|
|
'shared/gr-editable-content/gr-editable-content_test.html',
|
|
'shared/gr-editable-label/gr-editable-label_test.html',
|
|
'shared/gr-formatted-text/gr-formatted-text_test.html',
|
|
'shared/gr-hovercard/gr-hovercard_test.html',
|
|
'shared/gr-hovercard-account/gr-hovercard-account_test.html',
|
|
'shared/gr-js-api-interface/gr-annotation-actions-context_test.html',
|
|
'shared/gr-js-api-interface/gr-annotation-actions-js-api_test.html',
|
|
'shared/gr-js-api-interface/gr-change-actions-js-api_test.html',
|
|
'shared/gr-js-api-interface/gr-change-reply-js-api_test.html',
|
|
'shared/gr-js-api-interface/gr-api-utils_test.html',
|
|
'shared/gr-js-api-interface/gr-js-api-interface_test.html',
|
|
'shared/gr-js-api-interface/gr-gerrit_test.html',
|
|
'shared/gr-js-api-interface/gr-plugin-action-context_test.html',
|
|
'shared/gr-js-api-interface/gr-plugin-loader_test.html',
|
|
'shared/gr-js-api-interface/gr-plugin-endpoints_test.html',
|
|
'shared/gr-js-api-interface/gr-plugin-rest-api_test.html',
|
|
'shared/gr-fixed-panel/gr-fixed-panel_test.html',
|
|
'shared/gr-labeled-autocomplete/gr-labeled-autocomplete_test.html',
|
|
'shared/gr-label-info/gr-label-info_test.html',
|
|
'shared/gr-limited-text/gr-limited-text_test.html',
|
|
'shared/gr-linked-chip/gr-linked-chip_test.html',
|
|
'shared/gr-linked-text/gr-linked-text_test.html',
|
|
'shared/gr-list-view/gr-list-view_test.html',
|
|
'shared/gr-overlay/gr-overlay_test.html',
|
|
'shared/gr-page-nav/gr-page-nav_test.html',
|
|
'shared/gr-repo-branch-picker/gr-repo-branch-picker_test.html',
|
|
'shared/gr-rest-api-interface/gr-auth_test.html',
|
|
'shared/gr-rest-api-interface/gr-etag-decorator_test.html',
|
|
'shared/gr-rest-api-interface/gr-rest-api-interface_test.html',
|
|
'shared/gr-rest-api-interface/gr-reviewer-updates-parser_test.html',
|
|
'shared/gr-rest-api-interface/gr-rest-apis/gr-rest-api-helper_test.html',
|
|
'shared/gr-select/gr-select_test.html',
|
|
'shared/gr-shell-command/gr-shell-command_test.html',
|
|
'shared/gr-storage/gr-storage_test.html',
|
|
'shared/gr-textarea/gr-textarea_test.html',
|
|
'shared/gr-tooltip-content/gr-tooltip-content_test.html',
|
|
'shared/gr-tooltip/gr-tooltip_test.html',
|
|
'shared/revision-info/revision-info_test.html',
|
|
];
|
|
/* eslint-enable max-len */
|
|
for (let file of elements) {
|
|
file = elementsPath + file;
|
|
testFiles.push(file);
|
|
}
|
|
|
|
// Behaviors tests.
|
|
/* eslint-disable max-len */
|
|
const behaviors = [
|
|
'base-url-behavior/base-url-behavior_test.html',
|
|
'docs-url-behavior/docs-url-behavior_test.html',
|
|
'dom-util-behavior/dom-util-behavior_test.html',
|
|
'keyboard-shortcut-behavior/keyboard-shortcut-behavior_test.html',
|
|
'rest-client-behavior/rest-client-behavior_test.html',
|
|
'gr-access-behavior/gr-access-behavior_test.html',
|
|
'gr-admin-nav-behavior/gr-admin-nav-behavior_test.html',
|
|
'gr-change-table-behavior/gr-change-table-behavior_test.html',
|
|
'gr-list-view-behavior/gr-list-view-behavior_test.html',
|
|
'gr-display-name-behavior/gr-display-name-behavior_test.html',
|
|
'gr-patch-set-behavior/gr-patch-set-behavior_test.html',
|
|
'gr-path-list-behavior/gr-path-list-behavior_test.html',
|
|
'gr-tooltip-behavior/gr-tooltip-behavior_test.html',
|
|
'gr-url-encoding-behavior/gr-url-encoding-behavior_test.html',
|
|
'safe-types-behavior/safe-types-behavior_test.html',
|
|
];
|
|
/* eslint-enable max-len */
|
|
for (let file of behaviors) {
|
|
// Behaviors do not utilize the DOM, so no shadow DOM test is necessary.
|
|
file = behaviorsPath + file;
|
|
testFiles.push(file);
|
|
}
|
|
|
|
const scripts = [
|
|
'gr-reviewer-suggestions-provider/gr-reviewer-suggestions-provider_test.html',
|
|
'gr-group-suggestions-provider/gr-group-suggestions-provider_test.html',
|
|
'gr-display-name-utils/gr-display-name-utils_test.html',
|
|
'gr-email-suggestions-provider/gr-email-suggestions-provider_test.html',
|
|
];
|
|
/* eslint-enable max-len */
|
|
for (let file of scripts) {
|
|
file = scriptsPath + file;
|
|
testFiles.push(file);
|
|
}
|
|
|
|
const services = [
|
|
'app-context-init_test.html',
|
|
'flags_test.html',
|
|
'gr-reporting/gr-reporting_test.html',
|
|
'gr-reporting/gr-reporting_mock_test.html',
|
|
'gr-event-interface/gr-event-interface_test.html',
|
|
];
|
|
for (let file of services) {
|
|
file = servicesPath + file;
|
|
testFiles.push(file);
|
|
}
|
|
|
|
// embed test
|
|
testFiles.push('../embed/gr-diff-app-context-init_test.html');
|
|
|
|
/**
|
|
* Converts multiline string to a map<file_name, test_count>.
|
|
*
|
|
* @param {number} testsPerFileString - multiline input string in the following format:
|
|
* fileName1:test_count1
|
|
* fileName2:test_count2
|
|
* ...
|
|
* fileName3:test_count3
|
|
* @return Object<string, number> - key is the test file name, value is the number of tests
|
|
*/
|
|
function parseTestsPerFileString(testsPerFileString) {
|
|
return testsPerFileString.split('\n').map(s => s.trim().replace('./', '../'))
|
|
.reduce((acc, fileAndCount) => {
|
|
const [file, countStr] = fileAndCount.split(':');
|
|
acc[file] = parseInt(countStr);
|
|
return acc;
|
|
}, {});
|
|
}
|
|
|
|
const defaultTestsPerFile = [];
|
|
|
|
function getBucketWithMinTests(buckets) {
|
|
let minBucket = buckets[0];
|
|
for (let i = 1; i < buckets.length; i++) {
|
|
if (buckets[i].count < minBucket.count) {
|
|
minBucket = buckets[i];
|
|
}
|
|
}
|
|
return minBucket;
|
|
}
|
|
|
|
/**
|
|
* Split testFiles among all buckets. The greedy algorithm is used,
|
|
* because we don't need accurate splitting
|
|
*/
|
|
function splitTestsByBuckets(buckets, testsPerFile) {
|
|
for (const testFile of testFiles) {
|
|
const testsInFile = testsPerFile[testFile] ?
|
|
testsPerFile[testFile] : defaultTestsPerFile;
|
|
const minBucket = getBucketWithMinTests(buckets);
|
|
minBucket.count += testsInFile;
|
|
minBucket.items.push(testFile);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns list of test files for specified splitIndex
|
|
*
|
|
* @param {string} testsPerFileString - information about number of tests in each file
|
|
* (see suite_conf.js for exact format)
|
|
* @param {number} splitIndex - index of split to return (0<=splitIndex<splitCount)
|
|
* @param {number} splitCount - total number of splits
|
|
* @return Array<string> - list of test files
|
|
*/
|
|
export function getSuiteTests(testsPerFileString, splitIndex, splitCount) {
|
|
const testsPerFile = parseTestsPerFileString(testsPerFileString);
|
|
const buckets = [];
|
|
for (let i = 0; i < splitCount; i++) {
|
|
buckets.push({count: 0, items: []});
|
|
}
|
|
// TODO(dmfilippov): split tests by buckets only once
|
|
// This doesn't affect overall performance, so we can keep it
|
|
// while we have only small amounts of test files.
|
|
splitTestsByBuckets(buckets, testsPerFile);
|
|
console.log(buckets);
|
|
return buckets[splitIndex].items;
|
|
}
|
|
|