From 21c27bf48e33aaabbf320ff90df8e630ac7ab099 Mon Sep 17 00:00:00 2001 From: Yorick Peterse Date: Mon, 20 Oct 2014 09:29:42 +0200 Subject: [PATCH] Surround class values with spaces. When using a CSS class selector the resulting XPath string passed to contains() should be surrounded by spaces. --- lib/oga/css/parser.y | 2 +- spec/oga/css/parser/classes_spec.rb | 10 +++++----- spec/oga/css/parser/ids_spec.rb | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/oga/css/parser.y b/lib/oga/css/parser.y index 54ca342..c5c7316 100644 --- a/lib/oga/css/parser.y +++ b/lib/oga/css/parser.y @@ -103,7 +103,7 @@ rule :call, 'contains', s(:call, 'concat', s(:string, ' '), axis, s(:string, ' ')), - s(:string, val[1]) + s(:string, " #{val[1]} ") ) } ; diff --git a/spec/oga/css/parser/classes_spec.rb b/spec/oga/css/parser/classes_spec.rb index 9bb421d..8489d97 100644 --- a/spec/oga/css/parser/classes_spec.rb +++ b/spec/oga/css/parser/classes_spec.rb @@ -4,27 +4,27 @@ describe Oga::CSS::Parser do context 'classes' do example 'parse a class selector' do parse_css('.foo').should == parse_xpath( - 'descendant-or-self::*[contains(concat(" ", @class, " "), "foo")]' + 'descendant-or-self::*[contains(concat(" ", @class, " "), " foo ")]' ) end example 'parse a selector for an element with a class' do parse_css('foo.bar').should == parse_xpath( - 'descendant-or-self::foo[contains(concat(" ", @class, " "), "bar")]' + 'descendant-or-self::foo[contains(concat(" ", @class, " "), " bar ")]' ) end example 'parse a selector using multiple classes' do parse_css('.foo.bar').should == parse_xpath( - 'descendant-or-self::*[contains(concat(" ", @class, " "), "foo") ' \ - 'and contains(concat(" ", @class, " "), "bar")]' + 'descendant-or-self::*[contains(concat(" ", @class, " "), " foo ") ' \ + 'and contains(concat(" ", @class, " "), " bar ")]' ) end example 'parse a selector using a class and an ID' do parse_css('#foo.bar').should == parse_xpath( 'descendant-or-self::*[@id="foo" and ' \ - 'contains(concat(" ", @class, " "), "bar")]' + 'contains(concat(" ", @class, " "), " bar ")]' ) end end diff --git a/spec/oga/css/parser/ids_spec.rb b/spec/oga/css/parser/ids_spec.rb index 42876b0..7e12c4a 100644 --- a/spec/oga/css/parser/ids_spec.rb +++ b/spec/oga/css/parser/ids_spec.rb @@ -22,7 +22,7 @@ describe Oga::CSS::Parser do example 'parse a selector using an ID and a class' do parse_css('.foo#bar').should == parse_xpath( - 'descendant-or-self::*[contains(concat(" ", @class, " "), "foo") ' \ + 'descendant-or-self::*[contains(concat(" ", @class, " "), " foo ") ' \ 'and @id="bar"]' ) end