123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- (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';
- // Test cases are full of magic numbers and that's fine.
- /* eslint-disable no-magic-numbers */
- QUnit.module('Configuration options');
- QUnit.test('Default attribute prefix', function (assert) {
- var xml = '<document><element attribute="value" /></document>';
- var x = new X2JS();
- var js = x.xml2js(xml);
- assert.ok(js.document);
- assert.ok(js.document.element);
- assert.ok(js.document.element._attribute);
- assert.strictEqual(js.document.element._attribute, 'value');
- });
- QUnit.test('Empty attribute prefix', function (assert) {
- var xml = '<document><element attribute="value" /></document>';
- var x = new X2JS({
- 'attributePrefix': ''
- });
- var js = x.xml2js(xml);
- assert.ok(js.document);
- assert.ok(js.document.element);
- assert.ok(js.document.element.attribute);
- assert.strictEqual(js.document.element.attribute, 'value');
- });
- QUnit.test('Custom nonempty attribute prefix', function (assert) {
- var xml = '<document><element attribute="value" /></document>';
- var x = new X2JS({
- 'attributePrefix': '$$'
- });
- var js = x.xml2js(xml);
- assert.ok(js.document);
- assert.ok(js.document.element);
- assert.ok(js.document.element.$$attribute);
- assert.strictEqual(js.document.element.$$attribute, 'value');
- });
- QUnit.test('Attribute converters run but only when appropriate', function (assert) {
- var xml = '<Root><element test1="FAIL" test2="success 2.1">first</element><element test1="FAIL 1.2" test2="success 2.2">second</element></Root>';
- var x = new X2JS({
- 'attributeConverters': [
- {
- 'test': function (name, value) {
- return name === 'test1';
- },
- 'convert': function (name, value) {
- return 'success 1.*';
- }
- }
- ]
- });
- var js = x.xml2js(xml);
- assert.ok(js.Root);
- assert.ok(js.Root.element);
- assert.ok(js.Root.element.length);
- assert.ok(js.Root.element[0]);
- assert.ok(js.Root.element[0]._test1);
- assert.ok(js.Root.element[0]._test2);
- assert.strictEqual(js.Root.element[0]._test1, 'success 1.*');
- assert.strictEqual(js.Root.element[0]._test2, 'success 2.1');
- assert.strictEqual(js.Root.element[1]._test1, 'success 1.*');
- assert.strictEqual(js.Root.element[1]._test2, 'success 2.2');
- });
- QUnit.test('Root element is dropped with ignoreRoot=true', function (assert) {
- var xml = '<document><element attribute="value" /></document>';
- var x = new X2JS({
- 'ignoreRoot': true
- });
- var js = x.xml2js(xml);
- assert.notOk(js.document);
- assert.ok(js.element);
- });
- QUnit.test('Array access-form override via path', function (assert) {
- var xml = '<document><element attribute="value" /></document>';
- var x = new X2JS({
- 'arrayAccessFormPaths': [
- 'document.element'
- ]
- });
- var js = x.xml2js(xml);
- assert.ok(js.document);
- assert.ok(js.document.element);
- assert.ok(js.document.element.length);
- assert.strictEqual(js.document.element.length, 1);
- assert.ok(js.document.element[0], 'value');
- });
- QUnit.test('Array access-form override via regex', function (assert) {
- var xml = '<document><element attribute="value" /></document>';
- var x = new X2JS({
- 'arrayAccessFormPaths': [
- /.*\.element$/
- ]
- });
- var js = x.xml2js(xml);
- assert.ok(js.document);
- assert.ok(js.document.element);
- assert.ok(js.document.element.length);
- assert.strictEqual(js.document.element.length, 1);
- assert.ok(js.document.element[0], 'value');
- });
- QUnit.test('Array access-form override via function', function (assert) {
- var xml = '<document><element attribute="value" /></document>';
- var x = new X2JS({
- 'arrayAccessFormPaths': [
- function (elementName, elementPath) {
- return elementName === 'element';
- }
- ]
- });
- var js = x.xml2js(xml);
- assert.ok(js.document);
- assert.ok(js.document.element);
- assert.ok(js.document.element.length);
- assert.strictEqual(js.document.element.length, 1);
- assert.ok(js.document.element[0], 'value');
- });
- QUnit.test('Datetime parsing via path', function (assert) {
- var xml = '<document><datetimeElement>2002-10-10T12:00:00+04:00</datetimeElement></document>';
- var x = new X2JS({
- 'datetimeAccessFormPaths': [
- 'document.datetimeElement'
- ]
- });
- var js = x.xml2js(xml);
- assert.ok(js.document);
- assert.ok(js.document.datetimeElement);
- assert.ok(js.document.datetimeElement instanceof Date);
- assert.strictEqual(js.document.datetimeElement.getFullYear(), 2002);
- });
- QUnit.test('Datetime parsing via regex', function (assert) {
- var xml = '<document><datetimeElement>2002-10-10T12:00:00+04:00</datetimeElement></document>';
- var x = new X2JS({
- 'datetimeAccessFormPaths': [
- /.*\.datetimeElement$/
- ]
- });
- var js = x.xml2js(xml);
- assert.ok(js.document);
- assert.ok(js.document.datetimeElement);
- assert.ok(js.document.datetimeElement instanceof Date);
- assert.strictEqual(js.document.datetimeElement.getFullYear(), 2002);
- });
- QUnit.test('Datetime parsing via function', function (assert) {
- var xml = '<document><datetimeElement>2002-10-10T12:00:00+04:00</datetimeElement></document>';
- var x = new X2JS({
- 'datetimeAccessFormPaths': [
- function (elementPath) {
- return elementPath === 'document.datetimeElement';
- }
- ]
- });
- var js = x.xml2js(xml);
- assert.ok(js.document);
- assert.ok(js.document.datetimeElement);
- assert.ok(js.document.datetimeElement instanceof Date);
- assert.strictEqual(js.document.datetimeElement.getFullYear(), 2002);
- });
- QUnit.test('Datetime parsing in different formats', function (assert) {
- var xml = '<document>' +
- '<datetimeElement>2002-10-10T12:00:00+04:00</datetimeElement>' +
- '<datetimeElement>2002-10-10T12:00:00Z</datetimeElement>' +
- '<datetimeElement>2002-10-10T12:00:00</datetimeElement>' +
- '<datetimeElement>2002-10-10T12:00:00Z</datetimeElement>' +
- '</document>';
- var x = new X2JS({
- 'datetimeAccessFormPaths': [
- 'document.datetimeElement'
- ]
- });
- var js = x.xml2js(xml);
- assert.ok(js.document);
- assert.ok(js.document.datetimeElement);
- assert.ok(js.document.datetimeElement.length);
- assert.strictEqual(js.document.datetimeElement.length, 4);
- for (var i = 0; i < js.document.datetimeElement.length; i++) {
- assert.ok(js.document.datetimeElement[i]);
- assert.ok(js.document.datetimeElement[i] instanceof Date);
- assert.strictEqual(js.document.datetimeElement[i].getFullYear(), 2002);
- }
- });
- QUnit.test('Options to xmldom', function (assert) {
- var xml = '<';
- var x = new X2JS({
- 'xmldomOptions': {
- 'errorHandler': {
- error(error) {
- throw error;
- }
- }
- }
- });
- try {
- x.xml2js(xml);
- } catch (e) {
- assert.equal(e, '[xmldom error]\telement parse error: [xmldom error]\tunexpected end of input\n' +
- '@#[line:undefined,col:undefined]\n' +
- '@#[line:undefined,col:undefined]');
- }
- assert.ok(true);
- });
- QUnit.test(`Element only has text node with default keepText(keepText='false')`, function (assert) {
- var xml = '<document><element>text</element></document>';
- var x = new X2JS();
- var js = x.xml2js(xml);
- assert.ok(js.document);
- assert.ok(js.document.element);
- assert.strictEqual(js.document.element, 'text');
- });
- QUnit.test(`Element only has text node with keepText='true'`, function (assert) {
- var xml = '<document><element>text</element></document>';
- var x = new X2JS({
- 'keepText': true
- });
- var js = x.xml2js(xml);
- assert.ok(js.document);
- assert.ok(js.document.element);
- assert.strictEqual(js.document.element.__text, 'text');
- });
- });
|