Skip to content

Commit 6cf2d2c

Browse files
OrKoNDevtools-frontend LUCI CQ
authored andcommitted
[cleanup] parametrize context change tests
We have new types on contexts in progress and the current test can be parametrized to ensure the same flows are tested for all contexts. Bug: none Change-Id: Ia29d13ad0a895c8106fa3e2bf41e5bdcea59e756 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6268859 Reviewed-by: Benedikt Meurer <[email protected]> Auto-Submit: Alex Rudenko <[email protected]> Commit-Queue: Alex Rudenko <[email protected]> Commit-Queue: Benedikt Meurer <[email protected]>
1 parent 65e8de0 commit 6cf2d2c

File tree

1 file changed

+80
-160
lines changed

1 file changed

+80
-160
lines changed

front_end/panels/ai_assistance/AiAssistancePanel.test.ts

Lines changed: 80 additions & 160 deletions
Original file line numberDiff line numberDiff line change
@@ -201,188 +201,108 @@ describeWithMockConnection('AI Assistance Panel', () => {
201201
});
202202
});
203203

204-
describe('flavor change listeners', () => {
205-
describe('SDK.DOMModel.DOMNode flavor changes for selected element', () => {
206-
it('should set the selected element when the widget is shown', async () => {
207-
const {view, panel} = await createAiAssistancePanel();
208-
209-
const node = sinon.createStubInstance(SDK.DOMModel.DOMNode, {
210-
nodeType: Node.ELEMENT_NODE,
211-
});
212-
UI.Context.Context.instance().setFlavor(SDK.DOMModel.DOMNode, node);
213-
panel.handleAction('freestyler.elements-floating-button');
214-
215-
sinon.assert.calledWith(view.lastCall, sinon.match({
216-
selectedContext: new AiAssistance.NodeContext(node),
217-
}));
218-
});
219-
220-
it('should update the selected element when the changed DOMNode flavor is an ELEMENT_NODE', async () => {
221-
const {view, panel} = await createAiAssistancePanel();
222-
panel.handleAction('freestyler.elements-floating-button');
223-
sinon.assert.calledWith(view.lastCall, sinon.match({
224-
selectedContext: null,
225-
}));
226-
227-
const node = sinon.createStubInstance(SDK.DOMModel.DOMNode, {
228-
nodeType: Node.ELEMENT_NODE,
229-
});
230-
UI.Context.Context.instance().setFlavor(SDK.DOMModel.DOMNode, node);
231-
232-
sinon.assert.calledWith(view.lastCall, sinon.match({
233-
selectedContext: new AiAssistance.NodeContext(node),
234-
}));
235-
});
236-
237-
it('should set selected element to null when the change DOMNode flavor is not an ELEMENT_NODE', async () => {
238-
const {view, panel} = await createAiAssistancePanel();
239-
panel.handleAction('freestyler.elements-floating-button');
240-
sinon.assert.calledWith(view.lastCall, sinon.match({
241-
selectedContext: null,
242-
}));
243-
244-
const node = sinon.createStubInstance(SDK.DOMModel.DOMNode, {
245-
nodeType: Node.COMMENT_NODE,
246-
});
247-
UI.Context.Context.instance().setFlavor(SDK.DOMModel.DOMNode, node);
248-
249-
sinon.assert.calledWith(view.lastCall, sinon.match({
250-
selectedContext: null,
251-
}));
252-
});
253-
254-
it('should not handle DOMNode flavor changes if the widget is not shown', async () => {
255-
const {view, panel} = await createAiAssistancePanel();
256-
sinon.assert.calledWith(view.lastCall, sinon.match({
257-
selectedContext: null,
258-
}));
259-
const callCount = view.callCount;
260-
panel.hideWidget();
261-
const node = sinon.createStubInstance(SDK.DOMModel.DOMNode, {
262-
nodeType: Node.ELEMENT_NODE,
263-
});
264-
UI.Context.Context.instance().setFlavor(SDK.DOMModel.DOMNode, node);
265-
assert.strictEqual(view.callCount, callCount);
266-
});
267-
});
268-
269-
describe('SDK.NetworkRequest.NetworkRequest flavor changes for selected network request', () => {
270-
it('should set the selected network request when the widget is shown', async () => {
271-
const networkRequest = sinon.createStubInstance(SDK.NetworkRequest.NetworkRequest);
272-
UI.Context.Context.instance().setFlavor(SDK.NetworkRequest.NetworkRequest, networkRequest);
273-
const {view, panel} = await createAiAssistancePanel();
274-
panel.handleAction('drjones.network-floating-button');
204+
describe('Contexts', () => {
205+
const tests = [
206+
{
207+
flavor: SDK.DOMModel.DOMNode,
208+
createContext: () => {
209+
const node = sinon.createStubInstance(SDK.DOMModel.DOMNode, {
210+
nodeType: Node.ELEMENT_NODE,
211+
});
212+
return new AiAssistance.NodeContext(node);
213+
},
214+
action: 'freestyler.elements-floating-button',
215+
},
216+
{
217+
flavor: SDK.NetworkRequest.NetworkRequest,
218+
createContext: () => {
219+
return new AiAssistance.RequestContext(sinon.createStubInstance(SDK.NetworkRequest.NetworkRequest));
220+
},
221+
action: 'drjones.network-floating-button'
222+
},
223+
{
224+
flavor: TimelineUtils.AICallTree.AICallTree,
225+
createContext: () => {
226+
return new AiAssistance.CallTreeContext(sinon.createStubInstance(TimelineUtils.AICallTree.AICallTree));
227+
},
228+
action: 'drjones.performance-panel-context'
229+
},
230+
{
231+
flavor: Workspace.UISourceCode.UISourceCode,
232+
createContext: () => {
233+
return new AiAssistance.FileContext(sinon.createStubInstance(Workspace.UISourceCode.UISourceCode));
234+
},
235+
action: 'drjones.sources-panel-context',
236+
}
237+
];
238+
239+
for (const test of tests) {
240+
it(`should use the selected ${test.flavor.name} context after the widget is shown`, async () => {
241+
const {view, panel, waitForRendering} = await createAiAssistancePanel();
242+
const context = test.createContext();
243+
const contextItem = context.getItem();
244+
if (!contextItem) {
245+
throw new Error('Context is not available');
246+
}
247+
UI.Context.Context.instance().setFlavor(test.flavor, contextItem);
248+
panel.handleAction(test.action);
249+
await waitForRendering();
275250
sinon.assert.calledWith(view.lastCall, sinon.match({
276-
selectedContext: new AiAssistance.RequestContext(networkRequest),
251+
selectedContext: context,
277252
}));
278253
});
279254

280-
it('should set selected network request when the NetworkRequest flavor changes', async () => {
281-
const {view, panel} = await createAiAssistancePanel();
282-
panel.handleAction('drjones.network-floating-button');
255+
it(`should update the selected ${test.flavor.name} context whenever flavor changes`, async () => {
256+
const {view, panel, waitForRendering} = await createAiAssistancePanel();
257+
panel.handleAction(test.action);
283258
sinon.assert.calledWith(view.lastCall, sinon.match({
284259
selectedContext: null,
285260
}));
286-
287-
const networkRequest = sinon.createStubInstance(SDK.NetworkRequest.NetworkRequest);
288-
UI.Context.Context.instance().setFlavor(SDK.NetworkRequest.NetworkRequest, networkRequest);
289-
sinon.assert.calledWith(view.lastCall, sinon.match({
290-
selectedContext: new AiAssistance.RequestContext(networkRequest),
291-
}));
292-
});
293-
294-
it('should not handle NetworkRequest flavor changes if the widget is not shown', async () => {
295-
const {view, panel} = await createAiAssistancePanel();
261+
const context = test.createContext();
262+
const contextItem = context.getItem();
263+
if (!contextItem) {
264+
throw new Error('Context is not available');
265+
}
266+
UI.Context.Context.instance().setFlavor(test.flavor, contextItem);
267+
await waitForRendering();
296268
sinon.assert.calledWith(view.lastCall, sinon.match({
297-
selectedContext: null,
269+
selectedContext: context,
298270
}));
299-
const callCount = view.callCount;
300-
panel.hideWidget();
301-
const networkRequest = sinon.createStubInstance(SDK.NetworkRequest.NetworkRequest);
302-
UI.Context.Context.instance().setFlavor(SDK.NetworkRequest.NetworkRequest, networkRequest);
303-
assert.strictEqual(view.callCount, callCount);
304271
});
305-
});
306-
307-
describe('TimelineUtils.AICallTree.AICallTree flavor changes for selected call tree', () => {
308-
it('should set the selected call tree when the widget is shown', async () => {
309-
const {view, panel} = await createAiAssistancePanel();
310-
311-
const selectedAiCallTree = {};
312-
UI.Context.Context.instance().setFlavor(TimelineUtils.AICallTree.AICallTree, selectedAiCallTree);
313-
panel.handleAction('drjones.performance-panel-context');
314272

273+
it(`should ignore ${test.flavor.name} flavor change after the panel was hidden`, async () => {
274+
const {view, panel, waitForRendering} = await createAiAssistancePanel();
315275
sinon.assert.calledWith(view.lastCall, sinon.match({
316-
selectedContext: new AiAssistance.CallTreeContext(selectedAiCallTree as TimelineUtils.AICallTree.AICallTree),
317-
}));
318-
});
319-
320-
it('should set selected call tree when the AICallTree flavor changes', async () => {
321-
const {view, panel} = await createAiAssistancePanel();
322-
323-
panel.handleAction('drjones.performance-panel-context');
324-
sinon.assert.calledWith(view, sinon.match({
325276
selectedContext: null,
326277
}));
327-
328-
const selectedAiCallTree = {};
329-
UI.Context.Context.instance().setFlavor(TimelineUtils.AICallTree.AICallTree, selectedAiCallTree);
330-
331-
sinon.assert.calledWith(view.lastCall, sinon.match({
332-
selectedContext: new AiAssistance.CallTreeContext(selectedAiCallTree as TimelineUtils.AICallTree.AICallTree),
333-
}));
334-
});
335-
336-
it('should not handle AICallTree flavor changes if the widget is not shown', async () => {
337-
const {view, panel} = await createAiAssistancePanel();
338278
const callCount = view.callCount;
339279
panel.hideWidget();
340-
341-
const selectedAiCallTree = {};
342-
UI.Context.Context.instance().setFlavor(TimelineUtils.AICallTree.AICallTree, selectedAiCallTree);
343-
280+
const context = test.createContext();
281+
const contextItem = context.getItem();
282+
if (!contextItem) {
283+
throw new Error('Context is not available');
284+
}
285+
UI.Context.Context.instance().setFlavor(test.flavor, contextItem);
286+
await waitForRendering();
344287
assert.strictEqual(view.callCount, callCount);
345288
});
346-
});
347-
348-
describe('Workspace.UISourceCode.UISourceCode flavor changes for selected file', () => {
349-
it('should set selected file when the widget is shown', async () => {
350-
const {view, panel} = await createAiAssistancePanel();
351-
panel.handleAction('drjones.sources-panel-context');
352-
353-
const uiSourceCode = sinon.createStubInstance(Workspace.UISourceCode.UISourceCode);
354-
UI.Context.Context.instance().setFlavor(Workspace.UISourceCode.UISourceCode, uiSourceCode);
355-
356-
sinon.assert.calledWith(view.lastCall, sinon.match({
357-
selectedContext: new AiAssistance.FileContext(uiSourceCode),
358-
}));
359-
});
360-
361-
it('should set selected file when the UISourceCode flavor changes', async () => {
362-
const {view, panel} = await createAiAssistancePanel();
363-
panel.handleAction('drjones.sources-panel-context');
364-
sinon.assert.calledWith(view, sinon.match({
365-
selectedContext: null,
366-
}));
289+
}
367290

368-
const uiSourceCode = sinon.createStubInstance(Workspace.UISourceCode.UISourceCode);
369-
UI.Context.Context.instance().setFlavor(Workspace.UISourceCode.UISourceCode, uiSourceCode);
291+
it('should set selected context to null when the change DOMNode flavor is not an ELEMENT_NODE', async () => {
292+
const {view, panel} = await createAiAssistancePanel();
293+
panel.handleAction('freestyler.elements-floating-button');
294+
sinon.assert.calledWith(view.lastCall, sinon.match({
295+
selectedContext: null,
296+
}));
370297

371-
sinon.assert.calledWith(view.lastCall, sinon.match({
372-
selectedContext: new AiAssistance.FileContext(uiSourceCode),
373-
}));
298+
const node = sinon.createStubInstance(SDK.DOMModel.DOMNode, {
299+
nodeType: Node.COMMENT_NODE,
374300
});
301+
UI.Context.Context.instance().setFlavor(SDK.DOMModel.DOMNode, node);
375302

376-
it('should not handle UISourceCode flavor changes if the widget is not shown', async () => {
377-
const {view, panel} = await createAiAssistancePanel();
378-
const callCount = view.callCount;
379-
panel.hideWidget();
380-
381-
const uiSourceCode = sinon.createStubInstance(Workspace.UISourceCode.UISourceCode);
382-
UI.Context.Context.instance().setFlavor(Workspace.UISourceCode.UISourceCode, uiSourceCode);
383-
384-
assert.strictEqual(view.callCount, callCount);
385-
});
303+
sinon.assert.calledWith(view.lastCall, sinon.match({
304+
selectedContext: null,
305+
}));
386306
});
387307
});
388308

0 commit comments

Comments
 (0)