diff --git a/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log.ts b/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log.ts index 090fad7362..3aeea3b431 100644 --- a/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log.ts +++ b/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log.ts @@ -75,7 +75,7 @@ export class GrGroupAuditLog extends ListViewMixin( } const errFn: ErrorCallback = response => { - firePageError(this, response); + firePageError(response); }; return this.restApiService diff --git a/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log_test.js b/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log_test.js index 25fd85407c..268112ed40 100644 --- a/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log_test.js +++ b/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log_test.js @@ -18,6 +18,7 @@ import '../../../test/common-test-setup-karma.js'; import './gr-group-audit-log.js'; import {stubRestApi} from '../../../test/test-utils.js'; +import {addListenerForTest} from '../../../test/test-utils.js'; const basicFixture = fixtureFromElement('gr-group-audit-log'); @@ -84,7 +85,7 @@ suite('gr-group-audit-log tests', () => { errFn(response); }); - element.addEventListener('page-error', e => { + addListenerForTest(document, 'page-error', e => { assert.deepEqual(e.detail.response, response); done(); }); diff --git a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.ts b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.ts index 4c546175a3..888647fed3 100644 --- a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.ts +++ b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.ts @@ -139,7 +139,7 @@ export class GrGroupMembers extends GestureEventListeners( const promises: Promise[] = []; const errFn: ErrorCallback = response => { - firePageError(this, response); + firePageError(response); }; return this.restApiService diff --git a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.js b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.js index c09ac1ea97..654d24ac04 100644 --- a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.js +++ b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.js @@ -18,7 +18,7 @@ import '../../../test/common-test-setup-karma.js'; import './gr-group-members.js'; import {dom, flush} from '@polymer/polymer/lib/legacy/polymer.dom.js'; -import {stubBaseUrl, stubRestApi} from '../../../test/test-utils.js'; +import {addListenerForTest, stubBaseUrl, stubRestApi} from '../../../test/test-utils.js'; const basicFixture = fixtureFromElement('gr-group-members'); @@ -352,7 +352,7 @@ suite('gr-group-members tests', () => { .callsFake((group, errFn) => { errFn(response); }); - element.addEventListener('page-error', e => { + addListenerForTest(document, 'page-error', e => { assert.deepEqual(e.detail.response, response); done(); }); diff --git a/polygerrit-ui/app/elements/admin/gr-group/gr-group.ts b/polygerrit-ui/app/elements/admin/gr-group/gr-group.ts index 3b0577e1d3..cee803ccc1 100644 --- a/polygerrit-ui/app/elements/admin/gr-group/gr-group.ts +++ b/polygerrit-ui/app/elements/admin/gr-group/gr-group.ts @@ -148,7 +148,7 @@ export class GrGroup extends GestureEventListeners( const promises: Promise[] = []; const errFn: ErrorCallback = response => { - firePageError(this, response); + firePageError(response); }; return this.restApiService diff --git a/polygerrit-ui/app/elements/admin/gr-group/gr-group_test.js b/polygerrit-ui/app/elements/admin/gr-group/gr-group_test.js index 4a80946c00..4c09e307ec 100644 --- a/polygerrit-ui/app/elements/admin/gr-group/gr-group_test.js +++ b/polygerrit-ui/app/elements/admin/gr-group/gr-group_test.js @@ -18,6 +18,7 @@ import '../../../test/common-test-setup-karma.js'; import './gr-group.js'; import {stubRestApi} from '../../../test/test-utils.js'; +import {addListenerForTest} from '../../../test/test-utils.js'; const basicFixture = fixtureFromElement('gr-group'); @@ -216,7 +217,7 @@ suite('gr-group tests', () => { errFn(response); }); - element.addEventListener('page-error', e => { + addListenerForTest(document, 'page-error', e => { assert.deepEqual(e.detail.response, response); done(); }); diff --git a/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list.ts b/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list.ts index 2d1d1ce67e..ceb08b64b7 100644 --- a/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list.ts +++ b/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list.ts @@ -95,7 +95,7 @@ export class GrPluginList extends ListViewMixin( _getPlugins(filter: string, pluginsPerPage: number, offset?: number) { const errFn: ErrorCallback = response => { - firePageError(this, response); + firePageError(response); }; return this.restApiService .getPlugins(filter, pluginsPerPage, offset, errFn) diff --git a/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list_test.js b/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list_test.js index 82e0f8c6f1..a9281e492c 100644 --- a/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list_test.js +++ b/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list_test.js @@ -18,7 +18,7 @@ import '../../../test/common-test-setup-karma.js'; import './gr-plugin-list.js'; import 'lodash/lodash.js'; -import {stubRestApi} from '../../../test/test-utils.js'; +import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js'; const basicFixture = fixtureFromElement('gr-plugin-list'); @@ -155,7 +155,7 @@ suite('gr-plugin-list tests', () => { errFn(response); }); - element.addEventListener('page-error', e => { + addListenerForTest(document, 'page-error', e => { assert.deepEqual(e.detail.response, response); done(); }); diff --git a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.ts b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.ts index b46a9059cd..19fac2f137 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.ts @@ -151,7 +151,7 @@ export class GrRepoAccess extends GestureEventListeners( _reload(repo: RepoName) { const errFn = (response?: Response | null) => { - firePageError(this, response); + firePageError(response); }; this._editing = false; diff --git a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.js b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.js index 1f73b4c78e..a4e019eded 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.js +++ b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.js @@ -20,7 +20,7 @@ import './gr-repo-access.js'; import {dom} from '@polymer/polymer/lib/legacy/polymer.dom.js'; import {GerritNav} from '../../core/gr-navigation/gr-navigation.js'; import {toSortedPermissionsArray} from '../../../utils/access-util.js'; -import {stubRestApi} from '../../../test/test-utils.js'; +import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js'; const basicFixture = fixtureFromElement('gr-repo-access'); @@ -242,7 +242,7 @@ suite('gr-repo-access tests', () => { errFn(response); }); - element.addEventListener('page-error', e => { + addListenerForTest(document, 'page-error', e => { assert.deepEqual(e.detail.response, response); done(); }); diff --git a/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands.ts b/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands.ts index 59a203447a..9bc0466ffd 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands.ts @@ -106,7 +106,7 @@ export class GrRepoCommands extends GestureEventListeners( // Do not process the error, if the component is not attached to the DOM // anymore, which at least in tests can happen. if (!this.isConnected) return; - firePageError(this, response); + firePageError(response); }; this.restApiService.getProjectConfig(this.repo, errFn).then(config => { diff --git a/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_test.js b/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_test.js index b01b654830..893efe556c 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_test.js +++ b/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_test.js @@ -18,7 +18,7 @@ import '../../../test/common-test-setup-karma.js'; import './gr-repo-commands.js'; import {GerritNav} from '../../core/gr-navigation/gr-navigation.js'; -import {stubRestApi} from '../../../test/test-utils.js'; +import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js'; const basicFixture = fixtureFromElement('gr-repo-commands'); @@ -121,7 +121,7 @@ suite('gr-repo-commands tests', () => { stubRestApi('getProjectConfig').callsFake((repo, errFn) => { errFn(response); }); - element.addEventListener('page-error', e => { + addListenerForTest(document, 'page-error', e => { assert.deepEqual(e.detail.response, response); done(); }); diff --git a/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards.ts b/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards.ts index 2f4bbec4db..b30d1f4462 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards.ts @@ -59,7 +59,7 @@ export class GrRepoDashboards extends GestureEventListeners( } const errFn: ErrorCallback = response => { - firePageError(this, response); + firePageError(response); }; return this.restApiService diff --git a/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_test.js b/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_test.js index b84b6b4d8f..829611dfa5 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_test.js +++ b/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_test.js @@ -18,7 +18,7 @@ import '../../../test/common-test-setup-karma.js'; import './gr-repo-dashboards.js'; import {GerritNav} from '../../core/gr-navigation/gr-navigation.js'; -import {stubRestApi} from '../../../test/test-utils.js'; +import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js'; const basicFixture = fixtureFromElement('gr-repo-dashboards'); @@ -128,7 +128,7 @@ suite('gr-repo-dashboards tests', () => { errFn(response); }); - element.addEventListener('page-error', e => { + addListenerForTest(document, 'page-error', e => { assert.deepEqual(e.detail.response, response); done(); }); diff --git a/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list.ts b/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list.ts index 5a05f04633..5325dc7d5c 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list.ts @@ -181,7 +181,7 @@ export class GrRepoDetailList extends ListViewMixin( this._items = []; flush(); const errFn: ErrorCallback = response => { - firePageError(this, response); + firePageError(response); }; if (detailType === RepoDetailView.BRANCHES) { diff --git a/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.js b/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.js index ed8b762dbd..990ea4b068 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.js +++ b/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.js @@ -20,7 +20,7 @@ import './gr-repo-detail-list.js'; import 'lodash/lodash.js'; import {page} from '../../../utils/page-wrapper-utils.js'; import {dom} from '@polymer/polymer/lib/legacy/polymer.dom.js'; -import {stubRestApi} from '../../../test/test-utils.js'; +import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js'; const basicFixture = fixtureFromElement('gr-repo-detail-list'); @@ -293,7 +293,7 @@ suite('gr-repo-detail-list', () => { errFn(response); }); - element.addEventListener('page-error', e => { + addListenerForTest(document, 'page-error', e => { assert.deepEqual(e.detail.response, response); done(); }); @@ -488,7 +488,7 @@ suite('gr-repo-detail-list', () => { errFn(response); }); - element.addEventListener('page-error', e => { + addListenerForTest(document, 'page-error', e => { assert.deepEqual(e.detail.response, response); done(); }); diff --git a/polygerrit-ui/app/elements/admin/gr-repo/gr-repo.ts b/polygerrit-ui/app/elements/admin/gr-repo/gr-repo.ts index ec511c8f26..5ddafdbdfa 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo/gr-repo.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo/gr-repo.ts @@ -171,7 +171,7 @@ export class GrRepo extends GestureEventListeners( const promises = []; const errFn: ErrorCallback = response => { - firePageError(this, response); + firePageError(response); }; promises.push( diff --git a/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_test.js b/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_test.js index e2b26df459..8ce6f646f3 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_test.js +++ b/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_test.js @@ -18,7 +18,7 @@ import '../../../test/common-test-setup-karma.js'; import './gr-repo.js'; import {PolymerElement} from '@polymer/polymer/polymer-element.js'; -import {stubRestApi} from '../../../test/test-utils.js'; +import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js'; const basicFixture = fixtureFromElement('gr-repo'); @@ -235,7 +235,7 @@ suite('gr-repo tests', () => { stubRestApi('getProjectConfig').callsFake((repo, errFn) => { errFn(response); }); - element.addEventListener('page-error', e => { + addListenerForTest(document, 'page-error', e => { assert.deepEqual(e.detail.response, response); done(); }); diff --git a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.ts b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.ts index 078ab03f72..7008b482f2 100644 --- a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.ts +++ b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.ts @@ -172,7 +172,7 @@ export class GrDashboardView extends GestureEventListeners( dashboard: DashboardId ): Promise { const errFn = (response?: Response | null) => { - firePageError(this, response); + firePageError(response); }; return this.restApiService .getDashboard(project, dashboard, errFn) diff --git a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_test.js b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_test.js index 4a4e4ab8e5..47f885bd3e 100644 --- a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_test.js +++ b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_test.js @@ -23,7 +23,7 @@ import {GerritView} from '../../../services/router/router-model.js'; import {changeIsOpen} from '../../../utils/change-util.js'; import {ChangeStatus} from '../../../constants/constants.js'; import {createAccountWithId} from '../../../test/test-data-generators.js'; -import {stubRestApi} from '../../../test/test-utils.js'; +import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js'; const basicFixture = fixtureFromElement('gr-dashboard-view'); @@ -377,7 +377,7 @@ suite('gr-dashboard-view tests', () => { async (project, dashboard, errFn) => { errFn(response); }); - element.addEventListener('page-error', e => { + addListenerForTest(document, 'page-error', e => { assert.strictEqual(e.detail.response, response); paramsChangedPromise.then(done); }); diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts index 5de6db44dc..1e3dfffccc 100644 --- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts +++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts @@ -1855,7 +1855,7 @@ export class GrChangeView extends KeyboardShortcutMixin( } _handleGetChangeDetailError(response?: Response | null) { - firePageError(this, response); + firePageError(response); } _getLoggedIn() { diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router.ts b/polygerrit-ui/app/elements/core/gr-router/gr-router.ts index e0b40b1ade..582d96b9eb 100644 --- a/polygerrit-ui/app/elements/core/gr-router/gr-router.ts +++ b/polygerrit-ui/app/elements/core/gr-router/gr-router.ts @@ -65,6 +65,7 @@ import { } from '../../gr-app-types'; import {LocationChangeEventDetail} from '../../../types/events'; import {GerritView, updateState} from '../../../services/router/router-model'; +import {firePageError} from '../../../utils/event-util'; const RoutePattern = { ROOT: '/', @@ -1777,9 +1778,7 @@ export class GrRouter extends GestureEventListeners( // Note: the app's 404 display is tightly-coupled with catching 404 // network responses, so we simulate a 404 response status to display it. // TODO: Decouple the gr-app error view from network responses. - this._appElement().dispatchEvent( - new CustomEvent('page-error', {detail: {response: {status: 404}}}) - ); + firePageError(new Response('', {status: 404})); } } diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router_test.js b/polygerrit-ui/app/elements/core/gr-router/gr-router_test.js index 16d6370baf..ec122ec7b6 100644 --- a/polygerrit-ui/app/elements/core/gr-router/gr-router_test.js +++ b/polygerrit-ui/app/elements/core/gr-router/gr-router_test.js @@ -22,6 +22,7 @@ import {GerritNav} from '../gr-navigation/gr-navigation.js'; import {stubBaseUrl} from '../../../test/test-utils.js'; import {_testOnly_RoutePattern} from './gr-router.js'; import {stubRestApi} from '../../../test/test-utils.js'; +import {addListenerForTest} from '../../../test/test-utils.js'; const basicFixture = fixtureFromElement('gr-router'); @@ -664,13 +665,11 @@ suite('gr-router tests', () => { }); test('_handleDefaultRoute on first load', () => { - const appElementStub = {dispatchEvent: sinon.stub()}; - element._appElement = () => appElementStub; + const spy = sinon.spy(); + addListenerForTest(document, 'page-error', spy); element._handleDefaultRoute(); - assert.isTrue(appElementStub.dispatchEvent.calledOnce); - assert.equal( - appElementStub.dispatchEvent.lastCall.args[0].detail.response.status, - 404); + assert.isTrue(spy.calledOnce); + assert.equal(spy.lastCall.args[0].detail.response.status, 404); }); test('_handleDefaultRoute after internal navigation', () => { @@ -684,8 +683,6 @@ suite('gr-router tests', () => { sinon.stub(page, 'base'); element._startRouter(); - const appElementStub = {dispatchEvent: sinon.stub()}; - element._appElement = () => appElementStub; element._handleDefaultRoute(); onExit('', () => {}); // we left page; diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts index afc15dd1ad..7610e5e6c8 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts +++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts @@ -609,7 +609,7 @@ export class GrDiffHost extends GestureEventListeners( return; } - firePageError(this, response); + firePageError(response); } /** diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js index 99e639105c..dd2e30748a 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js +++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js @@ -25,7 +25,7 @@ import {Side, CommentSide} from '../../../constants/constants.js'; import {createChange} from '../../../test/test-data-generators.js'; import {FILE} from '../gr-diff/gr-diff-line.js'; import {CoverageType} from '../../../types/types.js'; -import {stubRestApi} from '../../../test/test-utils.js'; +import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js'; import {createDefaultDiffPrefs} from '../../../constants/constants.js'; const basicFixture = fixtureFromElement('gr-diff-host'); @@ -296,13 +296,9 @@ suite('gr-diff-host tests', () => { setup(() => { serverErrorStub = sinon.stub(); - document.addEventListener('server-error', serverErrorStub); + addListenerForTest(document, 'server-error', serverErrorStub); pageErrorStub = sinon.stub(); - element.addEventListener('page-error', pageErrorStub); - }); - - teardown(() => { - document.removeEventListener('server-error', serverErrorStub); + addListenerForTest(document, 'page-error', pageErrorStub); }); test('page error on HTTP-409', () => { @@ -313,7 +309,10 @@ suite('gr-diff-host tests', () => { }); test('server error on non-HTTP-409', () => { - element._handleGetDiffError({status: 500}); + element._handleGetDiffError({ + status: 500, + text: () => Promise.resolve(''), + }); assert.isFalse(serverErrorStub.called); assert.isTrue(pageErrorStub.calledOnce); assert.isNotOk(element._errorMessage); diff --git a/polygerrit-ui/app/elements/gr-app-element.ts b/polygerrit-ui/app/elements/gr-app-element.ts index 07e9aab272..15e89230b3 100644 --- a/polygerrit-ui/app/elements/gr-app-element.ts +++ b/polygerrit-ui/app/elements/gr-app-element.ts @@ -210,7 +210,7 @@ export class GrAppElement extends KeyboardShortcutMixin( created() { super.created(); this._bindKeyboardShortcuts(); - this.addEventListener(EventType.PAGE_ERROR, e => { + document.addEventListener(EventType.PAGE_ERROR, e => { this._handlePageError(e); }); this.addEventListener(EventType.TITLE_CHANGE, e => { diff --git a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-action-context_test.js b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-action-context_test.js index e764bf85d4..34c976a3e9 100644 --- a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-action-context_test.js +++ b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-action-context_test.js @@ -19,6 +19,7 @@ import '../../../test/common-test-setup-karma.js'; import './gr-js-api-interface.js'; import {GrPluginActionContext} from './gr-plugin-action-context.js'; import {_testOnly_initGerritPluginApi} from './gr-gerrit.js'; +import {addListenerForTest} from '../../../test/test-utils.js'; const pluginApi = _testOnly_initGerritPluginApi(); @@ -137,7 +138,7 @@ suite('gr-plugin-action-context tests', () => { send: sendStub, }); const errorStub = sinon.stub(); - document.addEventListener('show-alert', errorStub); + addListenerForTest(document, 'show-alert', errorStub); instance.call(); await flush(); assert.isTrue(errorStub.calledOnce); diff --git a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-loader_test.js b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-loader_test.js index 66248c63cb..19762e0487 100644 --- a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-loader_test.js +++ b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-loader_test.js @@ -22,7 +22,7 @@ import {_testOnly_resetPluginLoader} from './gr-plugin-loader.js'; import {resetPlugins, stubBaseUrl} from '../../../test/test-utils.js'; import {_testOnly_flushPreinstalls} from './gr-gerrit.js'; import {_testOnly_initGerritPluginApi} from './gr-gerrit.js'; -import {stubRestApi} from '../../../test/test-utils.js'; +import {addListenerForTest, stubRestApi} from '../../../test/test-utils.js'; const basicFixture = fixtureFromElement('gr-js-api-interface'); @@ -149,7 +149,7 @@ suite('gr-plugin-loader tests', () => { ]; const alertStub = sinon.stub(); - document.addEventListener('show-alert', alertStub); + addListenerForTest(document, 'show-alert', alertStub); sinon.stub(pluginLoader, '_loadJsPlugin').callsFake( url => { pluginApi.install(() => { @@ -177,7 +177,7 @@ suite('gr-plugin-loader tests', () => { ]; const alertStub = sinon.stub(); - document.addEventListener('show-alert', alertStub); + addListenerForTest(document, 'show-alert', alertStub); sinon.stub(pluginLoader, '_loadJsPlugin').callsFake( url => { pluginApi.install(() => { @@ -210,7 +210,7 @@ suite('gr-plugin-loader tests', () => { ]; const alertStub = sinon.stub(); - document.addEventListener('show-alert', alertStub); + addListenerForTest(document, 'show-alert', alertStub); sinon.stub(pluginLoader, '_loadJsPlugin').callsFake( url => { pluginApi.install(() => { @@ -236,7 +236,7 @@ suite('gr-plugin-loader tests', () => { ]; const alertStub = sinon.stub(); - document.addEventListener('show-alert', alertStub); + addListenerForTest(document, 'show-alert', alertStub); sinon.stub(pluginLoader, '_loadJsPlugin').callsFake( url => { pluginApi.install(() => { diff --git a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface.ts b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface.ts index 61e9ff275d..355691f5d9 100644 --- a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface.ts +++ b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface.ts @@ -16,8 +16,6 @@ */ /* NB: Order is important, because of namespaced classes. */ -import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-listeners'; -import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin'; import {PolymerElement} from '@polymer/polymer/polymer-element'; import {GrEtagDecorator} from './gr-etag-decorator'; import { @@ -41,7 +39,7 @@ import { listChangesOptionsToHex, } from '../../../utils/change-util'; import {assertNever, hasOwnProperty} from '../../../utils/common-util'; -import {customElement, property} from '@polymer/decorators'; +import {customElement} from '@polymer/decorators'; import {AuthRequestInit, AuthService} from '../../../services/gr-auth/gr-auth'; import { AccountCapabilityInfo, @@ -297,22 +295,16 @@ declare global { } @customElement('gr-rest-api-interface') -export class GrRestApiInterface - extends GestureEventListeners(LegacyElementMixin(PolymerElement)) +export class GrRestApiInterface extends PolymerElement implements RestApiService { - @property({type: Object}) readonly _cache = siteBasedCache; // Shared across instances. - @property({type: Object}) readonly _sharedFetchPromises = fetchPromisesCache; // Shared across instances. - @property({type: Object}) readonly _pendingRequests = pendingRequest; // Shared across instances. - @property({type: Object}) readonly _etags = grEtagDecorator; // Shared across instances. - @property({type: Object}) readonly _projectLookup = projectLookup; // Shared across instances. // The value is set in created, before any other actions @@ -3067,8 +3059,7 @@ export class GrRestApiInterface return Promise.resolve(project); } - const onError = (response?: Response | null) => - firePageError(this, response); + const onError = (response?: Response | null) => firePageError(response); return this.getChange(changeNum, onError).then(change => { if (!change || !change.project) { diff --git a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface_test.js b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface_test.js index 4c80db56c2..6db2bff325 100644 --- a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface_test.js +++ b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface_test.js @@ -16,8 +16,7 @@ */ import '../../../test/common-test-setup-karma.js'; -import './gr-rest-api-interface.js'; -import {mockPromise} from '../../../test/test-utils.js'; +import {addListenerForTest, mockPromise} from '../../../test/test-utils.js'; import {GrReviewerUpdatesParser} from './gr-reviewer-updates-parser.js'; import {ListChangesOption} from '../../../utils/change-util.js'; import {appContext} from '../../../services/app-context.js'; @@ -28,8 +27,7 @@ import { readResponsePayload, } from './gr-rest-apis/gr-rest-api-helper.js'; import {JSON_PREFIX} from './gr-rest-apis/gr-rest-api-helper.js'; - -const basicFixture = fixtureFromElement('gr-rest-api-interface'); +import {GrRestApiInterface} from './gr-rest-api-interface.js'; suite('gr-rest-api-interface tests', () => { let element; @@ -53,7 +51,7 @@ suite('gr-rest-api-interface tests', () => { // fake auth sinon.stub(appContext.authService, 'authCheck') .returns(Promise.resolve(true)); - element = basicFixture.instantiate(); + element = new GrRestApiInterface(); element._projectLookup = {}; }); @@ -267,7 +265,7 @@ suite('gr-rest-api-interface tests', () => { const getResponseObjectStub = sinon.stub(element, 'getResponseObject'); window.fetch.returns(Promise.resolve({ok: false})); const serverErrorEventPromise = new Promise(resolve => { - document.addEventListener('server-error', resolve); + addListenerForTest(document, 'server-error', resolve); }); return Promise.all([element._restApiHelper.fetchJSON({}).then(response => { @@ -1253,7 +1251,7 @@ suite('gr-rest-api-interface tests', () => { test('getFileContent suppresses 404s', () => { const res = {status: 404}; const spy = sinon.spy(); - document.addEventListener('server-error', spy); + addListenerForTest(document, 'server-error', spy); sinon.stub(appContext.authService, 'fetch').returns(Promise.resolve(res)); sinon.stub(element, '_changeBaseURL').returns(Promise.resolve('')); return element.getFileContent('1', 'tst/path', '1') @@ -1306,7 +1304,7 @@ suite('gr-rest-api-interface tests', () => { test('_logCall only reports requests with anonymized URLss', () => { sinon.stub(Date, 'now').returns(200); const handler = sinon.stub(); - document.addEventListener('gr-rpc-log', handler); + addListenerForTest(document, 'gr-rpc-log', handler); element._restApiHelper._logCall({url: 'url'}, 100, 200); assert.isFalse(handler.called); @@ -1320,14 +1318,13 @@ suite('gr-rest-api-interface tests', () => { test('ported comment errors do not trigger error dialog', () => { const change = createChange(); const handler = sinon.stub(); - document.addEventListener('server-error', handler); + addListenerForTest(document, 'server-error', handler); sinon.stub(element._restApiHelper, 'fetchJSON').returns(Promise.resolve({ ok: false})); element.getPortedComments(change._number, CURRENT); assert.isFalse(handler.called); - document.removeEventListener('server-error', handler); }); test('ported drafts are not requested user is not logged in', () => { diff --git a/polygerrit-ui/app/types/events.ts b/polygerrit-ui/app/types/events.ts index 2398a6689d..48138287f4 100644 --- a/polygerrit-ui/app/types/events.ts +++ b/polygerrit-ui/app/types/events.ts @@ -40,7 +40,7 @@ export interface PageErrorEventDetail { export type PageErrorEvent = CustomEvent; declare global { - interface HTMLElementEventMap { + interface DocumentEventMap { 'page-error': PageErrorEvent; } } diff --git a/polygerrit-ui/app/utils/event-util.ts b/polygerrit-ui/app/utils/event-util.ts index 5c7cd6d053..9938e11901 100644 --- a/polygerrit-ui/app/utils/event-util.ts +++ b/polygerrit-ui/app/utils/event-util.ts @@ -46,8 +46,8 @@ export function fireAlert(target: EventTarget, message: string) { ); } -export function firePageError(target: EventTarget, response?: Response | null) { - target.dispatchEvent( +export function firePageError(response?: Response | null) { + document.dispatchEvent( new CustomEvent(EventType.PAGE_ERROR, { detail: {response}, composed: true,