This commit is contained in:
rebornix
2020-07-13 11:17:19 -07:00
parent 139ccc4a4d
commit b2c8b2ac00
2 changed files with 27 additions and 9 deletions
@@ -889,6 +889,10 @@ suite('regression', () => {
await vscode.commands.executeCommand('workbench.action.closeAllEditors'); await vscode.commands.executeCommand('workbench.action.closeAllEditors');
}); });
test('untitled file', async function () {
await vscode.commands.executeCommand('workbench.action.files.newUntitledFile', { viewType: "notebookCoreTest" });
assert.notEqual(vscode.notebook.activeNotebookEditor, undefined, 'untitled notebook editor is not undefined');
});
}); });
suite('webview', () => { suite('webview', () => {
@@ -91,11 +91,11 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN
if (this._notebook.supportBackup) { if (this._notebook.supportBackup) {
const tokenSource = new CancellationTokenSource(); const tokenSource = new CancellationTokenSource();
const backupId = await this._notebookService.backup(this.viewType, this.resource, tokenSource.token); const backupId = await this._notebookService.backup(this.viewType, this.resource, tokenSource.token);
const stats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); const stats = await this._resolveStats(this.resource);
return { return {
meta: { meta: {
mtime: stats.mtime || new Date().getTime(), mtime: stats?.mtime || new Date().getTime(),
name: this._name, name: this._name,
viewType: this._notebook.viewType, viewType: this._notebook.viewType,
backupId: backupId backupId: backupId
@@ -120,7 +120,7 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN
} }
await this.load({ forceReadFromDisk: true }); await this.load({ forceReadFromDisk: true });
const newStats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); const newStats = await this._resolveStats(this.resource);
this._lastResolvedFileStat = newStats; this._lastResolvedFileStat = newStats;
this._notebook.setDirty(false); this._notebook.setDirty(false);
@@ -159,7 +159,7 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN
const notebook = await this._notebookService.createNotebookFromBackup(this.viewType!, this.resource, data.metadata, data.languages, data.cells, editorId); const notebook = await this._notebookService.createNotebookFromBackup(this.viewType!, this.resource, data.metadata, data.languages, data.cells, editorId);
this._notebook = notebook!; this._notebook = notebook!;
const newStats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); const newStats = await this._resolveStats(this.resource);
this._lastResolvedFileStat = newStats; this._lastResolvedFileStat = newStats;
this._register(this._notebook); this._register(this._notebook);
@@ -181,7 +181,7 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN
private async loadFromProvider(forceReloadFromDisk: boolean, editorId: string | undefined, backupId: string | undefined) { private async loadFromProvider(forceReloadFromDisk: boolean, editorId: string | undefined, backupId: string | undefined) {
const notebook = await this._notebookService.resolveNotebook(this.viewType!, this.resource, forceReloadFromDisk, editorId, backupId); const notebook = await this._notebookService.resolveNotebook(this.viewType!, this.resource, forceReloadFromDisk, editorId, backupId);
this._notebook = notebook!; this._notebook = notebook!;
const newStats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); const newStats = await this._resolveStats(this.resource);
this._lastResolvedFileStat = newStats; this._lastResolvedFileStat = newStats;
this._register(this._notebook); this._register(this._notebook);
@@ -216,8 +216,8 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN
} }
private async _assertStat() { private async _assertStat() {
const stats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); const stats = await this._resolveStats(this.resource);
if (this._lastResolvedFileStat && stats.mtime > this._lastResolvedFileStat.mtime) { if (this._lastResolvedFileStat && stats && stats.mtime > this._lastResolvedFileStat.mtime) {
return new Promise<'overwrite' | 'revert' | 'none'>(resolve => { return new Promise<'overwrite' | 'revert' | 'none'>(resolve => {
const handle = this._notificationService.prompt( const handle = this._notificationService.prompt(
Severity.Info, Severity.Info,
@@ -258,7 +258,7 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN
const tokenSource = new CancellationTokenSource(); const tokenSource = new CancellationTokenSource();
await this._notebookService.save(this.notebook.viewType, this.notebook.uri, tokenSource.token); await this._notebookService.save(this.notebook.viewType, this.notebook.uri, tokenSource.token);
const newStats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); const newStats = await this._resolveStats(this.resource);
this._lastResolvedFileStat = newStats; this._lastResolvedFileStat = newStats;
this._notebook.setDirty(false); this._notebook.setDirty(false);
return true; return true;
@@ -278,12 +278,26 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN
const tokenSource = new CancellationTokenSource(); const tokenSource = new CancellationTokenSource();
await this._notebookService.saveAs(this.notebook.viewType, this.notebook.uri, targetResource, tokenSource.token); await this._notebookService.saveAs(this.notebook.viewType, this.notebook.uri, targetResource, tokenSource.token);
const newStats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); const newStats = await this._resolveStats(this.resource);
this._lastResolvedFileStat = newStats; this._lastResolvedFileStat = newStats;
this._notebook.setDirty(false); this._notebook.setDirty(false);
return true; return true;
} }
private async _resolveStats(resource: URI) {
if (resource.scheme === Schemas.untitled) {
return undefined;
}
try {
const newStats = await this._fileService.resolve(this.resource, { resolveMetadata: true });
return newStats;
} catch (e) {
return undefined;
}
}
dispose() { dispose() {
super.dispose(); super.dispose();
} }