diff --git a/src/vs/workbench/common/editor/diffEditorInput.ts b/src/vs/workbench/common/editor/diffEditorInput.ts index 61adcbef85f..57a88555f35 100644 --- a/src/vs/workbench/common/editor/diffEditorInput.ts +++ b/src/vs/workbench/common/editor/diffEditorInput.ts @@ -6,7 +6,7 @@ import { AbstractSideBySideEditorInputSerializer, SideBySideEditorInput } from 'vs/workbench/common/editor/sideBySideEditorInput'; import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { EditorModel } from 'vs/workbench/common/editor/editorModel'; -import { TEXT_DIFF_EDITOR_ID, BINARY_DIFF_EDITOR_ID, Verbosity, IEditorDescriptor, IEditorPane, GroupIdentifier, IResourceDiffEditorInput, IEditorInput, IUntypedEditorInput, DEFAULT_EDITOR_ASSOCIATION, UntypedEditorContext } from 'vs/workbench/common/editor'; +import { TEXT_DIFF_EDITOR_ID, BINARY_DIFF_EDITOR_ID, Verbosity, IEditorDescriptor, IEditorPane, GroupIdentifier, IResourceDiffEditorInput, IEditorInput, IUntypedEditorInput, DEFAULT_EDITOR_ASSOCIATION, UntypedEditorContext, isResourceDiffEditorInput } from 'vs/workbench/common/editor'; import { BaseTextEditorModel } from 'vs/workbench/common/editor/textEditorModel'; import { DiffEditorModel } from 'vs/workbench/common/editor/diffEditorModel'; import { TextDiffEditorModel } from 'vs/workbench/common/editor/textDiffEditorModel'; @@ -154,6 +154,10 @@ export class DiffEditorInput extends SideBySideEditorInput { } override matches(otherInput: IEditorInput | IUntypedEditorInput): boolean { + if (isResourceDiffEditorInput(otherInput)) { + return this.modifiedInput.matches(otherInput.modifiedInput) && this.originalInput.matches(otherInput.originalInput); + } + if (!super.matches(otherInput)) { return false; } diff --git a/src/vs/workbench/test/browser/parts/editor/editorGroupModel.test.ts b/src/vs/workbench/test/browser/parts/editor/editorGroupModel.test.ts index 70d4a4fb85f..7a753f2bc30 100644 --- a/src/vs/workbench/test/browser/parts/editor/editorGroupModel.test.ts +++ b/src/vs/workbench/test/browser/parts/editor/editorGroupModel.test.ts @@ -5,7 +5,7 @@ import * as assert from 'assert'; import { EditorGroupModel, ISerializedEditorGroupModel, EditorCloseEvent } from 'vs/workbench/common/editor/editorGroupModel'; -import { EditorExtensions, IEditorInputFactoryRegistry, IFileEditorInput, IEditorInputSerializer, CloseDirection, EditorsOrder } from 'vs/workbench/common/editor'; +import { EditorExtensions, IEditorInputFactoryRegistry, IFileEditorInput, IEditorInputSerializer, CloseDirection, EditorsOrder, IResourceDiffEditorInput } from 'vs/workbench/common/editor'; import { URI } from 'vs/base/common/uri'; import { TestLifecycleService, workbenchInstantiationService } from 'vs/workbench/test/browser/workbenchTestServices'; import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; @@ -296,7 +296,97 @@ suite('EditorGroupModel', () => { assert.ok(!group.isActive(untypedNonActiveInput)); }); - test('contains()', function () { + test('contains() - untyped', function () { + const group = createEditorGroupModel(); + const instantiationService = workbenchInstantiationService(); + + const input1 = input('input1', false, URI.file('/input1')); + const input2 = input('input2', false, URI.file('/input2')); + + const untypedInput1 = { resource: URI.file('/input1'), options: { override: 'input1' } }; + const untypedInput2 = { resource: URI.file('/input2'), options: { override: 'input2' } }; + + const diffInput1 = instantiationService.createInstance(DiffEditorInput, 'name', 'description', input1, input2, undefined); + const diffInput2 = instantiationService.createInstance(DiffEditorInput, 'name', 'description', input2, input1, undefined); + + const untypedDiffInput1: IResourceDiffEditorInput = { + originalInput: untypedInput1, + modifiedInput: untypedInput2 + }; + const untypedDiffInput2: IResourceDiffEditorInput = { + originalInput: untypedInput2, + modifiedInput: untypedInput1 + }; + + group.openEditor(input1, { pinned: true, active: true }); + + assert.strictEqual(group.contains(untypedInput1), true); + assert.strictEqual(group.contains(untypedInput1, { strictEquals: true }), false); + assert.strictEqual(group.contains(untypedInput1, { supportSideBySide: true }), true); + assert.strictEqual(group.contains(untypedInput2), false); + assert.strictEqual(group.contains(untypedInput2, { strictEquals: true }), false); + assert.strictEqual(group.contains(untypedInput2, { supportSideBySide: true }), false); + assert.strictEqual(group.contains(untypedDiffInput1), false); + assert.strictEqual(group.contains(untypedDiffInput2), false); + + group.openEditor(input2, { pinned: true, active: true }); + + assert.strictEqual(group.contains(untypedInput1), true); + assert.strictEqual(group.contains(untypedInput2), true); + assert.strictEqual(group.contains(untypedDiffInput1), false); + assert.strictEqual(group.contains(untypedDiffInput2), false); + + group.openEditor(diffInput1, { pinned: true, active: true }); + + assert.strictEqual(group.contains(untypedInput1), true); + assert.strictEqual(group.contains(untypedInput2), true); + assert.strictEqual(group.contains(untypedDiffInput1), true); + assert.strictEqual(group.contains(untypedDiffInput2), false); + + group.openEditor(diffInput2, { pinned: true, active: true }); + + assert.strictEqual(group.contains(untypedInput1), true); + assert.strictEqual(group.contains(untypedInput2), true); + assert.strictEqual(group.contains(untypedDiffInput1), true); + assert.strictEqual(group.contains(untypedDiffInput2), true); + + group.closeEditor(input1); + + assert.strictEqual(group.contains(untypedInput1), false); + assert.strictEqual(group.contains(untypedInput1, { supportSideBySide: true }), true); + assert.strictEqual(group.contains(untypedInput2), true); + assert.strictEqual(group.contains(untypedDiffInput1), true); + assert.strictEqual(group.contains(untypedDiffInput2), true); + + group.closeEditor(input2); + + assert.strictEqual(group.contains(untypedInput1), false); + assert.strictEqual(group.contains(untypedInput1, { supportSideBySide: true }), true); + assert.strictEqual(group.contains(untypedInput2), false); + assert.strictEqual(group.contains(untypedInput2, { supportSideBySide: true }), true); + assert.strictEqual(group.contains(untypedDiffInput1), true); + assert.strictEqual(group.contains(untypedDiffInput2), true); + + group.closeEditor(diffInput1); + + assert.strictEqual(group.contains(untypedInput1), false); + assert.strictEqual(group.contains(untypedInput1, { supportSideBySide: true }), true); + assert.strictEqual(group.contains(untypedInput2), false); + assert.strictEqual(group.contains(untypedInput2, { supportSideBySide: true }), true); + assert.strictEqual(group.contains(untypedDiffInput1), false); + assert.strictEqual(group.contains(untypedDiffInput2), true); + + group.closeEditor(diffInput2); + + assert.strictEqual(group.contains(untypedInput1), false); + assert.strictEqual(group.contains(untypedInput1, { supportSideBySide: true }), false); + assert.strictEqual(group.contains(untypedInput2), false); + assert.strictEqual(group.contains(untypedInput2, { supportSideBySide: true }), false); + assert.strictEqual(group.contains(untypedDiffInput1), false); + assert.strictEqual(group.contains(untypedDiffInput2), false); + }); + + test('contains()', () => { const group = createEditorGroupModel(); const instantiationService = workbenchInstantiationService();