surveybuilder
Version:
Build surveys in the most advanced, flexable, and more moderated way, for all users to build and see.
254 lines (192 loc) • 7.9 kB
text/coffeescript
describe 'Support table input', ->
textarea = null
action = null
text = null
currentPos = null
markdownEditor = null
shiftKey = false
keyCode = 13
beforeEach ->
textarea = $('<textarea>').markdownEditor()
markdownEditor = textarea.data('markdownEditor')
action = ->
enterEvent = $.Event('keydown', keyCode: keyCode, shiftKey: shiftKey)
textarea.val(text)
pos = if currentPos?
currentPos
else
text.length
markdownEditor.getSelectionStart = ->
pos
markdownEditor.selectionBegin = markdownEditor.selectionEnd = pos
textarea.trigger(enterEvent)
afterEach ->
textarea = null
action = null
text = null
currentPos = null
markdownEditor = null
shiftKey = false
keyCode = 13
context 'start with "|a|b|"', ->
beforeEach ->
text = '|a|b|'
action()
it 'insert sep and row', ->
expect(textarea.val()).to.eql "|a|b|\n| --- | --- |\n| | |"
it 'select first cell', ->
expect(markdownEditor.selectionBegin).to.eql 22
expect(markdownEditor.selectionEnd).to.eql 22
context 'start with "|a|b\\|c|"', ->
beforeEach -> text = '|a|b\\|c|'
it 'insert sep and row with 2 columns', ->
action()
expect(textarea.val()).to.eql "|a|b\\|c|\n| --- | --- |\n| | |"
context 'in table header', ->
beforeEach ->
currentPos = 3
text = "|a|b|\n|---|---|\n|aa|bb|"
action()
it 'not insert', ->
expect(textarea.val()).to.eql "|a|b|\n|---|---|\n|aa|bb|"
context 'in table', ->
beforeEach ->
text = "|a|b|\n|---|---|\n|aa|bb|"
action()
it 'insert row only', ->
expect(textarea.val()).to.eql "|a|b|\n|---|---|\n|aa|bb|\n| | |"
it 'select first cell of second row', ->
expect(markdownEditor.selectionBegin).to.eql 26
expect(markdownEditor.selectionEnd).to.eql 26
context 'cursor on first cell', ->
beforeEach ->
currentPos = 1
text = '|a|b|'
action()
it 'insert sep and row', ->
expect(textarea.val()).to.eql "|a|b|\n| --- | --- |\n| | |"
it 'select first cell of second row', ->
expect(markdownEditor.selectionBegin).to.eql 22
expect(markdownEditor.selectionEnd).to.eql 22
context 'cursor on beginning of line on body', ->
beforeEach ->
currentPos = 16
text = "|a|b|\n|---|---|\n|c|d|\n"
action()
it 'nothing do', ->
expect(textarea.val()).to.eql "|a|b|\n|---|---|\n|c|d|\n"
context 'new line on empty row', ->
beforeEach ->
currentPos = 18
text = "|a|b|\n|---|---|\n| | |"
it 'remove current line', ->
action()
expect(textarea.val()).to.eql "|a|b|\n|---|---|\n"
context 'enter tab key', ->
beforeEach -> keyCode = 9
context 'normal table', ->
beforeEach -> text = "|a|b|\n|---|---|\n| | |\n"
context 'on line head', ->
beforeEach -> currentPos = 0
it 'cursor move to first cell', ->
action()
expect(markdownEditor.selectionBegin).to.eql 1
expect(markdownEditor.selectionEnd).to.eql 2
context 'with shift key', ->
beforeEach -> shiftKey = true
it 'do nothing', ->
action()
expect(markdownEditor.selectionBegin).to.eql 0
expect(markdownEditor.selectionEnd).to.eql 0
context 'on last cell', ->
beforeEach -> currentPos = 20
it 'cursor move to end of row', ->
action()
expect(markdownEditor.selectionBegin).to.eql 21
expect(markdownEditor.selectionEnd).to.eql 21
context 'on first cell', ->
beforeEach -> currentPos = 1
it 'cursor move to second cell', ->
action()
expect(markdownEditor.selectionBegin).to.eql 3
expect(markdownEditor.selectionEnd).to.eql 4
context 'with shift key', ->
beforeEach -> shiftKey = true
it 'do nothing', ->
action()
expect(markdownEditor.selectionBegin).to.eql 1
expect(markdownEditor.selectionEnd).to.eql 1
context 'on first cell of second line', ->
beforeEach -> currentPos = 7
context 'with shift key', ->
beforeEach -> shiftKey = true
it 'move to second cell of first line', ->
action()
expect(markdownEditor.selectionBegin).to.eql 3
expect(markdownEditor.selectionEnd).to.eql 4
context 'on second cell', ->
beforeEach -> currentPos = 3
it 'cursor move to first cell of next line', ->
action()
expect(markdownEditor.selectionBegin).to.eql 7
expect(markdownEditor.selectionEnd).to.eql 10
context 'with shift key', ->
beforeEach -> shiftKey = true
it 'cursor move to first cell', ->
action()
expect(markdownEditor.selectionBegin).to.eql 1
expect(markdownEditor.selectionEnd).to.eql 2
context 'oneline', ->
beforeEach -> text = "| | | |"
context 'on last', ->
beforeEach -> currentPos = 7
context 'with shift key', ->
beforeEach -> shiftKey = true
it 'cursor move to last cell', ->
action()
expect(markdownEditor.selectionBegin).to.eql 6
expect(markdownEditor.selectionEnd).to.eql 6
context 'empty cell', ->
beforeEach -> text = "||||\n|---|---|\n| | |"
context 'on second cell', ->
beforeEach -> currentPos = 2
it 'cursor move to third cell', ->
action()
expect(markdownEditor.selectionBegin).to.eql 3
expect(markdownEditor.selectionEnd).to.eql 3
context 'with shift key', ->
beforeEach -> shiftKey = true
it 'cursor move to first cell', ->
action()
expect(markdownEditor.selectionBegin).to.eql 1
expect(markdownEditor.selectionEnd).to.eql 1
context 'exists two table', ->
beforeEach -> text = "|a|b|\n|---|---|\n|aa|bb|\n\n|c|d|"
context 'on first cell of second table', ->
beforeEach -> currentPos = 26
context 'with shift key', ->
beforeEach -> shiftKey = true
it 'do nothing', ->
action()
expect(markdownEditor.selectionBegin).to.eql 26
expect(markdownEditor.selectionEnd).to.eql 26
context 'on last cell of first table', ->
beforeEach -> currentPos = 21
it 'move to end of row', ->
action()
expect(markdownEditor.selectionBegin).to.eql 23
expect(markdownEditor.selectionEnd).to.eql 23
context 'escaped pipe', ->
beforeEach -> text = "| a\\|b | c |\n|---|---|---|\n||| | |"
context 'on line head', ->
beforeEach -> currentPos = 0
it 'cursor move to first cell', ->
action()
expect(markdownEditor.selectionBegin).to.eql 2
expect(markdownEditor.selectionEnd).to.eql 6
context 'with shift key', ->
beforeEach -> shiftKey = true
it 'do nothing', ->
action()
expect(markdownEditor.selectionBegin).to.eql 0
expect(markdownEditor.selectionEnd).to.eql 0