Merge "Update check from new value instead of merging into old object"
diff --git a/README.md b/README.md
index 41f6dfd..5ac6c4e 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,8 @@
 After `bower install`, running `polymer test -l chrome` will run all tests in Chrome, and running `polymer serve`
 and navigating to http://127.0.0.1:8081/components/checks/gr-checks/gr-checks-view_test.html allows for manual debugging.
 
+The test file should be added to test/index.html if it needs to be run via `polymer test`.
+
 When upgrading the plugin, please use init:
 
     java -jar gerrit.war init -d site_path
diff --git a/gr-checks/gr-checkers-list_test.html b/gr-checks/gr-checkers-list_test.html
index 5e0fb47..11eb7f4 100644
--- a/gr-checks/gr-checkers-list_test.html
+++ b/gr-checks/gr-checkers-list_test.html
@@ -9,22 +9,6 @@
 <title>gr-checkers-list-view</title>
 <link rel="import" href="gr-checkers-list.html">
 
-<!-- Gr-overlay does not exist in the test framework
-It is expected to be provided by Gerrit core -->
-<dom-module id="gr-overlay">
-  <template>
-  </template>
-  <script>
-    readyToTest().then(() => {
-      Polymer({
-        is: 'gr-overlay',
-        refit() {},
-        open() { return Promise.resolve({}); },
-      });
-    });
-  </script>
-</dom-module>
-
 <test-fixture id="basic">
   <template is="dom-template">
     <gr-checkers-list
@@ -186,24 +170,29 @@
     await readyToTest();
     let element;
     let sandbox;
-    let fetchJSONSpy; let fetchJSONResolve;
+    let getSpy; let getResolve;
 
     setup(done => {
       sandbox = sinon.sandbox.create();
 
-      fetchJSONSpy = sinon.stub();
-      const fetchJSONPromise = new Promise((resolve, reject) => {
-        fetchJSONResolve = resolve;
+      getSpy = sinon.stub();
+      const getPromise = new Promise((resolve, reject) => {
+        getResolve = resolve;
       });
-      fetchJSONSpy.returns(fetchJSONPromise);
+      getSpy.returns(getPromise);
 
       const pluginRestApi = {
-        fetchJSON: fetchJSONSpy,
+        get: getSpy,
       };
 
       element = fixture('basic', {
         pluginRestApi,
       });
+
+      element.$.listOverlay.refit = () => {};
+      element.$.listOverlay.open = () => {
+        return Promise.resolve(() => {});
+      };
       flush(done);
     });
 
@@ -216,7 +205,7 @@
       const expectedHeadings = ['Checker Name', 'Repository', 'Status',
         'Required', 'Checker Description', 'Edit'];
       for (let i = 0; i < headings.length; i++) {
-        assert(headings[i].innerText === expectedHeadings[i]);
+        assert(headings[i].innerText.trim() === expectedHeadings[i]);
       }
     });
 
@@ -230,7 +219,7 @@
 
     suite('with checkers', () => {
       setup(done => {
-        fetchJSONResolve(CHECKERS);
+        getResolve(CHECKERS);
         element._showConfigureOverlay();
         flush(done);
       });
diff --git a/gr-checks/gr-checks-item.js b/gr-checks/gr-checks-item.js
index 63777b9..3fd7912 100644
--- a/gr-checks/gr-checks-item.js
+++ b/gr-checks/gr-checks-item.js
@@ -63,7 +63,12 @@
 
     _toggleMessageShown() {
       this.showCheckMessage = !this.showCheckMessage;
-      this.fire('toggle-check-message', {uuid: this.check.checker_uuid});
+      this.dispatchEvent(new CustomEvent('toggle-check-message',
+          {
+            detail: {uuid: this.check.checker_uuid},
+            bubbles: true,
+            composed: true,
+          }));
     },
 
     _computeExpandIcon(showCheckMessage) {
@@ -92,9 +97,13 @@
       return (check.blocking && check.blocking.length === 0) ? 'Optional' :
         'Required';
     },
-    _handleReRunClicked(event) {
-      this.fire('retry-check', {uuid: this.check.checker_uuid},
-          {bubbles: false});
+    _handleReRunClicked() {
+      this.dispatchEvent(new CustomEvent('retry-check',
+          {
+            detail: {uuid: this.check.checker_uuid},
+            bubbles: false,
+            composed: true,
+          }));
     },
   });
 
diff --git a/gr-checks/gr-checks-view.js b/gr-checks/gr-checks-view.js
index 135756f..8c92bb4 100644
--- a/gr-checks/gr-checks-view.js
+++ b/gr-checks/gr-checks-view.js
@@ -165,6 +165,7 @@
     },
 
     _handleRevisionUpdate(revision) {
+      if (!revision) return;
       this._currentPatchSet = revision._number;
     },
 
@@ -237,7 +238,12 @@
             this._fetchChecks(this.change, this.revision._number,
                 this.getChecks);
           }, error => {
-            this.fire('show-error', {message: error.message});
+            this.dispatchEvent(new CustomEvent('show-error',
+                {
+                  detail: {message: error.message},
+                  bubbles: true,
+                  composed: true,
+                }));
           }
       );
     },
diff --git a/gr-checks/gr-checks-view_test.html b/gr-checks/gr-checks-view_test.html
index 5316a30..dce5364 100644
--- a/gr-checks/gr-checks-view_test.html
+++ b/gr-checks/gr-checks-view_test.html
@@ -358,7 +358,7 @@
 
       test('retry fires show-error event', done => {
         postReject(new Error('random error'));
-        const fireStub = sandbox.stub(element, 'fire');
+        const fireStub = sandbox.stub(element, 'dispatchEvent');
         Polymer.dom.flush();
         const checksItem = element.querySelectorAll(
             'table > tbody > gr-checks-item'
@@ -367,7 +367,7 @@
         const reRunButton = reRun.querySelector('gr-button');
         reRunButton.click();
         flush(() => {
-          assert(fireStub.calledWith('show-error'));
+          assert.equal(fireStub.firstCall.args[0].type, ('show-error'));
           done();
         });
       });
diff --git a/gr-checks/gr-create-checkers-dialog.js b/gr-checks/gr-create-checkers-dialog.js
index b045774..dc502c7 100644
--- a/gr-checks/gr-create-checkers-dialog.js
+++ b/gr-checks/gr-create-checkers-dialog.js
@@ -71,14 +71,11 @@
       _query: String,
     },
 
-    behaviors: [
-      Gerrit.FireBehavior,
-    ],
     /**
-    * Fired when the cancel button is pressed.
-    *
-    * @event cancel
-    */
+     * Fired when the cancel button is pressed.
+     *
+     * @event cancel
+     */
 
     observers: [
       '_updateUUID(_scheme, _id)',
@@ -176,7 +173,13 @@
           res => {
             if (res) {
               this._errorMsg = '';
-              this.fire('cancel', {reload: true}, {bubbles: true});
+              this.dispatchEvent(new CustomEvent('cancel',
+                  {
+                    detail: {reload: true},
+                    bubbles: true,
+                    composed: true,
+                  }
+              ));
             }
           },
           error => {
@@ -224,7 +227,13 @@
       this._required = false;
       this._query = '';
       this._status = '';
-      this.fire('cancel', {reload: true}, {bubbles: true});
+      this.dispatchEvent(new CustomEvent('cancel',
+          {
+            detail: {reload: true},
+            bubbles: true,
+            composed: true,
+          }
+      ));
     },
 
     _repoSuggestions(filter) {
diff --git a/gr-checks/gr-repo-chip.js b/gr-checks/gr-repo-chip.js
index 19aff38..2e90b3f 100644
--- a/gr-checks/gr-repo-chip.js
+++ b/gr-checks/gr-repo-chip.js
@@ -16,7 +16,12 @@
     },
     _handleRemove(e) {
       e.preventDefault();
-      this.fire('remove', {repo: this.repo});
+      this.dispatchEvent(new CustomEvent('remove',
+          {
+            detail: {repo: this.repo},
+            bubbles: true,
+            composed: true,
+          }));
     },
   });
 })();
\ No newline at end of file
diff --git a/test/index.html b/test/index.html
index f132465..fa9b923 100644
--- a/test/index.html
+++ b/test/index.html
@@ -30,5 +30,6 @@
     '../gr-checks/gr-checks-item_test.html',
     '../gr-checks/gr-checks-status_test.html',
     '../gr-checks/gr-checks-view_test.html',
+    '../gr-checks/gr-checkers-list_test.html'
   ]);
 </script>
\ No newline at end of file