import * as xmlpoke from 'xmlpoke';
import * as assert from 'assert';
let result: string;
// add with xpath, value
result = xmlpoke('', xml => xml.add('/a/b', 'c'));
assert.equal(result, 'c');
// add with xpath, Transform
const addfn: XmlPoke.Transform = (node, value) => 'c';
result = xmlpoke('', xml => xml.add('/a/b', addfn));
assert.equal(result, 'c');
// add with xpath, CDataValue
const cdataval: XmlPoke.CDataValue = new xmlpoke.CDataValue('c');
result = xmlpoke('', xml => xml.add('/a/b', cdataval));
assert.equal(result, '');
// add with xpath, XMLVal
const xmlval = new xmlpoke.XmlString('');
result = xmlpoke('', xml => xml.add('/a/b', xmlval));
assert.equal(result, '');
// add with map
result = xmlpoke('', xml => xml.add({
'/a/b': 'c'
}));
assert.equal(result, 'c');
// set with xpath, value
result = xmlpoke('b', xml => xml.set('/a', 'c'));
assert.equal(result, 'c');
// set with map
result = xmlpoke('b', xml => xml.set({
'/a': 'c'
}));
assert.equal(result, 'c');
// set with xpath that doesn't exist (no-op)
result = xmlpoke('bval', xml => xml.set('/a/c', 'cval'));
assert.equal(result, 'bval');
// setOrAdd with xpath, value
result = xmlpoke('', xml => xml.setOrAdd('/a/b', 'c'));
assert.equal(result, 'c');
// setOrAdd with map
result = xmlpoke('', xml => xml.setOrAdd({
'/a/b': 'c'
}));
assert.equal(result, 'c');
// setOrAdd with xpath that doesn't exist: add
result = xmlpoke('bval', xml => xml.setOrAdd('/a/c', 'cval'));
assert.equal(result, 'bvalcval');
// remove
result = xmlpoke('', xml => xml.remove('//b'));
assert.equal(result, '');
// clear
result = xmlpoke('', xml => xml.clear('/a'));
assert.equal(result, '');
// withBasePath, addNamespace, errorOnNoMatches
result = xmlpoke('', xml =>
xml.withBasePath('/test')
.addNamespace('x', 'http://example.com/x')
.errorOnNoMatches()
.set('/x', (node, value) => {
assert.equal(typeof node, 'object');
assert.equal((node.constructor as any).name, 'Element');
assert.equal(value, 'hello');
return 'y';
}));
assert.equal(result, 'y');