Notebooks: Add smoke test (#13196)

* add new smoketest

* change repro

* rename methods

* add waitforallresults method

* pr comment
This commit is contained in:
Lucy Zhang
2020-11-10 17:31:17 -08:00
committed by GitHub
parent 8c6a966bb9
commit b397150264
3 changed files with 61 additions and 4 deletions

View File

@@ -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>

View File

@@ -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 {

View File

@@ -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();
});
});
}