123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462 |
- (function (root, factory) {
- 'use strict';
- if (typeof module === 'object' && module.exports) {
- // Node. Does not work with strict CommonJS, but only CommonJS-like
- // environments that support module.exports, like Node.
- factory(require('./x2js'), require('qunit-cli'));
- } else {
- // Browser globals (root is window)
- factory(root.X2JS, root.QUnit);
- }
- })(this, function (X2JS, QUnit) {
- 'use strict';
- QUnit.module('Converting JavaScript objects to XML');
- QUnit.test('Element with attribute', function (assert) {
- var js = {
- 'document': {
- 'element': {
- '_attribute': 'value'
- }
- }
- };
- var x = new X2JS();
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<element attribute="value" />' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Element with attribute and selfClosingElements set to false', function (assert) {
- var js = {
- 'document': {
- 'element': {
- '_attribute': 'value'
- }
- }
- };
- var x = new X2JS({
- 'selfClosingElements': false
- });
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<element attribute="value"></element>' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Element with attribute and selfClosingElements set to true', function (assert) {
- var js = {
- 'document': {
- 'element': {
- '_attribute': 'value'
- }
- }
- };
- var x = new X2JS({
- 'selfClosingElements': true
- });
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<element attribute="value" />' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Element with attribute containing XML characters', function (assert) {
- var js = {
- 'document': {
- 'element': {
- '_attribute': 'va&lue<'
- }
- }
- };
- var x = new X2JS();
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<element attribute="va&lue<" />' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Just a string', function (assert) {
- var js = {
- 'document': {
- 'elementY': 'hello there'
- }
- };
- var x = new X2JS();
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<elementY>hello there</elementY>' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('String with XML characters', function (assert) {
- var js = {
- 'document': {
- 'elementY': 'hello &there<'
- }
- };
- var x = new X2JS();
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<elementY>hello &there<</elementY>' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('CDATA', function (assert) {
- var js = {
- 'document': {
- 'elementZ': { '__cdata': 'hello again' }
- }
- };
- var x = new X2JS();
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<elementZ><![CDATA[hello again]]></elementZ>' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('CDATA with XML characters', function (assert) {
- var js = {
- 'document': {
- 'elementZ': { '__cdata': 'hello &again<' }
- }
- };
- var x = new X2JS();
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<elementZ><![CDATA[hello &again<]]></elementZ>' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Empty string as value', function (assert) {
- var js = {
- 'document': {
- 'elementU': ''
- }
- };
- var x = new X2JS();
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<elementU />' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Zero as value', function (assert) {
- var js = {
- 'document': {
- 'element': 0
- }
- };
- var x = new X2JS();
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<element>0</element>' +
- '</document>';
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Empty string as value with selfClosingElements set to false', function (assert) {
- var js = {
- 'document': {
- 'elementU': ''
- }
- };
- var x = new X2JS({
- 'selfClosingElements': false
- });
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<elementU></elementU>' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Basic array', function (assert) {
- var js = {
- 'document': {
- 'elementV': [
- { 'x': 't' },
- { 'm': 'n' }
- ]
- }
- };
- var x = new X2JS();
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<elementV><x>t</x></elementV>' +
- '<elementV><m>n</m></elementV>' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Array of empty strings', function (assert) {
- var js = {
- 'document': {
- 'elementX': ['', '']
- }
- };
- var x = new X2JS();
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<elementX />' +
- '<elementX />' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Array of empty strings with selfClosingElements set to false', function (assert) {
- var js = {
- 'document': {
- 'elementX': ['', '']
- }
- };
- var x = new X2JS({
- 'selfClosingElements': false
- });
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<elementX></elementX>' +
- '<elementX></elementX>' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Attributes in array', function (assert) {
- var js = {
- 'document': {
- 'elementV': [
- {
- 'x': 't',
- '_a': 'a'
- },
- {
- 'm': 'n',
- '_b': 'b'
- }
- ]
- }
- };
- var x = new X2JS();
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<elementV a="a"><x>t</x></elementV>' +
- '<elementV b="b"><m>n</m></elementV>' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Falsey element values + attributes', function (assert) {
- var js = {
- 'document': {
- 'elementV': [
- {
- 'm': {
- '__text': 'n',
- '_a': 'ns'
- }
- },
- {
- 'm': {
- '__text': 0,
- '_a': 'ns'
- }
- },
- {
- 'm': {
- '__text': false,
- '_a': 'ns'
- }
- }
- ]
- }
- };
- var x = new X2JS();
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<elementV><m a="ns">n</m></elementV>' +
- '<elementV><m a="ns">0</m></elementV>' +
- '<elementV><m a="ns">false</m></elementV>' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Namespaces', function (assert) {
- var js = {
- 'document': {
- '__prefix': 'ns',
- '_ns:xmlns': 'http://example.com',
- 'elementV': [
- {
- '__prefix': 'ns',
- 'x': 't',
- '_a': 'a'
- },
- {
- 'm': {
- '__text': 'n',
- '__prefix': 'ns'
- },
- '_b': 'b'
- }
- ]
- }
- };
- var x = new X2JS();
- var xml = x.js2xml(js);
- var expected = '<ns:document ns:xmlns="http://example.com">' +
- '<ns:elementV a="a"><x>t</x></ns:elementV>' +
- '<elementV b="b"><ns:m>n</ns:m></elementV>' +
- '</ns:document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Filter out', function (assert) {
- var js = {
- 'document': {
- 'elementV': [
- { 'x': 't' },
- { 'password': 'n' }
- ],
- 'password': 'n'
- }
- };
- var x = new X2JS({
- 'jsAttributeFilter': function (name, value) {
- return name === 'password';
- }
- });
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<elementV><x>t</x></elementV>' +
- '<elementV></elementV>' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('Attribute converter', function (assert) {
- var js = {
- 'document': {
- 'elementV': [
- { 'x': 't' },
- { 'password': 'n' }
- ],
- 'password': 'n'
- }
- };
- var x = new X2JS({
- 'jsAttributeConverter': function (name, value) {
- return name === 'password' ? '***' : value;
- }
- });
- var xml = x.js2xml(js);
- var expected = '<document>' +
- '<elementV><x>t</x></elementV>' +
- '<elementV><password>***</password></elementV>' +
- '<password>***</password>' +
- '</document>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('UTC dates', function (assert) {
- var date = new Date();
- var js = {
- 'date': date
- };
- var x = new X2JS({
- 'jsDateUTC': true
- });
- var xml = x.js2xml(js);
- var expected = '<date>' +
- date.toUTCString() +
- '</date>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- QUnit.test('ISO dates', function (assert) {
- var date = new Date();
- var js = {
- 'date': date
- };
- var x = new X2JS();
- var xml = x.js2xml(js);
- var expected = '<date>' +
- date.toISOString() +
- '</date>';
- // Implementation does not guarantee formatting so the test is somewhat fragile.
- assert.strictEqual(xml, expected);
- });
- });
|