[test] Add and use a canonical helper to activate primary page

Bug: none
Change-Id: I1fe2b1403ab85a85342e50d2801d86e5e64c8dce
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/5534703
Commit-Queue: Danil Somsikov <dsv@chromium.org>
Commit-Queue: Wolfgang Beyer <wolfi@chromium.org>
Reviewed-by: Wolfgang Beyer <wolfi@chromium.org>
Auto-Submit: Danil Somsikov <dsv@chromium.org>
This commit is contained in:
Danil Somsikov
2024-05-13 14:07:07 +00:00
committed by Devtools-frontend LUCI CQ
parent 8223c7d6b3
commit ebe01d5fff
6 changed files with 25 additions and 70 deletions
+6 -16
View File
@@ -5,6 +5,7 @@
import * as Protocol from '../../generated/protocol.js';
import {createTarget} from '../../testing/EnvironmentHelpers.js';
import {describeWithMockConnection} from '../../testing/MockConnection.js';
import {activate, getMainFrame, navigate} from '../../testing/ResourceTreeHelpers.js';
import type * as Platform from '../platform/platform.js';
import * as SDK from './sdk.js';
@@ -51,8 +52,8 @@ describeWithMockConnection('CSSModel', () => {
});
describe('on primary page change', () => {
let target: SDK.Target.Target;
let cssModel: SDK.CSSModel.CSSModel|null;
let resourceTreeModel: SDK.ResourceTreeModel.ResourceTreeModel|null;
const header: Protocol.CSS.CSSStyleSheetHeader = {
styleSheetId: 'stylesheet' as Protocol.CSS.StyleSheetId,
frameId: 'frame' as Protocol.Page.FrameId,
@@ -70,30 +71,21 @@ describeWithMockConnection('CSSModel', () => {
endLine: 0,
endColumn: 0,
};
const frame = {
url: 'http://example.com/',
resourceTreeModel: () => resourceTreeModel,
backForwardCacheDetails: {explanations: []},
} as unknown as SDK.ResourceTreeModel.ResourceTreeFrame;
beforeEach(() => {
const target = createTarget();
resourceTreeModel = target.model(SDK.ResourceTreeModel.ResourceTreeModel);
target = createTarget();
cssModel = target.model(SDK.CSSModel.CSSModel);
});
it('resets on navigation', () => {
assert.exists(cssModel);
assert.exists(resourceTreeModel);
cssModel.styleSheetAdded(header);
let styleSheetIds =
cssModel.getStyleSheetIdsForURL('http://example.com/styles.css' as Platform.DevToolsPath.UrlString);
assert.deepEqual(styleSheetIds, ['stylesheet']);
resourceTreeModel.dispatchEventToListeners(
SDK.ResourceTreeModel.Events.PrimaryPageChanged,
{frame, type: SDK.ResourceTreeModel.PrimaryPageChangeType.Navigation});
navigate(getMainFrame(target));
styleSheetIds =
cssModel.getStyleSheetIdsForURL('http://example.com/styles.css' as Platform.DevToolsPath.UrlString);
assert.deepEqual(styleSheetIds, []);
@@ -101,16 +93,14 @@ describeWithMockConnection('CSSModel', () => {
it('does not reset on prerender activation', () => {
assert.exists(cssModel);
assert.exists(resourceTreeModel);
getMainFrame(target);
cssModel.styleSheetAdded(header);
let styleSheetIds =
cssModel.getStyleSheetIdsForURL('http://example.com/styles.css' as Platform.DevToolsPath.UrlString);
assert.deepEqual(styleSheetIds, ['stylesheet']);
resourceTreeModel.dispatchEventToListeners(
SDK.ResourceTreeModel.Events.PrimaryPageChanged,
{frame, type: SDK.ResourceTreeModel.PrimaryPageChangeType.Activation});
activate(target);
styleSheetIds =
cssModel.getStyleSheetIdsForURL('http://example.com/styles.css' as Platform.DevToolsPath.UrlString);
assert.deepEqual(styleSheetIds, ['stylesheet']);
@@ -6,7 +6,7 @@ import * as SDK from '../../core/sdk/sdk.js';
import * as Protocol from '../../generated/protocol.js';
import {createFakeSetting, createTarget} from '../../testing/EnvironmentHelpers.js';
import {describeWithMockConnection, dispatchEvent} from '../../testing/MockConnection.js';
import {getMainFrame, navigate} from '../../testing/ResourceTreeHelpers.js';
import {activate, getMainFrame, navigate} from '../../testing/ResourceTreeHelpers.js';
import {
mkInspectorCspIssue,
StubIssue,
@@ -82,15 +82,8 @@ describeWithMockConnection('IssuesManager', () => {
it('keeps issues of prerendered page upon activation', () => {
const {issuesManager, prerenderTarget} = assertOutOfScopeIssuesAreFiltered();
const resourceTreeModel = prerenderTarget.model(SDK.ResourceTreeModel.ResourceTreeModel);
assert.exists(resourceTreeModel);
const frame = {url: 'http://example.com/', resourceTreeModel: () => resourceTreeModel} as
SDK.ResourceTreeModel.ResourceTreeFrame;
SDK.TargetManager.TargetManager.instance().setScopeTarget(prerenderTarget);
resourceTreeModel.dispatchEventToListeners(
SDK.ResourceTreeModel.Events.PrimaryPageChanged,
{frame, type: SDK.ResourceTreeModel.PrimaryPageChangeType.Activation});
activate(prerenderTarget);
assert.deepStrictEqual(Array.from(issuesManager.issues()).map(getBlockedUrl), ['url2']);
});
+2 -12
View File
@@ -8,7 +8,7 @@ import * as SDK from '../../core/sdk/sdk.js';
import * as Protocol from '../../generated/protocol.js';
import {createTarget} from '../../testing/EnvironmentHelpers.js';
import {describeWithMockConnection} from '../../testing/MockConnection.js';
import {getMainFrame, LOADER_ID, navigate} from '../../testing/ResourceTreeHelpers.js';
import {activate, getMainFrame, LOADER_ID, navigate} from '../../testing/ResourceTreeHelpers.js';
import * as Logs from '../logs/logs.js';
function url(input: string): Platform.DevToolsPath.UrlString {
@@ -316,7 +316,6 @@ describeWithMockConnection('NetworkLog', () => {
describe('on primary page changed', () => {
let networkLog: Logs.NetworkLog.NetworkLog;
let target: SDK.Target.Target;
let frame: SDK.ResourceTreeModel.ResourceTreeFrame;
beforeEach(() => {
Common.Settings.Settings.instance().moduleSetting('network-log.preserve-log').set(false);
@@ -333,13 +332,6 @@ describeWithMockConnection('NetworkLog', () => {
Protocol.Network.RequestWillBeSentEvent;
networkDispatcher.requestWillBeSent(requestWillBeSentEvent2);
assert.strictEqual(networkLog.requests().length, 2);
frame = {
url: 'http://example.com/',
backForwardCacheDetails: {},
unreachableUrl: () => Platform.DevToolsPath.EmptyUrlString,
resourceTreeModel: () => target.model(SDK.ResourceTreeModel.ResourceTreeModel)!,
} as SDK.ResourceTreeModel.ResourceTreeFrame;
});
it('discards requests with mismatched loaderId on navigation', () => {
@@ -348,9 +340,7 @@ describeWithMockConnection('NetworkLog', () => {
});
it('does not discard requests on prerender activation', () => {
target.model(SDK.ResourceTreeModel.ResourceTreeModel)!.dispatchEventToListeners(
SDK.ResourceTreeModel.Events.PrimaryPageChanged,
{frame, type: SDK.ResourceTreeModel.PrimaryPageChangeType.Activation});
activate(target);
assert.deepEqual(networkLog.requests().map(request => request.requestId()), ['mockId1', 'mockId2']);
});
});
+3 -21
View File
@@ -8,7 +8,7 @@ import * as Bindings from '../../models/bindings/bindings.js';
import * as Workspace from '../../models/workspace/workspace.js';
import {createTarget, registerNoopActions} from '../../testing/EnvironmentHelpers.js';
import {describeWithMockConnection} from '../../testing/MockConnection.js';
import {getMainFrame, navigate} from '../../testing/ResourceTreeHelpers.js';
import {activate, getMainFrame, navigate} from '../../testing/ResourceTreeHelpers.js';
import * as Coordinator from '../../ui/components/render_coordinator/render_coordinator.js';
import * as Coverage from './coverage.js';
@@ -157,19 +157,7 @@ describeWithMockConnection('CoverageView', () => {
// Create 2nd target for the prerendered frame.
const {startSpy: startSpy2, stopSpy: stopSpy2, target: target2} = setupTargetAndModels();
let frame = {
url: 'http://www.example.com/',
displayName: () => 'frameName',
parentFrame: () => null,
resourceTreeModel: () => target2.model(SDK.ResourceTreeModel.ResourceTreeModel)!,
backForwardCacheDetails: {restoredFromCache: false},
id: 'myFrameId',
childFrames: [],
} as unknown as SDK.ResourceTreeModel.ResourceTreeFrame;
const resourceTreeModel = target2.model(SDK.ResourceTreeModel.ResourceTreeModel)!;
resourceTreeModel.dispatchEventToListeners(
SDK.ResourceTreeModel.Events.PrimaryPageChanged,
{frame, type: SDK.ResourceTreeModel.PrimaryPageChangeType.Activation});
activate(target2);
await coordinator.done({waitForWork: true});
assert.isFalse(isShowingLandingPage(view));
assert.isFalse(isShowingResults(view));
@@ -180,13 +168,7 @@ describeWithMockConnection('CoverageView', () => {
assert.isTrue(startSpy2.calledOnce);
assert.isTrue(stopSpy2.notCalled);
frame = {
...frame,
url: 'http://www.example.com/page',
} as unknown as SDK.ResourceTreeModel.ResourceTreeFrame;
resourceTreeModel.dispatchEventToListeners(
SDK.ResourceTreeModel.Events.PrimaryPageChanged,
{frame, type: SDK.ResourceTreeModel.PrimaryPageChangeType.Navigation});
navigate(getMainFrame(target2), {url: 'http://www.example.com/page'});
assert.isFalse(isShowingLandingPage(view));
assert.isTrue(isShowingResults(view));
assert.isFalse(isShowingPrerenderPage(view));
@@ -3,7 +3,7 @@
// found in the LICENSE file.
import * as Common from '../../core/common/common.js';
import * as Host from '../../core/host/host.js';
import * as Platform from '../../core/platform/platform.js';
import type * as Platform from '../../core/platform/platform.js';
import * as Root from '../../core/root/root.js';
import * as SDK from '../../core/sdk/sdk.js';
import * as Protocol from '../../generated/protocol.js';
@@ -17,6 +17,7 @@ import {
import {createTarget} from '../../testing/EnvironmentHelpers.js';
import {stubFileManager} from '../../testing/FileManagerHelpers.js';
import {describeWithMockConnection, dispatchEvent} from '../../testing/MockConnection.js';
import {activate} from '../../testing/ResourceTreeHelpers.js';
import * as Coordinator from '../../ui/components/render_coordinator/render_coordinator.js';
import * as UI from '../../ui/legacy/legacy.js';
@@ -335,21 +336,11 @@ describeWithMockConnection('NetworkLogView', () => {
assert.deepEqual(
rootNode.children.map(n => (n as Network.NetworkDataGridNode.NetworkNode).request()), [request1, request2]);
const resourceTreeModel = target.model(SDK.ResourceTreeModel.ResourceTreeModel);
assert.exists(resourceTreeModel);
const frame = {
url: 'http://example.com/',
unreachableUrl: () => Platform.DevToolsPath.EmptyUrlString,
resourceTreeModel: () => resourceTreeModel,
} as SDK.ResourceTreeModel.ResourceTreeFrame;
resourceTreeModel.dispatchEventToListeners(
SDK.ResourceTreeModel.Events.PrimaryPageChanged,
{frame, type: SDK.ResourceTreeModel.PrimaryPageChangeType.Activation});
activate(target);
await coordinator.done();
assert.deepEqual(
rootNode.children.map(n => (n as Network.NetworkDataGridNode.NetworkNode).request()),
[request1, request2, request3]);
networkLogView.detach();
});
+9
View File
@@ -87,3 +87,12 @@ export function navigate(
const effectivePayload = getEffectivePayload(frame.id, FRAME, framePayload);
frame.resourceTreeModel().frameNavigated(effectivePayload, type);
}
export function activate(target: SDK.Target.Target): void {
const resourceTreeModel = target.model(SDK.ResourceTreeModel.ResourceTreeModel)!;
const frame = getMainFrame(target);
sinon.stub(frame, 'isPrimaryFrame').returns(true);
resourceTreeModel.dispatchEventToListeners(
SDK.ResourceTreeModel.Events.PrimaryPageChanged,
{frame, type: SDK.ResourceTreeModel.PrimaryPageChangeType.Activation});
}