Mailspring/spec/spellchecker-spec.jsx

78 lines
3.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* eslint global-require: 0 */
import {Spellchecker} from 'nylas-exports';
describe("Spellchecker", function spellcheckerTests() {
beforeEach(() => {
Spellchecker.handler.switchLanguage('en-US'); // Start with US English
});
// Note, on Linux, calling provideHintText can result in a Hunspell dictionary
// being downloaded. Typically this is fast but if this causes intermittent
// failures we should disable these specs on Linux.
[
{name: "French", code: "fr", sentence: "Ceci est une phrase avec quelques mots."},
{name: "German", code: "de", sentence: "Das ist ein Satz mit einigen Worten."},
{name: "Italian", code: "it", sentence: "Questa è una frase con alcune parole."},
{name: "Russian", code: "ru", sentence: "Это предложение с некоторыми словами."},
{name: "Spanish", code: "es", sentence: "Esta es una oración con algunas palabras."},
// English shouldn't be first since we start out as English.
{name: "English", code: "en", sentence: "This is a sentence with some words."},
].forEach(({name, code, sentence}) => {
it(`properly detects language when given a full sentence (${name})`, () => {
waitsForPromise(() =>
Spellchecker.handler.provideHintText(sentence)
)
runs(() => {
expect(Spellchecker.handler.currentSpellcheckerLanguage.startsWith(code)).toEqual(true)
})
});
});
it("knows whether a word is misspelled or not", () => {
const correctlySpelled = ["hello", "world", "create", "goodbye", "regards"]
const misspelled = ["mispelled", "particularily", "kelfiekd", "adlkdgiekdl"]
for (const word of correctlySpelled) {
expect(Spellchecker.isMisspelled(word)).toEqual(false);
}
for (const word of misspelled) {
expect(Spellchecker.isMisspelled(word)).toEqual(true);
}
});
it("provides suggestions for misspelled words", () => {
const suggestions = Spellchecker.handler.currentSpellchecker.getCorrectionsForMisspelling("mispelled")
expect(suggestions.length > 0).toEqual(true);
expect(suggestions[0]).toEqual('misspelled');
})
describe("when a custom word is added", () => {
this.customWord = "becaause"
beforeEach(() => {
expect(Spellchecker.isMisspelled(this.customWord)).toEqual(true)
Spellchecker.learnWord(this.customWord);
})
afterEach(() => {
Spellchecker.unlearnWord(this.customWord);
expect(Spellchecker.isMisspelled(this.customWord)).toEqual(true)
})
it("doesn't think it's misspelled", () => {
expect(Spellchecker.isMisspelled(this.customWord)).toEqual(false)
})
it("maintains it when switching languages", () => {
Spellchecker.handler.switchLanguage("de-DE")
expect(Spellchecker.isMisspelled(this.customWord)).toEqual(false);
Spellchecker.handler.switchLanguage("en-US")
expect(Spellchecker.isMisspelled(this.customWord)).toEqual(false);
})
it("maintains it across instances", () => {
const Spellchecker2 = require("../src/spellchecker").default;
expect(Spellchecker2.isMisspelled(this.customWord)).toEqual(false);
})
})
});