提交 6c16c86d 编写于 作者: B Benjamin Pasero

grid - some more tests

上级 e901ae32
......@@ -29,12 +29,13 @@ import { Registry } from 'vs/platform/registry/common/platform';
import { FileEditorInput } from 'vs/workbench/parts/files/common/editors/fileEditorInput';
import { UntitledEditorInput } from 'vs/workbench/common/editor/untitledEditorInput';
import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput';
import { IEditorPartService } from 'vs/workbench/browser/parts/editor/editor';
export class TestEditorControl extends BaseEditor {
constructor(@ITelemetryService telemetryService: ITelemetryService) { super('MyTestEditorForEditorService', NullTelemetryService, new TestThemeService()); }
getId(): string { return 'myTestEditorForEditorService'; }
getId(): string { return 'MyTestEditorForEditorService'; }
layout(): void { }
createEditor(): any { }
}
......@@ -74,7 +75,7 @@ suite('Editor service', () => {
const testInstantiationService = partInstantiator.createChild(new ServiceCollection([IEditorGroupsService, part]));
const service: IEditorService = testInstantiationService.createInstance(EditorService);
const service: IEditorPartService = testInstantiationService.createInstance(EditorService);
const input = testInstantiationService.createInstance(TestEditorInput, URI.parse('my://resource'));
const otherInput = testInstantiationService.createInstance(TestEditorInput, URI.parse('my://resource2'));
......@@ -432,6 +433,200 @@ suite('Editor service', () => {
});
});
});
// TODO define what should happen with { forceOpen: true } and events
test('pasero active editor change / visible editor change events', async function () {
const partInstantiator = workbenchInstantiationService();
const part = partInstantiator.createInstance(EditorPart, 'id', false);
part.create(document.createElement('div'));
part.layout(new Dimension(400, 300));
const testInstantiationService = partInstantiator.createChild(new ServiceCollection([IEditorGroupsService, part]));
const service: IEditorPartService = testInstantiationService.createInstance(EditorService);
const input = testInstantiationService.createInstance(TestEditorInput, URI.parse('my://resource'));
const otherInput = testInstantiationService.createInstance(TestEditorInput, URI.parse('my://resource2'));
let activeEditorChangeEventFired = false;
const activeEditorChangeListener = service.onDidActiveEditorChange(() => {
activeEditorChangeEventFired = true;
});
let visibleEditorChangeEventFired = false;
const visibleEditorChangeListener = service.onDidVisibleEditorsChange(() => {
visibleEditorChangeEventFired = true;
});
function assertActiveEditorChangedEvent(expected: boolean) {
assert.equal(activeEditorChangeEventFired, expected, `Unexpected active editor change state (got ${activeEditorChangeEventFired}, expected ${expected})`);
activeEditorChangeEventFired = false;
}
function assertVisibleEditorsChangedEvent(expected: boolean) {
assert.equal(visibleEditorChangeEventFired, expected, `Unexpected visible editors change state (got ${visibleEditorChangeEventFired}, expected ${expected})`);
visibleEditorChangeEventFired = false;
}
// 1.) open, open same, open other, close
let editor = await service.openEditor(input, { pinned: true });
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
editor = await service.openEditor(input);
assertActiveEditorChangedEvent(false);
assertVisibleEditorsChangedEvent(false);
editor = await service.openEditor(otherInput);
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
await editor.group.closeEditor(otherInput);
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
await editor.group.closeEditor(input);
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
// // 2.) open, open same (forced open)
editor = await service.openEditor(input);
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
editor = await service.openEditor(input, { forceOpen: true });
assertActiveEditorChangedEvent(false);
assertVisibleEditorsChangedEvent(false);
await editor.group.closeEditor(input);
// 3.) open, open inactive, close
editor = await service.openEditor(input, { pinned: true });
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
editor = await service.openEditor(otherInput, { inactive: true });
assertActiveEditorChangedEvent(false);
assertVisibleEditorsChangedEvent(false);
editor.group.closeAllEditors();
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
// 4.) open, open inactive, close inactive
editor = await service.openEditor(input, { pinned: true });
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
editor = await service.openEditor(otherInput, { inactive: true });
assertActiveEditorChangedEvent(false);
assertVisibleEditorsChangedEvent(false);
editor.group.closeEditor(otherInput);
assertActiveEditorChangedEvent(false);
assertVisibleEditorsChangedEvent(false);
editor.group.closeAllEditors();
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
// 5.) add group, remove group
editor = await service.openEditor(input, { pinned: true });
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
let rightGroup = part.addGroup(part.activeGroup, GroupDirection.RIGHT);
assertActiveEditorChangedEvent(false);
assertVisibleEditorsChangedEvent(false);
rightGroup.focus();
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(false);
part.removeGroup(rightGroup);
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(false);
editor.group.closeAllEditors();
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
// 6.) open editor in inactive group
editor = await service.openEditor(input, { pinned: true });
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
rightGroup = part.addGroup(part.activeGroup, GroupDirection.RIGHT);
assertActiveEditorChangedEvent(false);
assertVisibleEditorsChangedEvent(false);
rightGroup.openEditor(otherInput);
assertActiveEditorChangedEvent(false);
assertVisibleEditorsChangedEvent(true);
rightGroup.closeEditor(otherInput);
assertActiveEditorChangedEvent(false);
assertVisibleEditorsChangedEvent(true);
part.removeGroup(rightGroup);
assertActiveEditorChangedEvent(false);
assertVisibleEditorsChangedEvent(false);
editor.group.closeAllEditors();
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
// 7.) activate group
editor = await service.openEditor(input, { pinned: true });
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
rightGroup = part.addGroup(part.activeGroup, GroupDirection.RIGHT);
assertActiveEditorChangedEvent(false);
assertVisibleEditorsChangedEvent(false);
rightGroup.openEditor(otherInput);
assertActiveEditorChangedEvent(false);
assertVisibleEditorsChangedEvent(true);
rightGroup.focus();
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(false);
rightGroup.closeEditor(otherInput);
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
part.removeGroup(rightGroup);
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(false);
editor.group.closeAllEditors();
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
// 8.) move editor
editor = await service.openEditor(input, { pinned: true });
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
editor = await service.openEditor(otherInput, { pinned: true });
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
editor.group.moveEditor(otherInput, editor.group, { index: 0 });
assertActiveEditorChangedEvent(false);
assertVisibleEditorsChangedEvent(false);
editor.group.closeAllEditors();
assertActiveEditorChangedEvent(true);
assertVisibleEditorsChangedEvent(true);
// cleanup
activeEditorChangeListener.dispose();
visibleEditorChangeListener.dispose();
});
});
function toResource(path: string) {
......
......@@ -28,7 +28,7 @@ export class TestEditorControl extends BaseEditor {
constructor(@ITelemetryService telemetryService: ITelemetryService) { super('MyFileEditorForEditorGroupService', NullTelemetryService, new TestThemeService()); }
getId(): string { return 'myTestEditorForEditorGroupService'; }
getId(): string { return 'MyFileEditorForEditorGroupService'; }
layout(): void { }
createEditor(): any { }
}
......
......@@ -92,7 +92,7 @@ suite('Workbench editor', () => {
const testGroup1 = new TestEditorGroup(1);
const testGroup4 = new TestEditorGroup(4);
const groupService = new TestEditorGroupsService([
const editorGroupService = new TestEditorGroupsService([
testGroup0,
testGroup1,
new TestEditorGroup(2)
......@@ -103,7 +103,7 @@ suite('Workbench editor', () => {
}
const rawMemento = Object.create(null);
let memento = new EditorViewStateMemento<TestViewState>(groupService, rawMemento, 'key', 3);
let memento = new EditorViewStateMemento<TestViewState>(editorGroupService, rawMemento, 'key', 3);
let res = memento.loadState(testGroup0, URI.file('/A'));
assert.ok(!res);
......@@ -138,7 +138,7 @@ suite('Workbench editor', () => {
memento.save();
memento = new EditorViewStateMemento(groupService, rawMemento, 'key', 3);
memento = new EditorViewStateMemento(editorGroupService, rawMemento, 'key', 3);
assert.ok(memento.loadState(testGroup0, URI.file('/C')));
assert.ok(memento.loadState(testGroup0, URI.file('/D')));
assert.ok(memento.loadState(testGroup0, URI.file('/E')));
......
......@@ -14,7 +14,8 @@ import URI from 'vs/base/common/uri';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
import { StorageService, InMemoryLocalStorage } from 'vs/platform/storage/common/storageService';
import { ConfirmResult, IEditorOpeningEvent, IEditorInputWithOptions, CloseDirection, IEditorIdentifier, IUntitledResourceInput, IResourceDiffInput, IResourceSideBySideInput, IEditorInput, IEditor, IEditorCloseEvent } from 'vs/workbench/common/editor';
import { ConfirmResult, IEditorInputWithOptions, CloseDirection, IEditorIdentifier, IUntitledResourceInput, IResourceDiffInput, IResourceSideBySideInput, IEditorInput, IEditor, IEditorCloseEvent } from 'vs/workbench/common/editor';
import { IEditorOpeningEvent, IEditorPartService, IEditorGroupView } from 'vs/workbench/browser/parts/editor/editor';
import { Event, Emitter } from 'vs/base/common/event';
import Severity from 'vs/base/common/severity';
import { IBackupFileService } from 'vs/workbench/services/backup/common/backup';
......@@ -71,6 +72,7 @@ import { IEditorService, IOpenEditorOverrideHandler } from 'vs/workbench/service
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser';
import { IDecorationRenderOptions } from 'vs/editor/common/editorCommon';
import { EditorGroup } from 'vs/workbench/common/editor/editorGroup';
export function createFileInput(instantiationService: IInstantiationService, resource: URI): FileEditorInput {
return instantiationService.createInstance(FileEditorInput, resource, void 0);
......@@ -531,10 +533,6 @@ export class TestEditorGroupsService implements IEditorGroupsService {
return 'Group 1';
}
focusGroup(group: number | IEditorGroup): IEditorGroup {
return null;
}
findGroup(scope: IFindGroupScope, source?: number | IEditorGroup): IEditorGroup {
return null;
}
......@@ -570,16 +568,24 @@ export class TestEditorGroupsService implements IEditorGroupsService {
}
}
export class TestEditorGroup implements IEditorGroup {
export class TestEditorGroup implements IEditorGroupView {
constructor(public id: number) { }
group: EditorGroup = void 0;
activeControl: IEditor;
activeEditor: IEditorInput;
previewEditor: IEditorInput;
count: number;
disposed: boolean;
editors: ReadonlyArray<IEditorInput> = [];
label: string;
whenRestored: Promise<void, any> = TPromise.as(void 0);
element: HTMLElement;
minimumWidth: number;
maximumWidth: number;
minimumHeight: number;
maximumHeight: number;
onWillDispose: Event<void> = Event.None;
onDidGroupChange: Event<IGroupChangeEvent> = Event.None;
......@@ -587,6 +593,8 @@ export class TestEditorGroup implements IEditorGroup {
onDidCloseEditor: Event<IEditorCloseEvent> = Event.None;
onWillOpenEditor: Event<IEditorOpeningEvent> = Event.None;
onDidOpenEditorFail: Event<IEditorInput> = Event.None;
onDidFocus: Event<void> = Event.None;
onDidChange: Event<{ width: number; height: number; }> = Event.None;
getEditors(order?: EditorsOrder): ReadonlyArray<IEditorInput> {
return [];
......@@ -647,9 +655,17 @@ export class TestEditorGroup implements IEditorGroup {
invokeWithinContext<T>(fn: (accessor: ServicesAccessor) => T): T {
return fn(null);
}
isEmpty(): boolean { return true; }
setActive(isActive: boolean): void { }
setLabel(label: string): void { }
shutdown(): void { }
dispose(): void { }
toJSON(): object { return Object.create(null); }
layout(width: number, height: number): void { }
}
export class TestEditorService implements IEditorService {
export class TestEditorService implements IEditorPartService {
_serviceBrand: ServiceIdentifier<any>;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册