 8cdc76ba4c
			
		
	
	8cdc76ba4c
	
	
	
		
			
			These tags are preserved by the Closure compiler and vulcanize in order to serve the license notices embedded in the outputs. In a standalone Gerrit server, these license are also covered in the LICENSES.txt served with the documentation. When serving PG assets from a CDN, it's less obvious what the corresponding LICENSES.txt file is, since the CDN is not directly linked to a running Gerrit server. Safer to embed the licenses in the assets themselves. Change-Id: Id1add1451fad1baa7916882a6bda02c326ccc988
		
			
				
	
	
		
			183 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!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-annotation-actions-js-api-js-api</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="../../change/gr-change-actions/gr-change-actions.html">
 | |
| 
 | |
| <test-fixture id="basic">
 | |
|   <template>
 | |
|     <span hidden id="annotation-span">
 | |
|       <label for="annotation-checkbox" id="annotation-label"></label>
 | |
|       <input is="iron-input" type="checkbox" id="annotation-checkbox" disabled>
 | |
|     </span>
 | |
|   </template>
 | |
| </test-fixture>
 | |
| 
 | |
| <script>
 | |
|   suite('gr-annotation-actions-js-api tests', () => {
 | |
|     let annotationActions;
 | |
|     let sandbox;
 | |
|     let plugin;
 | |
| 
 | |
|     setup(() => {
 | |
|       sandbox = sinon.sandbox.create();
 | |
|       Gerrit.install(p => { plugin = p; }, '0.1',
 | |
|           'http://test.com/plugins/testplugin/static/test.js');
 | |
|       annotationActions = plugin.annotationApi();
 | |
|     });
 | |
| 
 | |
|     teardown(() => {
 | |
|       annotationActions = null;
 | |
|       sandbox.restore();
 | |
|     });
 | |
| 
 | |
|     test('add/get layer', () => {
 | |
|       const str = 'lorem ipsum blah blah';
 | |
|       const line = {text: str};
 | |
|       el = document.createElement('div');
 | |
|       el.textContent = str;
 | |
|       const changeNum = 1234;
 | |
|       const patchNum = 2;
 | |
|       let testLayerFuncCalled = false;
 | |
| 
 | |
|       const testLayerFunc = context => {
 | |
|         testLayerFuncCalled = true;
 | |
|         assert.equal(context.line, line);
 | |
|         assert.equal(context.changeNum, changeNum);
 | |
|         assert.equal(context.patchNum, 2);
 | |
|       };
 | |
|       annotationActions.addLayer(testLayerFunc);
 | |
| 
 | |
|       const annotationLayer = annotationActions.getLayer(
 | |
|           '/dummy/path', changeNum, patchNum);
 | |
| 
 | |
|       annotationLayer.annotate(el, line);
 | |
|       assert.isTrue(testLayerFuncCalled);
 | |
|     });
 | |
| 
 | |
|     test('add notifier', () => {
 | |
|       const path1 = '/dummy/path1';
 | |
|       const path2 = '/dummy/path2';
 | |
|       const annotationLayer1 = annotationActions.getLayer(path1, 1, 2);
 | |
|       const annotationLayer2 = annotationActions.getLayer(path2, 1, 2);
 | |
|       const layer1Spy = sandbox.spy(annotationLayer1, 'notifyListeners');
 | |
|       const layer2Spy = sandbox.spy(annotationLayer2, 'notifyListeners');
 | |
| 
 | |
|       let notify;
 | |
|       const notifyFunc = n => {
 | |
|         notifyFuncCalled = true;
 | |
|         notify = n;
 | |
|       };
 | |
|       annotationActions.addNotifier(notifyFunc);
 | |
|       assert.isTrue(notifyFuncCalled);
 | |
| 
 | |
|       // Assert that no layers are invoked with a different path.
 | |
|       notify('/dummy/path3', 0, 10, 'right');
 | |
|       assert.isFalse(layer1Spy.called);
 | |
|       assert.isFalse(layer2Spy.called);
 | |
| 
 | |
|       // Assert that only the 1st layer is invoked with path1.
 | |
|       notify(path1, 0, 10, 'right');
 | |
|       assert.isTrue(layer1Spy.called);
 | |
|       assert.isFalse(layer2Spy.called);
 | |
| 
 | |
|       // Reset spies.
 | |
|       layer1Spy.reset();
 | |
|       layer2Spy.reset();
 | |
| 
 | |
|       // Assert that only the 2nd layer is invoked with path2.
 | |
|       notify(path2, 0, 20, 'left');
 | |
|       assert.isFalse(layer1Spy.called);
 | |
|       assert.isTrue(layer2Spy.called);
 | |
|     });
 | |
| 
 | |
|     test('toggle checkbox', () => {
 | |
|       fakeEl = {content: fixture('basic')};
 | |
|       const hookStub = {onAttached: sandbox.stub()};
 | |
|       sandbox.stub(plugin, 'hook').returns(hookStub);
 | |
| 
 | |
|       let checkbox;
 | |
|       let onAttachedFuncCalled = false;
 | |
|       const onAttachedFunc = c => {
 | |
|         checkbox = c;
 | |
|         onAttachedFuncCalled = true;
 | |
|       };
 | |
|       annotationActions.enableToggleCheckbox('test label', onAttachedFunc);
 | |
|       emulateAttached = () => hookStub.onAttached.callArgWith(0, fakeEl);
 | |
|       emulateAttached();
 | |
| 
 | |
|       // Assert that onAttachedFunc is called and HTML elements have the
 | |
|       // expected state.
 | |
|       assert.isTrue(onAttachedFuncCalled);
 | |
|       assert.equal(checkbox.id, 'annotation-checkbox');
 | |
|       assert.isTrue(checkbox.disabled);
 | |
|       assert.equal(document.getElementById('annotation-label').textContent,
 | |
|           'test label');
 | |
|       assert.isFalse(document.getElementById('annotation-span').hidden);
 | |
| 
 | |
|       // Assert that error is shown if we try to enable checkbox again.
 | |
|       onAttachedFuncCalled = false;
 | |
|       annotationActions.enableToggleCheckbox('test label2', onAttachedFunc);
 | |
|       const errorStub = sandbox.stub(
 | |
|           console, 'error', (msg, err) => undefined);
 | |
|       emulateAttached();
 | |
|       assert.isTrue(
 | |
|           errorStub.calledWith(
 | |
|               'annotation-span is already enabled. Cannot re-enable.'));
 | |
|       // Assert that onAttachedFunc is not called and the label has not changed.
 | |
|       assert.isFalse(onAttachedFuncCalled);
 | |
|       assert.equal(document.getElementById('annotation-label').textContent,
 | |
|           'test label');
 | |
|     });
 | |
| 
 | |
|     test('layer notify listeners', () => {
 | |
|       const annotationLayer = annotationActions.getLayer(
 | |
|           '/dummy/path', 1, 2);
 | |
|       let listenerCalledTimes = 0;
 | |
|       const startRange = 10;
 | |
|       const endRange = 20;
 | |
|       const side = 'right';
 | |
|       const listener = (st, end, s) => {
 | |
|         listenerCalledTimes++;
 | |
|         assert.equal(st, startRange);
 | |
|         assert.equal(end, endRange);
 | |
|         assert.equal(s, side);
 | |
|       };
 | |
| 
 | |
|       // Notify with 0 listeners added.
 | |
|       annotationLayer.notifyListeners(startRange, endRange, side);
 | |
|       assert.equal(listenerCalledTimes, 0);
 | |
| 
 | |
|       // Add 1 listener.
 | |
|       annotationLayer.addListener(listener);
 | |
|       annotationLayer.notifyListeners(startRange, endRange, side);
 | |
|       assert.equal(listenerCalledTimes, 1);
 | |
| 
 | |
|       // Add 1 more listener. Total 2 listeners.
 | |
|       annotationLayer.addListener(listener);
 | |
|       annotationLayer.notifyListeners(startRange, endRange, side);
 | |
|       assert.equal(listenerCalledTimes, 3);
 | |
|     });
 | |
|   });
 | |
| </script>
 |