X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/2ec50c1931fa2337309067dd1b4ee0a3aeaaaa8f..80415f03b8fabc18238c1f283348270331702d2e:/src/smartxml/smartxml.test.js diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js index 2abdc80..7fd408e 100644 --- a/src/smartxml/smartxml.test.js +++ b/src/smartxml/smartxml.test.js @@ -5,6 +5,7 @@ define([ 'use strict'; /*jshint expr:true */ +/* global describe, it, beforeEach */ var expect = chai.expect; @@ -22,13 +23,22 @@ var elementNodeFromXML = function(xml) { }; -describe.only('smartxml', function() { +describe('smartxml', function() { describe('Basic Document properties', function() { it('exposes its root element', function() { var doc = getDocumentFromXML('
'); expect(doc.root.getTagName()).to.equal('div'); }); + + it('can resets its content entirely', function() { + var doc = getDocumentFromXML('
'); + + expect(doc.root.getTagName()).to.equal('div'); + + doc.loadXML('
'); + expect(doc.root.getTagName()).to.equal('header'); + }); }); describe('Basic ElementNode properties', function() { @@ -41,6 +51,55 @@ describe.only('smartxml', function() { 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('can change tag name', function() { + var doc = getDocumentFromXML('
'), + header = doc.root.contents()[0]; + header.setTag('span'); + expect(header.getTagName()).to.equal('span'); + + // DOM specifies ElementNode tag as a read-only property, so + // changing it in a seamless way is a little bit tricky. For this reason + // the folowing expectations are required, despite the fact that they actually are + // motivated by implemetation detail. + expect(header.parent().sameNode(doc.root)).to.equal(true, 'ensure we stayed in a document'); + }); + + 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() { @@ -84,6 +143,20 @@ describe.only('smartxml', function() { }); + 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; + }); + }); + }); }); \ No newline at end of file