| <!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="../../../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-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, | 
 |           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, | 
 |           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 = 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']), ''); | 
 |     }); | 
 |   }); | 
 | </script> |