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

more real world tests and fixes

上级 a2041dde
......@@ -14,6 +14,7 @@ export interface IEditorGroup {
activeEditor: EditorInput;
previewEditor: EditorInput;
count: number;
onEditorActivated: Event<EditorInput>;
onEditorOpened: Event<EditorInput>;
......@@ -112,6 +113,10 @@ export class EditorGroup implements IEditorGroup {
this._onEditorUnpinned = new Emitter<EditorInput>();
}
public get count(): number {
return this.editors.length;
}
public get onEditorActivated(): Event<EditorInput> {
return this._onEditorActivated.event;
}
......@@ -155,7 +160,7 @@ export class EditorGroup implements IEditorGroup {
public openEditor(editor: EditorInput, options?: IEditorOpenOptions): void {
const index = this.indexOf(editor);
const makeActive = (options && options.active) || !this.activeEditor;
const makeActive = (options && options.active) || !this.activeEditor || this.matches(this.preview, this.activeEditor);
const makePinned = options && options.pinned;
// New editor
......@@ -182,11 +187,13 @@ export class EditorGroup implements IEditorGroup {
// Handle preview
if (!makePinned) {
const indexOfPreview = this.indexOf(this.preview);
if (this.preview) {
const indexOfPreview = this.indexOf(this.preview);
this.closeEditor(this.preview);
this.splice(indexOfPreview, false, editor);
}
this.closeEditor(this.preview);
this.preview = editor;
this.splice(indexOfPreview, true, editor);
}
// Event
......
......@@ -61,13 +61,15 @@ function groupListener(group: IEditorGroup): GroupEvents {
let index = 0;
class TestEditorInput extends EditorInput {
public id = index++;
constructor(public id: string) {
super();
}
public getId() { return 'id'; }
public resolve() { return null; }
}
function input(): EditorInput {
return new TestEditorInput();
function input(id = String(index++)): EditorInput {
return new TestEditorInput(id);
}
suite('Editor Stacks Model', () => {
......@@ -130,14 +132,14 @@ suite('Editor Stacks Model', () => {
const group = model.openGroup('group');
const events = groupListener(group);
assert.equal(group.getEditors().length, 0);
assert.equal(group.count, 0);
assert.equal(group.getEditors(true).length, 0);
// Active && Pinned
const input1 = input();
group.openEditor(input1, { active: true, pinned: true });
assert.equal(group.getEditors().length, 1);
assert.equal(group.count, 1);
assert.equal(group.getEditors(true).length, 1);
assert.equal(group.activeEditor, input1);
assert.equal(group.isActive(input1), true);
......@@ -148,7 +150,7 @@ suite('Editor Stacks Model', () => {
assert.equal(events.activated[0], input1);
group.closeEditor(input1);
assert.equal(group.getEditors().length, 0);
assert.equal(group.count, 0);
assert.equal(group.getEditors(true).length, 0);
assert.equal(group.activeEditor, void 0);
assert.equal(events.closed[0], input1);
......@@ -157,7 +159,7 @@ suite('Editor Stacks Model', () => {
const input2 = input();
group.openEditor(input2, { active: true, pinned: false });
assert.equal(group.getEditors().length, 1);
assert.equal(group.count, 1);
assert.equal(group.getEditors(true).length, 1);
assert.equal(group.activeEditor, input2);
assert.equal(group.isActive(input2), true);
......@@ -168,13 +170,13 @@ suite('Editor Stacks Model', () => {
assert.equal(events.activated[1], input2);
group.closeEditor(input2);
assert.equal(group.getEditors().length, 0);
assert.equal(group.count, 0);
assert.equal(group.getEditors(true).length, 0);
assert.equal(group.activeEditor, void 0);
assert.equal(events.closed[1], input2);
group.closeEditor(input2);
assert.equal(group.getEditors().length, 0);
assert.equal(group.count, 0);
assert.equal(group.getEditors(true).length, 0);
assert.equal(group.activeEditor, void 0);
assert.equal(events.closed[1], input2);
......@@ -183,7 +185,7 @@ suite('Editor Stacks Model', () => {
const input3 = input();
group.openEditor(input3, { active: false, pinned: true });
assert.equal(group.getEditors().length, 1);
assert.equal(group.count, 1);
assert.equal(group.getEditors(true).length, 1);
assert.equal(group.activeEditor, input3);
assert.equal(group.isActive(input3), true);
......@@ -194,7 +196,7 @@ suite('Editor Stacks Model', () => {
assert.equal(events.activated[2], input3);
group.closeEditor(input3);
assert.equal(group.getEditors().length, 0);
assert.equal(group.count, 0);
assert.equal(group.getEditors(true).length, 0);
assert.equal(group.activeEditor, void 0);
assert.equal(events.closed[2], input3);
......@@ -203,7 +205,7 @@ suite('Editor Stacks Model', () => {
assert.equal(events.activated[2], input3);
group.closeEditor(input3);
assert.equal(group.getEditors().length, 0);
assert.equal(group.count, 0);
assert.equal(group.getEditors(true).length, 0);
assert.equal(group.activeEditor, void 0);
assert.equal(events.closed[2], input3);
......@@ -212,7 +214,7 @@ suite('Editor Stacks Model', () => {
const input4 = input();
group.openEditor(input4);
assert.equal(group.getEditors().length, 1);
assert.equal(group.count, 1);
assert.equal(group.getEditors(true).length, 1);
assert.equal(group.activeEditor, input4);
assert.equal(group.isActive(input4), true);
......@@ -223,7 +225,7 @@ suite('Editor Stacks Model', () => {
assert.equal(events.activated[3], input4);
group.closeEditor(input4);
assert.equal(group.getEditors().length, 0);
assert.equal(group.count, 0);
assert.equal(group.getEditors(true).length, 0);
assert.equal(group.activeEditor, void 0);
assert.equal(events.closed[3], input4);
......@@ -243,7 +245,7 @@ suite('Editor Stacks Model', () => {
group.openEditor(input2, { pinned: true, active: true });
group.openEditor(input3, { pinned: true, active: true });
assert.equal(group.getEditors().length, 3);
assert.equal(group.count, 3);
assert.equal(group.getEditors(true).length, 3);
assert.equal(group.activeEditor, input3);
assert.equal(group.isActive(input1), false);
......@@ -299,7 +301,7 @@ suite('Editor Stacks Model', () => {
group.openEditor(input2, { pinned: true });
group.openEditor(input3, { pinned: true });
assert.equal(group.getEditors().length, 3);
assert.equal(group.count, 3);
assert.equal(group.getEditors(true).length, 3);
assert.equal(group.activeEditor, input1);
assert.equal(group.isActive(input1), true);
......@@ -332,7 +334,7 @@ suite('Editor Stacks Model', () => {
group.openEditor(input2); // overwrites preview
group.openEditor(input3); // overwrites preview
assert.equal(group.getEditors().length, 1);
assert.equal(group.count, 1);
assert.equal(group.getEditors(true).length, 1);
assert.equal(group.activeEditor, input3);
assert.equal(group.isActive(input3), true);
......@@ -400,6 +402,7 @@ suite('Editor Stacks Model', () => {
group.openEditor(input3, { pinned: false, active: true });
assert.equal(group.activeEditor, input3);
assert.equal(group.count, 3);
group.pin(input3);
......@@ -408,6 +411,7 @@ suite('Editor Stacks Model', () => {
assert.equal(group.isPreview(input3), false);
assert.equal(group.isActive(input3), true);
assert.equal(events.pinned[0], input3);
assert.equal(group.count, 3);
group.unpin(input1);
......@@ -416,21 +420,24 @@ suite('Editor Stacks Model', () => {
assert.equal(group.isPreview(input1), true);
assert.equal(group.isActive(input1), false);
assert.equal(events.unpinned[0], input1);
assert.equal(group.count, 3);
group.unpin(input2);
assert.equal(group.activeEditor, input3);
assert.equal(group.getEditors().length, 2); // 2 previews got merged into one
assert.equal(group.count, 2); // 2 previews got merged into one
assert.equal(group.getEditors()[0], input2);
assert.equal(group.getEditors()[1], input3);
assert.equal(events.closed[0], input1);
assert.equal(group.count, 2);
group.unpin(input3);
assert.equal(group.activeEditor, input3);
assert.equal(group.getEditors().length, 1); // pinning replaced the preview
assert.equal(group.count, 1); // pinning replaced the preview
assert.equal(group.getEditors()[0], input3);
assert.equal(events.closed[1], input2);
assert.equal(group.count, 1);
});
test('Stack - Multiple Editors - closing picks next from MRU list', function () {
......@@ -452,35 +459,147 @@ suite('Editor Stacks Model', () => {
assert.equal(group.activeEditor, input5);
assert.equal(group.getEditors(true)[0], input5);
assert.equal(group.count, 5);
group.closeEditor(input5);
assert.equal(group.activeEditor, input4);
assert.equal(events.activated[5], input4);
assert.equal(group.count, 4);
group.setActive(input1);
group.setActive(input4);
group.closeEditor(input4);
assert.equal(group.activeEditor, input1);
assert.equal(group.count, 3);
group.closeEditor(input1);
assert.equal(group.activeEditor, input3);
assert.equal(group.count, 2);
group.setActive(input2);
group.closeEditor(input2);
assert.equal(group.activeEditor, input3);
assert.equal(group.count, 1);
group.closeEditor(input3);
assert.ok(!group.activeEditor);
assert.equal(group.count, 0);
});
test('Stack - Multiple Editors - real user example', function () {
const model = create();
const group = model.openGroup('group');
// [] -> /index.html/
const indexHtml = input('index.html');
group.openEditor(indexHtml);
assert.equal(group.activeEditor, indexHtml);
assert.equal(group.previewEditor, indexHtml);
assert.equal(group.getEditors()[0], indexHtml);
assert.equal(group.count, 1);
// /index.html/ -> /style.css/
const styleCss = input('style.css');
group.openEditor(styleCss);
assert.equal(group.activeEditor, styleCss);
assert.equal(group.previewEditor, styleCss);
assert.equal(group.getEditors()[0], styleCss);
assert.equal(group.count, 1);
// /style.css/ -> [/style.css/, test.js]
const testJs = input('test.js');
group.openEditor(testJs, { active: true, pinned: true });
assert.equal(group.previewEditor, styleCss);
assert.equal(group.activeEditor, testJs);
assert.equal(group.isPreview(styleCss), true);
assert.equal(group.isPinned(testJs), true);
assert.equal(group.getEditors()[0], styleCss);
assert.equal(group.getEditors()[1], testJs);
assert.equal(group.count, 2);
// [/style.css/, test.js] -> [/indexHtml/, test.js]
group.openEditor(indexHtml, { active: true });
assert.equal(group.activeEditor, indexHtml);
assert.equal(group.previewEditor, indexHtml);
assert.equal(group.isPreview(indexHtml), true);
assert.equal(group.isPinned(testJs), true);
assert.equal(group.getEditors()[0], indexHtml);
assert.equal(group.getEditors()[1], testJs);
assert.equal(group.count, 2);
// make test.js active
group.setActive(testJs);
assert.equal(group.activeEditor, testJs);
assert.equal(group.isActive(testJs), true);
assert.equal(group.count, 2);
// [/indexHtml/, test.js] -> [indexHtml, test.js]
group.pin(indexHtml);
assert.equal(group.isPinned(indexHtml), true);
assert.equal(group.isPreview(indexHtml), false);
assert.equal(group.activeEditor, testJs);
// [indexHtml, test.js] -> [indexHtml, test.js, file.ts]
const fileTs = input('file.ts');
group.openEditor(fileTs, { active: true, pinned: true });
assert.equal(group.isPinned(fileTs), true);
assert.equal(group.isPreview(fileTs), false);
assert.equal(group.count, 3);
assert.equal(group.activeEditor, fileTs);
// [indexHtml, test.js, file.ts] -> [indexHtml, test.js, /file.ts/]
group.unpin(fileTs);
assert.equal(group.count, 3);
assert.equal(group.isPinned(fileTs), false);
assert.equal(group.isPreview(fileTs), true);
assert.equal(group.activeEditor, fileTs);
// [indexHtml, test.js, /file.ts/] -> [indexHtml, test.js, /other.ts/]
const otherTs = input('other.ts');
group.openEditor(otherTs, { active: true });
assert.equal(group.count, 3);
assert.equal(group.activeEditor, otherTs);
assert.equal(group.getEditors()[0], indexHtml);
assert.equal(group.getEditors()[1], testJs);
assert.equal(group.getEditors()[2], otherTs);
// make index.html active
group.setActive(indexHtml);
assert.equal(group.activeEditor, indexHtml);
// [indexHtml, test.js, /file.ts/] -> [test.js, /other.ts/]
group.closeEditor(indexHtml);
assert.equal(group.count, 2);
assert.equal(group.activeEditor, otherTs);
assert.equal(group.getEditors()[0], testJs);
assert.equal(group.getEditors()[1], otherTs);
// [test.js, /other.ts/] -> [test.js]
group.closeEditor(otherTs);
assert.equal(group.count, 1);
assert.equal(group.activeEditor, testJs);
assert.equal(group.getEditors()[0], testJs);
// [test.js] -> /test.js/
group.unpin(testJs);
assert.equal(group.count, 1);
assert.equal(group.activeEditor, testJs);
assert.equal(group.getEditors()[0], testJs);
assert.equal(group.isPinned(testJs), false);
assert.equal(group.isPreview(testJs), true);
// /test.js/ -> []
group.closeEditor(testJs);
assert.equal(group.count, 0);
assert.equal(group.activeEditor, null);
assert.equal(group.previewEditor, null);
});
// TODO Open to the left (set DEFAULT_OPEN_EDITOR_DIRECTION)
// TODO complex working sample covering all with comments
});
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册