|  | <!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-app</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-app.html"> | 
|  |  | 
|  | <script>void(0);</script> | 
|  |  | 
|  | <test-fixture id="basic"> | 
|  | <template> | 
|  | <gr-app id="app"></gr-app> | 
|  | </template> | 
|  | </test-fixture> | 
|  |  | 
|  | <script> | 
|  | suite('gr-app tests', () => { | 
|  | let sandbox; | 
|  | let element; | 
|  |  | 
|  | setup(done => { | 
|  | sandbox = sinon.sandbox.create(); | 
|  | stub('gr-reporting', { | 
|  | appStarted: sandbox.stub(), | 
|  | }); | 
|  | stub('gr-account-dropdown', { | 
|  | _getTopContent: sinon.stub(), | 
|  | }); | 
|  | stub('gr-rest-api-interface', { | 
|  | getAccount() { return Promise.resolve({}); }, | 
|  | getAccountCapabilities() { return Promise.resolve({}); }, | 
|  | getConfig() { | 
|  | return Promise.resolve({ | 
|  | gerrit: {web_uis: ['GWT', 'POLYGERRIT']}, | 
|  | plugin: {}, | 
|  | }); | 
|  | }, | 
|  | getPreferences() { return Promise.resolve({my: []}); }, | 
|  | getVersion() { return Promise.resolve(42); }, | 
|  | probePath() { return Promise.resolve(42); }, | 
|  | }); | 
|  |  | 
|  | element = fixture('basic'); | 
|  | flush(done); | 
|  | }); | 
|  |  | 
|  | teardown(() => { | 
|  | sandbox.restore(); | 
|  | }); | 
|  |  | 
|  | test('reporting', () => { | 
|  | assert.isTrue(element.$.reporting.appStarted.calledOnce); | 
|  | }); | 
|  |  | 
|  | test('location change updates gwt footer', done => { | 
|  | element._path = '/test/path'; | 
|  | flush(() => { | 
|  | const gwtLink = element.$$('#gwtLink'); | 
|  | assert.equal(gwtLink.href, 'http://' + location.host + | 
|  | element.getBaseUrl() + '/?polygerrit=0#/test/path'); | 
|  | done(); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | test('_handleLocationChange handles hashes', done => { | 
|  | const curLocation = { | 
|  | pathname: '/c/1/1/testfile.txt', | 
|  | hash: '#2', | 
|  | host: location.host, | 
|  | }; | 
|  | sandbox.stub(element, '_handleSearchPageChange'); | 
|  | element._handleLocationChange({detail: curLocation}); | 
|  |  | 
|  | flush(() => { | 
|  | const gwtLink = element.$$('#gwtLink'); | 
|  | assert.equal( | 
|  | gwtLink.href, | 
|  | 'http://' + location.host + element.getBaseUrl() + | 
|  | '/?polygerrit=0#/c/1/1/testfile.txt@2' | 
|  | ); | 
|  | done(); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | test('passes config to gr-plugin-host', () => { | 
|  | return element.$.restAPI.getConfig.lastCall.returnValue.then(config => { | 
|  | assert.deepEqual(element.$.plugins.config, config); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | suite('_jumpKeyPressed', () => { | 
|  | let navStub; | 
|  |  | 
|  | setup(() => { | 
|  | navStub = sandbox.stub(Gerrit.Nav, 'navigateToStatusSearch'); | 
|  | sandbox.stub(Date, 'now').returns(10000); | 
|  | }); | 
|  |  | 
|  | test('success', () => { | 
|  | const e = {detail: {key: 'a'}, preventDefault: () => {}}; | 
|  | sandbox.stub(element, 'shouldSuppressKeyboardShortcut').returns(false); | 
|  | element._lastGKeyPressTimestamp = 9000; | 
|  | element._jumpKeyPressed(e); | 
|  | assert.isTrue(navStub.calledOnce); | 
|  | assert.equal(navStub.lastCall.args[0], 'abandoned'); | 
|  | }); | 
|  |  | 
|  | test('no g key', () => { | 
|  | const e = {detail: {key: 'a'}, preventDefault: () => {}}; | 
|  | sandbox.stub(element, 'shouldSuppressKeyboardShortcut').returns(false); | 
|  | element._lastGKeyPressTimestamp = null; | 
|  | element._jumpKeyPressed(e); | 
|  | assert.isFalse(navStub.called); | 
|  | }); | 
|  |  | 
|  | test('g key too long ago', () => { | 
|  | const e = {detail: {key: 'a'}, preventDefault: () => {}}; | 
|  | sandbox.stub(element, 'shouldSuppressKeyboardShortcut').returns(false); | 
|  | element._lastGKeyPressTimestamp = 3000; | 
|  | element._jumpKeyPressed(e); | 
|  | assert.isFalse(navStub.called); | 
|  | }); | 
|  |  | 
|  | test('should suppress', () => { | 
|  | const e = {detail: {key: 'a'}, preventDefault: () => {}}; | 
|  | sandbox.stub(element, 'shouldSuppressKeyboardShortcut').returns(true); | 
|  | element._lastGKeyPressTimestamp = 9000; | 
|  | element._jumpKeyPressed(e); | 
|  | assert.isFalse(navStub.called); | 
|  | }); | 
|  |  | 
|  | test('unrecognized key', () => { | 
|  | const e = {detail: {key: 'f'}, preventDefault: () => {}}; | 
|  | sandbox.stub(element, 'shouldSuppressKeyboardShortcut').returns(false); | 
|  | element._lastGKeyPressTimestamp = 9000; | 
|  | element._jumpKeyPressed(e); | 
|  | assert.isFalse(navStub.called); | 
|  | }); | 
|  | }); | 
|  | }); | 
|  | </script> |