diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2012-11-15 15:50:39 -0200 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2012-11-15 15:50:39 -0200 |
commit | cf3eb6dab0e89ea6b64b9bdb24d4df3e8006da7b (patch) | |
tree | fd397b746d6ff3cf64931c1671b34d16c43d1088 /activesupport/test | |
parent | a8c3ea90f1490da4404aa1cea6fc6209f6b9b99b (diff) | |
parent | 1fab2002e3385c40ef48008b649d78ce5e16a868 (diff) | |
download | rails-cf3eb6dab0e89ea6b64b9bdb24d4df3e8006da7b.tar.gz rails-cf3eb6dab0e89ea6b64b9bdb24d4df3e8006da7b.tar.bz2 rails-cf3eb6dab0e89ea6b64b9bdb24d4df3e8006da7b.zip |
Merge pull request #8219 from nikitug/threadsafe_xmlmini_with_backend
Make XmlMini.with_backend usable with threads
Conflicts:
activesupport/CHANGELOG.md
Diffstat (limited to 'activesupport/test')
-rw-r--r-- | activesupport/test/xml_mini_test.rb | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/activesupport/test/xml_mini_test.rb b/activesupport/test/xml_mini_test.rb index 504fc96493..a025279e16 100644 --- a/activesupport/test/xml_mini_test.rb +++ b/activesupport/test/xml_mini_test.rb @@ -99,4 +99,66 @@ module XmlMiniTest end # TODO: test the remaining functions hidden in #to_tag. end + + class WithBackendTest < ActiveSupport::TestCase + module REXML end + module LibXML end + module Nokogiri end + + setup do + @xml = ActiveSupport::XmlMini + end + + test "#with_backend should switch backend and then switch back" do + @xml.backend = REXML + @xml.with_backend(LibXML) do + assert_equal LibXML, @xml.backend + @xml.with_backend(Nokogiri) do + assert_equal Nokogiri, @xml.backend + end + assert_equal LibXML, @xml.backend + end + assert_equal REXML, @xml.backend + end + + test "backend switch inside #with_backend block" do + @xml.with_backend(LibXML) do + @xml.backend = REXML + assert_equal REXML, @xml.backend + end + assert_equal REXML, @xml.backend + end + end + + class ThreadSafetyTest < ActiveSupport::TestCase + module REXML end + module LibXML end + + setup do + @xml = ActiveSupport::XmlMini + end + + test "#with_backend should be thread-safe" do + @xml.backend = REXML + t = Thread.new do + @xml.with_backend(LibXML) { sleep 1 } + end + sleep 0.1 while t.status != "sleep" + + # We should get `old_backend` here even while another + # thread is using `new_backend`. + assert_equal REXML, @xml.backend + end + + test "nested #with_backend should be thread-safe" do + @xml.with_backend(REXML) do + t = Thread.new do + @xml.with_backend(LibXML) { sleep 1 } + end + sleep 0.1 while t.status != "sleep" + + assert_equal REXML, @xml.backend + end + end + end end |