X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/f2cfe219c603d0d912b5bd0484e22725026d85aa..dea9da8dbffc4ca9c29628658166b252b8233aac:/src/editor/modules/documentCanvas/canvas/canvas.test.js diff --git a/src/editor/modules/documentCanvas/canvas/canvas.test.js b/src/editor/modules/documentCanvas/canvas/canvas.test.js index 6343d23..7a0380a 100644 --- a/src/editor/modules/documentCanvas/canvas/canvas.test.js +++ b/src/editor/modules/documentCanvas/canvas/canvas.test.js @@ -185,6 +185,107 @@ describe('Cursor', function() { expect(cursor.getPosition().offsetAtEnd).to.equal(true, 'offset at end'); }); + it('recognizes selection start and end on document order', function() { + var c = getCanvasFromXML('
Alicehas a cat
abc...cde
'), + dom = c.doc().dom(), + textFirst = findTextNode(dom, 'Alice'), + textSecond = findTextNode(dom, 'has a cat'), + textAbc = findTextNode(dom, 'abc'), + textCde = findTextNode(dom, 'cde'); + + var check = function(label, expected) { + var cursor = c.getCursor(); + label = label + ': '; + expect(cursor.getSelectionStart().element.getText()).to.equal(expected.start.text, label + 'start element ok'); + expect(cursor.getSelectionStart().offset).to.equal(expected.start.offset, label + 'start offset ok'); + expect(cursor.getSelectionEnd().element.getText()).to.equal(expected.end.text, label + 'end element ok'); + expect(cursor.getSelectionEnd().offset).to.equal(expected.end.offset, label + 'end offset ok'); + }; + + getSelection.returns({ + anchorNode: textFirst, + focusNode: textFirst, + anchorOffset: 1, + focusOffset: 3, + isCollapsed: false + }); + + check('same element, anchor first', { + start: {text: 'Alice', offset: 1}, + end: {text: 'Alice', offset:3} + }); + + + getSelection.returns({ + anchorNode: textFirst, + focusNode: textFirst, + anchorOffset: 3, + focusOffset: 1, + isCollapsed: false + }); + + check('same element, anchor second', { + start: {text: 'Alice', offset: 1}, + end: {text: 'Alice', offset:3} + }); + + + getSelection.returns({ + anchorNode: textAbc, + focusNode: textCde, + anchorOffset: 3, + focusOffset: 1, + isCollapsed: false + }); + + check('same parent, anchor first', { + start: {text: 'abc', offset: 3}, + end: {text: 'cde', offset:1} + }); + + + getSelection.returns({ + anchorNode: textCde, + focusNode: textAbc, + anchorOffset: 1, + focusOffset: 3, + isCollapsed: false + }); + + check('same parent, anchor second', { + start: {text: 'abc', offset: 3}, + end: {text: 'cde', offset:1} + }); + + + getSelection.returns({ + anchorNode: textFirst, + focusNode: textSecond, + anchorOffset: 1, + focusOffset: 3, + isCollapsed: false + }); + + check('different parents, anchor first', { + start: {text: 'Alice', offset: 1}, + end: {text: 'has a cat', offset:3} + }); + + + getSelection.returns({ + anchorNode: textSecond, + focusNode: textFirst, + anchorOffset: 3, + focusOffset: 1, + isCollapsed: false + }); + + check('different parents, anchor second', { + start: {text: 'Alice', offset: 1}, + end: {text: 'has a cat', offset:3} + }); + }); + it('returns boundries of selection when browser selection not collapsed', function() { var c = getCanvasFromXML('
Alice has a big cat
'), dom = c.doc().dom(),