require "test_helper" class HtmlHelperTest < ActionView::TestCase test "convert URLs into anchor tags" do assert_equal_html \ %(

Check this: https://example.com

), format_html("

Check this: https://example.com

") assert_equal_html \ %(

Check this: https://example.com/

), format_html("

Check this: https://example.com/

") end test "don't include punctuation in URL autolinking" do assert_equal_html \ %(

Check this: https://example.com/!

), format_html("

Check this: https://example.com/!

") assert_equal_html \ %(

Check this: https://example.com/.

), format_html("

Check this: https://example.com/.

") assert_equal_html \ %(

Check this: https://example.com/?

), format_html("

Check this: https://example.com/?

") assert_equal_html \ %(

Check this: https://example.com/,

), format_html("

Check this: https://example.com/,

") assert_equal_html \ %(

Check this: https://example.com/:

), format_html("

Check this: https://example.com/:

") assert_equal_html \ %(

Check this: https://example.com/;

), format_html("

Check this: https://example.com/;

") assert_equal_html \ %(

Check this: https://example.com/"

), format_html("

Check this: https://example.com/\"

") assert_equal_html \ %(

Check this: https://example.com/'

), format_html("

Check this: https://example.com/'

") # trailing entities that decode to punctuation # use assert_equal and not assert_equal_html to make sure we're getting entities correct assert_equal \ %(

Check this: https://example.com/<

), format_html("

Check this: https://example.com/<

") assert_equal \ %(

Check this: https://example.com/>

), format_html("

Check this: https://example.com/>

") assert_equal \ %(

Check this: https://example.com/"

), format_html("

Check this: https://example.com/"

") # multiple punctuation characters including entities assert_equal_html \ %(

Check this: https://example.com/!?;

), format_html("

Check this: https://example.com/!?;

") assert_equal_html \ %(<img src="https://example.com/">), format_html(%(<img src="https://example.com/">)) assert_equal_html \ %(<img src="https://example.com/"!>), format_html(%(<img src="https://example.com/"!>)) end test "handle URLs with query parameters" do # use assert_equal and not assert_equal_html to make sure we're getting entities correct assert_equal \ %(

Check this: https://example.com/a?b=c&d=e

), format_html("

Check this: https://example.com/a?b=c&d=e

") assert_equal \ %(

Check this: https://example.com/a?b=c&d=e

), format_html("

Check this: https://example.com/a?b=c&d=e

") end test "respect existing links" do assert_equal_html \ %(

Check this: https://example.com

), format_html("

Check this: https://example.com

") end test "convert email addresses into mailto links" do assert_equal_html \ %(

Contact us at support@example.com

), format_html("

Contact us at support@example.com

") end test "respect existing linked emails" do assert_equal_html \ %(

Contact us at support@example.com

), format_html(%(

Contact us at support@example.com

)) end test "don't autolink content in excluded elements" do %w[ figcaption pre code ].each do |element| assert_equal_html \ "<#{element}>Check this: https://example.com", format_html("<#{element}>Check this: https://example.com") end end test "preserve escaped HTML containing URLs" do input = 'before text <img src="https://example.com/image.png"> after text' output = format_html(input) assert_no_match(/