ES6ify /gr-js-api-interface/*
Bug: Issue 6179 Change-Id: I9e0672c64a6793ba019b7b4af65f22eaacd7e2f5
This commit is contained in:
		@@ -22,13 +22,13 @@
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  GrChangeActionsInterface.prototype.addPrimaryActionKey = function(key) {
 | 
			
		||||
    if (this._el.primaryActionKeys.indexOf(key) !== -1) { return; }
 | 
			
		||||
    if (this._el.primaryActionKeys.includes(key)) { return; }
 | 
			
		||||
 | 
			
		||||
    this._el.push('primaryActionKeys', key);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  GrChangeActionsInterface.prototype.removePrimaryActionKey = function(key) {
 | 
			
		||||
    this._el.primaryActionKeys = this._el.primaryActionKeys.filter(function(k) {
 | 
			
		||||
    this._el.primaryActionKeys = this._el.primaryActionKeys.filter(k => {
 | 
			
		||||
      return k !== key;
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 
 | 
			
		||||
@@ -37,43 +37,44 @@ breaking changes to gr-change-actions won’t be noticed.
 | 
			
		||||
</test-fixture>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
  suite('gr-js-api-interface tests', function() {
 | 
			
		||||
    var element;
 | 
			
		||||
    var changeActions;
 | 
			
		||||
  suite('gr-js-api-interface tests', () => {
 | 
			
		||||
    let element;
 | 
			
		||||
    let changeActions;
 | 
			
		||||
 | 
			
		||||
    // Because deepEqual doesn’t behave in Safari.
 | 
			
		||||
    function assertArraysEqual(actual, expected) {
 | 
			
		||||
      assert.equal(actual.length, expected.length);
 | 
			
		||||
      for (var i = 0; i < actual.length; i++) {
 | 
			
		||||
      for (let i = 0; i < actual.length; i++) {
 | 
			
		||||
        assert.equal(actual[i], expected[i]);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setup(function() {
 | 
			
		||||
    setup(() => {
 | 
			
		||||
      element = fixture('basic');
 | 
			
		||||
      element.change = {};
 | 
			
		||||
      element._hasKnownChainState = false;
 | 
			
		||||
      var plugin;
 | 
			
		||||
      Gerrit.install(function(p) { plugin = p; }, '0.1',
 | 
			
		||||
      let plugin;
 | 
			
		||||
      Gerrit.install(p => { plugin = p; }, '0.1',
 | 
			
		||||
          'http://test.com/plugins/testplugin/static/test.js');
 | 
			
		||||
      changeActions = plugin.changeActions();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    teardown(function() {
 | 
			
		||||
    teardown(() => {
 | 
			
		||||
      changeActions = null;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('property existence', function() {
 | 
			
		||||
      [
 | 
			
		||||
    test('property existence', () => {
 | 
			
		||||
      const properties = [
 | 
			
		||||
        'ActionType',
 | 
			
		||||
        'ChangeActions',
 | 
			
		||||
        'RevisionActions',
 | 
			
		||||
      ].forEach(function(p) {
 | 
			
		||||
      ];
 | 
			
		||||
      for (const p of properties) {
 | 
			
		||||
        assertArraysEqual(changeActions[p], element[p]);
 | 
			
		||||
      });
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('add/remove primary action keys', function() {
 | 
			
		||||
    test('add/remove primary action keys', () => {
 | 
			
		||||
      element.primaryActionKeys = [];
 | 
			
		||||
      changeActions.addPrimaryActionKey('foo');
 | 
			
		||||
      assertArraysEqual(element.primaryActionKeys, ['foo']);
 | 
			
		||||
@@ -89,34 +90,34 @@ breaking changes to gr-change-actions won’t be noticed.
 | 
			
		||||
      assertArraysEqual(element.primaryActionKeys, []);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('action buttons', function(done) {
 | 
			
		||||
      var key = changeActions.add(changeActions.ActionType.REVISION, 'Bork!');
 | 
			
		||||
      var handler = sinon.spy();
 | 
			
		||||
    test('action buttons', done => {
 | 
			
		||||
      const key = changeActions.add(changeActions.ActionType.REVISION, 'Bork!');
 | 
			
		||||
      const handler = sinon.spy();
 | 
			
		||||
      changeActions.addTapListener(key, handler);
 | 
			
		||||
      flush(function() {
 | 
			
		||||
      flush(() => {
 | 
			
		||||
        MockInteractions.tap(element.$$('[data-action-key="' + key + '"]'));
 | 
			
		||||
        assert(handler.calledOnce);
 | 
			
		||||
        changeActions.removeTapListener(key, handler);
 | 
			
		||||
        MockInteractions.tap(element.$$('[data-action-key="' + key + '"]'));
 | 
			
		||||
        assert(handler.calledOnce);
 | 
			
		||||
        changeActions.remove(key);
 | 
			
		||||
        flush(function() {
 | 
			
		||||
        flush(() => {
 | 
			
		||||
          assert.isNull(element.$$('[data-action-key="' + key + '"]'));
 | 
			
		||||
          done();
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('action button properties', function(done) {
 | 
			
		||||
      var key = changeActions.add(changeActions.ActionType.REVISION, 'Bork!');
 | 
			
		||||
      flush(function() {
 | 
			
		||||
        var button = element.$$('[data-action-key="' + key + '"]');
 | 
			
		||||
    test('action button properties', done => {
 | 
			
		||||
      const key = changeActions.add(changeActions.ActionType.REVISION, 'Bork!');
 | 
			
		||||
      flush(() => {
 | 
			
		||||
        const button = element.$$('[data-action-key="' + key + '"]');
 | 
			
		||||
        assert.isOk(button);
 | 
			
		||||
        assert.equal(button.getAttribute('data-label'), 'Bork!');
 | 
			
		||||
        assert.isNotOk(button.disabled);
 | 
			
		||||
        changeActions.setLabel(key, 'Yo');
 | 
			
		||||
        changeActions.setEnabled(key, false);
 | 
			
		||||
        flush(function() {
 | 
			
		||||
        flush(() => {
 | 
			
		||||
          assert.equal(button.getAttribute('data-label'), 'Yo');
 | 
			
		||||
          assert.isTrue(button.disabled);
 | 
			
		||||
          done();
 | 
			
		||||
@@ -124,30 +125,30 @@ breaking changes to gr-change-actions won’t be noticed.
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('hide action buttons', function(done) {
 | 
			
		||||
      var key = changeActions.add(changeActions.ActionType.REVISION, 'Bork!');
 | 
			
		||||
      flush(function() {
 | 
			
		||||
        var button = element.$$('[data-action-key="' + key + '"]');
 | 
			
		||||
    test('hide action buttons', done => {
 | 
			
		||||
      const key = changeActions.add(changeActions.ActionType.REVISION, 'Bork!');
 | 
			
		||||
      flush(() => {
 | 
			
		||||
        const button = element.$$('[data-action-key="' + key + '"]');
 | 
			
		||||
        assert.isOk(button);
 | 
			
		||||
        assert.isFalse(button.hasAttribute('hidden'));
 | 
			
		||||
        changeActions.setActionHidden(
 | 
			
		||||
            changeActions.ActionType.REVISION, key, true);
 | 
			
		||||
        flush(function() {
 | 
			
		||||
          var button = element.$$('[data-action-key="' + key + '"]');
 | 
			
		||||
        flush(() => {
 | 
			
		||||
          const button = element.$$('[data-action-key="' + key + '"]');
 | 
			
		||||
          assert.isNotOk(button);
 | 
			
		||||
          done();
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('move action button to overflow', function(done) {
 | 
			
		||||
      var key = changeActions.add(changeActions.ActionType.REVISION, 'Bork!');
 | 
			
		||||
      flush(function() {
 | 
			
		||||
    test('move action button to overflow', done => {
 | 
			
		||||
      const key = changeActions.add(changeActions.ActionType.REVISION, 'Bork!');
 | 
			
		||||
      flush(() => {
 | 
			
		||||
        assert.isTrue(element.$.moreActions.hidden);
 | 
			
		||||
        assert.isOk(element.$$('[data-action-key="' + key + '"]'));
 | 
			
		||||
        changeActions.setActionOverflow(
 | 
			
		||||
            changeActions.ActionType.REVISION, key, true);
 | 
			
		||||
        flush(function() {
 | 
			
		||||
        flush(() => {
 | 
			
		||||
          assert.isNotOk(element.$$('[data-action-key="' + key + '"]'));
 | 
			
		||||
          assert.isFalse(element.$.moreActions.hidden);
 | 
			
		||||
          assert.strictEqual(element.$.moreActions.items[0].name, 'Bork!');
 | 
			
		||||
@@ -156,17 +157,19 @@ breaking changes to gr-change-actions won’t be noticed.
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('change actions priority', function(done) {
 | 
			
		||||
      var key1 = changeActions.add(changeActions.ActionType.REVISION, 'Bork!');
 | 
			
		||||
      var key2 = changeActions.add(changeActions.ActionType.CHANGE, 'Squanch?');
 | 
			
		||||
      flush(function() {
 | 
			
		||||
        var buttons =
 | 
			
		||||
    test('change actions priority', done => {
 | 
			
		||||
      const key1 =
 | 
			
		||||
          changeActions.add(changeActions.ActionType.REVISION, 'Bork!');
 | 
			
		||||
      const key2 =
 | 
			
		||||
          changeActions.add(changeActions.ActionType.CHANGE, 'Squanch?');
 | 
			
		||||
      flush(() => {
 | 
			
		||||
        let buttons =
 | 
			
		||||
            Polymer.dom(element.root).querySelectorAll('[data-action-key]');
 | 
			
		||||
        assert.equal(buttons[0].getAttribute('data-action-key'), key1);
 | 
			
		||||
        assert.equal(buttons[1].getAttribute('data-action-key'), key2);
 | 
			
		||||
        changeActions.setActionPriority(
 | 
			
		||||
            changeActions.ActionType.REVISION, key1, 10);
 | 
			
		||||
        flush(function() {
 | 
			
		||||
        flush(() => {
 | 
			
		||||
          buttons =
 | 
			
		||||
              Polymer.dom(element.root).querySelectorAll('[data-action-key]');
 | 
			
		||||
          assert.equal(buttons[0].getAttribute('data-action-key'), key2);
 | 
			
		||||
 
 | 
			
		||||
@@ -37,35 +37,35 @@ limitations under the License.
 | 
			
		||||
</test-fixture>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
  suite('gr-change-reply-js-api tests', function() {
 | 
			
		||||
    var element;
 | 
			
		||||
    var sandbox;
 | 
			
		||||
    var changeReply;
 | 
			
		||||
  suite('gr-change-reply-js-api tests', () => {
 | 
			
		||||
    let element;
 | 
			
		||||
    let sandbox;
 | 
			
		||||
    let changeReply;
 | 
			
		||||
 | 
			
		||||
    setup(function() {
 | 
			
		||||
    setup(() => {
 | 
			
		||||
      stub('gr-rest-api-interface', {
 | 
			
		||||
        getConfig: function() { return Promise.resolve({}); },
 | 
			
		||||
        getAccount: function() { return Promise.resolve(null); },
 | 
			
		||||
        getConfig() { return Promise.resolve({}); },
 | 
			
		||||
        getAccount() { return Promise.resolve(null); },
 | 
			
		||||
      });
 | 
			
		||||
      element = fixture('basic');
 | 
			
		||||
      sandbox = sinon.sandbox.create();
 | 
			
		||||
      var plugin;
 | 
			
		||||
      Gerrit.install(function(p) { plugin = p; }, '0.1',
 | 
			
		||||
      let plugin;
 | 
			
		||||
      Gerrit.install(p => { plugin = p; }, '0.1',
 | 
			
		||||
          'http://test.com/plugins/testplugin/static/test.js');
 | 
			
		||||
      changeReply = plugin.changeReply();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    teardown(function() {
 | 
			
		||||
    teardown(() => {
 | 
			
		||||
      changeReply = null;
 | 
			
		||||
      sandbox.restore();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('calls', function() {
 | 
			
		||||
      var setLabelValueStub = sinon.stub(element, 'setLabelValue');
 | 
			
		||||
    test('calls', () => {
 | 
			
		||||
      const setLabelValueStub = sinon.stub(element, 'setLabelValue');
 | 
			
		||||
      changeReply.setLabelValue('My-Label', '+1337');
 | 
			
		||||
      assert(setLabelValueStub.calledWithExactly('My-Label', '+1337'));
 | 
			
		||||
 | 
			
		||||
      var sendStub = sinon.stub(element, 'send');
 | 
			
		||||
      const sendStub = sinon.stub(element, 'send');
 | 
			
		||||
      changeReply.send(false);
 | 
			
		||||
      assert(sendStub.calledWithExactly(false));
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
(function() {
 | 
			
		||||
  'use strict';
 | 
			
		||||
 | 
			
		||||
  var EventType = {
 | 
			
		||||
  const EventType = {
 | 
			
		||||
    HISTORY: 'history',
 | 
			
		||||
    LABEL_CHANGE: 'labelchange',
 | 
			
		||||
    SHOW_CHANGE: 'showchange',
 | 
			
		||||
@@ -25,7 +25,7 @@
 | 
			
		||||
    POST_REVERT: 'postrevert',
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  var Element = {
 | 
			
		||||
  const Element = {
 | 
			
		||||
    CHANGE_ACTIONS: 'changeactions',
 | 
			
		||||
    REPLY_DIALOG: 'replydialog',
 | 
			
		||||
  };
 | 
			
		||||
@@ -44,11 +44,11 @@
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    Element: Element,
 | 
			
		||||
    EventType: EventType,
 | 
			
		||||
    Element,
 | 
			
		||||
    EventType,
 | 
			
		||||
 | 
			
		||||
    handleEvent: function(type, detail) {
 | 
			
		||||
      Gerrit.awaitPluginsLoaded().then(function() {
 | 
			
		||||
    handleEvent(type, detail) {
 | 
			
		||||
      Gerrit.awaitPluginsLoaded().then(() => {
 | 
			
		||||
        switch (type) {
 | 
			
		||||
          case EventType.HISTORY:
 | 
			
		||||
            this._handleHistory(detail);
 | 
			
		||||
@@ -67,27 +67,27 @@
 | 
			
		||||
                type);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      }.bind(this));
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    addElement: function(key, el) {
 | 
			
		||||
    addElement(key, el) {
 | 
			
		||||
      this._elements[key] = el;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getElement: function(key) {
 | 
			
		||||
    getElement(key) {
 | 
			
		||||
      return this._elements[key];
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    addEventCallback: function(eventName, callback) {
 | 
			
		||||
    addEventCallback(eventName, callback) {
 | 
			
		||||
      if (!this._eventCallbacks[eventName]) {
 | 
			
		||||
        this._eventCallbacks[eventName] = [];
 | 
			
		||||
      }
 | 
			
		||||
      this._eventCallbacks[eventName].push(callback);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    canSubmitChange: function(change, revision) {
 | 
			
		||||
      var submitCallbacks = this._getEventCallbacks(EventType.SUBMIT_CHANGE);
 | 
			
		||||
      var cancelSubmit = submitCallbacks.some(function(callback) {
 | 
			
		||||
    canSubmitChange(change, revision) {
 | 
			
		||||
      const submitCallbacks = this._getEventCallbacks(EventType.SUBMIT_CHANGE);
 | 
			
		||||
      const cancelSubmit = submitCallbacks.some(callback => {
 | 
			
		||||
        try {
 | 
			
		||||
          return callback(change, revision) === false;
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
@@ -99,28 +99,29 @@
 | 
			
		||||
      return !cancelSubmit;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _removeEventCallbacks: function() {
 | 
			
		||||
      for (var k in EventType) {
 | 
			
		||||
    _removeEventCallbacks() {
 | 
			
		||||
      for (const k in EventType) {
 | 
			
		||||
        if (!EventType.hasOwnProperty(k)) { continue; }
 | 
			
		||||
        this._eventCallbacks[EventType[k]] = [];
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _handleHistory: function(detail) {
 | 
			
		||||
      this._getEventCallbacks(EventType.HISTORY).forEach(function(cb) {
 | 
			
		||||
    _handleHistory(detail) {
 | 
			
		||||
      for (const cb of this._getEventCallbacks(EventType.HISTORY)) {
 | 
			
		||||
        try {
 | 
			
		||||
          cb(detail.path);
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
          console.error(err);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _handleShowChange: function(detail) {
 | 
			
		||||
      this._getEventCallbacks(EventType.SHOW_CHANGE).forEach(function(cb) {
 | 
			
		||||
        var change = detail.change;
 | 
			
		||||
        var patchNum = detail.patchNum;
 | 
			
		||||
        var revision;
 | 
			
		||||
        for (var rev in change.revisions) {
 | 
			
		||||
    _handleShowChange(detail) {
 | 
			
		||||
      for (const cb of this._getEventCallbacks(EventType.SHOW_CHANGE)) {
 | 
			
		||||
        const change = detail.change;
 | 
			
		||||
        const patchNum = detail.patchNum;
 | 
			
		||||
        let revision;
 | 
			
		||||
        for (const rev in change.revisions) {
 | 
			
		||||
          if (change.revisions[rev]._number == patchNum) {
 | 
			
		||||
            revision = change.revisions[rev];
 | 
			
		||||
            break;
 | 
			
		||||
@@ -131,67 +132,63 @@
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
          console.error(err);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    handleCommitMessage: function(change, msg) {
 | 
			
		||||
      this._getEventCallbacks(EventType.COMMIT_MSG_EDIT).forEach(
 | 
			
		||||
          function(cb) {
 | 
			
		||||
            try {
 | 
			
		||||
              cb(change, msg);
 | 
			
		||||
            } catch (err) {
 | 
			
		||||
              console.error(err);
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
      );
 | 
			
		||||
    handleCommitMessage(change, msg) {
 | 
			
		||||
      for (const cb of this._getEventCallbacks(EventType.COMMIT_MSG_EDIT)) {
 | 
			
		||||
        try {
 | 
			
		||||
          cb(change, msg);
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
          console.error(err);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _handleComment: function(detail) {
 | 
			
		||||
      this._getEventCallbacks(EventType.COMMENT).forEach(function(cb) {
 | 
			
		||||
    _handleComment(detail) {
 | 
			
		||||
      for (const cb of this._getEventCallbacks(EventType.COMMENT)) {
 | 
			
		||||
        try {
 | 
			
		||||
          cb(detail.node);
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
          console.error(err);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _handleLabelChange: function(detail) {
 | 
			
		||||
      this._getEventCallbacks(EventType.LABEL_CHANGE).forEach(function(cb) {
 | 
			
		||||
    _handleLabelChange(detail) {
 | 
			
		||||
      for (const cb of this._getEventCallbacks(EventType.LABEL_CHANGE)) {
 | 
			
		||||
        try {
 | 
			
		||||
          cb(detail.change);
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
          console.error(err);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    modifyRevertMsg: function(change, revertMsg, origMsg) {
 | 
			
		||||
      this._getEventCallbacks(EventType.REVERT).forEach(function(callback) {
 | 
			
		||||
    modifyRevertMsg(change, revertMsg, origMsg) {
 | 
			
		||||
      for (const cb of this._getEventCallbacks(EventType.REVERT)) {
 | 
			
		||||
        try {
 | 
			
		||||
          revertMsg = callback(change, revertMsg, origMsg);
 | 
			
		||||
          revertMsg = cb(change, revertMsg, origMsg);
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
          console.error(err);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
      }
 | 
			
		||||
      return revertMsg;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getLabelValuesPostRevert: function(change) {
 | 
			
		||||
      var labels = {};
 | 
			
		||||
      this._getEventCallbacks(EventType.POST_REVERT).forEach(
 | 
			
		||||
          function(callback) {
 | 
			
		||||
            try {
 | 
			
		||||
              labels = callback(change);
 | 
			
		||||
            } catch (err) {
 | 
			
		||||
              console.error(err);
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
      );
 | 
			
		||||
    getLabelValuesPostRevert(change) {
 | 
			
		||||
      let labels = {};
 | 
			
		||||
      for (const cb of this._getEventCallbacks(EventType.POST_REVERT)) {
 | 
			
		||||
        try {
 | 
			
		||||
          labels = cb(change);
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
          console.error(err);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      return labels;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _getEventCallbacks: function(type) {
 | 
			
		||||
    _getEventCallbacks(type) {
 | 
			
		||||
      return this._eventCallbacks[type] || [];
 | 
			
		||||
    },
 | 
			
		||||
  });
 | 
			
		||||
 
 | 
			
		||||
@@ -31,45 +31,45 @@ limitations under the License.
 | 
			
		||||
</test-fixture>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
  suite('gr-js-api-interface tests', function() {
 | 
			
		||||
    var element;
 | 
			
		||||
    var plugin;
 | 
			
		||||
    var errorStub;
 | 
			
		||||
    var sandbox;
 | 
			
		||||
  suite('gr-js-api-interface tests', () => {
 | 
			
		||||
    let element;
 | 
			
		||||
    let plugin;
 | 
			
		||||
    let errorStub;
 | 
			
		||||
    let sandbox;
 | 
			
		||||
 | 
			
		||||
    var throwErrFn = function() {
 | 
			
		||||
    const throwErrFn = function() {
 | 
			
		||||
      throw Error('Unfortunately, this handler has stopped');
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    setup(function() {
 | 
			
		||||
    setup(() => {
 | 
			
		||||
      sandbox = sinon.sandbox.create();
 | 
			
		||||
      stub('gr-rest-api-interface', {
 | 
			
		||||
        getAccount: function() {
 | 
			
		||||
        getAccount() {
 | 
			
		||||
          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',
 | 
			
		||||
      Gerrit.install(p => { plugin = p; }, '0.1',
 | 
			
		||||
          'http://test.com/plugins/testplugin/static/test.js');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    teardown(function() {
 | 
			
		||||
    teardown(() => {
 | 
			
		||||
      sandbox.restore();
 | 
			
		||||
      element._removeEventCallbacks();
 | 
			
		||||
      plugin = null;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('url', function() {
 | 
			
		||||
    test('url', () => {
 | 
			
		||||
      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) {
 | 
			
		||||
    test('history event', done => {
 | 
			
		||||
      plugin.on(element.EventType.HISTORY, throwErrFn);
 | 
			
		||||
      plugin.on(element.EventType.HISTORY, function(path) {
 | 
			
		||||
      plugin.on(element.EventType.HISTORY, path => {
 | 
			
		||||
        assert.equal(path, '/path/to/awesomesauce');
 | 
			
		||||
        assert.isTrue(errorStub.calledOnce);
 | 
			
		||||
        done();
 | 
			
		||||
@@ -78,13 +78,13 @@ limitations under the License.
 | 
			
		||||
          {path: '/path/to/awesomesauce'});
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('showchange event', function(done) {
 | 
			
		||||
      var testChange = {
 | 
			
		||||
    test('showchange event', done => {
 | 
			
		||||
      const 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) {
 | 
			
		||||
      plugin.on(element.EventType.SHOW_CHANGE, (change, revision) => {
 | 
			
		||||
        assert.deepEqual(change, testChange);
 | 
			
		||||
        assert.deepEqual(revision, testChange.revisions.abc);
 | 
			
		||||
        assert.isTrue(errorStub.calledOnce);
 | 
			
		||||
@@ -94,28 +94,28 @@ limitations under the License.
 | 
			
		||||
          {change: testChange, patchNum: 1});
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('handleEvent awaits plugins load', function(done) {
 | 
			
		||||
      var testChange = {
 | 
			
		||||
    test('handleEvent awaits plugins load', done => {
 | 
			
		||||
      const testChange = {
 | 
			
		||||
        _number: 42,
 | 
			
		||||
        revisions: {def: {_number: 2}, abc: {_number: 1}},
 | 
			
		||||
      };
 | 
			
		||||
      var spy = sandbox.spy();
 | 
			
		||||
      const 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() {
 | 
			
		||||
      flush(() => {
 | 
			
		||||
        assert.isTrue(spy.called);
 | 
			
		||||
        done();
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('comment event', function(done) {
 | 
			
		||||
      var testCommentNode = {foo: 'bar'};
 | 
			
		||||
    test('comment event', done => {
 | 
			
		||||
      const testCommentNode = {foo: 'bar'};
 | 
			
		||||
      plugin.on(element.EventType.COMMENT, throwErrFn);
 | 
			
		||||
      plugin.on(element.EventType.COMMENT, function(commentNode) {
 | 
			
		||||
      plugin.on(element.EventType.COMMENT, commentNode => {
 | 
			
		||||
        assert.deepEqual(commentNode, testCommentNode);
 | 
			
		||||
        assert.isTrue(errorStub.calledOnce);
 | 
			
		||||
        done();
 | 
			
		||||
@@ -123,7 +123,7 @@ limitations under the License.
 | 
			
		||||
      element.handleEvent(element.EventType.COMMENT, {node: testCommentNode});
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('revert event', function() {
 | 
			
		||||
    test('revert event', () => {
 | 
			
		||||
      function appendToRevertMsg(c, revertMsg, originalMsg) {
 | 
			
		||||
        return revertMsg + '\n' + originalMsg.replace(/^/gm, '> ') + '\ninfo';
 | 
			
		||||
      }
 | 
			
		||||
@@ -134,16 +134,16 @@ limitations under the License.
 | 
			
		||||
      plugin.on(element.EventType.REVERT, throwErrFn);
 | 
			
		||||
      plugin.on(element.EventType.REVERT, appendToRevertMsg);
 | 
			
		||||
      assert.equal(element.modifyRevertMsg(null, 'test', 'origTest'),
 | 
			
		||||
                   'test\n> origTest\ninfo');
 | 
			
		||||
          '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');
 | 
			
		||||
          'test\n> origTest\ninfo\n> origTest\ninfo');
 | 
			
		||||
      assert.isTrue(errorStub.calledTwice);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('postrevert event', function() {
 | 
			
		||||
    test('postrevert event', () => {
 | 
			
		||||
      function getLabels(c) {
 | 
			
		||||
        return {'Code-Review': 1};
 | 
			
		||||
      }
 | 
			
		||||
@@ -158,10 +158,10 @@ limitations under the License.
 | 
			
		||||
      assert.isTrue(errorStub.calledOnce);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('commitmsgedit event', function(done) {
 | 
			
		||||
      var testMsg = 'Test CL commit message';
 | 
			
		||||
    test('commitmsgedit event', done => {
 | 
			
		||||
      const testMsg = 'Test CL commit message';
 | 
			
		||||
      plugin.on(element.EventType.COMMIT_MSG_EDIT, throwErrFn);
 | 
			
		||||
      plugin.on(element.EventType.COMMIT_MSG_EDIT, function(change, msg) {
 | 
			
		||||
      plugin.on(element.EventType.COMMIT_MSG_EDIT, (change, msg) => {
 | 
			
		||||
        assert.deepEqual(msg, testMsg);
 | 
			
		||||
        assert.isTrue(errorStub.calledOnce);
 | 
			
		||||
        done();
 | 
			
		||||
@@ -169,10 +169,10 @@ limitations under the License.
 | 
			
		||||
      element.handleCommitMessage(null, testMsg);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('labelchange event', function(done) {
 | 
			
		||||
      var testChange = {_number: 42};
 | 
			
		||||
    test('labelchange event', done => {
 | 
			
		||||
      const testChange = {_number: 42};
 | 
			
		||||
      plugin.on(element.EventType.LABEL_CHANGE, throwErrFn);
 | 
			
		||||
      plugin.on(element.EventType.LABEL_CHANGE, function(change) {
 | 
			
		||||
      plugin.on(element.EventType.LABEL_CHANGE, change => {
 | 
			
		||||
        assert.deepEqual(change, testChange);
 | 
			
		||||
        assert.isTrue(errorStub.calledOnce);
 | 
			
		||||
        done();
 | 
			
		||||
@@ -180,41 +180,41 @@ limitations under the License.
 | 
			
		||||
      element.handleEvent(element.EventType.LABEL_CHANGE, {change: testChange});
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('submitchange', function() {
 | 
			
		||||
    test('submitchange', () => {
 | 
			
		||||
      plugin.on(element.EventType.SUBMIT_CHANGE, throwErrFn);
 | 
			
		||||
      plugin.on(element.EventType.SUBMIT_CHANGE, function() { return true; });
 | 
			
		||||
      plugin.on(element.EventType.SUBMIT_CHANGE, () => { 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; });
 | 
			
		||||
      plugin.on(element.EventType.SUBMIT_CHANGE, () => { return false; });
 | 
			
		||||
      plugin.on(element.EventType.SUBMIT_CHANGE, () => { return true; });
 | 
			
		||||
      assert.isFalse(element.canSubmitChange());
 | 
			
		||||
      assert.isTrue(errorStub.calledTwice);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('versioning', function() {
 | 
			
		||||
      var callback = sandbox.spy();
 | 
			
		||||
    test('versioning', () => {
 | 
			
		||||
      const callback = sandbox.spy();
 | 
			
		||||
      Gerrit.install(callback, '0.0pre-alpha');
 | 
			
		||||
      assert(callback.notCalled);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('getAccount', function(done) {
 | 
			
		||||
      Gerrit.getLoggedIn().then(function(loggedIn) {
 | 
			
		||||
    test('getAccount', done => {
 | 
			
		||||
      Gerrit.getLoggedIn().then(loggedIn => {
 | 
			
		||||
        assert.isTrue(loggedIn);
 | 
			
		||||
        done();
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('_setPluginsCount', function(done) {
 | 
			
		||||
    test('_setPluginsCount', done => {
 | 
			
		||||
      stub('gr-reporting', {
 | 
			
		||||
        pluginsLoaded: function() {
 | 
			
		||||
        pluginsLoaded() {
 | 
			
		||||
          assert.equal(Gerrit._pluginsPending, 0);
 | 
			
		||||
          done();
 | 
			
		||||
        }
 | 
			
		||||
        },
 | 
			
		||||
      });
 | 
			
		||||
      Gerrit._setPluginsCount(0);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('_arePluginsLoaded', function() {
 | 
			
		||||
    test('_arePluginsLoaded', () => {
 | 
			
		||||
      assert.isTrue(Gerrit._arePluginsLoaded());
 | 
			
		||||
      Gerrit._setPluginsCount(1);
 | 
			
		||||
      assert.isFalse(Gerrit._arePluginsLoaded());
 | 
			
		||||
@@ -222,12 +222,12 @@ limitations under the License.
 | 
			
		||||
      assert.isTrue(Gerrit._arePluginsLoaded());
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('_pluginInstalled', function(done) {
 | 
			
		||||
    test('_pluginInstalled', done => {
 | 
			
		||||
      stub('gr-reporting', {
 | 
			
		||||
        pluginsLoaded: function() {
 | 
			
		||||
        pluginsLoaded() {
 | 
			
		||||
          assert.equal(Gerrit._pluginsPending, 0);
 | 
			
		||||
          done();
 | 
			
		||||
        }
 | 
			
		||||
        },
 | 
			
		||||
      });
 | 
			
		||||
      Gerrit._setPluginsCount(2);
 | 
			
		||||
      Gerrit._pluginInstalled();
 | 
			
		||||
@@ -235,34 +235,34 @@ limitations under the License.
 | 
			
		||||
      Gerrit._pluginInstalled();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('install calls _pluginInstalled', function() {
 | 
			
		||||
    test('install calls _pluginInstalled', () => {
 | 
			
		||||
      sandbox.stub(Gerrit, '_pluginInstalled');
 | 
			
		||||
      Gerrit.install(function(p) { plugin = p; }, '0.1',
 | 
			
		||||
      Gerrit.install(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() {
 | 
			
		||||
    test('install calls _pluginInstalled on error', () => {
 | 
			
		||||
      sandbox.stub(Gerrit, '_pluginInstalled');
 | 
			
		||||
      Gerrit.install(function() {}, '0.0pre-alpha');
 | 
			
		||||
      Gerrit.install(() => {}, '0.0pre-alpha');
 | 
			
		||||
      assert.isTrue(Gerrit._pluginInstalled.calledOnce);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('installGwt calls _pluginInstalled', function() {
 | 
			
		||||
    test('installGwt calls _pluginInstalled', () => {
 | 
			
		||||
      sandbox.stub(Gerrit, '_pluginInstalled');
 | 
			
		||||
      Gerrit.installGwt();
 | 
			
		||||
      assert.isTrue(Gerrit._pluginInstalled.calledOnce);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('installGwt returns a stub object', function() {
 | 
			
		||||
      var plugin = Gerrit.installGwt();
 | 
			
		||||
    test('installGwt returns a stub object', () => {
 | 
			
		||||
      const plugin = Gerrit.installGwt();
 | 
			
		||||
      sandbox.stub(console, 'warn');
 | 
			
		||||
      assert.isAbove(Object.keys(plugin).length, 0);
 | 
			
		||||
      Object.keys(plugin).forEach(function(name) {
 | 
			
		||||
      for (const name of Object.keys(plugin)) {
 | 
			
		||||
        console.warn.reset();
 | 
			
		||||
        plugin[name]();
 | 
			
		||||
        assert.isTrue(console.warn.calledOnce);
 | 
			
		||||
      });
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
</script>
 | 
			
		||||
 
 | 
			
		||||
@@ -14,17 +14,17 @@
 | 
			
		||||
(function(window) {
 | 
			
		||||
  'use strict';
 | 
			
		||||
 | 
			
		||||
  var warnNotSupported = function(opt_name) {
 | 
			
		||||
  const warnNotSupported = function(opt_name) {
 | 
			
		||||
    console.warn('Plugin API method ' + (opt_name || '') + ' is not supported');
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  var stubbedMethods = ['_loadedGwt', 'screen', 'settingsScreen', 'panel'];
 | 
			
		||||
  var GWT_PLUGIN_STUB = {};
 | 
			
		||||
  stubbedMethods.forEach(function(name) {
 | 
			
		||||
  const stubbedMethods = ['_loadedGwt', 'screen', 'settingsScreen', 'panel'];
 | 
			
		||||
  const GWT_PLUGIN_STUB = {};
 | 
			
		||||
  for (const name of stubbedMethods) {
 | 
			
		||||
    GWT_PLUGIN_STUB[name] = warnNotSupported.bind(null, name);
 | 
			
		||||
  });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var API_VERSION = '0.1';
 | 
			
		||||
  const API_VERSION = '0.1';
 | 
			
		||||
 | 
			
		||||
  // GWT JSNI uses $wnd to refer to window.
 | 
			
		||||
  // http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
 | 
			
		||||
@@ -38,7 +38,7 @@
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this._url = new URL(opt_url);
 | 
			
		||||
    if (this._url.pathname.indexOf('/plugins') !== 0) {
 | 
			
		||||
    if (!this._url.pathname.startsWith('/plugins')) {
 | 
			
		||||
      console.warn('Plugin not being loaded from /plugins base path:',
 | 
			
		||||
          this._url.href, '— Unable to determine name.');
 | 
			
		||||
      return;
 | 
			
		||||
@@ -54,14 +54,14 @@
 | 
			
		||||
    return this._name;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Plugin.prototype.registerStyleModule =
 | 
			
		||||
      function(stylingEndpointName, moduleName) {
 | 
			
		||||
  Plugin.prototype.registerStyleModule = function(stylingEndpointName,
 | 
			
		||||
      moduleName) {
 | 
			
		||||
    if (!Gerrit._styleModules[stylingEndpointName]) {
 | 
			
		||||
      Gerrit._styleModules[stylingEndpointName] = [];
 | 
			
		||||
    }
 | 
			
		||||
    Gerrit._styleModules[stylingEndpointName].push({
 | 
			
		||||
      pluginUrl: this._url,
 | 
			
		||||
      moduleName: moduleName,
 | 
			
		||||
      moduleName,
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
@@ -87,7 +87,7 @@
 | 
			
		||||
        Plugin._sharedAPIElement.Element.REPLY_DIALOG));
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  var Gerrit = window.Gerrit || {};
 | 
			
		||||
  const Gerrit = window.Gerrit || {};
 | 
			
		||||
 | 
			
		||||
  // Number of plugins to initialize, -1 means 'not yet known'.
 | 
			
		||||
  Gerrit._pluginsPending = -1;
 | 
			
		||||
@@ -102,12 +102,13 @@
 | 
			
		||||
 | 
			
		||||
  Gerrit.css = function(rulesStr) {
 | 
			
		||||
    if (!Gerrit._customStyleSheet) {
 | 
			
		||||
      var styleEl = document.createElement('style');
 | 
			
		||||
      const styleEl = document.createElement('style');
 | 
			
		||||
      document.head.appendChild(styleEl);
 | 
			
		||||
      Gerrit._customStyleSheet = styleEl.sheet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var name = '__pg_js_api_class_' + Gerrit._customStyleSheet.cssRules.length;
 | 
			
		||||
    const name = '__pg_js_api_class_' +
 | 
			
		||||
        Gerrit._customStyleSheet.cssRules.length;
 | 
			
		||||
    Gerrit._customStyleSheet.insertRule('.' + name + '{' + rulesStr + '}', 0);
 | 
			
		||||
    return name;
 | 
			
		||||
  };
 | 
			
		||||
@@ -121,9 +122,9 @@
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // TODO(andybons): Polyfill currentScript for IE10/11 (edge supports it).
 | 
			
		||||
    var src = opt_src || (document.currentScript &&
 | 
			
		||||
    const src = opt_src || (document.currentScript &&
 | 
			
		||||
         document.currentScript.src || document.currentScript.baseURI);
 | 
			
		||||
    var plugin = new Plugin(src);
 | 
			
		||||
    const plugin = new Plugin(src);
 | 
			
		||||
    try {
 | 
			
		||||
      callback(plugin);
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
@@ -155,7 +156,7 @@
 | 
			
		||||
      if (Gerrit._arePluginsLoaded()) {
 | 
			
		||||
        Gerrit._allPluginsPromise = Promise.resolve();
 | 
			
		||||
      } else {
 | 
			
		||||
        Gerrit._allPluginsPromise = new Promise(function(resolve) {
 | 
			
		||||
        Gerrit._allPluginsPromise = new Promise(resolve => {
 | 
			
		||||
          Gerrit._resolveAllPluginsLoaded = resolve;
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user