mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Notebooks: Add smoke test (#13196)
* add new smoketest * change repro * rename methods * add waitforallresults method * pr comment
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
<div #container class="scrollable" style="flex: 1 1 auto; position: relative; outline: none" (click)="unselectActiveCell()" (scroll)="scrollHandler($event)">
|
||||
<loading-spinner [loading]="isLoading"></loading-spinner>
|
||||
<div *ngFor="let cell of cells">
|
||||
<div class="notebook-cell" (click)="selectCell(cell, $event)" [class.active]="cell.active">
|
||||
<div id="{{ cell.id }}" class="notebook-cell" (click)="selectCell(cell, $event)" [class.active]="cell.active">
|
||||
<cell-toolbar-component *ngIf="cell.active" [cellModel]="cell" [model]="model"></cell-toolbar-component>
|
||||
<code-cell-component *ngIf="cell.cellType === 'code'" [cellModel]="cell" [model]="model" [activeCellId]="activeCellId">
|
||||
</code-cell-component>
|
||||
|
||||
@@ -58,6 +58,12 @@ export class Notebook {
|
||||
await this.code.dispatchKeybinding(winOrCtrl + '+shift+F5');
|
||||
}
|
||||
|
||||
async clearResults(): Promise<void> {
|
||||
await this.code.waitAndClick('.notebookEditor');
|
||||
const clearResultsButton = '.editor-toolbar a[class="action-label codicon notebook-button icon-clear-results masked-icon"]';
|
||||
await this.code.waitAndClick(clearResultsButton);
|
||||
}
|
||||
|
||||
async waitForTypeInEditor(text: string) {
|
||||
const editor = '.notebook-cell.active .monaco-editor';
|
||||
await this.code.waitAndClick(editor);
|
||||
@@ -74,10 +80,45 @@ export class Notebook {
|
||||
return this.code.waitForTextContent(selector, undefined, c => accept(c.replace(/\u00a0/g, ' ')));
|
||||
}
|
||||
|
||||
async waitForResults(): Promise<void> {
|
||||
async waitForActiveCellResults(): Promise<void> {
|
||||
const outputComponent = '.notebook-cell.active .notebook-output';
|
||||
await this.code.waitForElement(outputComponent);
|
||||
}
|
||||
|
||||
async waitForResults(cellIds: string[]): Promise<void> {
|
||||
for (let i of cellIds) {
|
||||
await this.code.waitForElement(`div.notebook-cell[id="${i}"] .notebook-output`);
|
||||
}
|
||||
}
|
||||
|
||||
async waitForAllResults(): Promise<void> {
|
||||
let cellIds: string[] = [];
|
||||
await this.code.waitForElements('div.notebook-cell', false, result => {
|
||||
cellIds = result.map(cell => cell.attributes['id']);
|
||||
return true;
|
||||
});
|
||||
await this.waitForResults(cellIds);
|
||||
}
|
||||
|
||||
async waitForActiveCellResultsGone(): Promise<void> {
|
||||
const outputComponent = '.notebook-cell.active .notebook-output';
|
||||
await this.code.waitForElementGone(outputComponent);
|
||||
}
|
||||
|
||||
async waitForResultsGone(cellIds: string[]): Promise<void> {
|
||||
for (let i of cellIds) {
|
||||
await this.code.waitForElementGone(`div.notebook-cell[id="${i}"] .notebook-output`);
|
||||
}
|
||||
}
|
||||
|
||||
async waitForAllResultsGone(): Promise<void> {
|
||||
let cellIds: string[] = [];
|
||||
await this.code.waitForElements('div.notebook-cell', false, result => {
|
||||
cellIds = result.map(cell => cell.attributes['id']);
|
||||
return true;
|
||||
});
|
||||
await this.waitForResultsGone(cellIds);
|
||||
}
|
||||
}
|
||||
|
||||
export class NotebookToolbar {
|
||||
|
||||
@@ -8,7 +8,6 @@ import { Application } from '../../../../../automation';
|
||||
export function setup() {
|
||||
describe('Notebook', () => {
|
||||
|
||||
|
||||
it('can open new notebook, configure Python, and execute one cell', async function () {
|
||||
const app = this.app as Application;
|
||||
await app.workbench.sqlNotebook.newUntitledNotebook();
|
||||
@@ -21,8 +20,25 @@ export function setup() {
|
||||
await app.workbench.sqlNotebook.waitForKernel('Python 3');
|
||||
|
||||
await app.workbench.sqlNotebook.runActiveCell();
|
||||
await app.workbench.sqlNotebook.waitForResults();
|
||||
await app.workbench.sqlNotebook.waitForActiveCellResults();
|
||||
});
|
||||
|
||||
it('can open ipynb file, run all, and save notebook with outputs', async function () {
|
||||
const app = this.app as Application;
|
||||
await app.workbench.sqlNotebook.openFile('hello.ipynb');
|
||||
await app.workbench.sqlNotebook.waitForKernel('Python 3');
|
||||
|
||||
await app.workbench.sqlNotebook.clearResults();
|
||||
await app.workbench.sqlNotebook.waitForAllResultsGone();
|
||||
await app.workbench.sqlNotebook.runAllCells();
|
||||
await app.workbench.sqlNotebook.waitForAllResults();
|
||||
|
||||
await app.workbench.quickaccess.runCommand('workbench.action.files.save');
|
||||
await app.workbench.quickaccess.runCommand('workbench.action.closeActiveEditor');
|
||||
|
||||
await app.workbench.sqlNotebook.openFile('hello.ipynb');
|
||||
await app.workbench.sqlNotebook.waitForKernel('Python 3');
|
||||
await app.workbench.sqlNotebook.waitForAllResults();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user