From f23d3e714cf200425e4c35087123e6d5b437be77 Mon Sep 17 00:00:00 2001 From: Fata Nugraha Date: Tue, 25 Feb 2020 05:00:54 +0700 Subject: [PATCH 1/2] Fix wrong return in ModeHandlerMap.get --- src/editorIdentity.ts | 12 ++++++++---- src/mode/modeHandlerMap.ts | 15 ++++++++------- test/mode/modeHandlerMap.test.ts | 16 ++++++++++++++++ 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/editorIdentity.ts b/src/editorIdentity.ts index 8c9f5cc7cd7..d5209fba17b 100644 --- a/src/editorIdentity.ts +++ b/src/editorIdentity.ts @@ -13,11 +13,15 @@ export class EditorIdentity { /** * For use in tests */ - public static createRandomEditorIdentity(): EditorIdentity { + public static createRandomEditorIdentity( + injectName: string | undefined = undefined + ): EditorIdentity { return new EditorIdentity( - Math.random() - .toString(36) - .substring(7) + injectName + ? injectName + : Math.random() + .toString(36) + .substring(7) ); } diff --git a/src/mode/modeHandlerMap.ts b/src/mode/modeHandlerMap.ts index b2c64812bdb..750977cdd7e 100644 --- a/src/mode/modeHandlerMap.ts +++ b/src/mode/modeHandlerMap.ts @@ -9,12 +9,8 @@ class ModeHandlerMapImpl { public async getOrCreate(editorId: EditorIdentity): Promise<[ModeHandler, boolean]> { let isNew = false; - let modeHandler: ModeHandler | undefined; - for (const [key, value] of this.modeHandlerMap.entries()) { - if (key.isEqual(editorId)) { - modeHandler = value; - } - } + let modeHandler: ModeHandler | undefined = this.get(editorId); + if (!modeHandler) { isNew = true; modeHandler = await ModeHandler.Create(); @@ -24,7 +20,12 @@ class ModeHandlerMapImpl { } public get(editorId: EditorIdentity): ModeHandler | undefined { - return this.modeHandlerMap.get(editorId); + for (const [key, value] of this.modeHandlerMap.entries()) { + if (key.isEqual(editorId)) { + return value; + } + } + return undefined; } public getKeys(): EditorIdentity[] { diff --git a/test/mode/modeHandlerMap.test.ts b/test/mode/modeHandlerMap.test.ts index 8d5a05a93ac..292140cceec 100644 --- a/test/mode/modeHandlerMap.test.ts +++ b/test/mode/modeHandlerMap.test.ts @@ -2,6 +2,8 @@ import * as assert from 'assert'; import { ModeHandlerMap } from '../../src/mode/modeHandlerMap'; import { EditorIdentity } from '../../src/editorIdentity'; +import { testIt } from '../testSimplifier'; +import { KeypressState } from '../../src/actions/base'; suite('Mode Handler Map', () => { setup(() => { @@ -34,4 +36,18 @@ suite('Mode Handler Map', () => { ModeHandlerMap.delete(key); assert.strictEqual(ModeHandlerMap.getAll().length, 0); }); + + test('get', async () => { + // same file name returns same modehandler + const key = EditorIdentity.createRandomEditorIdentity(); + + let [modeHandler, isNew] = await ModeHandlerMap.getOrCreate(key); + assert.strictEqual(isNew, true); + assert.notEqual(modeHandler, undefined); + + [, isNew] = await ModeHandlerMap.getOrCreate( + EditorIdentity.createRandomEditorIdentity(key.fileName) + ); + assert.strictEqual(isNew, false); + }); }); From 7ad95234859ed3b2500dc6bf095253b691e63ad2 Mon Sep 17 00:00:00 2001 From: Fata Nugraha Date: Tue, 25 Feb 2020 06:38:36 +0700 Subject: [PATCH 2/2] Make EditorIdentity constructor public --- src/editorIdentity.ts | 17 +---------------- test/mode/modeHandlerMap.test.ts | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/src/editorIdentity.ts b/src/editorIdentity.ts index d5209fba17b..1f467d1c248 100644 --- a/src/editorIdentity.ts +++ b/src/editorIdentity.ts @@ -10,22 +10,7 @@ export class EditorIdentity { return new EditorIdentity(textEditor?.document?.fileName ?? ''); } - /** - * For use in tests - */ - public static createRandomEditorIdentity( - injectName: string | undefined = undefined - ): EditorIdentity { - return new EditorIdentity( - injectName - ? injectName - : Math.random() - .toString(36) - .substring(7) - ); - } - - private constructor(fileName: string) { + public constructor(fileName: string) { this._fileName = fileName; } diff --git a/test/mode/modeHandlerMap.test.ts b/test/mode/modeHandlerMap.test.ts index 292140cceec..b943996a5d5 100644 --- a/test/mode/modeHandlerMap.test.ts +++ b/test/mode/modeHandlerMap.test.ts @@ -5,6 +5,14 @@ import { EditorIdentity } from '../../src/editorIdentity'; import { testIt } from '../testSimplifier'; import { KeypressState } from '../../src/actions/base'; +function createRandomEditorIdentity(): EditorIdentity { + return new EditorIdentity( + Math.random() + .toString(36) + .substring(7) + ); +} + suite('Mode Handler Map', () => { setup(() => { ModeHandlerMap.clear(); @@ -15,7 +23,7 @@ suite('Mode Handler Map', () => { }); test('getOrCreate', async () => { - const key = EditorIdentity.createRandomEditorIdentity(); + const key = createRandomEditorIdentity(); let [modeHandler, isNew] = await ModeHandlerMap.getOrCreate(key); assert.strictEqual(isNew, true); assert.notEqual(modeHandler, undefined); @@ -38,16 +46,16 @@ suite('Mode Handler Map', () => { }); test('get', async () => { - // same file name returns same modehandler - const key = EditorIdentity.createRandomEditorIdentity(); + // same file name should return the same modehandler + const identity = createRandomEditorIdentity(); - let [modeHandler, isNew] = await ModeHandlerMap.getOrCreate(key); + let [modeHandler, isNew] = await ModeHandlerMap.getOrCreate(identity); assert.strictEqual(isNew, true); assert.notEqual(modeHandler, undefined); - [, isNew] = await ModeHandlerMap.getOrCreate( - EditorIdentity.createRandomEditorIdentity(key.fileName) - ); + const prevModeHandler = modeHandler; + [modeHandler, isNew] = await ModeHandlerMap.getOrCreate(new EditorIdentity(identity.fileName)); assert.strictEqual(isNew, false); + assert.strictEqual(prevModeHandler, modeHandler); }); });