Lex XPath axes without a node test.

This commit is contained in:
Yorick Peterse 2014-07-20 07:57:45 +02:00
parent 488000438b
commit f699b0d097
2 changed files with 23 additions and 9 deletions

View File

@ -212,11 +212,7 @@ module Oga
| 'parent'
| 'preceding'
| 'preceding-sibling'
| 'self') '::';
action emit_axis_full {
emit(:T_AXIS, ts, te - 2)
}
| 'self');
# Short Axes
#
@ -285,10 +281,13 @@ module Oga
'[' => { add_token(:T_LBRACK) };
']' => { add_token(:T_RBRACK) };
string => emit_string;
integer => emit_integer;
float => emit_float;
axis_full => emit_axis_full;
string => emit_string;
integer => emit_integer;
float => emit_float;
axis_full => { emit(:T_AXIS, ts, te) };
axis_full '::' => { emit(:T_AXIS, ts, te - 2) };
axis_short => emit_axis_short;
identifier => emit_identifier;
*|;

View File

@ -44,6 +44,21 @@ describe Oga::XPath::Parser do
)
end
example 'parse the descendant-or-self axis without a test' do
parse_xpath('/descendant-or-self').should == s(
:absolute_path,
s(:axis, 'descendant-or-self')
)
end
example 'parse the descendant-or-self axis followed by an attribute axis' do
parse_xpath('/descendant-or-self/attribute::foo').should == s(
:absolute_path,
s(:axis, 'descendant-or-self'),
s(:axis, 'attribute', s(:test, nil, 'foo'))
)
end
example 'parse the following axis' do
parse_xpath('/following::A').should == s(
:absolute_path,