Lexer/parser specs for CSS axes without whitespace
This commit is contained in:
parent
08bc23905e
commit
c713f6250f
|
@ -182,12 +182,9 @@ module Oga
|
||||||
op_in = '*=';
|
op_in = '*=';
|
||||||
op_hyphen_in = '|=';
|
op_hyphen_in = '|=';
|
||||||
|
|
||||||
# Whitespace preceding these tokens is _not_ matched to make the parser
|
op_greater = whitespace* '>' whitespace*;
|
||||||
# rules more consistent. As such input such as " > x" will result in
|
op_plus = whitespace* '+' whitespace*;
|
||||||
# tokens [T_SPACE, T_GREATER, T_IDENT].
|
op_tilde = whitespace* '~' whitespace*;
|
||||||
op_greater = '>' whitespace*;
|
|
||||||
op_plus = '+' whitespace*;
|
|
||||||
op_tilde = '~' whitespace*;
|
|
||||||
|
|
||||||
# Numbers
|
# Numbers
|
||||||
#
|
#
|
||||||
|
|
|
@ -13,12 +13,15 @@ describe Oga::CSS::Lexer do
|
||||||
it 'lexes the expression "x > y"' do
|
it 'lexes the expression "x > y"' do
|
||||||
lex_css('x > y').should == [
|
lex_css('x > y').should == [
|
||||||
[:T_IDENT, 'x'],
|
[:T_IDENT, 'x'],
|
||||||
[:T_SPACE, nil],
|
|
||||||
[:T_GREATER, nil],
|
[:T_GREATER, nil],
|
||||||
[:T_IDENT, 'y']
|
[:T_IDENT, 'y']
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'lexes the expression "x>y"' do
|
||||||
|
lex_css('x>y').should == lex_css('x > y')
|
||||||
|
end
|
||||||
|
|
||||||
it 'lexes the + axis' do
|
it 'lexes the + axis' do
|
||||||
lex_css('+').should == [[:T_PLUS, nil]]
|
lex_css('+').should == [[:T_PLUS, nil]]
|
||||||
end
|
end
|
||||||
|
@ -30,12 +33,15 @@ describe Oga::CSS::Lexer do
|
||||||
it 'lexes the expression "x + y"' do
|
it 'lexes the expression "x + y"' do
|
||||||
lex_css('x + y').should == [
|
lex_css('x + y').should == [
|
||||||
[:T_IDENT, 'x'],
|
[:T_IDENT, 'x'],
|
||||||
[:T_SPACE, nil],
|
|
||||||
[:T_PLUS, nil],
|
[:T_PLUS, nil],
|
||||||
[:T_IDENT, 'y']
|
[:T_IDENT, 'y']
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'lexes the expression "x+y"' do
|
||||||
|
lex_css('x+y').should == lex_css('x + y')
|
||||||
|
end
|
||||||
|
|
||||||
it 'lexes the ~ axis' do
|
it 'lexes the ~ axis' do
|
||||||
lex_css('~').should == [[:T_TILDE, nil]]
|
lex_css('~').should == [[:T_TILDE, nil]]
|
||||||
end
|
end
|
||||||
|
@ -47,10 +53,13 @@ describe Oga::CSS::Lexer do
|
||||||
it 'lexes the expression "x ~ y"' do
|
it 'lexes the expression "x ~ y"' do
|
||||||
lex_css('x ~ y').should == [
|
lex_css('x ~ y').should == [
|
||||||
[:T_IDENT, 'x'],
|
[:T_IDENT, 'x'],
|
||||||
[:T_SPACE, nil],
|
|
||||||
[:T_TILDE, nil],
|
[:T_TILDE, nil],
|
||||||
[:T_IDENT, 'y']
|
[:T_IDENT, 'y']
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'lexes the expression "x~y"' do
|
||||||
|
lex_css('x~y').should == lex_css('x ~ y')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,6 +6,10 @@ describe Oga::CSS::Parser do
|
||||||
parse_css('x > y').should == parse_xpath('descendant::x/y')
|
parse_css('x > y').should == parse_xpath('descendant::x/y')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'parses the > axis without whitespace' do
|
||||||
|
parse_css('x>y').should == parse_css('x > y')
|
||||||
|
end
|
||||||
|
|
||||||
it 'parses the > axis called on another > axis' do
|
it 'parses the > axis called on another > axis' do
|
||||||
parse_css('a > b > c').should == parse_xpath('descendant::a/b/c')
|
parse_css('a > b > c').should == parse_xpath('descendant::a/b/c')
|
||||||
end
|
end
|
||||||
|
@ -28,6 +32,10 @@ describe Oga::CSS::Parser do
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'parses the + axis without whitespace' do
|
||||||
|
parse_css('x+y').should == parse_css('x + y')
|
||||||
|
end
|
||||||
|
|
||||||
it 'parses the + axis with an identifier only at the right-hand side' do
|
it 'parses the + axis with an identifier only at the right-hand side' do
|
||||||
parse_css('+ y').should == parse_xpath(
|
parse_css('+ y').should == parse_xpath(
|
||||||
'following-sibling::*[1]/self::y'
|
'following-sibling::*[1]/self::y'
|
||||||
|
@ -47,6 +55,10 @@ describe Oga::CSS::Parser do
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'parses the ~ axis without whitespace' do
|
||||||
|
parse_css('x~y').should == parse_css('x ~ y')
|
||||||
|
end
|
||||||
|
|
||||||
it 'parses the ~ axis followed by another node test' do
|
it 'parses the ~ axis followed by another node test' do
|
||||||
parse_css('x ~ y z').should == parse_xpath(
|
parse_css('x ~ y z').should == parse_xpath(
|
||||||
'descendant::x/following-sibling::y/descendant::z'
|
'descendant::x/following-sibling::y/descendant::z'
|
||||||
|
|
Loading…
Reference in New Issue