blob: f1af433472446c0cfe95ad35deb5308eb4e81d76 [file] [log] [blame]
/**
* @license
* Copyright (C) 2020 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 '../../../test/common-test-setup-karma.js';
import {resetPlugins} from '../../../test/test-utils.js';
import './gr-js-api-interface.js';
import {GrPluginEndpoints} from './gr-plugin-endpoints.js';
import {pluginLoader} from './gr-plugin-loader.js';
import {_testOnly_initGerritPluginApi} from './gr-gerrit.js';
const pluginApi = _testOnly_initGerritPluginApi();
suite('gr-plugin-endpoints tests', () => {
let instance;
let pluginFoo;
let pluginBar;
let domHook;
setup(() => {
domHook = {};
instance = new GrPluginEndpoints();
pluginApi.install(p => { pluginFoo = p; }, '0.1',
'http://test.com/plugins/testplugin/static/foo.html');
instance.registerModule(
pluginFoo,
{
endpoint: 'a-place',
type: 'decorate',
moduleName: 'foo-module',
domHook,
}
);
pluginApi.install(p => { pluginBar = p; }, '0.1',
'http://test.com/plugins/testplugin/static/bar.html');
instance.registerModule(
pluginBar,
{
endpoint: 'a-place',
type: 'style',
moduleName: 'bar-module',
domHook,
}
);
sinon.stub(pluginLoader, 'arePluginsLoaded').returns(true);
sinon.spy(instance, 'importUrl');
});
teardown(() => {
resetPlugins();
});
test('getDetails all', () => {
assert.deepEqual(instance.getDetails('a-place'), [
{
moduleName: 'foo-module',
plugin: pluginFoo,
pluginUrl: pluginFoo._url,
type: 'decorate',
domHook,
slot: undefined,
},
{
moduleName: 'bar-module',
plugin: pluginBar,
pluginUrl: pluginBar._url,
type: 'style',
domHook,
slot: undefined,
},
]);
});
test('getDetails by type', () => {
assert.deepEqual(instance.getDetails('a-place', {type: 'style'}), [
{
moduleName: 'bar-module',
plugin: pluginBar,
pluginUrl: pluginBar._url,
type: 'style',
domHook,
slot: undefined,
},
]);
});
test('getDetails by module', () => {
assert.deepEqual(
instance.getDetails('a-place', {moduleName: 'foo-module'}),
[
{
moduleName: 'foo-module',
plugin: pluginFoo,
pluginUrl: pluginFoo._url,
type: 'decorate',
domHook,
slot: undefined,
},
]);
});
test('getModules', () => {
assert.deepEqual(
instance.getModules('a-place'), ['foo-module', 'bar-module']);
});
test('getPlugins', () => {
assert.deepEqual(
instance.getPlugins('a-place'), [pluginFoo._url]);
});
test('getAndImportPlugins', () => {
instance.getAndImportPlugins('a-place');
assert.isTrue(instance.importUrl.called);
assert.isTrue(instance.importUrl.calledOnce);
instance.getAndImportPlugins('a-place');
assert.isTrue(instance.importUrl.calledOnce);
});
test('onNewEndpoint', () => {
const newModuleStub = sinon.stub();
instance.onNewEndpoint('a-place', newModuleStub);
instance.registerModule(
pluginFoo,
{
endpoint: 'a-place',
type: 'replace',
moduleName: 'zaz-module',
domHook,
});
assert.deepEqual(newModuleStub.lastCall.args[0], {
moduleName: 'zaz-module',
plugin: pluginFoo,
pluginUrl: pluginFoo._url,
type: 'replace',
domHook,
slot: undefined,
});
});
test('reuse dom hooks', () => {
instance.registerModule(
pluginFoo, 'a-place', 'decorate', 'foo-module', domHook);
assert.deepEqual(instance.getDetails('a-place'), [
{
moduleName: 'foo-module',
plugin: pluginFoo,
pluginUrl: pluginFoo._url,
type: 'decorate',
domHook,
slot: undefined,
},
{
moduleName: 'bar-module',
plugin: pluginBar,
pluginUrl: pluginBar._url,
type: 'style',
domHook,
slot: undefined,
},
]);
});
});