fontoxpath
Version:
A minimalistic XPath 3.1 engine in JavaScript
53 lines (46 loc) • 1.5 kB
JavaScript
import * as slimdom from 'slimdom';
import jsonMlMapper from 'test-helpers/jsonMlMapper';
import {
evaluateXPathToFirstNode
} from 'fontoxpath';
let documentNode;
beforeEach(() => {
documentNode = new slimdom.Document();
});
describe('child', () => {
it('parses child::', () => {
jsonMlMapper.parse([
'someParentElement',
['someElement']
], documentNode);
chai.assert(evaluateXPathToFirstNode('child::someElement', documentNode.documentElement) === documentNode.documentElement.firstChild);
});
it('is added implicitly', () =>{
jsonMlMapper.parse([
'someParentElement',
['someElement']
], documentNode);
chai.assert(evaluateXPathToFirstNode('someElement', documentNode.documentElement) === documentNode.documentElement.firstChild);
});
it('An attribute has no children', () => {
jsonMlMapper.parse([
'someParentElement',
{
someAttribute: 'someValue'
},
['someElement']
], documentNode);
chai.assert(evaluateXPathToFirstNode('/attribute::someAttribute/child::node()', documentNode) === null);
});
it('sets the context sequence', () => {
jsonMlMapper.parse([
'someParentElement',
['someElement'],
['someOtherElement']
], documentNode);
chai.assert.deepEqual(evaluateXPathToFirstNode('someParentElement/child::*[last()]', documentNode), documentNode.documentElement.lastChild);
});
it('throws the correct error if context is absent', () => {
chai.assert.throws(() => evaluateXPathToFirstNode('*', null), 'XPDY0002');
});
});