X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/ff3715ae2dc79eda1edd45d462e5cc0c3e9803e4..de9d1ec272d6133634321d9005824dd9c4000331:/src/editor/plugins/core/core.test.js?ds=sidebyside diff --git a/src/editor/plugins/core/core.test.js b/src/editor/plugins/core/core.test.js index d315ca5..62d734d 100644 --- a/src/editor/plugins/core/core.test.js +++ b/src/editor/plugins/core/core.test.js @@ -406,6 +406,143 @@ describe('Keyboard interactions', function() { }); }); + describe('splitting with enter', function() { + afterEach(removeCanvas); + + it('splits paragraph into two in the middle', function() { + var c = getCanvasFromXML('
paragraph
'), + k = new Keyboard(c); + + k.withCaret('para|graph').press(K.ENTER); + + var rootContents = c.wlxmlDocument.root.contents(); + expect(rootContents.length).to.equal(2); + expect(rootContents[0].is({tagName: 'div', klass: 'p'})).to.equal(true); + expect(rootContents[0].contents()[0].getText()).to.equal('para'); + expect(rootContents[1].is({tagName: 'div', klass: 'p'})).to.equal(true); + expect(rootContents[1].contents()[0].getText()).to.equal('graph'); + + var selection = c.getSelection(); + expect(selection.type).to.equal('caret'); + expect(selection.element.sameNode(getTextElement('graph', c))).to.equal(true); + expect(selection.offset).to.equal(0); + }); + it('splits paragraph into two at the beginning', function() { + var c = getCanvasFromXML('
paragraph
'), + k = new Keyboard(c); + + k.withCaret('|paragraph').press(K.ENTER); + + var rootContents = c.wlxmlDocument.root.contents(); + expect(rootContents.length).to.equal(2); + expect(rootContents[0].is({tagName: 'div', klass: 'p'})).to.equal(true); + expect(rootContents[0].contents()[0].getText()).to.equal(''); + expect(rootContents[1].is({tagName: 'div', klass: 'p'})).to.equal(true); + expect(rootContents[1].contents()[0].getText()).to.equal('paragraph'); + + var selection = c.getSelection(); + expect(selection.type).to.equal('caret'); + expect(selection.element.sameNode(getTextElement('', c))).to.equal(true); + expect(selection.offset).to.equal(0); + }); + it('splits paragraph into two at the end', function() { + var c = getCanvasFromXML('
paragraph
'), + k = new Keyboard(c); + + k.withCaret('paragraph|').press(K.ENTER); + + var rootContents = c.wlxmlDocument.root.contents(); + expect(rootContents.length).to.equal(2); + expect(rootContents[0].is({tagName: 'div', klass: 'p'})).to.equal(true); + expect(rootContents[0].contents()[0].getText()).to.equal('paragraph'); + expect(rootContents[1].is({tagName: 'div', klass: 'p'})).to.equal(true); + expect(rootContents[1].contents()[0].getText()).to.equal(''); + + var selection = c.getSelection(); + expect(selection.type).to.equal('caret'); + expect(selection.element.sameNode(getTextElement('', c))).to.equal(true); + expect(selection.offset).to.equal(0); + }); + + it('splits its parent box if inside a span', function() { + var c = getCanvasFromXML('
this is a paragraph
'), + k = new Keyboard(c); + + k.withCaret('i|s').press(K.ENTER); + + var rootContents = c.wlxmlDocument.root.contents(); + + expect(rootContents.length).to.equal(2); + + var p1 = rootContents[0], + p2 = rootContents[1]; + + expect(p1.is({tagName: 'div', klass: 'p'})).to.equal(true); + expect(p2.is({tagName: 'div', klass: 'p'})).to.equal(true); + + var p1Contents = p1.contents(), + p2Contents = p2.contents(); + + expect(p1Contents[0].getText()).to.equal('this '); + expect(p1Contents[1].is({tagName: 'span'})).to.equal(true); + expect(p1Contents[1].contents()[0].getText()).to.equal('i'); + + + expect(p2Contents[0].is({tagName: 'span'})).to.equal(true); + expect(p2Contents[0].contents()[0].getText()).to.equal('s'); + expect(p2Contents[1].getText()).to.equal(' a paragraph'); + + var selection = c.getSelection(); + expect(selection.element.sameNode(getTextElement('s', c))).to.equal(true); + expect(selection.offset).to.equal(0); + }); + + it('splits its parent box if inside a double span', function() { + var c = getCanvasFromXML('
this is a paragraph
'), + k = new Keyboard(c); + + k.withCaret('i|s').press(K.ENTER); + + var rootContents = c.wlxmlDocument.root.contents(); + + expect(rootContents.length).to.equal(2); + + var p1 = rootContents[0], + p2 = rootContents[1]; + + expect(p1.is({tagName: 'div', klass: 'p'})).to.equal(true); + expect(p2.is({tagName: 'div', klass: 'p'})).to.equal(true); + + var p1Contents = p1.contents(), + p2Contents = p2.contents(); + + /* first paragraph */ + expect(p1Contents[0].getText()).to.equal('this '); + + var outer1 = p1Contents[1]; + expect(outer1.getAttr('test')).to.equal('outer'); + expect(outer1.contents().length).to.equal(1); + var inner1 = outer1.contents()[0]; + expect(inner1.getAttr('test')).to.equal('inner'); + expect(inner1.contents()[0].getText()).to.equal('i'); + + /* second paragraph */ + var outer2 = p2Contents[0]; + expect(outer2.getAttr('test')).to.equal('outer'); + expect(outer2.contents().length).to.equal(1); + var inner2 = outer2.contents()[0]; + expect(inner2.getAttr('test')).to.equal('inner'); + expect(inner2.contents()[0].getText()).to.equal('s'); + + expect(p2Contents[1].getText()).to.equal(' a paragraph'); + + /* caret */ + var selection = c.getSelection(); + expect(selection.element.sameNode(getTextElement('s', c))).to.equal(true); + expect(selection.offset).to.equal(0); + }); + }); + });