Skip to content

Commit 346d37f

Browse files
added tests
1 parent 411e7f2 commit 346d37f

2 files changed

Lines changed: 88 additions & 0 deletions

File tree

src/views/component-viewer/__test__/component-viewer-parts.factory.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export function treeDataProviderFactory(): jest.Mocked<ComponentViewerTreeDataPr
3333
getParent: jest.fn(),
3434
getAllCollapsibleElements: jest.fn().mockReturnValue([]),
3535
expandAllElements: jest.fn(),
36+
collapseAllElements: jest.fn(),
3637
setRoots: jest.fn(),
3738
clear: jest.fn(),
3839
refresh: jest.fn().mockImplementation(() => eventEmitter.fire()),

src/views/component-viewer/test/unit/component-viewer-base.test.ts

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -883,4 +883,91 @@ describe('ComponentViewerBase', () => {
883883
await expect(handleExpandAll()).resolves.toBeUndefined();
884884
expect(provider.expandAllElements).toHaveBeenCalled();
885885
});
886+
887+
it('collapseAll command collapses all tree elements', async () => {
888+
await controller.activate(tracker as unknown as GDBTargetDebugTracker);
889+
const registerCommandMock = asMockedFunction(vscode.commands.registerCommand);
890+
const collapseHandler = registerCommandMock.mock.calls.find(
891+
([command]) => command === 'vscode-cmsis-debugger.testClass.collapseAll'
892+
)?.[1] as (() => void) | undefined;
893+
expect(collapseHandler).toBeDefined();
894+
collapseHandler?.();
895+
expect(provider.collapseAllElements).toHaveBeenCalled();
896+
});
897+
898+
it('webviewProvider onToggle callback calls toggleById on the tree data provider', async () => {
899+
await controller.activate(tracker as unknown as GDBTargetDebugTracker);
900+
const webviewProvider = (controller as unknown as { _webviewProvider: { onToggle: ((id: string, expanded: boolean) => void) | undefined } })._webviewProvider;
901+
expect(webviewProvider).toBeDefined();
902+
const toggleSpy = jest.spyOn(provider, 'toggleById');
903+
webviewProvider!.onToggle?.('node-1', true);
904+
expect(toggleSpy).toHaveBeenCalledWith('node-1', true);
905+
});
906+
907+
it('webviewProvider onLock callback delegates to handleLockInstanceById', async () => {
908+
await controller.activate(tracker as unknown as GDBTargetDebugTracker);
909+
const webviewProvider = (controller as unknown as { _webviewProvider: { onLock: ((id: string) => void) | undefined } })._webviewProvider;
910+
expect(webviewProvider).toBeDefined();
911+
const root = makeGuiNode('my-node');
912+
asMockedFunction(provider.getChildren as () => ScvdGuiInterface[]).mockReturnValue([root]);
913+
const lockSpy = jest.spyOn(controller as unknown as { handleLockInstance: (node: ScvdGuiInterface) => void }, 'handleLockInstance');
914+
webviewProvider!.onLock?.('my-node');
915+
expect(lockSpy).toHaveBeenCalledWith(root);
916+
});
917+
918+
it('handleOnWillStartSession registers a refresh callback on the session timer', async () => {
919+
await controller.activate(tracker as unknown as GDBTargetDebugTracker);
920+
const session = debugSessionFactory('s1', []);
921+
await tracker.callbacks.willStart?.(session);
922+
expect(session.refreshTimer.onRefresh).toHaveBeenCalled();
923+
});
924+
925+
it('setSvdPath is called on instance when svdPath is provided', async () => {
926+
const session = debugSessionFactory('s1', ['a.scvd'], 'stopped');
927+
// Set definitionPath on the debug session configuration
928+
(session.session as unknown as { configuration: { definitionPath: string } }).configuration = { definitionPath: '/path/to/device.svd' };
929+
(controller as unknown as { _activeSession?: typeof session })._activeSession = session;
930+
931+
const setSvdPathSpy = jest.fn();
932+
instanceFactory.mockImplementationOnce(() => ({
933+
readModel: jest.fn().mockResolvedValue(undefined),
934+
update: jest.fn().mockResolvedValue(undefined),
935+
getGuiTree: jest.fn<ScvdGuiInterface[] | undefined, []>(() => []),
936+
updateActiveSession: jest.fn(),
937+
cancelExecution: jest.fn(),
938+
setSvdPath: setSvdPathSpy,
939+
}));
940+
941+
const readScvdFiles = getReadScvdFiles(controller);
942+
await readScvdFiles(tracker, session);
943+
944+
expect(setSvdPathSpy).toHaveBeenCalledWith('/path/to/device.svd');
945+
});
946+
947+
it('handleOnStackTrace throws when session id does not match active session', async () => {
948+
const sessionA = debugSessionFactory('s1', [], 'stopped');
949+
const sessionB = debugSessionFactory('s2', [], 'stopped');
950+
(controller as unknown as { _activeSession?: typeof sessionA })._activeSession = sessionA;
951+
const handleOnStackTrace = (controller as unknown as { handleOnStackTrace: (s: typeof sessionA) => Promise<void> }).handleOnStackTrace.bind(controller);
952+
await expect(handleOnStackTrace(sessionB)).rejects.toThrow('Received stack trace event');
953+
});
954+
955+
it('handleOnStackItemChanged throws when session id does not match active session', async () => {
956+
const sessionA = debugSessionFactory('s1', [], 'stopped');
957+
const sessionB = debugSessionFactory('s2', [], 'stopped');
958+
(controller as unknown as { _activeSession?: typeof sessionA })._activeSession = sessionA;
959+
const handleOnStackItemChanged = (controller as unknown as { handleOnStackItemChanged: (s: typeof sessionA) => Promise<void> }).handleOnStackItemChanged.bind(controller);
960+
await expect(handleOnStackItemChanged(sessionB)).rejects.toThrow('Received stack item changed event');
961+
});
962+
963+
it('onDidChangeActiveStackItem tracker callback delegates to handleOnStackItemChanged', async () => {
964+
await controller.activate(tracker as unknown as GDBTargetDebugTracker);
965+
const sessionA = debugSessionFactory('s1', [], 'stopped');
966+
(controller as unknown as { _activeSession?: typeof sessionA })._activeSession = sessionA;
967+
const scheduleSpy = jest
968+
.spyOn(controller as unknown as { schedulePendingUpdate: (reason: UpdateReason) => void }, 'schedulePendingUpdate')
969+
.mockImplementation(() => undefined);
970+
await tracker.callbacks.activeStackItem?.({ session: sessionA });
971+
expect(scheduleSpy).toHaveBeenCalledWith('stackItemChanged');
972+
});
886973
});

0 commit comments

Comments
 (0)