require 'abstract_unit' begin require 'psych' rescue LoadError end require 'yaml' class SafeBufferTest < ActiveSupport::TestCase def setup @buffer = ActiveSupport::SafeBuffer.new end test "Should look like a string" do assert @buffer.is_a?(String) assert_equal "", @buffer end test "Should escape a raw string which is passed to them" do @buffer << "<script>" assert_equal "<script>", @buffer end test "Should NOT escape a safe value passed to it" do @buffer << "<script>".html_safe assert_equal "<script>", @buffer end test "Should not mess with an innocuous string" do @buffer << "Hello" assert_equal "Hello", @buffer end test "Should not mess with a previously escape test" do @buffer << ERB::Util.html_escape("<script>") assert_equal "<script>", @buffer end test "Should be considered safe" do assert @buffer.html_safe? end test "Should return a safe buffer when calling to_s" do new_buffer = @buffer.to_s assert_equal ActiveSupport::SafeBuffer, new_buffer.class end def test_to_yaml str = 'hello!' buf = ActiveSupport::SafeBuffer.new str yaml = buf.to_yaml assert_match(/^--- #{str}/, yaml) assert_equal 'hello!', YAML.load(yaml) end def test_nested str = 'hello!' data = { 'str' => ActiveSupport::SafeBuffer.new(str) } yaml = YAML.dump data assert_equal({'str' => str}, YAML.load(yaml)) end end