|
|
|
@ -4,13 +4,24 @@ test('EditorMarkdown', () => { |
|
|
|
|
const textarea = document.createElement('textarea'); |
|
|
|
|
initTextareaMarkdown(textarea); |
|
|
|
|
|
|
|
|
|
const testInput = (value, expected) => { |
|
|
|
|
textarea.value = value; |
|
|
|
|
textarea.setSelectionRange(value.length, value.length); |
|
|
|
|
type ValueWithCursor = string | { |
|
|
|
|
value: string; |
|
|
|
|
pos: number; |
|
|
|
|
} |
|
|
|
|
const testInput = (input: ValueWithCursor, result: ValueWithCursor) => { |
|
|
|
|
const intputValue = typeof input === 'string' ? input : input.value; |
|
|
|
|
const inputPos = typeof input === 'string' ? intputValue.length : input.pos; |
|
|
|
|
textarea.value = intputValue; |
|
|
|
|
textarea.setSelectionRange(inputPos, inputPos); |
|
|
|
|
|
|
|
|
|
const e = new KeyboardEvent('keydown', {key: 'Enter', cancelable: true}); |
|
|
|
|
textarea.dispatchEvent(e); |
|
|
|
|
if (!e.defaultPrevented) textarea.value += '\n'; |
|
|
|
|
expect(textarea.value).toEqual(expected); |
|
|
|
|
if (!e.defaultPrevented) textarea.value += '\n'; // simulate default behavior
|
|
|
|
|
|
|
|
|
|
const expectedValue = typeof result === 'string' ? result : result.value; |
|
|
|
|
const expectedPos = typeof result === 'string' ? expectedValue.length : result.pos; |
|
|
|
|
expect(textarea.value).toEqual(expectedValue); |
|
|
|
|
expect(textarea.selectionStart).toEqual(expectedPos); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testInput('-', '-\n'); |
|
|
|
@ -18,8 +29,11 @@ test('EditorMarkdown', () => { |
|
|
|
|
|
|
|
|
|
testInput('- ', ''); |
|
|
|
|
testInput('1. ', ''); |
|
|
|
|
testInput({value: '1. \n2. ', pos: 3}, {value: '\n2. ', pos: 0}); |
|
|
|
|
|
|
|
|
|
testInput('- x', '- x\n- '); |
|
|
|
|
testInput('1. foo', '1. foo\n1. '); |
|
|
|
|
testInput({value: '1. a\n2. b\n3. c', pos: 4}, {value: '1. a\n1. \n2. b\n3. c', pos: 8}); |
|
|
|
|
testInput('- [ ]', '- [ ]\n- '); |
|
|
|
|
testInput('- [ ] foo', '- [ ] foo\n- [ ] '); |
|
|
|
|
testInput('* [x] foo', '* [x] foo\n* [ ] '); |
|
|
|
|