From b07903cafa8bd8a6cd32a856fb53087fbfa36e0a Mon Sep 17 00:00:00 2001 From: Bill Nguyen Ton Hoang Date: Thu, 22 Feb 2024 23:52:18 +0000 Subject: [PATCH] Desktop: Made the same spellcheck languages more specific in the title bar - Fixed the issue #7834 - added "spellCheckerMenu.test.ts" to test the changes and the expected behavior: all passed! - added jest.mock in "jest.setup.js" to mock the Menu from @electron/remote. - modified "buildScriptIndexes" to ignore ".test.ts" files so it does not include them in index.ts. That caused some issues with duplicate identifiers and more errors. --- .eslintignore | 1 + .gitignore | 1 + package.json | 3 +- .../commands/showSpellCheckerMenu.test.ts | 40 +++++++++++++++++++ .../commands/showSpellCheckerMenu.ts | 3 +- packages/app-desktop/jest.setup.js | 12 ++++++ .../tools/gulp/tasks/buildScriptIndexes.js | 2 +- yarn.lock | 3 +- 8 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.test.ts diff --git a/.eslintignore b/.eslintignore index 95e5bf97697..631507a176b 100644 --- a/.eslintignore +++ b/.eslintignore @@ -230,6 +230,7 @@ packages/app-desktop/gui/MainScreen/commands/showNoteProperties.js packages/app-desktop/gui/MainScreen/commands/showPrompt.js packages/app-desktop/gui/MainScreen/commands/showShareFolderDialog.js packages/app-desktop/gui/MainScreen/commands/showShareNoteDialog.js +packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.test.js packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.js packages/app-desktop/gui/MainScreen/commands/toggleEditors.js packages/app-desktop/gui/MainScreen/commands/toggleLayoutMoveMode.js diff --git a/.gitignore b/.gitignore index ac6bc1607d4..95ac3d2eb7b 100644 --- a/.gitignore +++ b/.gitignore @@ -210,6 +210,7 @@ packages/app-desktop/gui/MainScreen/commands/showNoteProperties.js packages/app-desktop/gui/MainScreen/commands/showPrompt.js packages/app-desktop/gui/MainScreen/commands/showShareFolderDialog.js packages/app-desktop/gui/MainScreen/commands/showShareNoteDialog.js +packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.test.js packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.js packages/app-desktop/gui/MainScreen/commands/toggleEditors.js packages/app-desktop/gui/MainScreen/commands/toggleLayoutMoveMode.js diff --git a/package.json b/package.json index fe935fdeed5..f61225448e3 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,8 @@ "eslint-plugin-github": "4.10.1", "http-server": "14.1.1", "node-gyp": "9.4.1", - "nodemon": "3.0.3" + "nodemon": "3.0.3", + "sharp": "0.33.2" }, "packageManager": "yarn@3.6.4", "resolutions": { diff --git a/packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.test.ts b/packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.test.ts new file mode 100644 index 00000000000..5165648132e --- /dev/null +++ b/packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.test.ts @@ -0,0 +1,40 @@ +import { runtime } from './showSpellCheckerMenu'; +import { AppState } from '../../../app.reducer'; + +describe('mapStateTotitle', () => { + + test('should return null if spellchecker.enabled is false', () => { + + const mockState: Partial = { + settings: { + 'spellChecker.enabled': false, + 'spellChecker.languages': ['en-GB'], + }, + }; + const result = runtime().mapStateToTitle(mockState); + expect(result).toBeNull(); + }); + + test('should return null if spellChecker.languages is empty', () => { + const mockState: Partial = { + settings: { + 'spellChecker.enabled': true, + 'spellChecker.languages': [], + }, + }; + const result = runtime().mapStateToTitle(mockState); + expect(result).toBeNull(); + }); + + test('should return list of countryDisplayName with correct format', () => { + const mockState: Partial = { + settings: { + 'spellChecker.enabled': true, + 'spellChecker.languages': ['en-GB', 'en-US', 'en-CA', 'es-ES', 'es-MX'], + }, + }; + const result = runtime().mapStateToTitle(mockState); + expect(result).toBe('en-GB, en-US, en-CA, es-ES, es-MX'); + + }); +}); diff --git a/packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.ts b/packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.ts index f52aaf8d07f..488ac43c905 100644 --- a/packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.ts +++ b/packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.ts @@ -30,8 +30,9 @@ export const runtime = (): CommandRuntime => { const s: string[] = []; // eslint-disable-next-line github/array-foreach -- Old code before rule was applied languages.forEach((language: string) => { - s.push(language.split('-')[0]); + s.push(language); }); + return s.join(', '); }, }; diff --git a/packages/app-desktop/jest.setup.js b/packages/app-desktop/jest.setup.js index 9446f6dde34..956b50225a9 100644 --- a/packages/app-desktop/jest.setup.js +++ b/packages/app-desktop/jest.setup.js @@ -22,6 +22,18 @@ jest.mock('@electron/remote', () => { }; }); +// Mocking bridge().Menu for showSpellCheckerMenu.test.ts +jest.mock('./services/bridge', () => ({ + __esModule: true, + default: () => ({ + Menu: { + buildFromTemplate: jest.fn().mockReturnValue({ + popup: jest.fn(), + }), + }, + }), +})); + // Import after mocking problematic libraries const { afterEachCleanUp, afterAllCleanUp } = require('@joplin/lib/testing/test-utils.js'); diff --git a/packages/tools/gulp/tasks/buildScriptIndexes.js b/packages/tools/gulp/tasks/buildScriptIndexes.js index bcbe910490e..c28340c0eea 100644 --- a/packages/tools/gulp/tasks/buildScriptIndexes.js +++ b/packages/tools/gulp/tasks/buildScriptIndexes.js @@ -12,7 +12,7 @@ async function processDirectory(dir, indexFilePath = null, typeScriptType = null const tsFiles = glob.sync('{**/*.ts,**/*.tsx}', { cwd: dir, - }).filter(f => `${dir}/${f}` !== indexFilePath); + }).filter(f => `${dir}/${f}` !== indexFilePath && !f.endsWith('.test.ts')); tsFiles.sort(); diff --git a/yarn.lock b/yarn.lock index 01f1e3f5bf2..fb9fafc4f2a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37327,6 +37327,7 @@ __metadata: node-gyp: 9.4.1 nodemon: 3.0.3 npm-package-json-lint: 7.1.0 + sharp: ^0.33.2 typescript: 5.2.2 languageName: unknown linkType: soft @@ -38055,7 +38056,7 @@ __metadata: languageName: node linkType: hard -"sharp@npm:0.33.2": +"sharp@npm:0.33.2, sharp@npm:^0.33.2": version: 0.33.2 resolution: "sharp@npm:0.33.2" dependencies: