blob: 4db8eab974cd2950333f401f2f175b1e64f3834b [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import type * as SDK from '../../core/sdk/sdk.js';
import type * as Protocol from '../../generated/protocol.js';
import {createNetworkRequest, MockNetworkLog} from '../../testing/MockNetworkLog.js';
import * as Logs from '../logs/logs.js';
describe('RequestResolver', () => {
const requestId1 = 'foo' as Protocol.Network.RequestId;
describe('tryGet', () => {
it('should resolve an existing request', () => {
const mockRequest = createNetworkRequest(requestId1);
const networkLog = new MockNetworkLog([mockRequest]) as unknown as Logs.NetworkLog.NetworkLog;
const requestResolver = new Logs.RequestResolver.RequestResolver(networkLog);
const request = requestResolver.tryGet(requestId1, () => {
throw new Error('This should not get called');
});
assert.isFalse(networkLog.hasEventListeners(Logs.NetworkLog.Events.RequestAdded));
assert.strictEqual(request, mockRequest);
});
it('should not resolve an unknown request', () => {
const networkLog = new MockNetworkLog([]) as unknown as Logs.NetworkLog.NetworkLog;
const requestResolver = new Logs.RequestResolver.RequestResolver(networkLog);
const request = requestResolver.tryGet(requestId1, () => {
throw new Error('This should not get called');
});
assert.isTrue(networkLog.hasEventListeners(Logs.NetworkLog.Events.RequestAdded));
assert.isNull(request);
requestResolver.clear();
});
it('should resolve a previously unknown request when it becomes available', async () => {
const mockNetworkLog = new MockNetworkLog([]);
const networkLog = mockNetworkLog as unknown as Logs.NetworkLog.NetworkLog;
const requestResolver = new Logs.RequestResolver.RequestResolver(networkLog);
const waitForCall = new Promise<SDK.NetworkRequest.NetworkRequest>(resolve => {
const request = requestResolver.tryGet(requestId1, resolve);
assert.isNull(request);
});
assert.isTrue(networkLog.hasEventListeners(Logs.NetworkLog.Events.RequestAdded));
const mockRequest = createNetworkRequest(requestId1);
mockNetworkLog.addRequest(mockRequest);
const request = await waitForCall;
assert.isFalse(networkLog.hasEventListeners(Logs.NetworkLog.Events.RequestAdded));
assert.strictEqual(request, mockRequest);
requestResolver.clear();
});
});
describe('waitFor', () => {
it('should resolve an existing request', async () => {
const mockRequest = createNetworkRequest(requestId1);
const networkLog = new MockNetworkLog([mockRequest]) as unknown as Logs.NetworkLog.NetworkLog;
const requestResolver = new Logs.RequestResolver.RequestResolver(networkLog);
const request = await requestResolver.waitFor(requestId1);
assert.isFalse(networkLog.hasEventListeners(Logs.NetworkLog.Events.RequestAdded));
assert.strictEqual(request, mockRequest);
});
it('should reject the promise after `clear` has been called', async () => {
const networkLog = new MockNetworkLog([]) as unknown as Logs.NetworkLog.NetworkLog;
const requestResolver = new Logs.RequestResolver.RequestResolver(networkLog);
const request = requestResolver.waitFor(requestId1);
assert.isTrue(networkLog.hasEventListeners(Logs.NetworkLog.Events.RequestAdded));
requestResolver.clear();
assert.isFalse(networkLog.hasEventListeners(Logs.NetworkLog.Events.RequestAdded));
try {
await request;
} catch {
return;
}
assert.fail('Expected `await request` to throw.');
});
it('should resolve a previously unknown request when it becomes available', async () => {
const mockNetworkLog = new MockNetworkLog([]);
const networkLog = mockNetworkLog as unknown as Logs.NetworkLog.NetworkLog;
const requestResolver = new Logs.RequestResolver.RequestResolver(networkLog);
const requestPromise = requestResolver.waitFor(requestId1);
assert.isTrue(networkLog.hasEventListeners(Logs.NetworkLog.Events.RequestAdded));
const mockRequest = createNetworkRequest(requestId1);
mockNetworkLog.addRequest(mockRequest);
const request = await requestPromise;
assert.isFalse(networkLog.hasEventListeners(Logs.NetworkLog.Events.RequestAdded));
assert.strictEqual(request, mockRequest);
});
});
});