mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-23 19:47:03 -04:00

* added all functionality to the toolbar buttons * added unit tests for the toolbar functions * added unit tests to CI * Added translated titles to buttons of toolbar Co-authored-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de> Co-authored-by: mrdrogdrog <mr.drogdrog@gmail.com> Co-authored-by: Erik Michelson <github@erik.michelson.eu>
352 lines
10 KiB
TypeScript
352 lines
10 KiB
TypeScript
import {
|
|
addCodeFences,
|
|
addHeaderLevel,
|
|
addLink,
|
|
addMarkup,
|
|
addQuotes,
|
|
createList,
|
|
removeLastNewLine,
|
|
replaceSelection
|
|
} from './utils'
|
|
|
|
const testContent = '1st line\n2nd line\n3rd line'
|
|
const cursor = {
|
|
startPosition: { line: 0, ch: 0 },
|
|
endPosition: { line: 0, ch: 0 }
|
|
}
|
|
const firstLine = {
|
|
startPosition: { line: 0, ch: 0 },
|
|
endPosition: { line: 0, ch: 9 }
|
|
}
|
|
const multiline = {
|
|
startPosition: { line: 1, ch: 0 },
|
|
endPosition: { line: 2, ch: 9 }
|
|
}
|
|
const multilineOffset = {
|
|
startPosition: { line: 1, ch: 4 },
|
|
endPosition: { line: 2, ch: 4 }
|
|
}
|
|
|
|
describe('test removeLastNewLine', () => {
|
|
const testSentence = 'This is a test sentence'
|
|
const testMultiLine = 'This is a\ntest sentence over two lines'
|
|
it('single line without \\n at the end', () => {
|
|
expect(removeLastNewLine(testSentence)).toEqual(testSentence)
|
|
})
|
|
|
|
it('single line with \\n at the end', () => {
|
|
expect(removeLastNewLine(testSentence + '\n')).toEqual(testSentence)
|
|
})
|
|
|
|
it('multi line without \\n at the end', () => {
|
|
expect(removeLastNewLine(testMultiLine)).toEqual(testMultiLine)
|
|
})
|
|
|
|
it('multi line with \\n at the end', () => {
|
|
expect(removeLastNewLine(testMultiLine + '\n')).toEqual(testMultiLine)
|
|
})
|
|
})
|
|
|
|
describe('test addMarkUp', () => {
|
|
it('just cursor', done => {
|
|
let error = false
|
|
addMarkup(testContent, cursor.startPosition, cursor.endPosition, () => {
|
|
// This should never be called
|
|
error = true
|
|
}, '**')
|
|
expect(error).toBeFalsy()
|
|
done()
|
|
})
|
|
|
|
it('1st line', done => {
|
|
const newContent = testContent
|
|
.split('\n')
|
|
.map((line, index) => {
|
|
if (index === 0) {
|
|
line = `**${line}**`
|
|
}
|
|
return line
|
|
})
|
|
.join('\n')
|
|
addMarkup(testContent, firstLine.startPosition, firstLine.endPosition, content => {
|
|
expect(content).toEqual(newContent)
|
|
done()
|
|
}, '**')
|
|
})
|
|
|
|
it('multiple lines', done => {
|
|
const newContent = '1st line\n**2nd line\n3rd line**'
|
|
addMarkup(testContent, multiline.startPosition, multiline.endPosition, content => {
|
|
expect(content).toEqual(newContent)
|
|
done()
|
|
}, '**')
|
|
})
|
|
|
|
it('multiple lines with offset', done => {
|
|
const newContent = '1st line\n2nd **line\n3rd **line'
|
|
addMarkup(testContent, multilineOffset.startPosition, multilineOffset.endPosition, content => {
|
|
expect(content).toEqual(newContent)
|
|
done()
|
|
}, '**')
|
|
})
|
|
})
|
|
|
|
describe('test addHeaderLevel', () => {
|
|
const firstHeading = '# 1st line\n2nd line\n3rd line'
|
|
it('no heading before', done => {
|
|
addHeaderLevel(testContent, cursor.startPosition, content => {
|
|
expect(content).toEqual(firstHeading)
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('level one heading before', done => {
|
|
const secondHeading = '## 1st line\n2nd line\n3rd line'
|
|
addHeaderLevel(firstHeading, cursor.startPosition, content => {
|
|
expect(content).toEqual(secondHeading)
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('1st line', done => {
|
|
addHeaderLevel(testContent, firstLine.startPosition, content => {
|
|
expect(content).toEqual(firstHeading)
|
|
done()
|
|
})
|
|
})
|
|
|
|
const newMultilineContent = '1st line\n# 2nd line\n3rd line'
|
|
it('multiple lines', done => {
|
|
addHeaderLevel(testContent, multiline.startPosition, content => {
|
|
expect(content).toEqual(newMultilineContent)
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('multiple lines with offset', done => {
|
|
addHeaderLevel(testContent, multilineOffset.startPosition, content => {
|
|
expect(content).toEqual(newMultilineContent)
|
|
done()
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('test addCodeFences', () => {
|
|
it('just cursor', done => {
|
|
addCodeFences(testContent, cursor.startPosition, cursor.endPosition, content => {
|
|
expect(content).toEqual('```\n\n```' + testContent)
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('1st line', done => {
|
|
addCodeFences(testContent, firstLine.startPosition, firstLine.endPosition, content => {
|
|
expect(content).toEqual('```\n1st line\n```\n2nd line\n3rd line')
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('multiple lines', done => {
|
|
addCodeFences(testContent, multiline.startPosition, multiline.endPosition, content => {
|
|
expect(content).toEqual('1st line\n```\n2nd line\n3rd line\n```')
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('multiple lines with offset', done => {
|
|
addCodeFences(testContent, multilineOffset.startPosition, multilineOffset.endPosition, content => {
|
|
expect(content).toEqual('1st line\n2nd ```\nline\n3rd \n```line')
|
|
done()
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('test addQuotes', () => {
|
|
it('just cursor', done => {
|
|
addQuotes(testContent, cursor.startPosition, cursor.endPosition, content => {
|
|
expect(content).toEqual('> ' + testContent)
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('1st line', done => {
|
|
addQuotes(testContent, firstLine.startPosition, firstLine.endPosition, content => {
|
|
expect(content).toEqual('> ' + testContent)
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('multiple lines', done => {
|
|
addQuotes(testContent, multiline.startPosition, multiline.endPosition, content => {
|
|
expect(content).toEqual('1st line\n> 2nd line\n> 3rd line')
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('multiple lines with offset', done => {
|
|
addQuotes(testContent, multilineOffset.startPosition, multilineOffset.endPosition, content => {
|
|
expect(content).toEqual('1st line\n> 2nd line\n> 3rd line')
|
|
done()
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('test createList', () => {
|
|
describe('unordered list', () => {
|
|
it('just cursor', done => {
|
|
createList(testContent, cursor.startPosition, cursor.endPosition, content => {
|
|
expect(content).toEqual('- ' + testContent)
|
|
done()
|
|
}, () => '-')
|
|
})
|
|
|
|
it('1st line', done => {
|
|
createList(testContent, firstLine.startPosition, firstLine.endPosition, content => {
|
|
expect(content).toEqual('- ' + testContent)
|
|
done()
|
|
}, () => '-')
|
|
})
|
|
|
|
it('multiple lines', done => {
|
|
createList(testContent, multiline.startPosition, multiline.endPosition, content => {
|
|
expect(content).toEqual('1st line\n- 2nd line\n- 3rd line')
|
|
done()
|
|
}, () => '-')
|
|
})
|
|
|
|
it('multiple lines with offset', done => {
|
|
createList(testContent, multilineOffset.startPosition, multilineOffset.endPosition, content => {
|
|
expect(content).toEqual('1st line\n- 2nd line\n- 3rd line')
|
|
done()
|
|
}, () => '-')
|
|
})
|
|
})
|
|
|
|
describe('ordered list', () => {
|
|
it('just cursor', done => {
|
|
createList(testContent, cursor.startPosition, cursor.endPosition, content => {
|
|
expect(content).toEqual('1. ' + testContent)
|
|
done()
|
|
}, (j) => `${j}.`)
|
|
})
|
|
|
|
it('1st line', done => {
|
|
createList(testContent, firstLine.startPosition, firstLine.endPosition, content => {
|
|
expect(content).toEqual('1. ' + testContent)
|
|
done()
|
|
}, (j) => `${j}.`)
|
|
})
|
|
|
|
it('multiple lines', done => {
|
|
createList(testContent, multiline.startPosition, multiline.endPosition, content => {
|
|
expect(content).toEqual('1st line\n1. 2nd line\n2. 3rd line')
|
|
done()
|
|
}, (j) => `${j}.`)
|
|
})
|
|
|
|
it('multiple lines with offset', done => {
|
|
createList(testContent, multilineOffset.startPosition, multilineOffset.endPosition, content => {
|
|
expect(content).toEqual('1st line\n1. 2nd line\n2. 3rd line')
|
|
done()
|
|
}, (j) => `${j}.`)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('test addLink', () => {
|
|
it('just cursor', done => {
|
|
addLink(testContent, cursor.startPosition, cursor.endPosition, content => {
|
|
expect(content).toEqual('[](https://)' + testContent)
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('1st line', done => {
|
|
addLink(testContent, firstLine.startPosition, firstLine.endPosition, content => {
|
|
expect(content).toEqual('[1st line](https://)\n2nd line\n3rd line')
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('multiple lines', done => {
|
|
addLink(testContent, multiline.startPosition, multiline.endPosition, content => {
|
|
expect(content).toEqual('1st line\n[2nd line\n3rd line](https://)')
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('multiple lines with offset', done => {
|
|
addLink(testContent, multilineOffset.startPosition, multilineOffset.endPosition, content => {
|
|
expect(content).toEqual('1st line\n2nd [line\n3rd ](https://)line')
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('line with link', done => {
|
|
const link = 'http://example.com'
|
|
addLink(link, firstLine.startPosition, { line: 0, ch: link.length }, content => {
|
|
expect(content).toEqual(`[](${link})`)
|
|
done()
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('test addImage', () => {
|
|
it('just cursor', done => {
|
|
addLink(testContent, cursor.startPosition, cursor.endPosition, content => {
|
|
expect(content).toEqual('' + testContent)
|
|
done()
|
|
}, '!')
|
|
})
|
|
|
|
it('1st line', done => {
|
|
addLink(testContent, firstLine.startPosition, firstLine.endPosition, content => {
|
|
expect(content).toEqual('\n2nd line\n3rd line')
|
|
done()
|
|
}, '!')
|
|
})
|
|
|
|
it('multiple lines', done => {
|
|
addLink(testContent, multiline.startPosition, multiline.endPosition, content => {
|
|
expect(content).toEqual('1st line\n')
|
|
done()
|
|
}, '!')
|
|
})
|
|
|
|
it('multiple lines with offset', done => {
|
|
addLink(testContent, multilineOffset.startPosition, multilineOffset.endPosition, content => {
|
|
expect(content).toEqual('1st line\n2nd line')
|
|
done()
|
|
}, '!')
|
|
})
|
|
})
|
|
|
|
describe('test changeSelection', () => {
|
|
it('just cursor', done => {
|
|
replaceSelection(testContent, cursor.startPosition, cursor.endPosition, content => {
|
|
expect(content).toEqual('----' + testContent)
|
|
done()
|
|
}, '----')
|
|
})
|
|
|
|
it('1st line', done => {
|
|
replaceSelection(testContent, firstLine.startPosition, firstLine.endPosition, content => {
|
|
expect(content).toEqual('----\n2nd line\n3rd line')
|
|
done()
|
|
}, '----')
|
|
})
|
|
|
|
it('multiple lines', done => {
|
|
replaceSelection(testContent, multiline.startPosition, multiline.endPosition, content => {
|
|
expect(content).toEqual('1st line\n----\n3rd line')
|
|
done()
|
|
}, '----')
|
|
})
|
|
|
|
it('multiple lines with offset', done => {
|
|
replaceSelection(testContent, multilineOffset.startPosition, multilineOffset.endPosition, content => {
|
|
expect(content).toEqual('1st line\n2nd ----line\n3rd line')
|
|
done()
|
|
}, '----')
|
|
})
|
|
})
|