/*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'; var actualHTML = editor.getHTML().replace(/
/g, ''); // BR tags are inconsistent across browsers. Removing them allows cross-browser testing. expect(actualHTML, '[not] to be', expectedValue); }); describe('Squire RTE', function () { var doc, editor; beforeEach(function () { var iframe = document.getElementById('testFrame'); doc = iframe.contentDocument; editor = new Squire(doc); }); function selectAll(editor) { 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.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
fourfive
'; editor.setHTML(startHTML); expect(editor, 'to contain HTML', startHTML); selectAll(editor); editor.removeAllFormatting(); var expectedHTML = '
one
two
three
four
five
'; expect(editor, 'to contain HTML', expectedHTML); }); // 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
twothree
fourfive
'; 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
' + '
fourfive
'); }); }); afterEach(function () { editor = null; var iframe = document.getElementById('testFrame'); iframe.src = 'blank.html'; }); });