Added a few more XPath lexer tests.

This commit is contained in:
Yorick Peterse 2014-06-01 19:43:36 +02:00
parent 8dd8d7a519
commit 88b06e247d
1 changed files with 55 additions and 0 deletions

View File

@ -110,4 +110,59 @@ describe Oga::XPath::Lexer do
[:T_IDENT, 'bar']
]
end
example 'lex a predicate expression using an operator' do
lex_xpath('/div[@number=4 div 2]').should == [
[:T_SLASH, nil],
[:T_IDENT, 'div'],
[:T_LBRACK, nil],
[:T_AXIS, 'attribute'],
[:T_IDENT, 'number'],
[:T_OP, '='],
[:T_INT, 4],
[:T_OP, 'div'],
[:T_INT, 2],
[:T_RBRACK, nil]
]
end
# The following are a bunch of examples taken from Wikipedia and the W3 spec
# to see how the lexer handles them.
example 'lex an descendant-or-self expression' do
lex_xpath('/wikimedia//editions').should == [
[:T_SLASH, nil],
[:T_IDENT, 'wikimedia'],
[:T_SLASH, nil],
[:T_AXIS, 'descendant-or-self'],
[:T_IDENT, 'editions']
]
end
example 'lex a complex expression using predicates and function calls' do
path = '/wikimedia/projects/project[@name="Wikipedia"]/editions/edition/text()'
lex_xpath(path).should == [
[:T_SLASH, nil],
[:T_IDENT, 'wikimedia'],
[:T_SLASH, nil],
[:T_IDENT, 'projects'],
[:T_SLASH, nil],
[:T_IDENT, 'project'],
[:T_LBRACK, nil],
[:T_AXIS, 'attribute'],
[:T_IDENT, 'name'],
[:T_OP, '='],
[:T_STRING, 'Wikipedia'],
[:T_RBRACK, nil],
[:T_SLASH, nil],
[:T_IDENT, 'editions'],
[:T_SLASH, nil],
[:T_IDENT, 'edition'],
[:T_SLASH, nil],
[:T_IDENT, 'text'],
[:T_LPAREN, nil],
[:T_RPAREN, nil]
]
end
end