/* jshint node:true */ /* global MergeXML, describe, it, before, after, beforeEach, afterEach, expect */ 'use strict'; describe('Instantiating object ', function() { var merger; it('works', function() { merger = new MergeXML(); expect(merger).to.be.an('object'); }); }); describe('Adding source', function() { var merger, a, b; it('strings works', function() { merger = new MergeXML(); a = ''; b = ''; expect(merger.AddSource(a)).to.not.equal(false); expect(merger.AddSource(b)).to.not.equal(false); }); }); describe('Merging XML sources', function() { var merger, a, b; describe('with option join = undefined', function() { // TODO }); describe('with option join = false', function() { it('succeeds if sources have a common root name', function() { merger = new MergeXML({ join: false }); a = ''; b = ''; merger.AddSource(a); merger.AddSource(b); expect(merger.Get(1).trim()).to.equal(''); }); it('fails to merge second source if sources do not have a common root name', function() { merger = new MergeXML({ join: false }); a = ''; b = ''; merger.AddSource(a); merger.AddSource(b); expect(merger.Get(1).trim()).to.equal(''); }); }); describe('with option updn = true or undefined', function() { var merger, a, b; it('merges sources by nodeName', function() { merger = new MergeXML({ updn: true }); a = '' + 's1' + 's3' + ''; b = '' + 's1' + 's2' + 's4' + ''; merger.AddSource(a); merger.AddSource(b); expect(merger.Get(1).trim()).to.equal('s1s4s2'); merger = new MergeXML(); merger.AddSource(a); merger.AddSource(b); expect(merger.Get(1).trim()).to.equal('s1s4s2'); }); }); describe('with option updn = false', function() { var merger, a, b; it('merges sources by node position, discarding nodeName', function() { merger = new MergeXML({ updn: false }); a = '' + 's1' + 's3' + ''; b = '' + 's1' + 's2' + 's4' + ''; merger.AddSource(a); merger.AddSource(b); expect(merger.Get(1).trim()).to.equal('s1s2s4'); }); }); describe('with namespaced attributes', function() { var merger; var ns = 'https://github.com/enketo/merge-xml'; it('correctly adds namespaced attributes from second source', function() { merger = new MergeXML({ join: false }); a = '' + 's1' + ''; b = '' + 's2' + ''; merger.AddSource(a); merger.AddSource(b); expect(merger.error.code).to.equal(''); expect(merger.error.text).to.equal(''); expect(merger.Get(1).trim()).to.equal('s2'); // in IE11 and below, merger.Get(0) returns an ActiveXObject we use the internal "Query" function expect(merger.Query('//c').attributes[0].localName).to.equal('custom'); // fails in IE because expect(merger.Query('//c').attributes[0].namespaceURI).to.equal(ns); }) }) describe('with sources that have and do not have a UTF encoding declaration', function() { var merger; var a = '' + 's1'; var b = '' + 's2'; it('undeclared and UTF-8', function() { merger = new MergeXML({ join: false }); merger.AddSource(a); merger.AddSource(b); expect(merger.error.code).to.equal(''); expect(merger.error.text).to.equal(''); expect(merger.Get(1)).to.contain('s2'); }); it('UTF8 and undeclared', function() { merger = new MergeXML({ join: false }); merger.AddSource(b); merger.AddSource(a); expect(merger.error.code).to.equal(''); expect(merger.error.text).to.equal(''); expect(merger.Get(1)).to.contain('s1'); }); }); });