1
0
mirror of https://github.com/BoostIo/Boostnote synced 2026-01-06 05:29:21 +00:00

fixed eslint error & integrated with prettier as well as formatted the whole codebase (#3450)

This commit is contained in:
Nguyen Viet Hung
2020-02-05 13:28:27 +13:00
committed by GitHub
parent 051ce9e208
commit 592aca1539
186 changed files with 9233 additions and 5565 deletions

View File

@@ -1,18 +1,32 @@
let menuBuilderParameter
jest.mock('electron', () => {
return {remote: {require: jest.fn(() => { return {Menu: {buildFromTemplate: jest.fn((param) => { menuBuilderParameter = param })}} })}}
return {
remote: {
require: jest.fn(() => {
return {
Menu: {
buildFromTemplate: jest.fn(param => {
menuBuilderParameter = param
})
}
}
})
}
}
})
const spellcheck = require('browser/lib/spellcheck')
const buildEditorContextMenu = require('browser/lib/contextMenuBuilder').buildEditorContextMenu
const buildMarkdownPreviewContextMenu = require('browser/lib/contextMenuBuilder').buildMarkdownPreviewContextMenu
const buildEditorContextMenu = require('browser/lib/contextMenuBuilder')
.buildEditorContextMenu
const buildMarkdownPreviewContextMenu = require('browser/lib/contextMenuBuilder')
.buildMarkdownPreviewContextMenu
beforeEach(() => {
menuBuilderParameter = null
})
// Editor Context Menu
it('should make sure that no context menu is build if the passed editor instance was null', function () {
it('should make sure that no context menu is build if the passed editor instance was null', function() {
const event = {
pageX: 12,
pageY: 12
@@ -21,89 +35,96 @@ it('should make sure that no context menu is build if the passed editor instance
expect(menuBuilderParameter).toEqual(null)
})
it('should make sure that word suggestions are only requested if the word contained a typo', function () {
it('should make sure that word suggestions are only requested if the word contained a typo', function() {
spellcheck.getSpellingSuggestion = jest.fn()
const editor = jest.fn()
editor.coordsChar = jest.fn()
editor.findWordAt = jest.fn(() => { return {anchor: {}, head: {}} })
editor.findWordAt = jest.fn(() => {
return { anchor: {}, head: {} }
})
editor.getRange = jest.fn()
editor.findMarks = jest.fn(() => [])
const event = {
pageX: 12,
pageY: 12
}
const expectedMenuParameter = [ { role: 'cut' },
const expectedMenuParameter = [
{ role: 'cut' },
{ role: 'copy' },
{ role: 'paste' },
{ role: 'selectall' } ]
{ role: 'selectall' }
]
buildEditorContextMenu(editor, event)
expect(menuBuilderParameter).toEqual(expectedMenuParameter)
expect(spellcheck.getSpellingSuggestion).not.toHaveBeenCalled()
})
it('should make sure that word suggestions are only requested if the word contained a typo and no other mark', function () {
it('should make sure that word suggestions are only requested if the word contained a typo and no other mark', function() {
spellcheck.getSpellingSuggestion = jest.fn()
spellcheck.getCSSClassName = jest.fn(() => 'dummyErrorClassName')
const editor = jest.fn()
editor.coordsChar = jest.fn()
editor.findWordAt = jest.fn(() => { return {anchor: {}, head: {}} })
editor.findWordAt = jest.fn(() => {
return { anchor: {}, head: {} }
})
editor.getRange = jest.fn()
const dummyMarks = [
{className: 'someStupidClassName'}
]
const dummyMarks = [{ className: 'someStupidClassName' }]
editor.findMarks = jest.fn(() => dummyMarks)
const event = {
pageX: 12,
pageY: 12
}
const expectedMenuParameter = [ { role: 'cut' },
const expectedMenuParameter = [
{ role: 'cut' },
{ role: 'copy' },
{ role: 'paste' },
{ role: 'selectall' } ]
{ role: 'selectall' }
]
buildEditorContextMenu(editor, event)
expect(menuBuilderParameter).toEqual(expectedMenuParameter)
expect(spellcheck.getSpellingSuggestion).not.toHaveBeenCalled()
})
it('should make sure that word suggestions calls the right editor functions', function () {
it('should make sure that word suggestions calls the right editor functions', function() {
spellcheck.getSpellingSuggestion = jest.fn()
spellcheck.getCSSClassName = jest.fn(() => 'dummyErrorClassName')
const dummyCursor = {dummy: 'dummy'}
const dummyRange = {anchor: {test: 'test'}, head: {test2: 'test2'}}
const dummyCursor = { dummy: 'dummy' }
const dummyRange = { anchor: { test: 'test' }, head: { test2: 'test2' } }
const editor = jest.fn()
editor.coordsChar = jest.fn(() => dummyCursor)
editor.findWordAt = jest.fn(() => dummyRange)
editor.getRange = jest.fn()
const dummyMarks = [
{className: 'someStupidClassName'}
]
const dummyMarks = [{ className: 'someStupidClassName' }]
editor.findMarks = jest.fn(() => dummyMarks)
const event = {
pageX: 12,
pageY: 21
}
const expectedCoordsCharCall = {left: event.pageX, top: event.pageY}
const expectedCoordsCharCall = { left: event.pageX, top: event.pageY }
buildEditorContextMenu(editor, event)
expect(editor.coordsChar).toHaveBeenCalledWith(expectedCoordsCharCall)
expect(editor.findWordAt).toHaveBeenCalledWith(dummyCursor)
expect(editor.getRange).toHaveBeenCalledWith(dummyRange.anchor, dummyRange.head)
expect(editor.getRange).toHaveBeenCalledWith(
dummyRange.anchor,
dummyRange.head
)
})
it('should make sure that word suggestions creates a correct menu if there was an error', function () {
it('should make sure that word suggestions creates a correct menu if there was an error', function() {
const suggestions = ['test1', 'test2', 'Pustekuchen']
const errorClassName = 'errorCSS'
const wordToCorrect = 'pustekuchen'
const dummyMarks = [
{className: errorClassName}
]
const dummyMarks = [{ className: errorClassName }]
spellcheck.getSpellingSuggestion = jest.fn(() => suggestions)
spellcheck.getCSSClassName = jest.fn(() => errorClassName)
const editor = jest.fn()
editor.coordsChar = jest.fn()
editor.findWordAt = jest.fn(() => { return {anchor: {}, head: {}} })
editor.findWordAt = jest.fn(() => {
return { anchor: {}, head: {} }
})
editor.getRange = jest.fn(() => wordToCorrect)
editor.findMarks = jest.fn(() => [])
@@ -128,7 +149,7 @@ it('should make sure that word suggestions creates a correct menu if there was a
})
// Markdown Preview Context Menu
it('should make sure that no context menu is built if the Markdown Preview instance was null', function () {
it('should make sure that no context menu is built if the Markdown Preview instance was null', function() {
const event = {
pageX: 12,
pageY: 12

View File

@@ -6,14 +6,17 @@ global.window = document.defaultView
global.navigator = window.navigator
const Storage = require('dom-storage')
const localStorage = window.localStorage = global.localStorage = new Storage(null, { strict: true })
const localStorage = (window.localStorage = global.localStorage = new Storage(
null,
{ strict: true }
))
const path = require('path')
const TestDummy = require('../fixtures/TestDummy')
const sander = require('sander')
const os = require('os')
const storagePath = path.join(os.tmpdir(), 'test/find-storage')
test.beforeEach((t) => {
test.beforeEach(t => {
t.context.storage = TestDummy.dummyStorage(storagePath)
localStorage.setItem('storages', JSON.stringify([t.context.storage.cache]))
})
@@ -26,7 +29,7 @@ test('findStorage() should return a correct storage path(string)', t => {
t.is(findStorage(storageKey).path, storagePath)
})
test.after(function after () {
test.after(function after() {
localStorage.clear()
sander.rimrafSync(storagePath)
})

View File

@@ -20,7 +20,11 @@ test('findNoteTitle#find should return a correct title (string)', t => {
testCases.forEach(testCase => {
const [input, expected] = testCase
t.is(findNoteTitle(input, false), expected, `Test for find() input: ${input} expected: ${expected}`)
t.is(
findNoteTitle(input, false),
expected,
`Test for find() input: ${input} expected: ${expected}`
)
})
})
@@ -34,21 +38,32 @@ test('findNoteTitle#find should ignore front matter when enableFrontMatterTitle
testCases.forEach(testCase => {
const [input, expected] = testCase
t.is(findNoteTitle(input, false), expected, `Test for find() input: ${input} expected: ${expected}`)
t.is(
findNoteTitle(input, false),
expected,
`Test for find() input: ${input} expected: ${expected}`
)
})
})
test('findNoteTitle#find should respect front matter when enableFrontMatterTitle=true', t => {
// [input, expected]
const testCases = [
['---\nlayout: test\ntitle: hoge hoge hoge \n---\n# fuga', 'hoge hoge hoge'],
[
'---\nlayout: test\ntitle: hoge hoge hoge \n---\n# fuga',
'hoge hoge hoge'
],
['---\ntitle:hoge\n---\n# fuga', 'hoge'],
['title: fuga\n# hoge', '# hoge']
]
testCases.forEach(testCase => {
const [input, expected] = testCase
t.is(findNoteTitle(input, true), expected, `Test for find() input: ${input} expected: ${expected}`)
t.is(
findNoteTitle(input, true),
expected,
`Test for find() input: ${input} expected: ${expected}`
)
})
})
@@ -61,6 +76,10 @@ test('findNoteTitle#find should respect frontMatterTitleField when provided', t
testCases.forEach(testCase => {
const [input, expected] = testCase
t.is(findNoteTitle(input, true, 'custom'), expected, `Test for find() input: ${input} expected: ${expected}`)
t.is(
findNoteTitle(input, true, 'custom'),
expected,
`Test for find() input: ${input} expected: ${expected}`
)
})
})

View File

@@ -40,8 +40,15 @@ test('getTodoStatus should return a correct hash object', t => {
testCases.forEach(testCase => {
const [input, expected] = testCase
t.is(getTodoStatus(input).total, expected.total, `Test for getTodoStatus() input: ${input} expected: ${expected.total}`)
t.is(getTodoStatus(input).completed, expected.completed, `Test for getTodoStatus() input: ${input} expected: ${expected.completed}`)
t.is(
getTodoStatus(input).total,
expected.total,
`Test for getTodoStatus() input: ${input} expected: ${expected.total}`
)
t.is(
getTodoStatus(input).completed,
expected.completed,
`Test for getTodoStatus() input: ${input} expected: ${expected.completed}`
)
})
})

View File

@@ -9,16 +9,23 @@ test('htmlTextHelper#decodeEntities should return encoded text (string)', t => {
// [input, expected]
const testCases = [
['&lt;a href=', '<a href='],
['var test = &apos;test&apos;', 'var test = \'test\''],
['&lt;a href=&apos;https://boostnote.io&apos;&gt;Boostnote', '<a href=\'https://boostnote.io\'>Boostnote'],
['&lt;\\\\?php\n var = &apos;hoge&apos;;', '<\\\\?php\n var = \'hoge\';'],
['var test = &apos;test&apos;', "var test = 'test'"],
[
'&lt;a href=&apos;https://boostnote.io&apos;&gt;Boostnote',
"<a href='https://boostnote.io'>Boostnote"
],
['&lt;\\\\?php\n var = &apos;hoge&apos;;', "<\\\\?php\n var = 'hoge';"],
['&amp;', '&'],
['a&#36;&apos;', 'a\\$\'']
['a&#36;&apos;', "a\\$'"]
]
testCases.forEach(testCase => {
const [input, expected] = testCase
t.is(htmlTextHelper.decodeEntities(input), expected, `Test for decodeEntities() input: ${input} expected: ${expected}`)
t.is(
htmlTextHelper.decodeEntities(input),
expected,
`Test for decodeEntities() input: ${input} expected: ${expected}`
)
})
})
@@ -26,29 +33,40 @@ test('htmlTextHelper#decodeEntities() should return decoded text (string)', t =>
// [input, expected]
const testCases = [
['<a href=', '&lt;a href='],
['var test = \'test\'', 'var test = &apos;test&apos;'],
['<a href=\'https://boostnote.io\'>Boostnote', '&lt;a href=&apos;https://boostnote.io&apos;&gt;Boostnote'],
['<?php\n var = \'hoge\';', '&lt;&#63;php\n var = &apos;hoge&apos;;'],
['a$\'', 'a&#36;&apos;']
["var test = 'test'", 'var test = &apos;test&apos;'],
[
"<a href='https://boostnote.io'>Boostnote",
'&lt;a href=&apos;https://boostnote.io&apos;&gt;Boostnote'
],
["<?php\n var = 'hoge';", '&lt;&#63;php\n var = &apos;hoge&apos;;'],
["a$'", 'a&#36;&apos;']
]
testCases.forEach(testCase => {
const [input, expected] = testCase
t.is(htmlTextHelper.encodeEntities(input), expected, `Test for encodeEntities() input: ${input} expected: ${expected}`)
t.is(
htmlTextHelper.encodeEntities(input),
expected,
`Test for encodeEntities() input: ${input} expected: ${expected}`
)
})
})
// Integration test
test(t => {
const testCases = [
'var test = \'test\'',
'<a href=\'https://boostnote.io\'>Boostnote',
'<Component styleName=\'test\' />'
"var test = 'test'",
"<a href='https://boostnote.io'>Boostnote",
"<Component styleName='test' />"
]
testCases.forEach(testCase => {
const encodedText = htmlTextHelper.encodeEntities(testCase)
const decodedText = htmlTextHelper.decodeEntities(encodedText)
t.is(decodedText, testCase, 'Integration test through encodedText() and decodedText()')
t.is(
decodedText,
testCase,
'Integration test through encodedText() and decodedText()'
)
})
})

View File

@@ -42,6 +42,10 @@ test(t => {
testCases.forEach(testCase => {
const [input, expected] = testCase
t.is(markdown.strip(input), expected, `Test for strip() input: ${input} expected: ${expected}`)
t.is(
markdown.strip(input),
expected,
`Test for strip() input: ${input} expected: ${expected}`
)
})
})

View File

@@ -261,7 +261,11 @@ this is a text
const expectedToc = testCase[2].trim()
const generatedToc = markdownToc.generate(inputMd)
t.is(generatedToc, expectedToc, `generate test : ${title} , generated : ${EOL}${generatedToc}, expected : ${EOL}${expectedToc}`)
t.is(
generatedToc,
expectedToc,
`generate test : ${title} , generated : ${EOL}${generatedToc}, expected : ${EOL}${expectedToc}`
)
})
})
@@ -279,7 +283,7 @@ test(t => {
const testCases = [
[
`***************************** Empty note, cursor at the top`,
{line: 0, ch: 0},
{ line: 0, ch: 0 },
``,
`
<!-- toc -->
@@ -291,7 +295,7 @@ test(t => {
],
[
`***************************** Two level note,TOC at the beginning `,
{line: 0, ch: 0},
{ line: 0, ch: 0 },
`
# one
this is a level one text
@@ -329,7 +333,7 @@ this is a level one text
],
[
`***************************** Two level note, cursor just after 'header text' `,
{line: 1, ch: 12},
{ line: 1, ch: 12 },
`
# header
header text
@@ -373,7 +377,7 @@ this is a level one text
],
[
`***************************** Two level note, cursor at empty line under 'header text' `,
{line: 2, ch: 0},
{ line: 2, ch: 0 },
`
# header
header text
@@ -416,7 +420,7 @@ this is a level one text
],
[
`***************************** Two level note, cursor just before 'text' word`,
{line: 1, ch: 8},
{ line: 1, ch: 8 },
`
# header
header text
@@ -461,7 +465,7 @@ this is a level one text
],
[
`***************************** Already generated TOC without header file, regenerate TOC in place, no changes`,
{line: 13, ch: 0},
{ line: 13, ch: 0 },
`
# header
header text
@@ -511,7 +515,7 @@ this is a level one text
],
[
`***************************** Already generated TOC, needs updating in place`,
{line: 0, ch: 0},
{ line: 0, ch: 0 },
`
# header
header text
@@ -561,7 +565,7 @@ this is a level one text
],
[
`***************************** Document with cursor at the last line, expecting empty TOC `,
{line: 13, ch: 30},
{ line: 13, ch: 30 },
`
# header
header text
@@ -602,7 +606,7 @@ this is a level one text
],
[
`***************************** Empty, not actual TOC , should be supplemented with two new points beneath`,
{line: 0, ch: 0},
{ line: 0, ch: 0 },
`
# header
header text
@@ -663,6 +667,10 @@ this is a level one text
editor.setCursor(cursor)
markdownToc.generateInEditor(editor)
t.is(expectedMd, editor.getValue(), `generateInEditor test : ${title} , generated : ${EOL}${editor.getValue()}, expected : ${EOL}${expectedMd}`)
t.is(
expectedMd,
editor.getValue(),
`generateInEditor test : ${title} , generated : ${EOL}${editor.getValue()}, expected : ${EOL}${expectedMd}`
)
})
})

View File

@@ -12,5 +12,8 @@ test('normalizeEditorFontFamily() should return default font family (string[])',
test('normalizeEditorFontFamily(["hoge", "huga"]) should return default font family connected with arg.', t => {
const arg = 'font1, font2'
t.is(normalizeEditorFontFamily(arg), `${arg}, ${defaultEditorFontFamily.join(', ')}`)
t.is(
normalizeEditorFontFamily(arg),
`${arg}, ${defaultEditorFontFamily.join(', ')}`
)
})

View File

@@ -4,8 +4,42 @@ const { parse } = require('browser/lib/RcParser')
// Unit test
test('RcParser should return a json object', t => {
const validJson = { 'editor': { 'keyMap': 'vim', 'switchPreview': 'BLUR', 'theme': 'monokai' }, 'hotkey': { 'toggleMain': 'Control + L' }, 'listWidth': 135, 'navWidth': 135 }
const allJson = { 'amaEnabled': true, 'editor': { 'fontFamily': 'Monaco, Consolas', 'fontSize': '14', 'indentSize': '2', 'indentType': 'space', 'keyMap': 'vim', 'switchPreview': 'BLUR', 'theme': 'monokai' }, 'hotkey': { 'toggleMain': 'Cmd + Alt + L' }, 'isSideNavFolded': false, 'listStyle': 'DEFAULT', 'listWidth': 174, 'navWidth': 200, 'preview': { 'codeBlockTheme': 'dracula', 'fontFamily': 'Lato', 'fontSize': '14', 'lineNumber': true }, 'sortBy': { 'default': 'UPDATED_AT' }, 'ui': { 'defaultNote': 'ALWAYS_ASK', 'disableDirectWrite': false, 'theme': 'default' }, 'zoom': 1 }
const validJson = {
editor: { keyMap: 'vim', switchPreview: 'BLUR', theme: 'monokai' },
hotkey: { toggleMain: 'Control + L' },
listWidth: 135,
navWidth: 135
}
const allJson = {
amaEnabled: true,
editor: {
fontFamily: 'Monaco, Consolas',
fontSize: '14',
indentSize: '2',
indentType: 'space',
keyMap: 'vim',
switchPreview: 'BLUR',
theme: 'monokai'
},
hotkey: { toggleMain: 'Cmd + Alt + L' },
isSideNavFolded: false,
listStyle: 'DEFAULT',
listWidth: 174,
navWidth: 200,
preview: {
codeBlockTheme: 'dracula',
fontFamily: 'Lato',
fontSize: '14',
lineNumber: true
},
sortBy: { default: 'UPDATED_AT' },
ui: {
defaultNote: 'ALWAYS_ASK',
disableDirectWrite: false,
theme: 'default'
},
zoom: 1
}
// [input, expected]
const validTestCases = [
@@ -13,21 +47,27 @@ test('RcParser should return a json object', t => {
['.boostnoterc.all', allJson]
]
const invalidTestCases = [
['.boostnoterc.invalid', {}]
]
const invalidTestCases = [['.boostnoterc.invalid', {}]]
validTestCases.forEach(validTestCase => {
const [input, expected] = validTestCase
t.is(parse(filePath(input)).editor.keyMap, expected.editor.keyMap, `Test for getTodoStatus() input: ${input} expected: ${expected.keyMap}`)
t.is(
parse(filePath(input)).editor.keyMap,
expected.editor.keyMap,
`Test for getTodoStatus() input: ${input} expected: ${expected.keyMap}`
)
})
invalidTestCases.forEach(invalidTestCase => {
const [input, expected] = invalidTestCase
t.is(parse(filePath(input)).editor, expected.editor, `Test for getTodoStatus() input: ${input} expected: ${expected.editor}`)
t.is(
parse(filePath(input)).editor,
expected.editor,
`Test for getTodoStatus() input: ${input} expected: ${expected.editor}`
)
})
})
function filePath (filename) {
function filePath(filename) {
return path.join(`${__dirname}/boostnoterc`, filename)
}

View File

@@ -3,14 +3,21 @@ import searchFromNotes from 'browser/lib/search'
import { dummyNote } from '../fixtures/TestDummy'
import _ from 'lodash'
const pickContents = (notes) => notes.map((note) => { return note.content })
const pickContents = notes =>
notes.map(note => {
return note.content
})
let notes = []
let note1, note2, note3
test.before(t => {
const data1 = { type: 'MARKDOWN_NOTE', content: 'content1', tags: ['tag1'] }
const data2 = { type: 'MARKDOWN_NOTE', content: 'content1\ncontent2', tags: ['tag1', 'tag2'] }
const data2 = {
type: 'MARKDOWN_NOTE',
content: 'content1\ncontent2',
tags: ['tag1', 'tag2']
}
const data3 = { type: 'MARKDOWN_NOTE', content: '#content4', tags: ['tag1'] }
note1 = dummyNote(data1)
@@ -34,12 +41,12 @@ test('it can find notes by tags and words', t => {
['#tag2 content1', [note2.content]],
['content1 #tag2', [note2.content]]
]
const testWithTagsWithoutHash = testWithTags.map(function (testCase) {
const testWithTagsWithoutHash = testWithTags.map(function(testCase) {
return [testCase[0].replace(/#/g, ''), testCase[1]]
})
const testCases = testWithTags.concat(testWithTagsWithoutHash)
testCases.forEach((testCase) => {
testCases.forEach(testCase => {
const [input, expectedContents] = testCase
const results = searchFromNotes(notes, input)
t.true(_.isEqual(pickContents(results).sort(), expectedContents.sort()))

View File

@@ -13,7 +13,7 @@ test('alphabet and digit', t => {
test('should delete unavailable symbols', t => {
const availableSymbols = '_-'
const testCase = availableSymbols + '][!\'#$%&()*+,./:;<=>?@\\^{|}~`'
const testCase = availableSymbols + "][!'#$%&()*+,./:;<=>?@\\^{|}~`"
const decodeSlug = decodeURI(slugify(testCase))
t.true(decodeSlug === availableSymbols)

View File

@@ -9,12 +9,12 @@ beforeEach(() => {
Typo.mockClear()
})
it('should test that checkWord does not marks words that do not contain a typo', function () {
it('should test that checkWord does not marks words that do not contain a typo', function() {
const testWord = 'testWord'
const editor = jest.fn()
editor.getRange = jest.fn(() => testWord)
editor.markText = jest.fn()
const range = {anchor: {line: 1, ch: 0}, head: {line: 1, ch: 10}}
const range = { anchor: { line: 1, ch: 0 }, head: { line: 1, ch: 10 } }
const mockDictionary = jest.fn()
mockDictionary.check = jest.fn(() => true)
systemUnderTest.setDictionaryForTestsOnly(mockDictionary)
@@ -26,12 +26,12 @@ it('should test that checkWord does not marks words that do not contain a typo',
expect(editor.markText).not.toHaveBeenCalled()
})
it('should test that checkWord should marks words that contain a typo', function () {
it('should test that checkWord should marks words that contain a typo', function() {
const testWord = 'testWord'
const editor = jest.fn()
editor.getRange = jest.fn(() => testWord)
editor.markText = jest.fn()
const range = {anchor: {line: 1, ch: 0}, head: {line: 1, ch: 10}}
const range = { anchor: { line: 1, ch: 0 }, head: { line: 1, ch: 10 } }
const mockDictionary = jest.fn()
mockDictionary.check = jest.fn(() => false)
systemUnderTest.setDictionaryForTestsOnly(mockDictionary)
@@ -40,14 +40,16 @@ it('should test that checkWord should marks words that contain a typo', function
expect(editor.getRange).toHaveBeenCalledWith(range.anchor, range.head)
expect(mockDictionary.check).toHaveBeenCalledWith(testWord)
expect(editor.markText).toHaveBeenCalledWith(range.anchor, range.head, {'className': systemUnderTest.CSS_ERROR_CLASS})
expect(editor.markText).toHaveBeenCalledWith(range.anchor, range.head, {
className: systemUnderTest.CSS_ERROR_CLASS
})
})
it('should test that setLanguage clears all marks', function () {
it('should test that setLanguage clears all marks', function() {
const dummyMarks = [
{clear: jest.fn()},
{clear: jest.fn()},
{clear: jest.fn()}
{ clear: jest.fn() },
{ clear: jest.fn() },
{ clear: jest.fn() }
]
const editor = jest.fn()
editor.getAllMarks = jest.fn(() => dummyMarks)
@@ -60,10 +62,12 @@ it('should test that setLanguage clears all marks', function () {
}
})
it('should test that setLanguage with DISABLED as a lang argument should not load any dictionary and not check the whole document', function () {
it('should test that setLanguage with DISABLED as a lang argument should not load any dictionary and not check the whole document', function() {
const editor = jest.fn()
editor.getAllMarks = jest.fn(() => [])
const checkWholeDocumentSpy = jest.spyOn(systemUnderTest, 'checkWholeDocument').mockImplementation()
const checkWholeDocumentSpy = jest
.spyOn(systemUnderTest, 'checkWholeDocument')
.mockImplementation()
systemUnderTest.setLanguage(editor, systemUnderTest.SPELLCHECK_DISABLED)
@@ -72,38 +76,45 @@ it('should test that setLanguage with DISABLED as a lang argument should not loa
checkWholeDocumentSpy.mockRestore()
})
it('should test that setLanguage loads the correct dictionary', function () {
it('should test that setLanguage loads the correct dictionary', function() {
const editor = jest.fn()
editor.getAllMarks = jest.fn(() => [])
const lang = 'de_DE'
const checkWholeDocumentSpy = jest.spyOn(systemUnderTest, 'checkWholeDocument').mockImplementation()
const checkWholeDocumentSpy = jest
.spyOn(systemUnderTest, 'checkWholeDocument')
.mockImplementation()
expect(Typo).not.toHaveBeenCalled()
systemUnderTest.setLanguage(editor, lang)
expect(Typo).toHaveBeenCalledWith(lang, false, false, expect.anything())
expect(Typo.mock.calls[0][3].dictionaryPath).toEqual(systemUnderTest.DICTIONARY_PATH)
expect(Typo.mock.calls[0][3].dictionaryPath).toEqual(
systemUnderTest.DICTIONARY_PATH
)
expect(Typo.mock.calls[0][3].asyncLoad).toBe(true)
checkWholeDocumentSpy.mockRestore()
})
it('should test that checkMultiLineRange performs checks for each word in the stated range', function () {
it('should test that checkMultiLineRange performs checks for each word in the stated range', function() {
const dic = jest.fn()
dic.check = jest.fn()
systemUnderTest.setDictionaryForTestsOnly(dic)
document.body.createTextRange = jest.fn(() => document.createElement('textArea'))
document.body.createTextRange = jest.fn(() =>
document.createElement('textArea')
)
const editor = new CodeMirror(jest.fn())
editor.setValue(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vehicula sem id tempor sollicitudin. Sed eu sagittis ligula. Maecenas sit amet velit enim. Etiam massa urna, elementum et sapien sit amet, vestibulum pharetra lectus. Nulla consequat malesuada nunc in aliquam. Vivamus faucibus orci et faucibus maximus. Pellentesque at dolor ac mi mollis molestie in facilisis nisl.\n' +
'\n' +
'Nam id lacus et elit sollicitudin vestibulum. Phasellus blandit laoreet odio \n' +
'Ut tristique risus et mi tristique, in aliquam odio laoreet. Curabitur nunc felis, mollis ut laoreet quis, finibus in nibh. Proin urna risus, rhoncus at diam interdum, maximus vestibulum nulla. Maecenas ut rutrum nulla, vel finibus est. Etiam placerat mi et libero volutpat, tristique rhoncus felis volutpat. Donec quam erat, congue quis ligula eget, mollis aliquet elit. Vestibulum feugiat odio sit amet ex dignissim, sit amet vulputate lectus iaculis. Sed tempus id enim at eleifend. Nullam bibendum eleifend congue. Pellentesque varius arcu elit, at accumsan dolor ultrices vitae. Etiam condimentum lectus id dolor fringilla tempor. Aliquam nec fringilla sem. Fusce ac quam porta, molestie nunc sed, semper nisl. Curabitur luctus sem in dapibus gravida. Suspendisse scelerisque mollis rutrum. Proin lacinia dolor sit amet ornare condimentum.\n' +
'\n' +
'In ex neque, volutpat quis ullamcorper in, vestibulum vel ligula. Quisque lobortis eget neque quis ullamcorper. Nunc purus lorem, scelerisque in malesuada id, congue a magna. Donec rutrum maximus egestas. Nulla ornare libero quis odio ultricies iaculis. Suspendisse consectetur bibendum purus ac blandit. Donec et neque quis dolor eleifend tempus. Fusce fringilla risus id venenatis rutrum. Mauris commodo posuere ipsum, sit amet hendrerit risus lacinia quis. Aenean placerat ultricies ante id dapibus. Donec imperdiet eros quis porttitor accumsan. Vestibulum ut nulla luctus velit feugiat elementum. Nam vel pharetra nisl. Nullam risus tellus, tempor quis ipsum et, pretium rutrum ipsum.\n' +
'\n' +
'Fusce molestie leo at facilisis mollis. Vivamus iaculis facilisis fermentum. Vivamus blandit id nisi sit amet porta. Nunc luctus porta blandit. Sed ac consequat eros, eu fringilla lorem. In blandit pharetra sollicitudin. Vivamus placerat risus ut ex faucibus, nec vehicula sapien imperdiet. Praesent luctus, leo eget ultrices cursus, neque ante porttitor mauris, id tempus tellus urna at ex. Curabitur elementum id quam vitae condimentum. Proin sit amet magna vel metus blandit iaculis. Phasellus viverra libero in lacus gravida, id laoreet ligula dapibus. Cras commodo arcu eget mi dignissim, et lobortis elit faucibus. Suspendisse potenti. ')
const rangeFrom = {line: 2, ch: 4}
const rangeTo = {line: 3, ch: 36}
'\n' +
'Nam id lacus et elit sollicitudin vestibulum. Phasellus blandit laoreet odio \n' +
'Ut tristique risus et mi tristique, in aliquam odio laoreet. Curabitur nunc felis, mollis ut laoreet quis, finibus in nibh. Proin urna risus, rhoncus at diam interdum, maximus vestibulum nulla. Maecenas ut rutrum nulla, vel finibus est. Etiam placerat mi et libero volutpat, tristique rhoncus felis volutpat. Donec quam erat, congue quis ligula eget, mollis aliquet elit. Vestibulum feugiat odio sit amet ex dignissim, sit amet vulputate lectus iaculis. Sed tempus id enim at eleifend. Nullam bibendum eleifend congue. Pellentesque varius arcu elit, at accumsan dolor ultrices vitae. Etiam condimentum lectus id dolor fringilla tempor. Aliquam nec fringilla sem. Fusce ac quam porta, molestie nunc sed, semper nisl. Curabitur luctus sem in dapibus gravida. Suspendisse scelerisque mollis rutrum. Proin lacinia dolor sit amet ornare condimentum.\n' +
'\n' +
'In ex neque, volutpat quis ullamcorper in, vestibulum vel ligula. Quisque lobortis eget neque quis ullamcorper. Nunc purus lorem, scelerisque in malesuada id, congue a magna. Donec rutrum maximus egestas. Nulla ornare libero quis odio ultricies iaculis. Suspendisse consectetur bibendum purus ac blandit. Donec et neque quis dolor eleifend tempus. Fusce fringilla risus id venenatis rutrum. Mauris commodo posuere ipsum, sit amet hendrerit risus lacinia quis. Aenean placerat ultricies ante id dapibus. Donec imperdiet eros quis porttitor accumsan. Vestibulum ut nulla luctus velit feugiat elementum. Nam vel pharetra nisl. Nullam risus tellus, tempor quis ipsum et, pretium rutrum ipsum.\n' +
'\n' +
'Fusce molestie leo at facilisis mollis. Vivamus iaculis facilisis fermentum. Vivamus blandit id nisi sit amet porta. Nunc luctus porta blandit. Sed ac consequat eros, eu fringilla lorem. In blandit pharetra sollicitudin. Vivamus placerat risus ut ex faucibus, nec vehicula sapien imperdiet. Praesent luctus, leo eget ultrices cursus, neque ante porttitor mauris, id tempus tellus urna at ex. Curabitur elementum id quam vitae condimentum. Proin sit amet magna vel metus blandit iaculis. Phasellus viverra libero in lacus gravida, id laoreet ligula dapibus. Cras commodo arcu eget mi dignissim, et lobortis elit faucibus. Suspendisse potenti. '
)
const rangeFrom = { line: 2, ch: 4 }
const rangeTo = { line: 3, ch: 36 }
systemUnderTest.checkMultiLineRange(editor, rangeFrom, rangeTo)
@@ -121,23 +132,26 @@ it('should test that checkMultiLineRange performs checks for each word in the st
expect(dic.check.mock.calls[10][0]).toEqual('tristique')
})
it('should test that checkMultiLineRange works correct even when the range is inverted (from is the later position and to the lower)', function () {
it('should test that checkMultiLineRange works correct even when the range is inverted (from is the later position and to the lower)', function() {
const dic = jest.fn()
dic.check = jest.fn()
systemUnderTest.setDictionaryForTestsOnly(dic)
document.body.createTextRange = jest.fn(() => document.createElement('textArea'))
document.body.createTextRange = jest.fn(() =>
document.createElement('textArea')
)
const editor = new CodeMirror(jest.fn())
editor.setValue(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vehicula sem id tempor sollicitudin. Sed eu sagittis ligula. Maecenas sit amet velit enim. Etiam massa urna, elementum et sapien sit amet, vestibulum pharetra lectus. Nulla consequat malesuada nunc in aliquam. Vivamus faucibus orci et faucibus maximus. Pellentesque at dolor ac mi mollis molestie in facilisis nisl.\n' +
'\n' +
'Nam id lacus et elit sollicitudin vestibulum. Phasellus blandit laoreet odio \n' +
'Ut tristique risus et mi tristique, in aliquam odio laoreet. Curabitur nunc felis, mollis ut laoreet quis, finibus in nibh. Proin urna risus, rhoncus at diam interdum, maximus vestibulum nulla. Maecenas ut rutrum nulla, vel finibus est. Etiam placerat mi et libero volutpat, tristique rhoncus felis volutpat. Donec quam erat, congue quis ligula eget, mollis aliquet elit. Vestibulum feugiat odio sit amet ex dignissim, sit amet vulputate lectus iaculis. Sed tempus id enim at eleifend. Nullam bibendum eleifend congue. Pellentesque varius arcu elit, at accumsan dolor ultrices vitae. Etiam condimentum lectus id dolor fringilla tempor. Aliquam nec fringilla sem. Fusce ac quam porta, molestie nunc sed, semper nisl. Curabitur luctus sem in dapibus gravida. Suspendisse scelerisque mollis rutrum. Proin lacinia dolor sit amet ornare condimentum.\n' +
'\n' +
'In ex neque, volutpat quis ullamcorper in, vestibulum vel ligula. Quisque lobortis eget neque quis ullamcorper. Nunc purus lorem, scelerisque in malesuada id, congue a magna. Donec rutrum maximus egestas. Nulla ornare libero quis odio ultricies iaculis. Suspendisse consectetur bibendum purus ac blandit. Donec et neque quis dolor eleifend tempus. Fusce fringilla risus id venenatis rutrum. Mauris commodo posuere ipsum, sit amet hendrerit risus lacinia quis. Aenean placerat ultricies ante id dapibus. Donec imperdiet eros quis porttitor accumsan. Vestibulum ut nulla luctus velit feugiat elementum. Nam vel pharetra nisl. Nullam risus tellus, tempor quis ipsum et, pretium rutrum ipsum.\n' +
'\n' +
'Fusce molestie leo at facilisis mollis. Vivamus iaculis facilisis fermentum. Vivamus blandit id nisi sit amet porta. Nunc luctus porta blandit. Sed ac consequat eros, eu fringilla lorem. In blandit pharetra sollicitudin. Vivamus placerat risus ut ex faucibus, nec vehicula sapien imperdiet. Praesent luctus, leo eget ultrices cursus, neque ante porttitor mauris, id tempus tellus urna at ex. Curabitur elementum id quam vitae condimentum. Proin sit amet magna vel metus blandit iaculis. Phasellus viverra libero in lacus gravida, id laoreet ligula dapibus. Cras commodo arcu eget mi dignissim, et lobortis elit faucibus. Suspendisse potenti. ')
const rangeFrom = {line: 3, ch: 36}
const rangeTo = {line: 2, ch: 4}
'\n' +
'Nam id lacus et elit sollicitudin vestibulum. Phasellus blandit laoreet odio \n' +
'Ut tristique risus et mi tristique, in aliquam odio laoreet. Curabitur nunc felis, mollis ut laoreet quis, finibus in nibh. Proin urna risus, rhoncus at diam interdum, maximus vestibulum nulla. Maecenas ut rutrum nulla, vel finibus est. Etiam placerat mi et libero volutpat, tristique rhoncus felis volutpat. Donec quam erat, congue quis ligula eget, mollis aliquet elit. Vestibulum feugiat odio sit amet ex dignissim, sit amet vulputate lectus iaculis. Sed tempus id enim at eleifend. Nullam bibendum eleifend congue. Pellentesque varius arcu elit, at accumsan dolor ultrices vitae. Etiam condimentum lectus id dolor fringilla tempor. Aliquam nec fringilla sem. Fusce ac quam porta, molestie nunc sed, semper nisl. Curabitur luctus sem in dapibus gravida. Suspendisse scelerisque mollis rutrum. Proin lacinia dolor sit amet ornare condimentum.\n' +
'\n' +
'In ex neque, volutpat quis ullamcorper in, vestibulum vel ligula. Quisque lobortis eget neque quis ullamcorper. Nunc purus lorem, scelerisque in malesuada id, congue a magna. Donec rutrum maximus egestas. Nulla ornare libero quis odio ultricies iaculis. Suspendisse consectetur bibendum purus ac blandit. Donec et neque quis dolor eleifend tempus. Fusce fringilla risus id venenatis rutrum. Mauris commodo posuere ipsum, sit amet hendrerit risus lacinia quis. Aenean placerat ultricies ante id dapibus. Donec imperdiet eros quis porttitor accumsan. Vestibulum ut nulla luctus velit feugiat elementum. Nam vel pharetra nisl. Nullam risus tellus, tempor quis ipsum et, pretium rutrum ipsum.\n' +
'\n' +
'Fusce molestie leo at facilisis mollis. Vivamus iaculis facilisis fermentum. Vivamus blandit id nisi sit amet porta. Nunc luctus porta blandit. Sed ac consequat eros, eu fringilla lorem. In blandit pharetra sollicitudin. Vivamus placerat risus ut ex faucibus, nec vehicula sapien imperdiet. Praesent luctus, leo eget ultrices cursus, neque ante porttitor mauris, id tempus tellus urna at ex. Curabitur elementum id quam vitae condimentum. Proin sit amet magna vel metus blandit iaculis. Phasellus viverra libero in lacus gravida, id laoreet ligula dapibus. Cras commodo arcu eget mi dignissim, et lobortis elit faucibus. Suspendisse potenti. '
)
const rangeFrom = { line: 3, ch: 36 }
const rangeTo = { line: 2, ch: 4 }
systemUnderTest.checkMultiLineRange(editor, rangeFrom, rangeTo)
@@ -155,23 +169,26 @@ it('should test that checkMultiLineRange works correct even when the range is in
expect(dic.check.mock.calls[10][0]).toEqual('tristique')
})
it('should test that checkMultiLineRange works for single line', function () {
it('should test that checkMultiLineRange works for single line', function() {
const dic = jest.fn()
dic.check = jest.fn()
systemUnderTest.setDictionaryForTestsOnly(dic)
document.body.createTextRange = jest.fn(() => document.createElement('textArea'))
document.body.createTextRange = jest.fn(() =>
document.createElement('textArea')
)
const editor = new CodeMirror(jest.fn())
editor.setValue(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vehicula sem id tempor sollicitudin. Sed eu sagittis ligula. Maecenas sit amet velit enim. Etiam massa urna, elementum et sapien sit amet, vestibulum pharetra lectus. Nulla consequat malesuada nunc in aliquam. Vivamus faucibus orci et faucibus maximus. Pellentesque at dolor ac mi mollis molestie in facilisis nisl.\n' +
'\n' +
'Nam id lacus et elit sollicitudin vestibulum. Phasellus blandit laoreet odio \n' +
'Ut tristique risus et mi tristique, in aliquam odio laoreet. Curabitur nunc felis, mollis ut laoreet quis, finibus in nibh. Proin urna risus, rhoncus at diam interdum, maximus vestibulum nulla. Maecenas ut rutrum nulla, vel finibus est. Etiam placerat mi et libero volutpat, tristique rhoncus felis volutpat. Donec quam erat, congue quis ligula eget, mollis aliquet elit. Vestibulum feugiat odio sit amet ex dignissim, sit amet vulputate lectus iaculis. Sed tempus id enim at eleifend. Nullam bibendum eleifend congue. Pellentesque varius arcu elit, at accumsan dolor ultrices vitae. Etiam condimentum lectus id dolor fringilla tempor. Aliquam nec fringilla sem. Fusce ac quam porta, molestie nunc sed, semper nisl. Curabitur luctus sem in dapibus gravida. Suspendisse scelerisque mollis rutrum. Proin lacinia dolor sit amet ornare condimentum.\n' +
'\n' +
'In ex neque, volutpat quis ullamcorper in, vestibulum vel ligula. Quisque lobortis eget neque quis ullamcorper. Nunc purus lorem, scelerisque in malesuada id, congue a magna. Donec rutrum maximus egestas. Nulla ornare libero quis odio ultricies iaculis. Suspendisse consectetur bibendum purus ac blandit. Donec et neque quis dolor eleifend tempus. Fusce fringilla risus id venenatis rutrum. Mauris commodo posuere ipsum, sit amet hendrerit risus lacinia quis. Aenean placerat ultricies ante id dapibus. Donec imperdiet eros quis porttitor accumsan. Vestibulum ut nulla luctus velit feugiat elementum. Nam vel pharetra nisl. Nullam risus tellus, tempor quis ipsum et, pretium rutrum ipsum.\n' +
'\n' +
'Fusce molestie leo at facilisis mollis. Vivamus iaculis facilisis fermentum. Vivamus blandit id nisi sit amet porta. Nunc luctus porta blandit. Sed ac consequat eros, eu fringilla lorem. In blandit pharetra sollicitudin. Vivamus placerat risus ut ex faucibus, nec vehicula sapien imperdiet. Praesent luctus, leo eget ultrices cursus, neque ante porttitor mauris, id tempus tellus urna at ex. Curabitur elementum id quam vitae condimentum. Proin sit amet magna vel metus blandit iaculis. Phasellus viverra libero in lacus gravida, id laoreet ligula dapibus. Cras commodo arcu eget mi dignissim, et lobortis elit faucibus. Suspendisse potenti. ')
const rangeFrom = {line: 5, ch: 14}
const rangeTo = {line: 5, ch: 39}
'\n' +
'Nam id lacus et elit sollicitudin vestibulum. Phasellus blandit laoreet odio \n' +
'Ut tristique risus et mi tristique, in aliquam odio laoreet. Curabitur nunc felis, mollis ut laoreet quis, finibus in nibh. Proin urna risus, rhoncus at diam interdum, maximus vestibulum nulla. Maecenas ut rutrum nulla, vel finibus est. Etiam placerat mi et libero volutpat, tristique rhoncus felis volutpat. Donec quam erat, congue quis ligula eget, mollis aliquet elit. Vestibulum feugiat odio sit amet ex dignissim, sit amet vulputate lectus iaculis. Sed tempus id enim at eleifend. Nullam bibendum eleifend congue. Pellentesque varius arcu elit, at accumsan dolor ultrices vitae. Etiam condimentum lectus id dolor fringilla tempor. Aliquam nec fringilla sem. Fusce ac quam porta, molestie nunc sed, semper nisl. Curabitur luctus sem in dapibus gravida. Suspendisse scelerisque mollis rutrum. Proin lacinia dolor sit amet ornare condimentum.\n' +
'\n' +
'In ex neque, volutpat quis ullamcorper in, vestibulum vel ligula. Quisque lobortis eget neque quis ullamcorper. Nunc purus lorem, scelerisque in malesuada id, congue a magna. Donec rutrum maximus egestas. Nulla ornare libero quis odio ultricies iaculis. Suspendisse consectetur bibendum purus ac blandit. Donec et neque quis dolor eleifend tempus. Fusce fringilla risus id venenatis rutrum. Mauris commodo posuere ipsum, sit amet hendrerit risus lacinia quis. Aenean placerat ultricies ante id dapibus. Donec imperdiet eros quis porttitor accumsan. Vestibulum ut nulla luctus velit feugiat elementum. Nam vel pharetra nisl. Nullam risus tellus, tempor quis ipsum et, pretium rutrum ipsum.\n' +
'\n' +
'Fusce molestie leo at facilisis mollis. Vivamus iaculis facilisis fermentum. Vivamus blandit id nisi sit amet porta. Nunc luctus porta blandit. Sed ac consequat eros, eu fringilla lorem. In blandit pharetra sollicitudin. Vivamus placerat risus ut ex faucibus, nec vehicula sapien imperdiet. Praesent luctus, leo eget ultrices cursus, neque ante porttitor mauris, id tempus tellus urna at ex. Curabitur elementum id quam vitae condimentum. Proin sit amet magna vel metus blandit iaculis. Phasellus viverra libero in lacus gravida, id laoreet ligula dapibus. Cras commodo arcu eget mi dignissim, et lobortis elit faucibus. Suspendisse potenti. '
)
const rangeFrom = { line: 5, ch: 14 }
const rangeTo = { line: 5, ch: 39 }
systemUnderTest.checkMultiLineRange(editor, rangeFrom, rangeTo)
@@ -181,23 +198,26 @@ it('should test that checkMultiLineRange works for single line', function () {
expect(dic.check.mock.calls[2][0]).toEqual('ullamcorper')
})
it('should test that checkMultiLineRange works for single word', function () {
it('should test that checkMultiLineRange works for single word', function() {
const dic = jest.fn()
dic.check = jest.fn()
systemUnderTest.setDictionaryForTestsOnly(dic)
document.body.createTextRange = jest.fn(() => document.createElement('textArea'))
document.body.createTextRange = jest.fn(() =>
document.createElement('textArea')
)
const editor = new CodeMirror(jest.fn())
editor.setValue(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vehicula sem id tempor sollicitudin. Sed eu sagittis ligula. Maecenas sit amet velit enim. Etiam massa urna, elementum et sapien sit amet, vestibulum pharetra lectus. Nulla consequat malesuada nunc in aliquam. Vivamus faucibus orci et faucibus maximus. Pellentesque at dolor ac mi mollis molestie in facilisis nisl.\n' +
'\n' +
'Nam id lacus et elit sollicitudin vestibulum. Phasellus blandit laoreet odio \n' +
'Ut tristique risus et mi tristique, in aliquam odio laoreet. Curabitur nunc felis, mollis ut laoreet quis, finibus in nibh. Proin urna risus, rhoncus at diam interdum, maximus vestibulum nulla. Maecenas ut rutrum nulla, vel finibus est. Etiam placerat mi et libero volutpat, tristique rhoncus felis volutpat. Donec quam erat, congue quis ligula eget, mollis aliquet elit. Vestibulum feugiat odio sit amet ex dignissim, sit amet vulputate lectus iaculis. Sed tempus id enim at eleifend. Nullam bibendum eleifend congue. Pellentesque varius arcu elit, at accumsan dolor ultrices vitae. Etiam condimentum lectus id dolor fringilla tempor. Aliquam nec fringilla sem. Fusce ac quam porta, molestie nunc sed, semper nisl. Curabitur luctus sem in dapibus gravida. Suspendisse scelerisque mollis rutrum. Proin lacinia dolor sit amet ornare condimentum.\n' +
'\n' +
'In ex neque, volutpat quis ullamcorper in, vestibulum vel ligula. Quisque lobortis eget neque quis ullamcorper. Nunc purus lorem, scelerisque in malesuada id, congue a magna. Donec rutrum maximus egestas. Nulla ornare libero quis odio ultricies iaculis. Suspendisse consectetur bibendum purus ac blandit. Donec et neque quis dolor eleifend tempus. Fusce fringilla risus id venenatis rutrum. Mauris commodo posuere ipsum, sit amet hendrerit risus lacinia quis. Aenean placerat ultricies ante id dapibus. Donec imperdiet eros quis porttitor accumsan. Vestibulum ut nulla luctus velit feugiat elementum. Nam vel pharetra nisl. Nullam risus tellus, tempor quis ipsum et, pretium rutrum ipsum.\n' +
'\n' +
'Fusce molestie leo at facilisis mollis. Vivamus iaculis facilisis fermentum. Vivamus blandit id nisi sit amet porta. Nunc luctus porta blandit. Sed ac consequat eros, eu fringilla lorem. In blandit pharetra sollicitudin. Vivamus placerat risus ut ex faucibus, nec vehicula sapien imperdiet. Praesent luctus, leo eget ultrices cursus, neque ante porttitor mauris, id tempus tellus urna at ex. Curabitur elementum id quam vitae condimentum. Proin sit amet magna vel metus blandit iaculis. Phasellus viverra libero in lacus gravida, id laoreet ligula dapibus. Cras commodo arcu eget mi dignissim, et lobortis elit faucibus. Suspendisse potenti. ')
const rangeFrom = {line: 7, ch: 6}
const rangeTo = {line: 7, ch: 6}
'\n' +
'Nam id lacus et elit sollicitudin vestibulum. Phasellus blandit laoreet odio \n' +
'Ut tristique risus et mi tristique, in aliquam odio laoreet. Curabitur nunc felis, mollis ut laoreet quis, finibus in nibh. Proin urna risus, rhoncus at diam interdum, maximus vestibulum nulla. Maecenas ut rutrum nulla, vel finibus est. Etiam placerat mi et libero volutpat, tristique rhoncus felis volutpat. Donec quam erat, congue quis ligula eget, mollis aliquet elit. Vestibulum feugiat odio sit amet ex dignissim, sit amet vulputate lectus iaculis. Sed tempus id enim at eleifend. Nullam bibendum eleifend congue. Pellentesque varius arcu elit, at accumsan dolor ultrices vitae. Etiam condimentum lectus id dolor fringilla tempor. Aliquam nec fringilla sem. Fusce ac quam porta, molestie nunc sed, semper nisl. Curabitur luctus sem in dapibus gravida. Suspendisse scelerisque mollis rutrum. Proin lacinia dolor sit amet ornare condimentum.\n' +
'\n' +
'In ex neque, volutpat quis ullamcorper in, vestibulum vel ligula. Quisque lobortis eget neque quis ullamcorper. Nunc purus lorem, scelerisque in malesuada id, congue a magna. Donec rutrum maximus egestas. Nulla ornare libero quis odio ultricies iaculis. Suspendisse consectetur bibendum purus ac blandit. Donec et neque quis dolor eleifend tempus. Fusce fringilla risus id venenatis rutrum. Mauris commodo posuere ipsum, sit amet hendrerit risus lacinia quis. Aenean placerat ultricies ante id dapibus. Donec imperdiet eros quis porttitor accumsan. Vestibulum ut nulla luctus velit feugiat elementum. Nam vel pharetra nisl. Nullam risus tellus, tempor quis ipsum et, pretium rutrum ipsum.\n' +
'\n' +
'Fusce molestie leo at facilisis mollis. Vivamus iaculis facilisis fermentum. Vivamus blandit id nisi sit amet porta. Nunc luctus porta blandit. Sed ac consequat eros, eu fringilla lorem. In blandit pharetra sollicitudin. Vivamus placerat risus ut ex faucibus, nec vehicula sapien imperdiet. Praesent luctus, leo eget ultrices cursus, neque ante porttitor mauris, id tempus tellus urna at ex. Curabitur elementum id quam vitae condimentum. Proin sit amet magna vel metus blandit iaculis. Phasellus viverra libero in lacus gravida, id laoreet ligula dapibus. Cras commodo arcu eget mi dignissim, et lobortis elit faucibus. Suspendisse potenti. '
)
const rangeFrom = { line: 7, ch: 6 }
const rangeTo = { line: 7, ch: 6 }
systemUnderTest.checkMultiLineRange(editor, rangeFrom, rangeTo)
@@ -205,8 +225,10 @@ it('should test that checkMultiLineRange works for single word', function () {
expect(dic.check.mock.calls[0][0]).toEqual('molestie')
})
it('should make sure that liveSpellcheck don\'t work if the spellcheck is not enabled', function () {
const checkMultiLineRangeSpy = jest.spyOn(systemUnderTest, 'checkMultiLineRange').mockImplementation()
it("should make sure that liveSpellcheck don't work if the spellcheck is not enabled", function() {
const checkMultiLineRangeSpy = jest
.spyOn(systemUnderTest, 'checkMultiLineRange')
.mockImplementation()
const editor = jest.fn()
editor.findMarks = jest.fn()
@@ -219,61 +241,88 @@ it('should make sure that liveSpellcheck don\'t work if the spellcheck is not en
checkMultiLineRangeSpy.mockRestore()
})
it('should make sure that liveSpellcheck works for a range of changes', function () {
it('should make sure that liveSpellcheck works for a range of changes', function() {
const editor = jest.fn()
const marks = [{clear: jest.fn()}, {clear: jest.fn()}]
const marks = [{ clear: jest.fn() }, { clear: jest.fn() }]
editor.findMarks = jest.fn(() => marks)
const checkMultiLineRangeSpy = jest.spyOn(systemUnderTest, 'checkMultiLineRange').mockImplementation()
const checkMultiLineRangeSpy = jest
.spyOn(systemUnderTest, 'checkMultiLineRange')
.mockImplementation()
const inputChangeRange = {from: {line: 0, ch: 2}, to: {line: 1, ch: 1}}
const inputChangeRangeTo = {from: {line: 0, ch: 2}, to: {line: 1, ch: 2}}
const inputChangeRange = { from: { line: 0, ch: 2 }, to: { line: 1, ch: 1 } }
const inputChangeRangeTo = {
from: { line: 0, ch: 2 },
to: { line: 1, ch: 2 }
}
systemUnderTest.setDictionaryForTestsOnly({})
systemUnderTest.checkChangeRange(editor, inputChangeRange, inputChangeRangeTo)
expect(checkMultiLineRangeSpy).toHaveBeenCalledWith(editor, {line: 0, ch: 1}, {line: 1, ch: 3})
expect(editor.findMarks).toHaveBeenCalledWith({line: 0, ch: 1}, {line: 1, ch: 3})
expect(checkMultiLineRangeSpy).toHaveBeenCalledWith(
editor,
{ line: 0, ch: 1 },
{ line: 1, ch: 3 }
)
expect(editor.findMarks).toHaveBeenCalledWith(
{ line: 0, ch: 1 },
{ line: 1, ch: 3 }
)
expect(marks[0].clear).toHaveBeenCalled()
expect(marks[1].clear).toHaveBeenCalled()
checkMultiLineRangeSpy.mockRestore()
})
it('should make sure that liveSpellcheck works if ranges are inverted', function () {
it('should make sure that liveSpellcheck works if ranges are inverted', function() {
const editor = jest.fn()
const marks = [{clear: jest.fn()}, {clear: jest.fn()}]
const marks = [{ clear: jest.fn() }, { clear: jest.fn() }]
editor.findMarks = jest.fn(() => marks)
const checkMultiLineRangeSpy = jest.spyOn(systemUnderTest, 'checkMultiLineRange').mockImplementation()
const checkMultiLineRangeSpy = jest
.spyOn(systemUnderTest, 'checkMultiLineRange')
.mockImplementation()
const inputChangeRange = {from: {line: 0, ch: 2}, to: {line: 1, ch: 2}}
const inputChangeRangeTo = {from: {line: 0, ch: 2}, to: {line: 1, ch: 1}}
const inputChangeRange = { from: { line: 0, ch: 2 }, to: { line: 1, ch: 2 } }
const inputChangeRangeTo = {
from: { line: 0, ch: 2 },
to: { line: 1, ch: 1 }
}
systemUnderTest.setDictionaryForTestsOnly({})
systemUnderTest.checkChangeRange(editor, inputChangeRange, inputChangeRangeTo)
expect(checkMultiLineRangeSpy).toHaveBeenCalledWith(editor, {line: 0, ch: 1}, {line: 1, ch: 3})
expect(editor.findMarks).toHaveBeenCalledWith({line: 0, ch: 1}, {line: 1, ch: 3})
expect(checkMultiLineRangeSpy).toHaveBeenCalledWith(
editor,
{ line: 0, ch: 1 },
{ line: 1, ch: 3 }
)
expect(editor.findMarks).toHaveBeenCalledWith(
{ line: 0, ch: 1 },
{ line: 1, ch: 3 }
)
expect(marks[0].clear).toHaveBeenCalled()
expect(marks[1].clear).toHaveBeenCalled()
checkMultiLineRangeSpy.mockRestore()
})
it('should make sure that liveSpellcheck works for a single word with change at the beginning', function () {
it('should make sure that liveSpellcheck works for a single word with change at the beginning', function() {
const dic = jest.fn()
dic.check = jest.fn()
systemUnderTest.setDictionaryForTestsOnly(dic)
document.body.createTextRange = jest.fn(() => document.createElement('textArea'))
document.body.createTextRange = jest.fn(() =>
document.createElement('textArea')
)
const editor = new CodeMirror(jest.fn())
editor.setValue(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vehicula sem id tempor sollicitudin. Sed eu sagittis ligula. Maecenas sit amet velit enim. Etiam massa urna, elementum et sapien sit amet, vestibulum pharetra lectus. Nulla consequat malesuada nunc in aliquam. Vivamus faucibus orci et faucibus maximus. Pellentesque at dolor ac mi mollis molestie in facilisis nisl.\n' +
'\n' +
'Nam id lacus et elit sollicitudin vestibulum. Phasellus blandit laoreet odio \n' +
'Ut tristique risus et mi tristique, in aliquam odio laoreet. Curabitur nunc felis, mollis ut laoreet quis, finibus in nibh. Proin urna risus, rhoncus at diam interdum, maximus vestibulum nulla. Maecenas ut rutrum nulla, vel finibus est. Etiam placerat mi et libero volutpat, tristique rhoncus felis volutpat. Donec quam erat, congue quis ligula eget, mollis aliquet elit. Vestibulum feugiat odio sit amet ex dignissim, sit amet vulputate lectus iaculis. Sed tempus id enim at eleifend. Nullam bibendum eleifend congue. Pellentesque varius arcu elit, at accumsan dolor ultrices vitae. Etiam condimentum lectus id dolor fringilla tempor. Aliquam nec fringilla sem. Fusce ac quam porta, molestie nunc sed, semper nisl. Curabitur luctus sem in dapibus gravida. Suspendisse scelerisque mollis rutrum. Proin lacinia dolor sit amet ornare condimentum.\n' +
'\n' +
'In ex neque, volutpat quis ullamcorper in, vestibulum vel ligula. Quisque lobortis eget neque quis ullamcorper. Nunc purus lorem, scelerisque in malesuada id, congue a magna. Donec rutrum maximus egestas. Nulla ornare libero quis odio ultricies iaculis. Suspendisse consectetur bibendum purus ac blandit. Donec et neque quis dolor eleifend tempus. Fusce fringilla risus id venenatis rutrum. Mauris commodo posuere ipsum, sit amet hendrerit risus lacinia quis. Aenean placerat ultricies ante id dapibus. Donec imperdiet eros quis porttitor accumsan. Vestibulum ut nulla luctus velit feugiat elementum. Nam vel pharetra nisl. Nullam risus tellus, tempor quis ipsum et, pretium rutrum ipsum.\n' +
'\n' +
'Fusce molestie leo at facilisis mollis. Vivamus iaculis facilisis fermentum. Vivamus blandit id nisi sit amet porta. Nunc luctus porta blandit. Sed ac consequat eros, eu fringilla lorem. In blandit pharetra sollicitudin. Vivamus placerat risus ut ex faucibus, nec vehicula sapien imperdiet. Praesent luctus, leo eget ultrices cursus, neque ante porttitor mauris, id tempus tellus urna at ex. Curabitur elementum id quam vitae condimentum. Proin sit amet magna vel metus blandit iaculis. Phasellus viverra libero in lacus gravida, id laoreet ligula dapibus. Cras commodo arcu eget mi dignissim, et lobortis elit faucibus. Suspendisse potenti. ')
const rangeFrom = {from: {line: 7, ch: 6}, to: {line: 7, ch: 6}}
const rangeTo = {from: {line: 7, ch: 6}, to: {line: 7, ch: 6}}
'\n' +
'Nam id lacus et elit sollicitudin vestibulum. Phasellus blandit laoreet odio \n' +
'Ut tristique risus et mi tristique, in aliquam odio laoreet. Curabitur nunc felis, mollis ut laoreet quis, finibus in nibh. Proin urna risus, rhoncus at diam interdum, maximus vestibulum nulla. Maecenas ut rutrum nulla, vel finibus est. Etiam placerat mi et libero volutpat, tristique rhoncus felis volutpat. Donec quam erat, congue quis ligula eget, mollis aliquet elit. Vestibulum feugiat odio sit amet ex dignissim, sit amet vulputate lectus iaculis. Sed tempus id enim at eleifend. Nullam bibendum eleifend congue. Pellentesque varius arcu elit, at accumsan dolor ultrices vitae. Etiam condimentum lectus id dolor fringilla tempor. Aliquam nec fringilla sem. Fusce ac quam porta, molestie nunc sed, semper nisl. Curabitur luctus sem in dapibus gravida. Suspendisse scelerisque mollis rutrum. Proin lacinia dolor sit amet ornare condimentum.\n' +
'\n' +
'In ex neque, volutpat quis ullamcorper in, vestibulum vel ligula. Quisque lobortis eget neque quis ullamcorper. Nunc purus lorem, scelerisque in malesuada id, congue a magna. Donec rutrum maximus egestas. Nulla ornare libero quis odio ultricies iaculis. Suspendisse consectetur bibendum purus ac blandit. Donec et neque quis dolor eleifend tempus. Fusce fringilla risus id venenatis rutrum. Mauris commodo posuere ipsum, sit amet hendrerit risus lacinia quis. Aenean placerat ultricies ante id dapibus. Donec imperdiet eros quis porttitor accumsan. Vestibulum ut nulla luctus velit feugiat elementum. Nam vel pharetra nisl. Nullam risus tellus, tempor quis ipsum et, pretium rutrum ipsum.\n' +
'\n' +
'Fusce molestie leo at facilisis mollis. Vivamus iaculis facilisis fermentum. Vivamus blandit id nisi sit amet porta. Nunc luctus porta blandit. Sed ac consequat eros, eu fringilla lorem. In blandit pharetra sollicitudin. Vivamus placerat risus ut ex faucibus, nec vehicula sapien imperdiet. Praesent luctus, leo eget ultrices cursus, neque ante porttitor mauris, id tempus tellus urna at ex. Curabitur elementum id quam vitae condimentum. Proin sit amet magna vel metus blandit iaculis. Phasellus viverra libero in lacus gravida, id laoreet ligula dapibus. Cras commodo arcu eget mi dignissim, et lobortis elit faucibus. Suspendisse potenti. '
)
const rangeFrom = { from: { line: 7, ch: 6 }, to: { line: 7, ch: 6 } }
const rangeTo = { from: { line: 7, ch: 6 }, to: { line: 7, ch: 6 } }
systemUnderTest.checkChangeRange(editor, rangeFrom, rangeTo)
@@ -281,23 +330,26 @@ it('should make sure that liveSpellcheck works for a single word with change at
expect(dic.check.mock.calls[0][0]).toEqual('molestie')
})
it('should make sure that liveSpellcheck works for a single word with change in the middle', function () {
it('should make sure that liveSpellcheck works for a single word with change in the middle', function() {
const dic = jest.fn()
dic.check = jest.fn()
systemUnderTest.setDictionaryForTestsOnly(dic)
document.body.createTextRange = jest.fn(() => document.createElement('textArea'))
document.body.createTextRange = jest.fn(() =>
document.createElement('textArea')
)
const editor = new CodeMirror(jest.fn())
editor.setValue(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vehicula sem id tempor sollicitudin. Sed eu sagittis ligula. Maecenas sit amet velit enim. Etiam massa urna, elementum et sapien sit amet, vestibulum pharetra lectus. Nulla consequat malesuada nunc in aliquam. Vivamus faucibus orci et faucibus maximus. Pellentesque at dolor ac mi mollis molestie in facilisis nisl.\n' +
'\n' +
'Nam id lacus et elit sollicitudin vestibulum. Phasellus blandit laoreet odio \n' +
'Ut tristique risus et mi tristique, in aliquam odio laoreet. Curabitur nunc felis, mollis ut laoreet quis, finibus in nibh. Proin urna risus, rhoncus at diam interdum, maximus vestibulum nulla. Maecenas ut rutrum nulla, vel finibus est. Etiam placerat mi et libero volutpat, tristique rhoncus felis volutpat. Donec quam erat, congue quis ligula eget, mollis aliquet elit. Vestibulum feugiat odio sit amet ex dignissim, sit amet vulputate lectus iaculis. Sed tempus id enim at eleifend. Nullam bibendum eleifend congue. Pellentesque varius arcu elit, at accumsan dolor ultrices vitae. Etiam condimentum lectus id dolor fringilla tempor. Aliquam nec fringilla sem. Fusce ac quam porta, molestie nunc sed, semper nisl. Curabitur luctus sem in dapibus gravida. Suspendisse scelerisque mollis rutrum. Proin lacinia dolor sit amet ornare condimentum.\n' +
'\n' +
'In ex neque, volutpat quis ullamcorper in, vestibulum vel ligula. Quisque lobortis eget neque quis ullamcorper. Nunc purus lorem, scelerisque in malesuada id, congue a magna. Donec rutrum maximus egestas. Nulla ornare libero quis odio ultricies iaculis. Suspendisse consectetur bibendum purus ac blandit. Donec et neque quis dolor eleifend tempus. Fusce fringilla risus id venenatis rutrum. Mauris commodo posuere ipsum, sit amet hendrerit risus lacinia quis. Aenean placerat ultricies ante id dapibus. Donec imperdiet eros quis porttitor accumsan. Vestibulum ut nulla luctus velit feugiat elementum. Nam vel pharetra nisl. Nullam risus tellus, tempor quis ipsum et, pretium rutrum ipsum.\n' +
'\n' +
'Fusce molestie leo at facilisis mollis. Vivamus iaculis facilisis fermentum. Vivamus blandit id nisi sit amet porta. Nunc luctus porta blandit. Sed ac consequat eros, eu fringilla lorem. In blandit pharetra sollicitudin. Vivamus placerat risus ut ex faucibus, nec vehicula sapien imperdiet. Praesent luctus, leo eget ultrices cursus, neque ante porttitor mauris, id tempus tellus urna at ex. Curabitur elementum id quam vitae condimentum. Proin sit amet magna vel metus blandit iaculis. Phasellus viverra libero in lacus gravida, id laoreet ligula dapibus. Cras commodo arcu eget mi dignissim, et lobortis elit faucibus. Suspendisse potenti. ')
const rangeFrom = {from: {line: 7, ch: 9}, to: {line: 7, ch: 9}}
const rangeTo = {from: {line: 7, ch: 9}, to: {line: 7, ch: 9}}
'\n' +
'Nam id lacus et elit sollicitudin vestibulum. Phasellus blandit laoreet odio \n' +
'Ut tristique risus et mi tristique, in aliquam odio laoreet. Curabitur nunc felis, mollis ut laoreet quis, finibus in nibh. Proin urna risus, rhoncus at diam interdum, maximus vestibulum nulla. Maecenas ut rutrum nulla, vel finibus est. Etiam placerat mi et libero volutpat, tristique rhoncus felis volutpat. Donec quam erat, congue quis ligula eget, mollis aliquet elit. Vestibulum feugiat odio sit amet ex dignissim, sit amet vulputate lectus iaculis. Sed tempus id enim at eleifend. Nullam bibendum eleifend congue. Pellentesque varius arcu elit, at accumsan dolor ultrices vitae. Etiam condimentum lectus id dolor fringilla tempor. Aliquam nec fringilla sem. Fusce ac quam porta, molestie nunc sed, semper nisl. Curabitur luctus sem in dapibus gravida. Suspendisse scelerisque mollis rutrum. Proin lacinia dolor sit amet ornare condimentum.\n' +
'\n' +
'In ex neque, volutpat quis ullamcorper in, vestibulum vel ligula. Quisque lobortis eget neque quis ullamcorper. Nunc purus lorem, scelerisque in malesuada id, congue a magna. Donec rutrum maximus egestas. Nulla ornare libero quis odio ultricies iaculis. Suspendisse consectetur bibendum purus ac blandit. Donec et neque quis dolor eleifend tempus. Fusce fringilla risus id venenatis rutrum. Mauris commodo posuere ipsum, sit amet hendrerit risus lacinia quis. Aenean placerat ultricies ante id dapibus. Donec imperdiet eros quis porttitor accumsan. Vestibulum ut nulla luctus velit feugiat elementum. Nam vel pharetra nisl. Nullam risus tellus, tempor quis ipsum et, pretium rutrum ipsum.\n' +
'\n' +
'Fusce molestie leo at facilisis mollis. Vivamus iaculis facilisis fermentum. Vivamus blandit id nisi sit amet porta. Nunc luctus porta blandit. Sed ac consequat eros, eu fringilla lorem. In blandit pharetra sollicitudin. Vivamus placerat risus ut ex faucibus, nec vehicula sapien imperdiet. Praesent luctus, leo eget ultrices cursus, neque ante porttitor mauris, id tempus tellus urna at ex. Curabitur elementum id quam vitae condimentum. Proin sit amet magna vel metus blandit iaculis. Phasellus viverra libero in lacus gravida, id laoreet ligula dapibus. Cras commodo arcu eget mi dignissim, et lobortis elit faucibus. Suspendisse potenti. '
)
const rangeFrom = { from: { line: 7, ch: 9 }, to: { line: 7, ch: 9 } }
const rangeTo = { from: { line: 7, ch: 9 }, to: { line: 7, ch: 9 } }
systemUnderTest.checkChangeRange(editor, rangeFrom, rangeTo)
@@ -305,23 +357,26 @@ it('should make sure that liveSpellcheck works for a single word with change in
expect(dic.check.mock.calls[0][0]).toEqual('molestie')
})
it('should make sure that liveSpellcheck works for a single word with change at the end', function () {
it('should make sure that liveSpellcheck works for a single word with change at the end', function() {
const dic = jest.fn()
dic.check = jest.fn()
systemUnderTest.setDictionaryForTestsOnly(dic)
document.body.createTextRange = jest.fn(() => document.createElement('textArea'))
document.body.createTextRange = jest.fn(() =>
document.createElement('textArea')
)
const editor = new CodeMirror(jest.fn())
editor.setValue(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vehicula sem id tempor sollicitudin. Sed eu sagittis ligula. Maecenas sit amet velit enim. Etiam massa urna, elementum et sapien sit amet, vestibulum pharetra lectus. Nulla consequat malesuada nunc in aliquam. Vivamus faucibus orci et faucibus maximus. Pellentesque at dolor ac mi mollis molestie in facilisis nisl.\n' +
'\n' +
'Nam id lacus et elit sollicitudin vestibulum. Phasellus blandit laoreet odio \n' +
'Ut tristique risus et mi tristique, in aliquam odio laoreet. Curabitur nunc felis, mollis ut laoreet quis, finibus in nibh. Proin urna risus, rhoncus at diam interdum, maximus vestibulum nulla. Maecenas ut rutrum nulla, vel finibus est. Etiam placerat mi et libero volutpat, tristique rhoncus felis volutpat. Donec quam erat, congue quis ligula eget, mollis aliquet elit. Vestibulum feugiat odio sit amet ex dignissim, sit amet vulputate lectus iaculis. Sed tempus id enim at eleifend. Nullam bibendum eleifend congue. Pellentesque varius arcu elit, at accumsan dolor ultrices vitae. Etiam condimentum lectus id dolor fringilla tempor. Aliquam nec fringilla sem. Fusce ac quam porta, molestie nunc sed, semper nisl. Curabitur luctus sem in dapibus gravida. Suspendisse scelerisque mollis rutrum. Proin lacinia dolor sit amet ornare condimentum.\n' +
'\n' +
'In ex neque, volutpat quis ullamcorper in, vestibulum vel ligula. Quisque lobortis eget neque quis ullamcorper. Nunc purus lorem, scelerisque in malesuada id, congue a magna. Donec rutrum maximus egestas. Nulla ornare libero quis odio ultricies iaculis. Suspendisse consectetur bibendum purus ac blandit. Donec et neque quis dolor eleifend tempus. Fusce fringilla risus id venenatis rutrum. Mauris commodo posuere ipsum, sit amet hendrerit risus lacinia quis. Aenean placerat ultricies ante id dapibus. Donec imperdiet eros quis porttitor accumsan. Vestibulum ut nulla luctus velit feugiat elementum. Nam vel pharetra nisl. Nullam risus tellus, tempor quis ipsum et, pretium rutrum ipsum.\n' +
'\n' +
'Fusce molestie leo at facilisis mollis. Vivamus iaculis facilisis fermentum. Vivamus blandit id nisi sit amet porta. Nunc luctus porta blandit. Sed ac consequat eros, eu fringilla lorem. In blandit pharetra sollicitudin. Vivamus placerat risus ut ex faucibus, nec vehicula sapien imperdiet. Praesent luctus, leo eget ultrices cursus, neque ante porttitor mauris, id tempus tellus urna at ex. Curabitur elementum id quam vitae condimentum. Proin sit amet magna vel metus blandit iaculis. Phasellus viverra libero in lacus gravida, id laoreet ligula dapibus. Cras commodo arcu eget mi dignissim, et lobortis elit faucibus. Suspendisse potenti. ')
const rangeFrom = {from: {line: 7, ch: 14}, to: {line: 7, ch: 14}}
const rangeTo = {from: {line: 7, ch: 14}, to: {line: 7, ch: 14}}
'\n' +
'Nam id lacus et elit sollicitudin vestibulum. Phasellus blandit laoreet odio \n' +
'Ut tristique risus et mi tristique, in aliquam odio laoreet. Curabitur nunc felis, mollis ut laoreet quis, finibus in nibh. Proin urna risus, rhoncus at diam interdum, maximus vestibulum nulla. Maecenas ut rutrum nulla, vel finibus est. Etiam placerat mi et libero volutpat, tristique rhoncus felis volutpat. Donec quam erat, congue quis ligula eget, mollis aliquet elit. Vestibulum feugiat odio sit amet ex dignissim, sit amet vulputate lectus iaculis. Sed tempus id enim at eleifend. Nullam bibendum eleifend congue. Pellentesque varius arcu elit, at accumsan dolor ultrices vitae. Etiam condimentum lectus id dolor fringilla tempor. Aliquam nec fringilla sem. Fusce ac quam porta, molestie nunc sed, semper nisl. Curabitur luctus sem in dapibus gravida. Suspendisse scelerisque mollis rutrum. Proin lacinia dolor sit amet ornare condimentum.\n' +
'\n' +
'In ex neque, volutpat quis ullamcorper in, vestibulum vel ligula. Quisque lobortis eget neque quis ullamcorper. Nunc purus lorem, scelerisque in malesuada id, congue a magna. Donec rutrum maximus egestas. Nulla ornare libero quis odio ultricies iaculis. Suspendisse consectetur bibendum purus ac blandit. Donec et neque quis dolor eleifend tempus. Fusce fringilla risus id venenatis rutrum. Mauris commodo posuere ipsum, sit amet hendrerit risus lacinia quis. Aenean placerat ultricies ante id dapibus. Donec imperdiet eros quis porttitor accumsan. Vestibulum ut nulla luctus velit feugiat elementum. Nam vel pharetra nisl. Nullam risus tellus, tempor quis ipsum et, pretium rutrum ipsum.\n' +
'\n' +
'Fusce molestie leo at facilisis mollis. Vivamus iaculis facilisis fermentum. Vivamus blandit id nisi sit amet porta. Nunc luctus porta blandit. Sed ac consequat eros, eu fringilla lorem. In blandit pharetra sollicitudin. Vivamus placerat risus ut ex faucibus, nec vehicula sapien imperdiet. Praesent luctus, leo eget ultrices cursus, neque ante porttitor mauris, id tempus tellus urna at ex. Curabitur elementum id quam vitae condimentum. Proin sit amet magna vel metus blandit iaculis. Phasellus viverra libero in lacus gravida, id laoreet ligula dapibus. Cras commodo arcu eget mi dignissim, et lobortis elit faucibus. Suspendisse potenti. '
)
const rangeFrom = { from: { line: 7, ch: 14 }, to: { line: 7, ch: 14 } }
const rangeTo = { from: { line: 7, ch: 14 }, to: { line: 7, ch: 14 } }
systemUnderTest.checkChangeRange(editor, rangeFrom, rangeTo)