
As a part of "stepping stone" to simplify migration of plugins that target GWT UI primarily. Provides self.deprecated.install method that moves deprecated API such as `self.deprecated.popup()` and `self.deprecated.onAction()` to `self.popup()` and `self.onAction()` respectively. ``` js Gerrit.install(plugin => { if (Polymer) { // Promote deprecated APIs to default locations. // Not recommended, only as a part of migrating GWT plugins to PG UI. plugin.deprecated.install(); } plugin.onAction('change', 'find-owners', (context) => { console.log(context.change); console.log(context.revision); }); }); ``` Provides partial support for self.onAction with methods: - popup(element) - hide() - refresh() - textfield() - br() - msg(text) - div(...elements) - button(label, callbacks) - checkbox() - label(checkbox, title) - call(payload, onSuccess) Populates plugin-provided change revision actions and puts them in overflow menu. Feature: Issue 5329 Change-Id: Id4528de9e48469d67904cfda8d1c5a22b15e8311
128 lines
3.7 KiB
HTML
128 lines
3.7 KiB
HTML
<!DOCTYPE html>
|
|
<!--
|
|
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.
|
|
-->
|
|
|
|
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
|
|
<title>gr-plugin-action-context</title>
|
|
|
|
<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
|
|
<script src="../../../bower_components/web-component-tester/browser.js"></script>
|
|
<link rel="import" href="../../../test/common-test-setup.html"/>
|
|
<link rel="import" href="gr-js-api-interface.html"/>
|
|
|
|
<script>void(0);</script>
|
|
|
|
<test-fixture id="basic">
|
|
<template>
|
|
<div></div>
|
|
</template>
|
|
</test-fixture>
|
|
|
|
<script>
|
|
suite('gr-plugin-action-context tests', () => {
|
|
let instance;
|
|
let sandbox;
|
|
let plugin;
|
|
|
|
setup(() => {
|
|
sandbox = sinon.sandbox.create();
|
|
Gerrit._setPluginsCount(1);
|
|
Gerrit.install(p => { plugin = p; }, '0.1',
|
|
'http://test.com/plugins/testplugin/static/test.js');
|
|
instance = new GrPluginActionContext(plugin);
|
|
});
|
|
|
|
teardown(() => {
|
|
sandbox.restore();
|
|
});
|
|
|
|
test('popup() and hide()', () => {
|
|
const popupApiStub = {
|
|
close: sandbox.stub(),
|
|
};
|
|
sandbox.stub(plugin.deprecated, 'popup').returns(popupApiStub);
|
|
const el = {};
|
|
instance.popup(el);
|
|
assert.isTrue(instance.plugin.deprecated.popup.calledWith(el));
|
|
|
|
instance.hide();
|
|
assert.isTrue(popupApiStub.close.called);
|
|
});
|
|
|
|
test('textfield', () => {
|
|
assert.equal(instance.textfield().tagName, 'PAPER-INPUT');
|
|
});
|
|
|
|
test('br', () => {
|
|
assert.equal(instance.br().tagName, 'BR');
|
|
});
|
|
|
|
test('msg', () => {
|
|
const el = instance.msg('foobar');
|
|
assert.equal(el.tagName, 'GR-LABEL');
|
|
assert.equal(el.textContent, 'foobar');
|
|
});
|
|
|
|
test('div', () => {
|
|
const el1 = document.createElement('span');
|
|
el1.textContent = 'foo';
|
|
const el2 = document.createElement('div');
|
|
el2.textContent = 'bar';
|
|
const div = instance.div(el1, el2);
|
|
assert.equal(div.tagName, 'DIV');
|
|
assert.equal(div.textContent, 'foobar');
|
|
});
|
|
|
|
test('button', () => {
|
|
const clickStub = sandbox.stub();
|
|
const button = instance.button('foo', {onclick: clickStub});
|
|
MockInteractions.tap(button);
|
|
flush(() => {
|
|
assert.isTrue(clickStub.called);
|
|
assert.equal(button.textContent, 'foo');
|
|
});
|
|
});
|
|
|
|
test('checkbox', () => {
|
|
const el = instance.checkbox();
|
|
assert.equal(el.tagName, 'INPUT');
|
|
assert.equal(el.type, 'checkbox');
|
|
});
|
|
|
|
test('label', () => {
|
|
const fakeMsg = {};
|
|
const fakeCheckbox = {};
|
|
sandbox.stub(instance, 'div');
|
|
sandbox.stub(instance, 'msg').returns(fakeMsg);
|
|
instance.label(fakeCheckbox, 'foo');
|
|
assert.isTrue(instance.div.calledWithExactly(fakeCheckbox, fakeMsg));
|
|
});
|
|
|
|
test('call', () => {
|
|
instance.action = {
|
|
method: 'METHOD',
|
|
__key: 'key',
|
|
};
|
|
sandbox.stub(plugin, '_send');
|
|
const payload = {foo: 'foo'};
|
|
const successStub = sandbox.stub();
|
|
instance.call(payload, successStub);
|
|
assert.isTrue(
|
|
plugin._send.calledWith('METHOD', '/key', successStub, payload));
|
|
});
|
|
});
|
|
</script>
|