Skip to content

Commit 434131a

Browse files
fix functional test for update metadata (#8887)
1 parent a8bd87e commit 434131a

File tree

4 files changed

+25
-6
lines changed

4 files changed

+25
-6
lines changed

src/client/datascience/interactive-ipynb/nativeEditor.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export class NativeEditor extends InteractiveBase implements INotebookEditor {
3939
private executedEvent: EventEmitter<INotebookEditor> = new EventEmitter<INotebookEditor>();
4040
private modifiedEvent: EventEmitter<INotebookEditor> = new EventEmitter<INotebookEditor>();
4141
private savedEvent: EventEmitter<INotebookEditor> = new EventEmitter<INotebookEditor>();
42+
private metadataUpdatedEvent: EventEmitter<INotebookEditor> = new EventEmitter<INotebookEditor>();
4243
private loadedPromise: Deferred<void> = createDeferred<void>();
4344
private _file: Uri = Uri.file('');
4445
private _dirty: boolean = false;
@@ -172,6 +173,10 @@ export class NativeEditor extends InteractiveBase implements INotebookEditor {
172173
return this.savedEvent.event;
173174
}
174175

176+
public get metadataUpdated(): Event<INotebookEditor> {
177+
return this.metadataUpdatedEvent.event;
178+
}
179+
175180
public get isDirty(): boolean {
176181
return this._dirty;
177182
}
@@ -284,7 +289,11 @@ export class NativeEditor extends InteractiveBase implements INotebookEditor {
284289
protected submitCode(code: string, file: string, line: number, id?: string, editor?: TextEditor, debug?: boolean): Promise<boolean> {
285290
// When code is executed, update the version number in the metadata.
286291
return super.submitCode(code, file, line, id, editor, debug).then((value) => {
287-
this.updateVersionInfoInNotebook().ignoreErrors();
292+
this.updateVersionInfoInNotebook().then(() => {
293+
this.metadataUpdatedEvent.fire(this);
294+
}).catch(ex => {
295+
traceError('Failed to update version info in notebook file metadata', ex);
296+
});
288297
return value;
289298
});
290299
}

src/client/datascience/jupyter/jupyterNotebook.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ export class JupyterNotebookBase implements INotebook {
146146
private _disposed: boolean = false;
147147
private _workingDirectory: string | undefined;
148148
private _loggers: INotebookExecutionLogger[] = [];
149-
private interpreter: PythonInterpreter | undefined;
149+
private interpreterPromise: Promise<PythonInterpreter | undefined>;
150150

151151
constructor(
152152
_liveShare: ILiveShareApi, // This is so the liveshare mixin works
@@ -167,7 +167,7 @@ export class JupyterNotebookBase implements INotebook {
167167
this._loggers = [...loggers];
168168
// Save our interpreter and don't change it. Later on when kernel changes
169169
// are possible, recompute it.
170-
this.interpreterService.getActiveInterpreter(resource).then(i => this.interpreter = i).ignoreErrors();
170+
this.interpreterPromise = this.interpreterService.getActiveInterpreter(resource);
171171
}
172172

173173
public get server(): INotebookServer {
@@ -468,7 +468,7 @@ export class JupyterNotebookBase implements INotebook {
468468
}
469469

470470
public async getMatchingInterpreter(): Promise<PythonInterpreter | undefined> {
471-
return this.interpreter;
471+
return this.interpreterPromise;
472472
}
473473

474474
public async getKernelSpec(): Promise<IJupyterKernelSpec | undefined> {

src/client/datascience/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@ export interface INotebookEditor extends IInteractiveBase {
281281
executed: Event<INotebookEditor>;
282282
modified: Event<INotebookEditor>;
283283
saved: Event<INotebookEditor>;
284+
metadataUpdated: Event<INotebookEditor>;
284285
/**
285286
* Is this notebook representing an untitled file which has never been saved yet.
286287
*/

src/test/datascience/nativeEditor.functional.test.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,16 +1429,25 @@ for _ in range(50):
14291429
const editor = notebookProvider.editors[0];
14301430
assert.ok(editor, 'No editor when saving');
14311431
const savedPromise = createDeferred();
1432-
const disp = editor.saved(() => savedPromise.resolve());
1432+
const metadataUpdatedPromise = createDeferred();
1433+
const disposeSaved = editor.saved(() => savedPromise.resolve());
1434+
const disposeMetadataUpdated = editor.metadataUpdated(() => metadataUpdatedPromise.resolve());
14331435

14341436
// add cells, run them and save
14351437
await addCell(wrapper, ioc, 'a=1\na');
14361438
const runAllButton = findButton(wrapper, NativeEditor, 0);
1439+
const threeCellsUpdated = waitForMessage(ioc, InteractiveWindowMessages.ExecutionRendered, { numberOfTimes: 3 });
14371440
await waitForMessageResponse(ioc, () => runAllButton!.simulate('click'));
1441+
await threeCellsUpdated;
1442+
1443+
// Make sure metadata has updated before we save
1444+
await metadataUpdatedPromise.promise;
1445+
disposeMetadataUpdated.dispose();
1446+
14381447
simulateKeyPressOnCell(1, { code: 's', ctrlKey: true });
14391448

14401449
await savedPromise.promise;
1441-
disp.dispose();
1450+
disposeSaved.dispose();
14421451

14431452
// the file has output and execution count
14441453
const fileContent = await fs.readFile(notebookFile.filePath, 'utf8');

0 commit comments

Comments
 (0)