| <!DOCTYPE html> |
| <!-- |
| Copyright (C) 2016 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-api-interface</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="gr-js-api-interface.html"> |
| |
| <script>void(0);</script> |
| |
| <test-fixture id="basic"> |
| <template> |
| <gr-js-api-interface></gr-js-api-interface> |
| </template> |
| </test-fixture> |
| |
| <script> |
| suite('gr-js-api-interface tests', function() { |
| var element; |
| var plugin; |
| var errorStub; |
| var sandbox; |
| |
| var throwErrFn = function() { |
| throw Error('Unfortunately, this handler has stopped'); |
| }; |
| |
| setup(function() { |
| sandbox = sinon.sandbox.create(); |
| stub('gr-rest-api-interface', { |
| getAccount: function() { |
| return Promise.resolve({name: 'Judy Hopps'}); |
| }, |
| }); |
| element = fixture('basic'); |
| errorStub = sandbox.stub(console, 'error'); |
| Gerrit._setPluginsCount(1); |
| Gerrit.install(function(p) { plugin = p; }, '0.1', |
| 'http://test.com/plugins/testplugin/static/test.js'); |
| }); |
| |
| teardown(function() { |
| sandbox.restore(); |
| element._removeEventCallbacks(); |
| plugin = null; |
| }); |
| |
| test('url', function() { |
| assert.equal(plugin.url(), 'http://test.com/plugins/testplugin/'); |
| assert.equal(plugin.url('/static/test.js'), |
| 'http://test.com/plugins/testplugin/static/test.js'); |
| }); |
| |
| test('history event', function(done) { |
| plugin.on(element.EventType.HISTORY, throwErrFn); |
| plugin.on(element.EventType.HISTORY, function(path) { |
| assert.equal(path, '/path/to/awesomesauce'); |
| assert.isTrue(errorStub.calledOnce); |
| done(); |
| }); |
| element.handleEvent(element.EventType.HISTORY, |
| {path: '/path/to/awesomesauce'}); |
| }); |
| |
| test('showchange event', function(done) { |
| var testChange = { |
| _number: 42, |
| revisions: {def: {_number: 2}, abc: {_number: 1}}, |
| }; |
| plugin.on(element.EventType.SHOW_CHANGE, throwErrFn); |
| plugin.on(element.EventType.SHOW_CHANGE, function(change, revision) { |
| assert.deepEqual(change, testChange); |
| assert.deepEqual(revision, testChange.revisions.abc); |
| assert.isTrue(errorStub.calledOnce); |
| done(); |
| }); |
| element.handleEvent(element.EventType.SHOW_CHANGE, |
| {change: testChange, patchNum: 1}); |
| }); |
| |
| test('handleEvent awaits plugins load', function(done) { |
| var testChange = { |
| _number: 42, |
| revisions: {def: {_number: 2}, abc: {_number: 1}}, |
| }; |
| var spy = sandbox.spy(); |
| Gerrit._setPluginsCount(1); |
| plugin.on(element.EventType.SHOW_CHANGE, spy); |
| element.handleEvent(element.EventType.SHOW_CHANGE, |
| {change: testChange, patchNum: 1}); |
| assert.isFalse(spy.called); |
| Gerrit._setPluginsCount(0); |
| flush(function() { |
| assert.isTrue(spy.called); |
| done(); |
| }); |
| }); |
| |
| test('comment event', function(done) { |
| var testCommentNode = {foo: 'bar'}; |
| plugin.on(element.EventType.COMMENT, throwErrFn); |
| plugin.on(element.EventType.COMMENT, function(commentNode) { |
| assert.deepEqual(commentNode, testCommentNode); |
| assert.isTrue(errorStub.calledOnce); |
| done(); |
| }); |
| element.handleEvent(element.EventType.COMMENT, {node: testCommentNode}); |
| }); |
| |
| test('revert event', function() { |
| function appendToRevertMsg(c, revertMsg, originalMsg) { |
| return revertMsg + '\n' + originalMsg.replace(/^/gm, '> ') + '\ninfo'; |
| } |
| |
| assert.equal(element.modifyRevertMsg(null, 'test', 'origTest'), 'test'); |
| assert.equal(errorStub.callCount, 0); |
| |
| plugin.on(element.EventType.REVERT, throwErrFn); |
| plugin.on(element.EventType.REVERT, appendToRevertMsg); |
| assert.equal(element.modifyRevertMsg(null, 'test', 'origTest'), |
| 'test\n> origTest\ninfo'); |
| assert.isTrue(errorStub.calledOnce); |
| |
| plugin.on(element.EventType.REVERT, appendToRevertMsg); |
| assert.equal(element.modifyRevertMsg(null, 'test', 'origTest'), |
| 'test\n> origTest\ninfo\n> origTest\ninfo'); |
| assert.isTrue(errorStub.calledTwice); |
| }); |
| |
| test('postrevert event', function() { |
| function getLabels(c) { |
| return {'Code-Review': 1}; |
| } |
| |
| assert.deepEqual(element.getLabelValuesPostRevert(null), {}); |
| assert.equal(errorStub.callCount, 0); |
| |
| plugin.on(element.EventType.POST_REVERT, throwErrFn); |
| plugin.on(element.EventType.POST_REVERT, getLabels); |
| assert.deepEqual( |
| element.getLabelValuesPostRevert(null), {'Code-Review': 1}); |
| assert.isTrue(errorStub.calledOnce); |
| }); |
| |
| test('commitmsgedit event', function(done) { |
| var testMsg = 'Test CL commit message'; |
| plugin.on(element.EventType.COMMIT_MSG_EDIT, throwErrFn); |
| plugin.on(element.EventType.COMMIT_MSG_EDIT, function(change, msg) { |
| assert.deepEqual(msg, testMsg); |
| assert.isTrue(errorStub.calledOnce); |
| done(); |
| }); |
| element.handleCommitMessage(null, testMsg); |
| }); |
| |
| test('labelchange event', function(done) { |
| var testChange = {_number: 42}; |
| plugin.on(element.EventType.LABEL_CHANGE, throwErrFn); |
| plugin.on(element.EventType.LABEL_CHANGE, function(change) { |
| assert.deepEqual(change, testChange); |
| assert.isTrue(errorStub.calledOnce); |
| done(); |
| }); |
| element.handleEvent(element.EventType.LABEL_CHANGE, {change: testChange}); |
| }); |
| |
| test('submitchange', function() { |
| plugin.on(element.EventType.SUBMIT_CHANGE, throwErrFn); |
| plugin.on(element.EventType.SUBMIT_CHANGE, function() { return true; }); |
| assert.isTrue(element.canSubmitChange()); |
| assert.isTrue(errorStub.calledOnce); |
| plugin.on(element.EventType.SUBMIT_CHANGE, function() { return false; }); |
| plugin.on(element.EventType.SUBMIT_CHANGE, function() { return true; }); |
| assert.isFalse(element.canSubmitChange()); |
| assert.isTrue(errorStub.calledTwice); |
| }); |
| |
| test('versioning', function() { |
| var callback = sandbox.spy(); |
| Gerrit.install(callback, '0.0pre-alpha'); |
| assert(callback.notCalled); |
| }); |
| |
| test('getAccount', function(done) { |
| Gerrit.getLoggedIn().then(function(loggedIn) { |
| assert.isTrue(loggedIn); |
| done(); |
| }); |
| }); |
| |
| test('_setPluginsCount', function(done) { |
| stub('gr-reporting', { |
| pluginsLoaded: function() { |
| assert.equal(Gerrit._pluginsPending, 0); |
| done(); |
| } |
| }); |
| Gerrit._setPluginsCount(0); |
| }); |
| |
| test('_arePluginsLoaded', function() { |
| assert.isTrue(Gerrit._arePluginsLoaded()); |
| Gerrit._setPluginsCount(1); |
| assert.isFalse(Gerrit._arePluginsLoaded()); |
| Gerrit._setPluginsCount(0); |
| assert.isTrue(Gerrit._arePluginsLoaded()); |
| }); |
| |
| test('_pluginInstalled', function(done) { |
| stub('gr-reporting', { |
| pluginsLoaded: function() { |
| assert.equal(Gerrit._pluginsPending, 0); |
| done(); |
| } |
| }); |
| Gerrit._setPluginsCount(2); |
| Gerrit._pluginInstalled(); |
| assert.equal(Gerrit._pluginsPending, 1); |
| Gerrit._pluginInstalled(); |
| }); |
| |
| test('install calls _pluginInstalled', function() { |
| sandbox.stub(Gerrit, '_pluginInstalled'); |
| Gerrit.install(function(p) { plugin = p; }, '0.1', |
| 'http://test.com/plugins/testplugin/static/test.js'); |
| assert.isTrue(Gerrit._pluginInstalled.calledOnce); |
| }); |
| |
| test('install calls _pluginInstalled on error', function() { |
| sandbox.stub(Gerrit, '_pluginInstalled'); |
| Gerrit.install(function() {}, '0.0pre-alpha'); |
| assert.isTrue(Gerrit._pluginInstalled.calledOnce); |
| }); |
| |
| test('installGwt calls _pluginInstalled', function() { |
| sandbox.stub(Gerrit, '_pluginInstalled'); |
| Gerrit.installGwt(); |
| assert.isTrue(Gerrit._pluginInstalled.calledOnce); |
| }); |
| |
| test('installGwt returns a stub object', function() { |
| var plugin = Gerrit.installGwt(); |
| sandbox.stub(console, 'warn'); |
| assert.isAbove(Object.keys(plugin).length, 0); |
| Object.keys(plugin).forEach(function(name) { |
| console.warn.reset(); |
| plugin[name](); |
| assert.isTrue(console.warn.calledOnce); |
| }); |
| }); |
| }); |
| </script> |