UNPKG

xpath-parser

Version:
522 lines (500 loc) 14.5 kB
(function() { var debug, inspect, parse; debug = require('debug')('test:xpath'); inspect = require('eyes').inspector({ stream: null }); parse = require('../lib/xpath').parse; module.exports = { foo: function(æ) { var exp; exp = parse("/f:iq/o:query/namespace::o:foobar"); debug(inspect(exp)); æ.deepEqual(exp.map(function(e) { return e.prefix; }), ['f', 'o', 'o']); æ.deepEqual(exp.map(function(e) { return e.axis; }), ['child', 'child', 'namespace']); æ.deepEqual(exp.map(function(e) { return e.nc; }), ['iq', 'query', 'foobar']); return æ.done(); }, bar: function(æ) { var exp, _ref, _ref1, _ref2; exp = parse('//form[@action = "submi t.html"]//table'); debug(inspect(exp)); æ.deepEqual(exp.map(function(e) { return e.nc; }), ['node', 'form', 'node', 'table']); æ.deepEqual(exp.map(function(e) { return e.axis; }), ['descendant-or-self', 'child', 'descendant-or-self', 'child']); æ.deepEqual((_ref = exp[0]) != null ? _ref.args : void 0, [{}]); æ.deepEqual((_ref1 = exp[2]) != null ? _ref1.args : void 0, [{}]); æ.deepEqual((_ref2 = exp[1]) != null ? _ref2.predicate : void 0, [ [ { operator: '=', args: [ [ { axis: 'attribute', nc: 'action', q: 'action' } ], [ { value: 'submi t.html' } ] ] } ] ]); return æ.done(); }, baz: function(æ) { var exp, _ref; exp = parse("/iq/query../namespace::foobar"); debug(inspect(exp)); æ.deepEqual(exp.map(function(e) { return e.axis; }), ['child', 'child', 'parent', 'namespace']); æ.deepEqual(exp.map(function(e) { return e.nc; }), ['iq', 'query', 'node', 'foobar']); æ.deepEqual((_ref = exp[2]) != null ? _ref.args : void 0, [{}]); return æ.done(); }, 'self::ns': function(æ) { var exp, _ref; exp = parse("/self::node()/gs:enquiry/@ping:pong"); debug(inspect(exp)); æ.deepEqual(exp.map(function(e) { return e.prefix; }), [void 0, 'gs', 'ping']); æ.deepEqual(exp.map(function(e) { return e.axis; }), ['self', 'child', 'attribute']); æ.deepEqual(exp.map(function(e) { return e.nc; }), ['node', 'enquiry', 'pong']); æ.deepEqual((_ref = exp[0]) != null ? _ref.args : void 0, [[{}]]); return æ.done(); }, './ns': function(æ) { var exp, _ref; exp = parse("./gs:enquiry/attribute::ping:pong"); debug(inspect(exp)); æ.deepEqual(exp.map(function(e) { return e.prefix; }), [void 0, 'gs', 'ping']); æ.deepEqual(exp.map(function(e) { return e.axis; }), ['self', 'child', 'attribute']); æ.deepEqual(exp.map(function(e) { return e.nc; }), ['node', 'enquiry', 'pong']); æ.deepEqual((_ref = exp[0]) != null ? _ref.args : void 0, [{}]); return æ.done(); }, iq: function(æ) { var exp, _ref; exp = parse('/iq[@id="rofl"]/lol:w00t'); debug(inspect(exp)); æ.deepEqual(exp.map(function(e) { return e.prefix; }), [void 0, 'lol']); æ.deepEqual(exp.map(function(e) { return e.axis; }), ['child', 'child']); æ.deepEqual(exp.map(function(e) { return e.nc; }), ['iq', 'w00t']); æ.deepEqual((_ref = exp[0]) != null ? _ref.predicate : void 0, [ [ { operator: '=', args: [ [ { axis: 'attribute', nc: 'id', q: 'id' } ], [ { value: 'rofl' } ] ] } ] ]); return æ.done(); }, exp: function(æ) { var exp, _ref, _ref1; exp = parse('/überbook/(chapter)[fn:last()]'); debug(inspect(exp)); æ.deepEqual(exp.map(function(e) { return e.axis; }), ['child', 'child']); æ.deepEqual(exp.map(function(e) { return e.nc; }), ['überbook', void 0]); æ.deepEqual((_ref = exp[1]) != null ? _ref.predicate : void 0, [ [ { axis: 'self', prefix: 'fn', nc: 'last', q: 'fn:last', args: [[{}]] } ] ]); æ.deepEqual((_ref1 = exp[1]) != null ? _ref1.expression : void 0, [ { nc: 'chapter', q: 'chapter', axis: 'child' } ]); return æ.done(); }, or: function(æ) { var exp, _ref, _ref1; exp = parse('/book/(chapter | appendix | section)[fn:last()]'); debug(inspect(exp)); æ.deepEqual(exp.map(function(e) { return e.axis; }), ['child', 'child']); æ.deepEqual(exp.map(function(e) { return e.nc; }), ['book', void 0]); æ.deepEqual((_ref = exp[1]) != null ? _ref.predicate : void 0, [ [ { axis: 'self', prefix: 'fn', nc: 'last', q: 'fn:last', args: [[{}]] } ] ]); æ.deepEqual((_ref1 = exp[1]) != null ? _ref1.expression : void 0, [ { operator: 'union', args: [ [ { expression: [ { operator: 'union', args: [ [ { nc: 'chapter', q: 'chapter', axis: 'child' } ], [ { nc: 'appendix', q: 'appendix', axis: 'child' } ] ] } ] } ], [ { nc: 'section', q: 'section', axis: 'child' } ] ] } ]); return æ.done(); }, id: function(æ) { var exp, _ref; exp = parse('id("rofl")/lol:w00t'); debug(inspect(exp)); æ.deepEqual(exp.map(function(e) { return e.prefix; }), [void 0, 'lol']); æ.deepEqual(exp.map(function(e) { return e.axis; }), ['child', 'child']); æ.deepEqual(exp.map(function(e) { return e.nc; }), ['id', 'w00t']); æ.deepEqual((_ref = exp[0]) != null ? _ref.args : void 0, [ [ { value: 'rofl' } ] ]); return æ.done(); }, short: function(æ) { var exp, _ref; exp = parse("c | o | l"); debug(inspect(exp)); æ.equals(1, exp != null ? exp.length : void 0); æ.deepEqual((_ref = exp[0]) != null ? _ref.expression : void 0, [ { operator: 'union', args: [ [ { expression: [ { operator: 'union', args: [ [ { nc: 'c', q: 'c', axis: 'child' } ], [ { nc: 'o', q: 'o', axis: 'child' } ] ] } ] } ], [ { nc: 'l', q: 'l', axis: 'child' } ] ] } ]); return æ.done(); }, xmpp: function(æ) { var exp, _ref, _ref1, _ref2, _ref3, _ref4; exp = parse("/iq[@get] or /iq[@set] and /iq[@error]"); debug(inspect(exp)); æ.equals(1, exp != null ? exp.length : void 0); æ.equals(1, (_ref = exp[0]) != null ? (_ref1 = _ref.expression) != null ? _ref1.length : void 0 : void 0); æ.deepEqual((_ref2 = exp[0]) != null ? (_ref3 = _ref2.expression) != null ? (_ref4 = _ref3[0]) != null ? _ref4.expression : void 0 : void 0 : void 0, [ { operator: 'or', args: [ [ { seperator: '/', axis: 'child', nc: 'iq', q: 'iq', predicate: [ [ { nc: 'get', q: 'get', axis: 'attribute' } ] ] } ], [ { operator: 'and', args: [ [ { seperator: '/', axis: 'child', nc: 'iq', q: 'iq', predicate: [ [ { nc: 'set', q: 'set', axis: 'attribute' } ] ] } ], [ { seperator: '/', axis: 'child', nc: 'iq', q: 'iq', predicate: [ [ { nc: 'error', q: 'error', axis: 'attribute' } ] ] } ] ] } ] ] } ]); return æ.done(); }, blubb: function(æ) { var exp, _ref, _ref1; exp = parse("id('foo')/child::para[position(5)]"); debug(inspect(exp)); æ.deepEqual(exp.map(function(e) { return e.axis; }), ['child', 'child']); æ.deepEqual(exp.map(function(e) { return e.nc; }), ['id', 'para']); æ.deepEqual((_ref = exp[0]) != null ? _ref.args : void 0, [ [ { value: 'foo' } ] ]); æ.deepEqual((_ref1 = exp[1]) != null ? _ref1.predicate : void 0, [ [ { axis: 'self', nc: 'position', q: 'position', args: [ [ { axis: 'child', nc: '5', q: '5' } ] ] } ] ]); return æ.done(); }, presence: function(æ) { var exp, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8; exp = parse("self::presence[@type='überchat' and @id='id']"); debug(inspect(exp)); æ.equals(1, exp != null ? exp.length : void 0); æ.equals(1, (_ref = exp[0]) != null ? (_ref1 = _ref.predicate) != null ? _ref1.length : void 0 : void 0); æ.equals(1, (_ref2 = exp[0]) != null ? (_ref3 = _ref2.predicate) != null ? (_ref4 = _ref3[0]) != null ? _ref4.length : void 0 : void 0 : void 0); æ.deepEqual((_ref5 = exp[0]) != null ? (_ref6 = _ref5.predicate) != null ? (_ref7 = _ref6[0]) != null ? (_ref8 = _ref7[0]) != null ? _ref8.expression : void 0 : void 0 : void 0 : void 0, [ { operator: 'and', args: [ [ { expression: [ { operator: '=', args: [ [ { axis: 'attribute', nc: 'type', q: 'type' } ], [ { value: 'überchat' } ] ] } ] } ], [ { operator: '=', args: [ [ { axis: 'attribute', nc: 'id', q: 'id' } ], [ { value: 'id' } ] ] } ] ] } ]); return æ.done(); }, info: function(æ) { var exp; exp = parse("self::iq[@type=result and @id='id']/info:query"); debug(inspect(exp)); æ.deepEqual(exp.map(function(e) { return e.prefix; }), [void 0, 'info']); æ.deepEqual(exp.map(function(e) { return e.axis; }), ['self', 'child']); æ.deepEqual(exp.map(function(e) { return e.nc; }), ['iq', 'query']); return æ.done(); }, or2: function(æ) { var exp; exp = parse("self::iq[@type=result and @id='id']/roster:query/descendant-or-self::(self::query|self::item)"); debug(inspect(exp)); æ.deepEqual(exp.map(function(e) { return e.prefix; }), [void 0, 'roster', void 0]); æ.deepEqual(exp.map(function(e) { return e.axis; }), ['self', 'child', 'descendant-or-self']); æ.deepEqual(exp.map(function(e) { return e.nc; }), ['iq', 'query', null]); return æ.done(); }, or3: function(æ) { var exp; exp = parse("self::presence[@type=unavailable or @type=subscribed or @type=unsubscribed or @type=subscribe or @type=unsubscribe or not(@type)]"); debug(inspect(exp)); æ.deepEqual(exp.map(function(e) { return e.axis; }), ['self']); æ.deepEqual(exp.map(function(e) { return e.nc; }), ['presence']); return æ.done(); } }; }).call(this);