diff --git a/test/squire.spec.js b/test/squire.spec.js index e6fe0ee..d495672 100644 --- a/test/squire.spec.js +++ b/test/squire.spec.js @@ -1,11 +1,118 @@ /*global expect, describe, afterEach, beforeEach, it */ +expect = expect.clone() + .addType({ + name: 'SquireRTE', + base: 'object', + identify: function (value) { + return value instanceof Squire; + }, + inspect: function (value) { + return 'Squire RTE: ' + value.getHTML(); + } + }) + .addAssertion('[not] to contain HTML', function (expect, editor, expectedValue) { + this.errorMode = 'bubble'; + expect(editor.getHTML(), '[not] to be', expectedValue); + }); + describe('Squire RTE', function () { - var editor; + var doc, editor; beforeEach(function () { - editor = new Squire(document.getElementById('testFrame').contentDocument); + var iframe = document.getElementById('testFrame'); + doc = iframe.contentDocument; + editor = new Squire(doc); + }); + + function selectAll(editor) { + var range = doc.createRange(); + range.setStartBefore(doc.body.childNodes.item(0)); + range.setEndAfter(doc.body.childNodes.item(0)); + editor.setSelection(range); + } + + describe('removeAllFormatting()', function () { + // Trivial cases + it('removes inline styles', function () { + var startHTML = '
one two three four five
'; + editor.setHTML(startHTML); + expect(editor, 'to contain HTML', startHTML); + selectAll(editor); + editor.removeAllFormatting(); + expect(editor, 'to contain HTML', '

one two three four five
'); + }); + it('removes block styles', function () { + var startHTML = '
one
' + + '
  1. three
four
five
'; + editor.setHTML(startHTML); + expect(editor, 'to contain HTML', startHTML); + selectAll(editor); + editor.removeAllFormatting(); + expect(editor, 'to contain HTML', '

one

two

three

four

five
'); + }); + + // Potential bugs + it('removes styles that begin inside the range', function () { + var startHTML = '
one two three four five
'; + editor.setHTML(startHTML); + expect(editor, 'to contain HTML', startHTML); + var range = doc.createRange(); + range.setStart(doc.body.childNodes.item(0), 0); + range.setEnd(doc.getElementsByTagName('i').item(0).childNodes.item(0), 4); + editor.removeAllFormatting(range); + expect(editor, 'to contain HTML', '
one two three four five
'); + }); + + it('removes styles that end inside the range', function () { + var startHTML = '
one two three four five
'; + editor.setHTML(startHTML); + expect(editor, 'to contain HTML', startHTML); + var range = doc.createRange(); + range.setStart(doc.getElementsByTagName('i').item(0).childNodes.item(0), 13); + range.setEnd(doc.body.childNodes.item(0), doc.body.childNodes.item(0).childNodes.length); + editor.removeAllFormatting(range); + expect(editor, 'to contain HTML', '
one two three four five
'); + }); + + it('removes styles enclosed by the range', function () { + var startHTML = '
one two three four five
'; + editor.setHTML(startHTML); + expect(editor, 'to contain HTML', startHTML); + var range = doc.createRange(); + range.setStart(doc.body.childNodes.item(0), 0); + range.setEnd(doc.body.childNodes.item(0), doc.body.childNodes.item(0).childNodes.length); + editor.removeAllFormatting(range); + expect(editor, 'to contain HTML', '
one two three four five
'); + }); + + it('removes styles enclosing the range', function () { + var startHTML = '
one two three four five
'; + editor.setHTML(startHTML); + expect(editor, 'to contain HTML', startHTML); + var range = doc.createRange(); + range.setStart(doc.getElementsByTagName('i').item(0).childNodes.item(0), 4); + range.setEnd(doc.getElementsByTagName('i').item(0).childNodes.item(0), 18); + editor.removeAllFormatting(range); + expect(editor, 'to contain HTML', '
one two three four five
'); + }); + + it('removes nested styles and closes tags correctly', function () { + var startHTML = '
one
two
three
four
five
'; + editor.setHTML(startHTML); + expect(editor, 'to contain HTML', startHTML); + var range = doc.createRange(); + range.setStart(doc.getElementsByTagName('td').item(1), 0); + range.setEnd(doc.getElementsByTagName('td').item(2), doc.getElementsByTagName('td').item(2).childNodes.length); + editor.removeAllFormatting(range); + expect(editor, 'to contain HTML', '
one
' + + '

two
' + + '

three
' + + '
four
five
'); + }); }); afterEach(function () { editor = null; + var iframe = document.getElementById('testFrame'); + iframe.src = 'about:blank'; }); });