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(''); expect(xml).toContain('foobar'); expect(xml).toContain(' { 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('foobar'); }); 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'); }); export default tap.start();