X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/814507273dabfe3df3cf3de4d03bd4b100556ac4..512fcabb2a882e26649612efb2b91f25cfc02ec3:/src/smartxml/smartxml.test.js diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js index 8b9ed6e..d997aa7 100644 --- a/src/smartxml/smartxml.test.js +++ b/src/smartxml/smartxml.test.js @@ -4,21 +4,26 @@ define([ ], function(chai, smartxml) { 'use strict'; - +/*jshint expr:true */ +/* global describe, it, beforeEach */ var expect = chai.expect; var getDocumentFromXML = function(xml) { return smartxml.documentFromXML(xml); -} +}; var elementNodeFromParams = function(params) { return smartxml.elementNodeFromXML('<' + params.tag + '>'); -} +}; + +var elementNodeFromXML = function(xml) { + return smartxml.elementNodeFromXML(xml); +}; -describe.only('smartxml', function() { +describe('smartxml', function() { describe('Basic Document properties', function() { it('exposes its root element', function() { @@ -27,15 +32,107 @@ describe.only('smartxml', function() { }); }); + describe('Basic ElementNode properties', function() { + it('exposes node contents', function() { + var node = elementNodeFromXML('Sometextis here'), + contents = node.contents(); + + expect(contents).to.have.length(3); + expect(contents[0].nodeType).to.equal(Node.TEXT_NODE, 'text node 1'); + expect(contents[1].nodeType).to.equal(Node.ELEMENT_NODE, 'element node 1'); + expect(contents[2].nodeType).to.equal(Node.TEXT_NODE, 'text node 2'); + }); + + describe('Storing custom data', function() { + var node; + + beforeEach(function() { + node = elementNodeFromXML('
'); + }); + + it('can append single value', function() { + node.setData('key', 'value'); + expect(node.getData('key')).to.equal('value'); + }); + + it('can overwrite the whole data', function() { + node.setData('key1', 'value1'); + node.setData({key2: 'value2'}); + expect(node.getData('key2')).to.equal('value2'); + }); + + it('can fetch the whole data at once', function() { + node.setData({key1: 'value1', key2: 'value2'}); + expect(node.getData()).to.eql({key1: 'value1', key2: 'value2'}); + }); + }); + + describe('Changing node tag', function() { + it('keeps custom data', function() { + var node = elementNodeFromXML('
'); + + node.setData('key', 'value'); + node.setTag('header'); + + expect(node.getTagName()).to.equal('header'); + expect(node.getData()).to.eql({key: 'value'}); + }); + }); + }); + describe('Manipulations', function() { - it('appende element node to another element node', function() { + it('appends element node to another element node', function() { var node1 = elementNodeFromParams({tag: 'div'}), node2 = elementNodeFromParams({tag: 'a'}); node1.append(node2); expect(node1.contents()[0].sameNode(node2)).to.be.true; }); + it('wraps element node with another element node', function() { + var node = elementNodeFromXML('
'), + wrapper = elementNodeFromXML(''); + + node.wrapWith(wrapper); + expect(node.parent().sameNode(wrapper)).to.be.true; + }); + + it('wraps text node with element node', function() { + var node = elementNodeFromXML('
Alice
'), + textNode = node.contents()[0], + wrapper = elementNodeFromXML(''); + + textNode.wrapWith(wrapper); + expect(textNode.parent().sameNode(wrapper)).to.be.true; + expect(node.contents()).to.have.length(1); + }); + + it('unwraps element node contents', function() { + var node = elementNodeFromXML('
Alice
has propably a cat
!
'), + outerDiv = node.contents()[1]; + + outerDiv.unwrapContent(); + + expect(node.contents().length).to.equal(3); + expect(node.contents()[0].getText()).to.equal('Alice has '); + expect(node.contents()[1].getTagName()).to.equal('span'); + expect(node.contents()[2].getText()).to.equal(' a cat!'); + }); + + }); + + describe('Serializing document to WLXML', function() { + it('keeps document intact when no changes have been made', function() { + var xmlIn = '
Alice
has
a cat!
', + doc = getDocumentFromXML(xmlIn), + xmlOut = doc.toXML(); + + var parser = new DOMParser(), + input = parser.parseFromString(xmlIn, 'application/xml').childNodes[0], + output = parser.parseFromString(xmlOut, 'application/xml').childNodes[0]; + + expect(input.isEqualNode(output)).to.be.true; + }); }); });