90 lines
2.2 KiB
TypeScript
90 lines
2.2 KiB
TypeScript
import { expect, tap } from '@push.rocks/tapbundle';
|
|
import * as smartxml from '../ts/index.js';
|
|
|
|
let testSmartxml: smartxml.SmartXml;
|
|
let testXml = '';
|
|
|
|
tap.test('should create an instance', async () => {
|
|
testSmartxml = new smartxml.SmartXml();
|
|
});
|
|
|
|
tap.test('should create an xml string', async () => {
|
|
const xmlResult = testSmartxml.createXmlFromObject({
|
|
hello: {
|
|
'@_xlmns:teststring': 'hellothere',
|
|
'@_xlmns:testnumber': 10,
|
|
wow: 'test',
|
|
url: [{ loc: 3 }, { loc: 3 }],
|
|
},
|
|
});
|
|
console.log(xmlResult);
|
|
testXml = xmlResult;
|
|
});
|
|
|
|
tap.test('should parse an yml file', async () => {
|
|
const jsObject = testSmartxml.parseXmlToObject(testXml);
|
|
// console.log(JSON.stringify(jsObject, null, 2));
|
|
expect(typeof jsObject).toEqual('object');
|
|
expect(jsObject)
|
|
.arrayItem(1)
|
|
.property('hello')
|
|
.arrayItem(0)
|
|
.property('wow')
|
|
.arrayItem(0)
|
|
.property('#text')
|
|
.toEqual('test');
|
|
});
|
|
|
|
// Test XmlBuilder chainable API
|
|
tap.test('should create XML using chainable API', async () => {
|
|
const xml = testSmartxml.create()
|
|
.ele('root', { att: 'val' })
|
|
.ele('foo')
|
|
.ele('bar').txt('foobar').up()
|
|
.up()
|
|
.ele('baz').up()
|
|
.up()
|
|
.end({ prettyPrint: true });
|
|
|
|
console.log('Chainable XML:', xml);
|
|
expect(xml).toContain('<root');
|
|
expect(xml).toContain('att="val"');
|
|
expect(xml).toContain('<foo>');
|
|
expect(xml).toContain('<bar>foobar</bar>');
|
|
expect(xml).toContain('<baz');
|
|
});
|
|
|
|
tap.test('should create XML from object using XmlBuilder', async () => {
|
|
const obj = {
|
|
root: {
|
|
'@_att': 'val',
|
|
foo: {
|
|
bar: 'foobar'
|
|
},
|
|
baz: {}
|
|
}
|
|
};
|
|
|
|
const xml = testSmartxml.create(obj).end({ prettyPrint: true });
|
|
console.log('Object-based XML:', xml);
|
|
expect(xml).toContain('<root');
|
|
expect(xml).toContain('att="val"');
|
|
expect(xml).toContain('<bar>foobar</bar>');
|
|
});
|
|
|
|
tap.test('should add attributes using att() method', async () => {
|
|
const xml = testSmartxml.create()
|
|
.ele('data')
|
|
.att('x', 1)
|
|
.att('y', 2)
|
|
.txt('value')
|
|
.up()
|
|
.end();
|
|
|
|
expect(xml).toContain('x="1"');
|
|
expect(xml).toContain('y="2"');
|
|
expect(xml).toContain('>value</data>');
|
|
});
|
|
|
|
export default tap.start();
|