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 = '';
+ 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 = '';
+ 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', '' +
+ '
two
' +
+ '
three
' +
+ '');
+ });
});
afterEach(function () {
editor = null;
+ var iframe = document.getElementById('testFrame');
+ iframe.src = 'about:blank';
});
});