Issue #8602 has been reported by ohai (Ippei Obayashi).
Bug #8602: REXML::Element#add_text and REXML::Text#<<
Author: ohai (Ippei Obayashi)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version:
ruby -v: ruby 2.1.0dev (2013-07-04 trunk 41732) [x86_64-linux]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN
以下のコードは “foo bar” が出力されることが期待されますが実際には “foo” が出力されます。
require ‘rexml/document’
doc = REXML::Document.new(“”)
doc.root.add_text(“foo”)
doc.to_s
doc.root.add_text(" bar")
p doc.root.to_s
doc.to_s の部分をコメントアウトすると挙動が変わり “foo bar” が出力されます。
REXML::Element#add_text が呼び出している REXML::Text#<<
が内部状態(@string)を変化させているにもかかわらず
キャッシュ(@normalized, @unnormalized)をクリアしていないのが原因だと思われます。
添付したパッチで修正されると思います。
Issue #8602 has been updated by kou (Kouhei S.).
Assignee set to kou (Kouhei S.)
Text#<<のドキュメントを読むと、rawモードのときだけサポートしているようにみえました。
rawモードだと@normalize/@unnormalizeを使わないので、ここでこれらをクリアーしていないのは意図的だったのだろうと思います。
ただ、キャッシュをクリアーすることによりrawモードでもrawモードでなくても動くようになるので、キャッシュをクリアーすることにしました!
報告ありがとうございました!
Bug #8602: REXML::Element#add_text and REXML::Text#<<
Author: ohai (Ippei Obayashi)
Status: Closed
Priority: Normal
Assignee: kou (Kouhei S.)
Category: lib
Target version:
ruby -v: ruby 2.1.0dev (2013-07-04 trunk 41732) [x86_64-linux]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN
以下のコードは “foo bar” が出力されることが期待されますが実際には “foo” が出力されます。
require ‘rexml/document’
doc = REXML::Document.new(“”)
doc.root.add_text(“foo”)
doc.to_s
doc.root.add_text(" bar")
p doc.root.to_s
doc.to_s の部分をコメントアウトすると挙動が変わり “foo bar” が出力されます。
REXML::Element#add_text が呼び出している REXML::Text#<<
が内部状態(@string)を変化させているにもかかわらず
キャッシュ(@normalized, @unnormalized)をクリアしていないのが原因だと思われます。
添付したパッチで修正されると思います。