
The change converts the following files to typescript: * elements/shared/gr-js-api-interface/gr-public-js-api.ts Change-Id: I07e48b9aa3078f90ac99e7addd58e8771bec4486
140 lines
4.4 KiB
JavaScript
140 lines
4.4 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.
|
|
*/
|
|
|
|
import {_testOnly_resetPluginLoader} from '../elements/shared/gr-js-api-interface/gr-plugin-loader.js';
|
|
import {testOnly_resetInternalState} from '../elements/shared/gr-js-api-interface/gr-api-utils.js';
|
|
import {_testOnly_resetEndpoints} from '../elements/shared/gr-js-api-interface/gr-plugin-endpoints.js';
|
|
import {_testOnly_getShortcutManagerInstance} from '../mixins/keyboard-shortcut-mixin/keyboard-shortcut-mixin.js';
|
|
|
|
export const mockPromise = () => {
|
|
let res;
|
|
const promise = new Promise(resolve => {
|
|
res = resolve;
|
|
});
|
|
promise.resolve = res;
|
|
return promise;
|
|
};
|
|
export const isHidden = el => getComputedStyle(el).display === 'none';
|
|
|
|
// Some tests/elements can define its own binding. We want to restore bindings
|
|
// at the end of the test. The TestKeyboardShortcutBinder store bindings in
|
|
// stack, so it is possible to override bindings in nested suites.
|
|
export class TestKeyboardShortcutBinder {
|
|
static push() {
|
|
if (!this.stack) {
|
|
this.stack = [];
|
|
}
|
|
const testBinder = new TestKeyboardShortcutBinder();
|
|
this.stack.push(testBinder);
|
|
return _testOnly_getShortcutManagerInstance();
|
|
}
|
|
|
|
static pop() {
|
|
this.stack.pop()._restoreShortcuts();
|
|
}
|
|
|
|
constructor() {
|
|
this._originalBinding = new Map(
|
|
_testOnly_getShortcutManagerInstance().bindings);
|
|
}
|
|
|
|
_restoreShortcuts() {
|
|
const bindings = _testOnly_getShortcutManagerInstance().bindings;
|
|
bindings.clear();
|
|
this._originalBinding.forEach((value, key) => {
|
|
bindings.set(key, value);
|
|
});
|
|
}
|
|
}
|
|
|
|
// Provide reset plugins function to clear installed plugins between tests.
|
|
// No gr-app found (running tests)
|
|
export const resetPlugins = () => {
|
|
testOnly_resetInternalState();
|
|
_testOnly_resetEndpoints();
|
|
const pl = _testOnly_resetPluginLoader();
|
|
pl.loadPlugins([]);
|
|
};
|
|
|
|
const cleanups = [];
|
|
|
|
function registerTestCleanup(cleanupCallback) {
|
|
cleanups.push(cleanupCallback);
|
|
}
|
|
|
|
export function cleanupTestUtils() {
|
|
cleanups.forEach(cleanup => cleanup());
|
|
cleanups.splice(0);
|
|
}
|
|
|
|
export function stubBaseUrl(newUrl) {
|
|
const originalCanonicalPath = window.CANONICAL_PATH;
|
|
window.CANONICAL_PATH = newUrl;
|
|
registerTestCleanup(() => window.CANONICAL_PATH = originalCanonicalPath);
|
|
}
|
|
|
|
export function generateChange(options) {
|
|
const change = {
|
|
_number: 42,
|
|
};
|
|
const revisionIdStart = 1;
|
|
const messageIdStart = 1000;
|
|
// We want to distinguish between empty arrays/objects and undefined
|
|
// If an option is not set - the appropriate property is not set
|
|
// If an options is set - the property always set
|
|
if (typeof options.revisionsCount !== 'undefined') {
|
|
const revisions = {};
|
|
for (let i = 0; i < options.revisionsCount; i++) {
|
|
const revisionId = (i + revisionIdStart).toString(16);
|
|
revisions[revisionId] = {
|
|
_number: i+1,
|
|
commit: {parents: []},
|
|
};
|
|
}
|
|
change.revisions = revisions;
|
|
}
|
|
if (typeof options.messagesCount !== 'undefined') {
|
|
const messages = [];
|
|
for (let i = 0; i < options.messagesCount; i++) {
|
|
messages.push({
|
|
id: (i + messageIdStart).toString(16),
|
|
date: new Date(2020, 1, 1),
|
|
message: `This is a message N${i + 1}`,
|
|
});
|
|
}
|
|
change.messages = messages;
|
|
}
|
|
if (options.status) {
|
|
change.status = options.status;
|
|
}
|
|
return change;
|
|
}
|
|
|
|
/**
|
|
* Forcing an opacity of 0 onto the ironOverlayBackdrop is required, because
|
|
* otherwise the backdrop stays around in the DOM for too long waiting for
|
|
* an animation to finish. This could be considered to be moved to a
|
|
* common-test-setup file.
|
|
*/
|
|
export function createIronOverlayBackdropStyleEl() {
|
|
const ironOverlayBackdropStyleEl = document.createElement('style');
|
|
document.head.appendChild(ironOverlayBackdropStyleEl);
|
|
ironOverlayBackdropStyleEl.sheet.insertRule(
|
|
'body { --iron-overlay-backdrop-opacity: 0; }');
|
|
return ironOverlayBackdropStyleEl;
|
|
}
|