[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]