From 597e433a0fe40a01060ec9ddce3c7fd38de16b4e Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Thu, 20 Nov 2025 16:03:17 +0100 Subject: [PATCH] test(web): add unit tests for `nestedInstanceOf` Also rename file `utils.ts` to `nestedInstanceOf.ts`. Test-bot: skip --- .../createTextStoreForElement.ts | 2 +- .../engine/src/element-text-stores/index.ts | 2 +- .../{utils.ts => nestedInstanceOf.ts} | 0 .../nestedInstanceOf.tests.ts | 47 +++++++++++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) rename web/src/engine/src/element-text-stores/{utils.ts => nestedInstanceOf.ts} (100%) create mode 100644 web/src/test/auto/dom/cases/element-text-stores/nestedInstanceOf.tests.ts diff --git a/web/src/engine/src/element-text-stores/createTextStoreForElement.ts b/web/src/engine/src/element-text-stores/createTextStoreForElement.ts index 0285d55b3b..06dfe1b005 100644 --- a/web/src/engine/src/element-text-stores/createTextStoreForElement.ts +++ b/web/src/engine/src/element-text-stores/createTextStoreForElement.ts @@ -3,7 +3,7 @@ import { InputElementTextStore } from './inputTextStore.js'; import { TextAreaElementTextStore } from './textareaTextStore.js'; import { DesignIFrameElementTextStore } from './designIFrameTextStore.js'; import { ContentEditableElementTextStore } from './contentEditableTextStore.js'; -import { nestedInstanceOf } from './utils.js'; +import { nestedInstanceOf } from './nestedInstanceOf.js'; export function createTextStoreForElement(e: HTMLElement): AbstractElementTextStore { // Complex type scoping is implemented here so that kmwutils.ts is not a dependency for test compilations. diff --git a/web/src/engine/src/element-text-stores/index.ts b/web/src/engine/src/element-text-stores/index.ts index b8c0ac2147..809923a8c8 100644 --- a/web/src/engine/src/element-text-stores/index.ts +++ b/web/src/engine/src/element-text-stores/index.ts @@ -4,4 +4,4 @@ export { DesignIFrameElementTextStore } from './designIFrameTextStore.js'; export { InputElementTextStore } from './inputTextStore.js'; export { AbstractElementTextStore } from './abstractElementTextStore.js'; export { TextAreaElementTextStore } from './textareaTextStore.js'; -export { nestedInstanceOf } from './utils.js'; \ No newline at end of file +export { nestedInstanceOf } from './nestedInstanceOf.js'; \ No newline at end of file diff --git a/web/src/engine/src/element-text-stores/utils.ts b/web/src/engine/src/element-text-stores/nestedInstanceOf.ts similarity index 100% rename from web/src/engine/src/element-text-stores/utils.ts rename to web/src/engine/src/element-text-stores/nestedInstanceOf.ts diff --git a/web/src/test/auto/dom/cases/element-text-stores/nestedInstanceOf.tests.ts b/web/src/test/auto/dom/cases/element-text-stores/nestedInstanceOf.tests.ts new file mode 100644 index 0000000000..d2833f3ce7 --- /dev/null +++ b/web/src/test/auto/dom/cases/element-text-stores/nestedInstanceOf.tests.ts @@ -0,0 +1,47 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + */ +import { assert } from 'chai'; +import { nestedInstanceOf } from 'keyman/engine/element-text-stores'; + +describe('nestedInstanceOf', () => { + it('returns false for null input', () => { + assert.strictEqual(nestedInstanceOf(null as any, 'HTMLElement'), false); + }); + + it('returns true for Window object when className is "Window"', () => { + assert.strictEqual(nestedInstanceOf(window as any, 'Window'), true); + }); + + it('returns false for Window object when className is not "Window"', () => { + assert.strictEqual(nestedInstanceOf(window as any, 'Document'), false); + }); + + it('returns true for Document object when className is "Document"', () => { + assert.strictEqual(nestedInstanceOf(document as any, 'Document'), true); + }); + + it('returns false for Document object when className is not "Document"', () => { + assert.strictEqual(nestedInstanceOf(document as any, 'HTMLElement'), false); + }); + + it('returns true for HTMLElement when className is "HTMLElement"', () => { + const elem = document.createElement('div'); + assert.strictEqual(nestedInstanceOf(elem, 'HTMLElement'), true); + }); + + it('returns false for HTMLElement when className is "HTMLInputElement"', () => { + const elem = document.createElement('div'); + assert.strictEqual(nestedInstanceOf(elem, 'HTMLInputElement'), false); + }); + + it('returns true for HTMLInputElement when className is "HTMLInputElement"', () => { + const input = document.createElement('input'); + assert.strictEqual(nestedInstanceOf(input, 'HTMLInputElement'), true); + }); + + it('returns false for unknown className', () => { + const elem = document.createElement('div'); + assert.strictEqual(nestedInstanceOf(elem, 'NonExistentClass'), false); + }); +});