ruby-changes:19948
From: kou <ko1@a...>
Date: Sat, 11 Jun 2011 16:09:35 +0900 (JST)
Subject: [ruby-changes:19948] kou:r31995 (trunk): * lib/rexml/parsers/xpathparser.rb
kou 2011-06-11 16:05:42 +0900 (Sat, 11 Jun 2011) New Revision: 31995 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31995 Log: * lib/rexml/parsers/xpathparser.rb (REXML::Parsers::XPathParser#parse), test/rexml/test_elements.rb (ElementsTester::test_each_with_frozen_condition): don't modify original XPath. fixes #4164 Reported by Pavel Shved. Thanks!!! Modified files: trunk/ChangeLog trunk/lib/rexml/parsers/xpathparser.rb trunk/test/rexml/test_elements.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 31994) +++ ChangeLog (revision 31995) @@ -1,3 +1,12 @@ +Sat Jun 11 16:04:03 2011 Kouhei Sutou <kou@c...> + + * lib/rexml/parsers/xpathparser.rb + (REXML::Parsers::XPathParser#parse), + test/rexml/test_elements.rb + (ElementsTester::test_each_with_frozen_condition): + don't modify original XPath. fixes #4164 + Reported by Pavel Shved. Thanks!!! + Sat Jun 11 15:53:27 2011 Kouhei Sutou <kou@c...> * test/rexml/test_elements.rb (ElementsTester): remove needless Index: lib/rexml/parsers/xpathparser.rb =================================================================== --- lib/rexml/parsers/xpathparser.rb (revision 31994) +++ lib/rexml/parsers/xpathparser.rb (revision 31995) @@ -17,8 +17,9 @@ end def parse path + path = path.dup path.gsub!(/([\(\[])\s+/, '\1') # Strip ignorable spaces - path.gsub!( /\s+([\]\)])/, '\1' ) + path.gsub!( /\s+([\]\)])/, '\1') parsed = [] path = OrExpr(path, parsed) parsed Index: test/rexml/test_elements.rb =================================================================== --- test/rexml/test_elements.rb (revision 31994) +++ test/rexml/test_elements.rb (revision 31995) @@ -84,6 +84,15 @@ assert_equal 7, count end + def test_each_with_frozen_condition + doc = Document.new('<books><book name="Ruby"/><book name="XML"/></books>') + names = [] + doc.root.elements.each('book'.freeze) do |element| + names << element.attributes["name"] + end + assert_equal(["Ruby", "XML"], names) + end + def test_to_a doc = Document.new '<a>sean<b/>elliott<c/></a>' assert_equal 2, doc.root.elements.to_a.size -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/