# frozen_string_literal: true
require "test_helper"
class FormattingTest < Minitest::Test
include NotareTestHelpers
def test_bold_text
xml = create_doc_and_read_xml do |doc|
doc.p do
doc.b { doc.text "bold text" }
end
end
assert_includes xml, ""
assert_includes xml, "bold text"
end
def test_italic_text
xml = create_doc_and_read_xml do |doc|
doc.p do
doc.i { doc.text "italic text" }
end
end
assert_includes xml, ""
assert_includes xml, "italic text"
end
def test_underline_text
xml = create_doc_and_read_xml do |doc|
doc.p do
doc.u { doc.text "underlined text" }
end
end
assert_includes xml, ''
assert_includes xml, "underlined text"
end
def test_bold_and_italic_nested
xml = create_doc_and_read_xml do |doc|
doc.p do
doc.b do
doc.i { doc.text "bold and italic" }
end
end
end
assert_includes xml, ""
assert_includes xml, ""
assert_includes xml, "bold and italic"
# Both should be in the same rPr element
assert_match(%r{.*.*.*}m, xml)
end
def test_italic_and_bold_nested_reverse_order
xml = create_doc_and_read_xml do |doc|
doc.p do
doc.i do
doc.b { doc.text "italic and bold" }
end
end
end
assert_includes xml, ""
assert_includes xml, ""
end
def test_all_three_formatting_options
xml = create_doc_and_read_xml do |doc|
doc.p do
doc.b do
doc.i do
doc.u { doc.text "bold italic underline" }
end
end
end
end
assert_includes xml, ""
assert_includes xml, ""
assert_includes xml, ''
assert_includes xml, "bold italic underline"
end
def test_mixed_formatting_in_paragraph
xml = create_doc_and_read_xml do |doc|
doc.p do
doc.text "Normal "
doc.b { doc.text "bold" }
doc.text " normal "
doc.i { doc.text "italic" }
doc.text " normal "
doc.u { doc.text "underline" }
doc.text " end"
end
end
assert_includes xml, "Normal "
assert_includes xml, "bold"
assert_includes xml, "italic"
assert_includes xml, "underline"
assert_equal 7, xml.scan("").count
end
def test_formatting_does_not_leak_between_blocks
xml = create_doc_and_read_xml do |doc|
doc.p do
doc.b { doc.text "bold" }
doc.text "not bold"
end
end
# Count rPr elements - should only be one (for the bold text)
assert_equal 1, xml.scan("").count
end
def test_deeply_nested_formatting
xml = create_doc_and_read_xml do |doc|
doc.p do
doc.b do
doc.text "bold "
doc.i do
doc.text "bold+italic "
doc.u { doc.text "all three" }
end
end
end
end
assert_includes xml, "bold "
assert_includes xml, "bold+italic "
assert_includes xml, "all three"
end
end