|  | <!DOCTYPE html> | 
|  | <!-- | 
|  | @license | 
|  | 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-download-dialog</title> | 
|  | <script src="/test/common-test-setup.js"></script> | 
|  | <script src="/bower_components/webcomponentsjs/custom-elements-es5-adapter.js"></script> | 
|  |  | 
|  | <script src="/bower_components/webcomponentsjs/webcomponents-lite.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-download-dialog.html"> | 
|  |  | 
|  | <script>void(0);</script> | 
|  |  | 
|  | <test-fixture id="basic"> | 
|  | <template> | 
|  | <gr-download-dialog></gr-download-dialog> | 
|  | </template> | 
|  | </test-fixture> | 
|  |  | 
|  | <test-fixture id="loggedIn"> | 
|  | <template> | 
|  | <gr-download-dialog logged-in></gr-download-dialog> | 
|  | </template> | 
|  | </test-fixture> | 
|  |  | 
|  | <script> | 
|  | function getChangeObject() { | 
|  | return { | 
|  | current_revision: '34685798fe548b6d17d1e8e5edc43a26d055cc72', | 
|  | revisions: { | 
|  | '34685798fe548b6d17d1e8e5edc43a26d055cc72': { | 
|  | _number: 1, | 
|  | commit: { | 
|  | parents: [], | 
|  | }, | 
|  | fetch: { | 
|  | repo: { | 
|  | commands: { | 
|  | repo: 'repo download test-project 5/1', | 
|  | }, | 
|  | }, | 
|  | ssh: { | 
|  | commands: { | 
|  | 'Checkout': | 
|  | 'git fetch ' + | 
|  | 'ssh://andybons@localhost:29418/test-project ' + | 
|  | 'refs/changes/05/5/1 && git checkout FETCH_HEAD', | 
|  | 'Cherry Pick': | 
|  | 'git fetch ' + | 
|  | 'ssh://andybons@localhost:29418/test-project ' + | 
|  | 'refs/changes/05/5/1 && git cherry-pick FETCH_HEAD', | 
|  | 'Format Patch': | 
|  | 'git fetch ' + | 
|  | 'ssh://andybons@localhost:29418/test-project ' + | 
|  | 'refs/changes/05/5/1 ' + | 
|  | '&& git format-patch -1 --stdout FETCH_HEAD', | 
|  | 'Pull': | 
|  | 'git pull ' + | 
|  | 'ssh://andybons@localhost:29418/test-project ' + | 
|  | 'refs/changes/05/5/1', | 
|  | }, | 
|  | }, | 
|  | http: { | 
|  | commands: { | 
|  | 'Checkout': | 
|  | 'git fetch ' + | 
|  | 'http://andybons@localhost:8080/a/test-project ' + | 
|  | 'refs/changes/05/5/1 && git checkout FETCH_HEAD', | 
|  | 'Cherry Pick': | 
|  | 'git fetch ' + | 
|  | 'http://andybons@localhost:8080/a/test-project ' + | 
|  | 'refs/changes/05/5/1 && git cherry-pick FETCH_HEAD', | 
|  | 'Format Patch': | 
|  | 'git fetch ' + | 
|  | 'http://andybons@localhost:8080/a/test-project ' + | 
|  | 'refs/changes/05/5/1 && ' + | 
|  | 'git format-patch -1 --stdout FETCH_HEAD', | 
|  | 'Pull': | 
|  | 'git pull ' + | 
|  | 'http://andybons@localhost:8080/a/test-project ' + | 
|  | 'refs/changes/05/5/1', | 
|  | }, | 
|  | }, | 
|  | }, | 
|  | }, | 
|  | }, | 
|  | }; | 
|  | } | 
|  |  | 
|  | function getChangeObjectNoFetch() { | 
|  | return { | 
|  | current_revision: '34685798fe548b6d17d1e8e5edc43a26d055cc72', | 
|  | revisions: { | 
|  | '34685798fe548b6d17d1e8e5edc43a26d055cc72': { | 
|  | _number: 1, | 
|  | commit: { | 
|  | parents: [], | 
|  | }, | 
|  | fetch: {}, | 
|  | }, | 
|  | }, | 
|  | }; | 
|  | } | 
|  |  | 
|  | suite('gr-download-dialog', () => { | 
|  | let element; | 
|  | let sandbox; | 
|  |  | 
|  | setup(() => { | 
|  | sandbox = sinon.sandbox.create(); | 
|  |  | 
|  | element = fixture('basic'); | 
|  | element.patchNum = '1'; | 
|  | element.config = { | 
|  | schemes: { | 
|  | 'anonymous http': {}, | 
|  | 'http': {}, | 
|  | 'repo': {}, | 
|  | 'ssh': {}, | 
|  | }, | 
|  | archives: ['tgz', 'tar', 'tbz2', 'txz'], | 
|  | }; | 
|  |  | 
|  | flushAsynchronousOperations(); | 
|  | }); | 
|  |  | 
|  | teardown(() => { | 
|  | sandbox.restore(); | 
|  | }); | 
|  |  | 
|  | test('anchors use download attribute', () => { | 
|  | const anchors = Array.from( | 
|  | Polymer.dom(element.root).querySelectorAll('a')); | 
|  | assert.isTrue(!anchors.some(a => !a.hasAttribute('download'))); | 
|  | }); | 
|  |  | 
|  | suite('gr-download-dialog tests with no fetch options', () => { | 
|  | setup(() => { | 
|  | element.change = getChangeObjectNoFetch(); | 
|  | flushAsynchronousOperations(); | 
|  | }); | 
|  |  | 
|  | test('focuses on first download link if no copy links', () => { | 
|  | const focusStub = sandbox.stub(element.$.download, 'focus'); | 
|  | element.focus(); | 
|  | assert.isTrue(focusStub.called); | 
|  | focusStub.restore(); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | suite('gr-download-dialog with fetch options', () => { | 
|  | setup(() => { | 
|  | element.change = getChangeObject(); | 
|  | flushAsynchronousOperations(); | 
|  | }); | 
|  |  | 
|  | test('focuses on first copy link', () => { | 
|  | const focusStub = sinon.stub(element.$.downloadCommands, 'focusOnCopy'); | 
|  | element.focus(); | 
|  | flushAsynchronousOperations(); | 
|  | assert.isTrue(focusStub.called); | 
|  | focusStub.restore(); | 
|  | }); | 
|  |  | 
|  | test('computed fields', () => { | 
|  | assert.equal(element._computeArchiveDownloadLink( | 
|  | {project: 'test/project', _number: 123}, 2, 'tgz'), | 
|  | '/changes/test%2Fproject~123/revisions/2/archive?format=tgz'); | 
|  | }); | 
|  |  | 
|  | test('close event', done => { | 
|  | element.addEventListener('close', () => { | 
|  | done(); | 
|  | }); | 
|  | MockInteractions.tap(element.$$('.closeButtonContainer gr-button')); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | test('_computeShowDownloadCommands', () => { | 
|  | assert.equal(element._computeShowDownloadCommands([]), 'hidden'); | 
|  | assert.equal(element._computeShowDownloadCommands(['test']), ''); | 
|  | }); | 
|  |  | 
|  | test('_computeHidePatchFile', () => { | 
|  | const patchNum = '1'; | 
|  |  | 
|  | const change1 = { | 
|  | revisions: { | 
|  | r1: {_number: 1, commit: {parents: []}}, | 
|  | }, | 
|  | }; | 
|  | assert.isTrue(element._computeHidePatchFile(change1, patchNum)); | 
|  |  | 
|  | const change2 = { | 
|  | revisions: { | 
|  | r1: {_number: 1, commit: {parents: [ | 
|  | {commit: 'p1'}, | 
|  | ]}}, | 
|  | }, | 
|  | }; | 
|  | assert.isFalse(element._computeHidePatchFile(change2, patchNum)); | 
|  | }); | 
|  | }); | 
|  | </script> |