chrome-devtools-frontend
Version:
Chrome DevTools UI
92 lines (83 loc) • 4.73 kB
text/typescript
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import type * as Protocol from '../../generated/protocol.js';
import {MockIssuesManager} from '../../testing/MockIssuesManager.js';
import {StubIssue} from '../../testing/StubIssue.js';
import * as IssuesManager from '../issues_manager/issues_manager.js';
describe('IssueResolver', () => {
const issueId1 = 'foo' as Protocol.Audits.IssueId;
describe('tryGet', () => {
it('should resolve an existing issue', () => {
const mockIssue = StubIssue.createFromIssueId(issueId1);
const issuesManager = new MockIssuesManager([mockIssue]) as unknown as IssuesManager.IssuesManager.IssuesManager;
const issueResolver = new IssuesManager.IssueResolver.IssueResolver(issuesManager);
const issue = issueResolver.tryGet(issueId1, () => {
throw new Error('This should not get called');
});
assert.isFalse(issuesManager.hasEventListeners(IssuesManager.IssuesManager.Events.ISSUE_ADDED));
assert.strictEqual(issue, mockIssue);
});
it('should not resolve an unknown issue', () => {
const issuesManager = new MockIssuesManager([]) as unknown as IssuesManager.IssuesManager.IssuesManager;
const issueResolver = new IssuesManager.IssueResolver.IssueResolver(issuesManager);
const issue = issueResolver.tryGet(issueId1, () => {
throw new Error('This should not get called');
});
assert.isTrue(issuesManager.hasEventListeners(IssuesManager.IssuesManager.Events.ISSUE_ADDED));
assert.isNull(issue);
issueResolver.clear();
});
it('should resolve a previously unknown issue when it becomes available', async () => {
const mockIssuesManager = new MockIssuesManager([]);
const issuesManager = mockIssuesManager as unknown as IssuesManager.IssuesManager.IssuesManager;
const issueResolver = new IssuesManager.IssueResolver.IssueResolver(issuesManager);
const waitForCall = new Promise<IssuesManager.Issue.Issue>(resolve => {
const issue = issueResolver.tryGet(issueId1, resolve);
assert.isNull(issue);
});
assert.isTrue(issuesManager.hasEventListeners(IssuesManager.IssuesManager.Events.ISSUE_ADDED));
const mockIssue = StubIssue.createFromIssueId(issueId1);
mockIssuesManager.addIssue(mockIssue);
const issue = await waitForCall;
assert.isFalse(issuesManager.hasEventListeners(IssuesManager.IssuesManager.Events.ISSUE_ADDED));
assert.strictEqual(issue, mockIssue);
});
});
describe('waitFor', () => {
it('should resolve an existing issue', async () => {
const mockIssue = StubIssue.createFromIssueId(issueId1);
const issuesManager = new MockIssuesManager([mockIssue]) as unknown as IssuesManager.IssuesManager.IssuesManager;
const issueResolver = new IssuesManager.IssueResolver.IssueResolver(issuesManager);
const issue = await issueResolver.waitFor(issueId1);
assert.isFalse(issuesManager.hasEventListeners(IssuesManager.IssuesManager.Events.ISSUE_ADDED));
assert.strictEqual(issue, mockIssue);
});
it('should reject the promise after `clear` has been called', async () => {
const issuesManager = new MockIssuesManager([]) as unknown as IssuesManager.IssuesManager.IssuesManager;
const issueResolver = new IssuesManager.IssueResolver.IssueResolver(issuesManager);
const issue = issueResolver.waitFor(issueId1);
assert.isTrue(issuesManager.hasEventListeners(IssuesManager.IssuesManager.Events.ISSUE_ADDED));
issueResolver.clear();
assert.isFalse(issuesManager.hasEventListeners(IssuesManager.IssuesManager.Events.ISSUE_ADDED));
try {
await issue;
} catch {
return;
}
assert.fail('Expected `await issue` to throw.');
});
it('should resolve a previously unknown issue when it becomes available', async () => {
const mockIssuesManager = new MockIssuesManager([]);
const issuesManager = mockIssuesManager as unknown as IssuesManager.IssuesManager.IssuesManager;
const issueResolver = new IssuesManager.IssueResolver.IssueResolver(issuesManager);
const issuePromise = issueResolver.waitFor(issueId1);
assert.isTrue(issuesManager.hasEventListeners(IssuesManager.IssuesManager.Events.ISSUE_ADDED));
const mockIssue = StubIssue.createFromIssueId(issueId1);
mockIssuesManager.addIssue(mockIssue);
const issue = await issuePromise;
assert.isFalse(issuesManager.hasEventListeners(IssuesManager.IssuesManager.Events.ISSUE_ADDED));
assert.strictEqual(issue, mockIssue);
});
});
});