提交 ad41028d 编写于 作者: B Benjamin Pasero

debt - drop untyped events in favor of typed (text files)

上级 06a9d488
......@@ -104,17 +104,17 @@ export class MainThreadDocuments implements MainThreadDocumentsShape {
this._toDispose.add(this._modelReferenceCollection);
this._toDispose.add(modelService.onModelModeChanged(this._onModelModeChanged, this));
this._toDispose.add(textFileService.models.onModelSaved(m => {
this._toDispose.add(textFileService.models.onDidSave(m => {
if (this._shouldHandleFileEvent(m.resource)) {
this._proxy.$acceptModelSaved(m.resource);
}
}));
this._toDispose.add(textFileService.models.onModelReverted(m => {
this._toDispose.add(textFileService.models.onDidRevert(m => {
if (this._shouldHandleFileEvent(m.resource)) {
this._proxy.$acceptDirtyStateChanged(m.resource, false);
}
}));
this._toDispose.add(textFileService.models.onModelDirty(m => {
this._toDispose.add(textFileService.models.onDidChangeDirty(m => {
if (this._shouldHandleFileEvent(m.resource)) {
this._proxy.$acceptDirtyStateChanged(m.resource, true);
}
......
......@@ -314,7 +314,7 @@ export class EditorStatus extends Disposable implements IWorkbenchContribution {
private registerListeners(): void {
this._register(this.editorService.onDidActiveEditorChange(() => this.updateStatusBar()));
this._register(this.untitledTextEditorService.onDidChangeEncoding(r => this.onResourceEncodingChange(r)));
this._register(this.textFileService.models.onModelEncodingChanged(m => this.onResourceEncodingChange((m.resource))));
this._register(this.textFileService.models.onDidChangeEncoding(m => this.onResourceEncodingChange((m.resource))));
this._register(TabFocus.onDidChangeTabFocus(e => this.onTabFocusModeChange()));
}
......
......@@ -448,7 +448,7 @@ export class ExperimentService extends Disposable implements IExperimentService
}
}, 250));
const onSaveHandler = this._register(this.textFileService.models.onModelSaved(m => onModelsSavedWorker.work(m)));
const onSaveHandler = this._register(this.textFileService.models.onDidSave(m => onModelsSavedWorker.work(m)));
return ExperimentState.Evaluating;
});
}
......
......@@ -61,8 +61,8 @@ export class FileEditorTracker extends Disposable implements IWorkbenchContribut
this._register(this.fileService.onFileChanges(e => this.onFileChanges(e)));
// Ensure dirty text file and untitled models are always opened as editors
this._register(this.textFileService.models.onModelDirty(m => this.ensureDirtyFilesAreOpenedWorker.work(m.resource)));
this._register(this.textFileService.models.onModelSaveError(m => this.ensureDirtyFilesAreOpenedWorker.work(m.resource)));
this._register(this.textFileService.models.onDidChangeDirty(m => this.ensureDirtyFilesAreOpenedWorker.work(m.resource)));
this._register(this.textFileService.models.onDidSaveError(m => this.ensureDirtyFilesAreOpenedWorker.work(m.resource)));
this._register(this.untitledTextEditorService.onDidChangeDirty(r => this.ensureDirtyFilesAreOpenedWorker.work(r)));
// Out of workspace file watchers
......
......@@ -71,8 +71,8 @@ export class TextFileSaveErrorHandler extends Disposable implements ISaveErrorHa
}
private registerListeners(): void {
this._register(this.textFileService.models.onModelSaved(m => this.onFileSavedOrReverted(m.resource)));
this._register(this.textFileService.models.onModelReverted(m => this.onFileSavedOrReverted(m.resource)));
this._register(this.textFileService.models.onDidSave(m => this.onFileSavedOrReverted(m.resource)));
this._register(this.textFileService.models.onDidRevert(m => this.onFileSavedOrReverted(m.resource)));
this._register(this.editorService.onDidActiveEditorChange(() => this.onActiveEditorChanged()));
}
......
......@@ -70,15 +70,15 @@ export class FileEditorInput extends TextEditorInput implements IFileEditorInput
private registerListeners(): void {
// Dirty changes
this._register(this.textFileService.models.onModelDirty(m => this.onDirtyStateChange(m)));
this._register(this.textFileService.models.onModelSaveError(m => this.onDirtyStateChange(m)));
this._register(this.textFileService.models.onModelSaved(m => this.onDirtyStateChange(m)));
this._register(this.textFileService.models.onModelReverted(m => this.onDirtyStateChange(m)));
this._register(this.textFileService.models.onDidChangeDirty(m => this.onDirtyStateChange(m)));
this._register(this.textFileService.models.onDidSaveError(m => this.onDirtyStateChange(m)));
this._register(this.textFileService.models.onDidSave(m => this.onDirtyStateChange(m)));
this._register(this.textFileService.models.onDidRevert(m => this.onDirtyStateChange(m)));
// Label changes
this._register(this.labelService.onDidChangeFormatters(() => FileEditorInput.MEMOIZER.clear()));
this._register(this.fileService.onDidChangeFileSystemProviderRegistrations(() => FileEditorInput.MEMOIZER.clear()));
this._register(this.textFileService.models.onModelOrphanedChanged(model => this.onModelOrphanedChanged(model)));
this._register(this.textFileService.models.onDidChangeOrphaned(model => this.onModelOrphanedChanged(model)));
}
private onDirtyStateChange(model: ITextFileEditorModel): void {
......
......@@ -62,7 +62,7 @@ class LanguageSurvey extends Disposable {
});
}, 250));
this._register(textFileService.models.onModelSaved(m => onModelsSavedWorker.work(m)));
this._register(textFileService.models.onDidSave(m => onModelsSavedWorker.work(m)));
}
const lastSessionDate = storageService.get(LAST_SESSION_DATE_KEY, StorageScope.GLOBAL, new Date(0).toDateString());
......
......@@ -124,8 +124,8 @@ export class TelemetryContribution extends Disposable implements IWorkbenchContr
this._register(configurationTelemetry(telemetryService, configurationService));
// Files Telemetry
this._register(textFileService.models.onModelLoaded(m => this.onTextFileModelLoaded(m)));
this._register(textFileService.models.onModelSaved(m => this.onTextFileModelSaved(m)));
this._register(textFileService.models.onDidLoad(m => this.onTextFileModelLoaded(m)));
this._register(textFileService.models.onDidSave(m => this.onTextFileModelSaved(m)));
// Lifecycle
this._register(lifecycleService.onShutdown(() => this.dispose()));
......
......@@ -8,7 +8,7 @@ import { Emitter } from 'vs/base/common/event';
import { toErrorMessage } from 'vs/base/common/errorMessage';
import { URI } from 'vs/base/common/uri';
import { assertIsDefined } from 'vs/base/common/types';
import { ITextFileService, ModelState, ITextFileEditorModel, ISaveErrorHandler, ISaveParticipant, StateChange, ITextFileStreamContent, ILoadOptions, IResolvedTextFileEditorModel, ITextFileSaveOptions } from 'vs/workbench/services/textfile/common/textfiles';
import { ITextFileService, ModelState, ITextFileEditorModel, ISaveErrorHandler, ISaveParticipant, ITextFileStreamContent, ILoadOptions, IResolvedTextFileEditorModel, ITextFileSaveOptions } from 'vs/workbench/services/textfile/common/textfiles';
import { EncodingMode, IRevertOptions, SaveReason } from 'vs/workbench/common/editor';
import { BaseTextEditorModel } from 'vs/workbench/common/editor/textEditorModel';
import { IBackupFileService } from 'vs/workbench/services/backup/common/backup';
......@@ -44,15 +44,34 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
private static saveParticipant: ISaveParticipant | null;
static setSaveParticipant(handler: ISaveParticipant | null): void { TextFileEditorModel.saveParticipant = handler; }
//#region Events
private readonly _onDidChangeContent = this._register(new Emitter<void>());
readonly onDidChangeContent = this._onDidChangeContent.event;
private readonly _onDidChangeState = this._register(new Emitter<StateChange>());
readonly onDidChangeState = this._onDidChangeState.event;
private readonly _onDidLoad = this._register(new Emitter<void>());
readonly onDidLoad = this._onDidLoad.event;
private readonly _onDidSaveError = this._register(new Emitter<void>());
readonly onDidSaveError = this._onDidSaveError.event;
private readonly _onDidSave = this._register(new Emitter<void>());
readonly onDidSave = this._onDidSave.event;
private readonly _onDidRevert = this._register(new Emitter<void>());
readonly onDidRevert = this._onDidRevert.event;
private readonly _onDidChangeEncoding = this._register(new Emitter<void>());
readonly onDidChangeEncoding = this._onDidChangeEncoding.event;
private readonly _onDidChangeOrphaned = this._register(new Emitter<void>());
readonly onDidChangeOrphaned = this._onDidChangeOrphaned.event;
private readonly _onDidChangeDirty = this._register(new Emitter<void>());
readonly onDidChangeDirty = this._onDidChangeDirty.event;
//#endregion
readonly capabilities = 0;
private contentEncoding: string | undefined; // encoding as reported from disk
......@@ -147,7 +166,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
private setOrphaned(orphaned: boolean): void {
if (this.inOrphanMode !== orphaned) {
this.inOrphanMode = orphaned;
this._onDidChangeState.fire(StateChange.ORPHANED_CHANGE);
this._onDidChangeOrphaned.fire();
}
}
......@@ -215,7 +234,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
}
// Emit file change event
this._onDidChangeState.fire(StateChange.REVERTED);
this._onDidRevert.fire();
// Emit dirty change event
if (wasDirty) {
......@@ -372,7 +391,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
if (this.preferredEncoding) {
this.updatePreferredEncoding(this.contentEncoding); // make sure to reflect the real encoding of the file (never out of sync)
} else if (oldEncoding !== this.contentEncoding) {
this._onDidChangeState.fire(StateChange.ENCODING);
this._onDidChangeEncoding.fire();
}
// Update Existing Model
......@@ -386,7 +405,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
}
// Emit as event
this._onDidChangeState.fire(StateChange.LOADED);
this._onDidLoad.fire();
return this;
}
......@@ -464,7 +483,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
// Emit event
if (wasDirty) {
this._onDidChangeState.fire(StateChange.REVERTED);
this._onDidRevert.fire();
this._onDidChangeDirty.fire();
}
} else {
......@@ -494,7 +513,6 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
// Emit as Event if we turned dirty
if (!wasDirty) {
this._onDidChangeState.fire(StateChange.DIRTY);
this._onDidChangeDirty.fire();
}
}
......@@ -657,7 +675,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
this.updateLastResolvedFileStat(stat);
// Emit Events
this._onDidChangeState.fire(StateChange.SAVED);
this._onDidSave.fire();
this._onDidChangeDirty.fire();
}, error => {
this.logService.error(`[text file model] doSave(${versionId}) - exit - resulted in a save error: ${error.toString()}`, this.resource.toString());
......@@ -674,7 +692,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
this.onSaveError(error);
// Emit as event
this._onDidChangeState.fire(StateChange.SAVE_ERROR);
this._onDidSaveError.fire();
}));
}));
}
......@@ -695,7 +713,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
this.updateLastResolvedFileStat(stat);
// Emit File Saved Event
this._onDidChangeState.fire(StateChange.SAVED);
this._onDidSave.fire();
}, error => onUnexpectedError(error) /* just log any error but do not notify the user since the file was not dirty */));
}
......@@ -850,7 +868,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
this.preferredEncoding = encoding;
// Emit
this._onDidChangeState.fire(StateChange.ENCODING);
this._onDidChangeEncoding.fire();
}
private isNewEncoding(encoding: string | undefined): boolean {
......
......@@ -6,8 +6,8 @@
import { Emitter } from 'vs/base/common/event';
import { URI } from 'vs/base/common/uri';
import { TextFileEditorModel } from 'vs/workbench/services/textfile/common/textFileEditorModel';
import { dispose, IDisposable, Disposable } from 'vs/base/common/lifecycle';
import { ITextFileEditorModel, ITextFileEditorModelManager, StateChange, IModelLoadOrCreateOptions } from 'vs/workbench/services/textfile/common/textfiles';
import { dispose, IDisposable, Disposable, DisposableStore } from 'vs/base/common/lifecycle';
import { ITextFileEditorModel, ITextFileEditorModelManager, IModelLoadOrCreateOptions } from 'vs/workbench/services/textfile/common/textfiles';
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ResourceMap } from 'vs/base/common/map';
......@@ -18,31 +18,30 @@ import { onUnexpectedError } from 'vs/base/common/errors';
export class TextFileEditorModelManager extends Disposable implements ITextFileEditorModelManager {
private readonly _onModelLoaded = this._register(new Emitter<ITextFileEditorModel>());
readonly onModelLoaded = this._onModelLoaded.event;
private readonly _onDidLoad = this._register(new Emitter<ITextFileEditorModel>());
readonly onDidLoad = this._onDidLoad.event;
private readonly _onModelDirty = this._register(new Emitter<ITextFileEditorModel>());
readonly onModelDirty = this._onModelDirty.event;
private readonly _onDidChangeDirty = this._register(new Emitter<ITextFileEditorModel>());
readonly onDidChangeDirty = this._onDidChangeDirty.event;
private readonly _onModelSaveError = this._register(new Emitter<ITextFileEditorModel>());
readonly onModelSaveError = this._onModelSaveError.event;
private readonly _onDidSaveError = this._register(new Emitter<ITextFileEditorModel>());
readonly onDidSaveError = this._onDidSaveError.event;
private readonly _onModelSaved = this._register(new Emitter<ITextFileEditorModel>());
readonly onModelSaved = this._onModelSaved.event;
private readonly _onDidSave = this._register(new Emitter<ITextFileEditorModel>());
readonly onDidSave = this._onDidSave.event;
private readonly _onModelReverted = this._register(new Emitter<ITextFileEditorModel>());
readonly onModelReverted = this._onModelReverted.event;
private readonly _onDidRevert = this._register(new Emitter<ITextFileEditorModel>());
readonly onDidRevert = this._onDidRevert.event;
private readonly _onModelEncodingChanged = this._register(new Emitter<ITextFileEditorModel>());
readonly onModelEncodingChanged = this._onModelEncodingChanged.event;
private readonly _onDidChangeEncoding = this._register(new Emitter<ITextFileEditorModel>());
readonly onDidChangeEncoding = this._onDidChangeEncoding.event;
private readonly _onModelOrphanedChanged = this._register(new Emitter<ITextFileEditorModel>());
readonly onModelOrphanedChanged = this._onModelOrphanedChanged.event;
private readonly _onDidChangeOrphaned = this._register(new Emitter<ITextFileEditorModel>());
readonly onDidChangeOrphaned = this._onDidChangeOrphaned.event;
private readonly mapResourceToDisposeListener = new ResourceMap<IDisposable>();
private readonly mapResourceToStateChangeListener = new ResourceMap<IDisposable>();
private readonly mapResourceToModelContentChangeListener = new ResourceMap<IDisposable>();
private readonly mapResourceToModel = new ResourceMap<ITextFileEditorModel>();
private readonly mapResourceToModelListeners = new ResourceMap<IDisposable>();
private readonly mapResourceToDisposeListener = new ResourceMap<IDisposable>();
private readonly mapResourceToPendingModelLoaders = new ResourceMap<Promise<ITextFileEditorModel>>();
private readonly modelLoadQueue = new ResourceQueue();
......@@ -128,32 +127,17 @@ export class TextFileEditorModelManager extends Disposable implements ITextFileE
const newModel = model = this.instantiationService.createInstance(TextFileEditorModel, resource, options ? options.encoding : undefined, options ? options.mode : undefined);
modelPromise = model.load(options);
// Install state change listener
this.mapResourceToStateChangeListener.set(resource, model.onDidChangeState(state => {
switch (state) {
case StateChange.LOADED:
this._onModelLoaded.fire(newModel);
break;
case StateChange.DIRTY:
this._onModelDirty.fire(newModel);
break;
case StateChange.SAVE_ERROR:
this._onModelSaveError.fire(newModel);
break;
case StateChange.SAVED:
this._onModelSaved.fire(newModel);
break;
case StateChange.REVERTED:
this._onModelReverted.fire(newModel);
break;
case StateChange.ENCODING:
this._onModelEncodingChanged.fire(newModel);
break;
case StateChange.ORPHANED_CHANGE:
this._onModelOrphanedChanged.fire(newModel);
break;
}
}));
// Install model listeners
const listeners = new DisposableStore();
listeners.add(model.onDidLoad(() => this._onDidLoad.fire(newModel)));
listeners.add(model.onDidChangeDirty(() => this._onDidChangeDirty.fire(newModel)));
listeners.add(model.onDidSaveError(() => this._onDidSaveError.fire(newModel)));
listeners.add(model.onDidSave(() => this._onDidSave.fire(newModel)));
listeners.add(model.onDidRevert(() => this._onDidRevert.fire(newModel)));
listeners.add(model.onDidChangeEncoding(() => this._onDidChangeEncoding.fire(newModel)));
listeners.add(model.onDidChangeOrphaned(() => this._onDidChangeOrphaned.fire(newModel)));
this.mapResourceToModelListeners.set(resource, listeners);
}
// Store pending loads to avoid race conditions
......@@ -167,7 +151,7 @@ export class TextFileEditorModelManager extends Disposable implements ITextFileE
// Model can be dirty if a backup was restored, so we make sure to have this event delivered
if (resolvedModel.isDirty()) {
this._onModelDirty.fire(resolvedModel);
this._onDidChangeDirty.fire(resolvedModel);
}
// Remove from pending loads
......@@ -236,16 +220,10 @@ export class TextFileEditorModelManager extends Disposable implements ITextFileE
this.mapResourceToDisposeListener.delete(resource);
}
const stateChangeListener = this.mapResourceToStateChangeListener.get(resource);
if (stateChangeListener) {
dispose(stateChangeListener);
this.mapResourceToStateChangeListener.delete(resource);
}
const modelContentChangeListener = this.mapResourceToModelContentChangeListener.get(resource);
if (modelContentChangeListener) {
dispose(modelContentChangeListener);
this.mapResourceToModelContentChangeListener.delete(resource);
const modelListener = this.mapResourceToModelListeners.get(resource);
if (modelListener) {
dispose(modelListener);
this.mapResourceToModelListeners.delete(resource);
}
}
......@@ -259,13 +237,9 @@ export class TextFileEditorModelManager extends Disposable implements ITextFileE
this.mapResourceToDisposeListener.forEach(l => l.dispose());
this.mapResourceToDisposeListener.clear();
// dispose the state change listeners
this.mapResourceToStateChangeListener.forEach(l => l.dispose());
this.mapResourceToStateChangeListener.clear();
// dispose the model content change listeners
this.mapResourceToModelContentChangeListener.forEach(l => l.dispose());
this.mapResourceToModelContentChangeListener.clear();
// dispose the model change listeners
this.mapResourceToModelListeners.forEach(l => l.dispose());
this.mapResourceToModelListeners.clear();
}
disposeModel(model: TextFileEditorModel): void {
......
......@@ -275,16 +275,6 @@ export const enum ModelState {
ERROR
}
export const enum StateChange {
LOADED,
DIRTY,
SAVE_ERROR,
SAVED,
REVERTED,
ENCODING,
ORPHANED_CHANGE
}
export interface ITextFileOperationResult {
results: IResult[];
}
......@@ -362,14 +352,13 @@ export interface IModelLoadOrCreateOptions {
export interface ITextFileEditorModelManager {
readonly onModelEncodingChanged: Event<ITextFileEditorModel>;
readonly onModelOrphanedChanged: Event<ITextFileEditorModel>;
readonly onModelLoaded: Event<ITextFileEditorModel>;
readonly onModelDirty: Event<ITextFileEditorModel>;
readonly onModelSaveError: Event<ITextFileEditorModel>;
readonly onModelSaved: Event<ITextFileEditorModel>;
readonly onModelReverted: Event<ITextFileEditorModel>;
readonly onDidLoad: Event<ITextFileEditorModel>;
readonly onDidChangeDirty: Event<ITextFileEditorModel>;
readonly onDidSaveError: Event<ITextFileEditorModel>;
readonly onDidSave: Event<ITextFileEditorModel>;
readonly onDidRevert: Event<ITextFileEditorModel>;
readonly onDidChangeEncoding: Event<ITextFileEditorModel>;
readonly onDidChangeOrphaned: Event<ITextFileEditorModel>;
get(resource: URI): ITextFileEditorModel | undefined;
......@@ -407,7 +396,13 @@ export interface ILoadOptions {
export interface ITextFileEditorModel extends ITextEditorModel, IEncodingSupport, IModeSupport, IWorkingCopy {
readonly onDidChangeState: Event<StateChange>;
readonly onDidChangeContent: Event<void>;
readonly onDidLoad: Event<void>;
readonly onDidSaveError: Event<void>;
readonly onDidSave: Event<void>;
readonly onDidRevert: Event<void>;
readonly onDidChangeEncoding: Event<void>;
readonly onDidChangeOrphaned: Event<void>;
hasState(state: ModelState): boolean;
......
......@@ -7,7 +7,7 @@ import * as assert from 'assert';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { EncodingMode } from 'vs/workbench/common/editor';
import { TextFileEditorModel } from 'vs/workbench/services/textfile/common/textFileEditorModel';
import { ITextFileService, ModelState, StateChange, snapshotToString } from 'vs/workbench/services/textfile/common/textfiles';
import { ITextFileService, ModelState, snapshotToString } from 'vs/workbench/services/textfile/common/textfiles';
import { workbenchInstantiationService, TestTextFileService, createFileInput, TestFileService } from 'vs/workbench/test/workbenchTestServices';
import { toResource } from 'vs/base/test/common/utils';
import { TextFileEditorModelManager } from 'vs/workbench/services/textfile/common/textFileEditorModelManager';
......@@ -95,10 +95,8 @@ suite('Files - TextFileEditorModel', () => {
assert.equal(accessor.workingCopyService.isDirty(model.resource), true);
let savedEvent = false;
model.onDidChangeState(e => {
if (e === StateChange.SAVED) {
savedEvent = true;
}
model.onDidSave(e => {
savedEvent = true;
});
let workingCopyEvent = false;
......@@ -132,10 +130,8 @@ suite('Files - TextFileEditorModel', () => {
await model.load();
let savedEvent = false;
model.onDidChangeState(e => {
if (e === StateChange.SAVED) {
savedEvent = true;
}
model.onDidSave(e => {
savedEvent = true;
});
let workingCopyEvent = false;
......@@ -206,8 +202,12 @@ suite('Files - TextFileEditorModel', () => {
const model = instantiationService.createInstance(TextFileEditorModel, toResource.call(this, '/path/index.txt'), 'utf8', undefined);
assert.ok(model.hasState(ModelState.SAVED));
model.onDidChangeState(e => {
assert.ok(e !== StateChange.DIRTY && e !== StateChange.SAVED);
model.onDidSave(e => {
assert.fail();
});
model.onDidChangeDirty(e => {
assert.fail();
});
await model.load();
......@@ -234,10 +234,8 @@ suite('Files - TextFileEditorModel', () => {
const model = instantiationService.createInstance(TextFileEditorModel, toResource.call(this, '/path/index_async.txt'), 'utf8', undefined);
model.onDidChangeState(e => {
if (e === StateChange.REVERTED) {
eventCounter++;
}
model.onDidRevert(e => {
eventCounter++;
});
let workingCopyEvent = false;
......@@ -271,10 +269,8 @@ suite('Files - TextFileEditorModel', () => {
const model = instantiationService.createInstance(TextFileEditorModel, toResource.call(this, '/path/index_async.txt'), 'utf8', undefined);
model.onDidChangeState(e => {
if (e === StateChange.REVERTED) {
eventCounter++;
}
model.onDidRevert(e => {
eventCounter++;
});
let workingCopyEvent = false;
......@@ -331,10 +327,8 @@ suite('Files - TextFileEditorModel', () => {
await model.revert({ soft: true });
assert.ok(!model.isDirty());
model.onDidChangeState(e => {
if (e === StateChange.DIRTY) {
eventCounter++;
}
model.onDidChangeDirty(e => {
eventCounter++;
});
let workingCopyEvent = false;
......@@ -416,12 +410,10 @@ suite('Files - TextFileEditorModel', () => {
let eventCounter = 0;
const model: TextFileEditorModel = instantiationService.createInstance(TextFileEditorModel, toResource.call(this, '/path/index_async.txt'), 'utf8', undefined);
model.onDidChangeState(e => {
if (e === StateChange.SAVED) {
assert.equal(snapshotToString(model.createSnapshot()!), 'bar');
assert.ok(!model.isDirty());
eventCounter++;
}
model.onDidSave(e => {
assert.equal(snapshotToString(model.createSnapshot()!), 'bar');
assert.ok(!model.isDirty());
eventCounter++;
});
TextFileEditorModel.setSaveParticipant({
......
......@@ -127,7 +127,7 @@ suite('Files - TextFileEditorModelManager', () => {
model3.dispose();
});
test('events', async function () {
test('pasero events', async function () {
const manager: TextFileEditorModelManager = instantiationService.createInstance(TextFileEditorModelManager);
const resource1 = toResource.call(this, '/path/index.txt');
......@@ -139,31 +139,31 @@ suite('Files - TextFileEditorModelManager', () => {
let savedCounter = 0;
let encodingCounter = 0;
manager.onModelLoaded(model => {
manager.onDidLoad(model => {
if (model.resource.toString() === resource1.toString()) {
loadedCounter++;
}
});
manager.onModelDirty(model => {
manager.onDidChangeDirty(model => {
if (model.resource.toString() === resource1.toString()) {
dirtyCounter++;
}
});
manager.onModelReverted(model => {
manager.onDidRevert(model => {
if (model.resource.toString() === resource1.toString()) {
revertedCounter++;
}
});
manager.onModelSaved(model => {
manager.onDidSave(model => {
if (model.resource.toString() === resource1.toString()) {
savedCounter++;
}
});
manager.onModelEncodingChanged(model => {
manager.onDidChangeEncoding(model => {
if (model.resource.toString() === resource1.toString()) {
encodingCounter++;
}
......@@ -189,7 +189,7 @@ suite('Files - TextFileEditorModelManager', () => {
model2.dispose();
await model1.revert();
assert.equal(dirtyCounter, 2);
assert.equal(dirtyCounter, 4);
assert.equal(revertedCounter, 1);
assert.equal(savedCounter, 1);
assert.equal(encodingCounter, 2);
......
......@@ -49,9 +49,9 @@ suite('MainThreadDocumentsAndEditors', () => {
textFileService = new class extends mock<ITextFileService>() {
isDirty() { return false; }
models = <any>{
onModelSaved: Event.None,
onModelReverted: Event.None,
onModelDirty: Event.None,
onDidSave: Event.None,
onDidRevert: Event.None,
onDidChangeDirty: Event.None
};
};
const workbenchEditorService = new TestEditorService();
......
......@@ -73,9 +73,9 @@ suite('MainThreadEditors', () => {
return Promise.resolve(Object.create(null));
}
models = <any>{
onModelSaved: Event.None,
onModelReverted: Event.None,
onModelDirty: Event.None,
onDidSave: Event.None,
onDidRevert: Event.None,
onDidChangeDirty: Event.None
};
};
const workbenchEditorService = new TestEditorService();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册