1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
gem 'minitest' # minitest in 1.9 stdlib is crufty
require 'minitest/autorun'
require 'mime'
class TextFlowedTest < Minitest::Test
include MIME::ContentFormats
def test_empty_string
assert_equal '', TextFlowed.encode('')
end
def test_single_word_will_not_break_regardless_of_line_length
txt = "1234567890"
assert_equal txt, TextFlowed.encode(txt, 9) # <
assert_equal txt, TextFlowed.encode(txt, 10) # =
assert_equal txt, TextFlowed.encode(txt, 11) # >
end
def test_max_line_length_around_first_word
txt = "1234567890 A"
expected1 = "1234567890\r\nA"
expected2 = "1234567890 \r\nA"
assert_equal expected1, TextFlowed.encode(txt, 9) # <
assert_equal expected1, TextFlowed.encode(txt, 10) # =
assert_equal expected2, TextFlowed.encode(txt, 11) # >
end
def test_words_with_variable_spacing
txt = "123 456 789"
expected1 = "123 \r\n456 \r\n789"
expected2 = "123 456 \r\n789"
expected3 = "123 456 \r\n789"
expected4 = "123 456 \r\n789"
expected5 = txt
assert_equal expected1, TextFlowed.encode(txt, 8)
assert_equal expected2, TextFlowed.encode(txt, 9)
assert_equal expected3, TextFlowed.encode(txt, 10)
assert_equal expected4, TextFlowed.encode(txt, 11)
assert_equal expected4, TextFlowed.encode(txt, 12)
assert_equal expected4, TextFlowed.encode(txt, 13)
assert_equal expected5, TextFlowed.encode(txt, 14)
assert_equal expected5, TextFlowed.encode(txt, 15)
end
def test_paragraphs_with_variable_lengths
txt = "123 456 789\n\none two three\n\nEND"
expected1 = "123 \r\n456 \r\n789\r\n\r\none \r\ntwo \r\nthree\r\n\r\nEND"
expected2 = "123 456 \r\n789\r\n\r\none two \r\nthree\r\n\r\nEND"
expected3 = "123 456 789\r\n\r\none two \r\nthree\r\n\r\nEND"
expected4 = "123 456 789\r\n\r\none two three\r\n\r\nEND"
assert_equal expected1, TextFlowed.encode(txt, 4)
assert_equal expected2, TextFlowed.encode(txt, 10)
assert_equal expected3, TextFlowed.encode(txt, 11)
assert_equal expected3, TextFlowed.encode(txt, 12)
assert_equal expected4, TextFlowed.encode(txt, 13)
assert_equal expected4, TextFlowed.encode(txt, 14)
assert_equal expected4, TextFlowed.encode(txt, txt.length)
assert_equal expected4, TextFlowed.encode(txt, txt.length+1)
end
def test_trailing_newlines_removed
txt = "123 456 789\r\nabc def ghi"
assert_equal txt, TextFlowed.encode(txt+"\n", 11)
assert_equal txt, TextFlowed.encode(txt+"\r\n", 11)
end
def test_tab_expansion
txt = "123\t456"
expected1 = "123\r\n456"
expected2 = "123 \r\n456"
expected3 = "123 \r\n456"
expected4 = "123 \r\n456"
expected5 = "123 \r\n456"
expected6 = "123 456"
assert_equal expected1, TextFlowed.encode(txt, 2)
assert_equal expected1, TextFlowed.encode(txt, 3)
assert_equal expected2, TextFlowed.encode(txt, 4)
assert_equal expected3, TextFlowed.encode(txt, 5)
assert_equal expected4, TextFlowed.encode(txt, 6)
assert_equal expected5, TextFlowed.encode(txt, 7)
assert_equal expected5, TextFlowed.encode(txt, 8)
assert_equal expected5, TextFlowed.encode(txt, 9)
assert_equal expected6, TextFlowed.encode(txt, 10)
end
def test_spacing_after_hard_line_break
txt = "123\r\n\r\n abc"
exp = "123\r\n\r\nabc"
assert_equal exp, TextFlowed.encode(txt, 4) # remove SP if line > max
assert_equal txt, TextFlowed.encode(txt, 5) # preserve SP if line == max
assert_equal txt, TextFlowed.encode(txt, 6) # preserve SP if line < max
end
def test_trim_spaces_before_hard_line_breaks
txt1 = "123 \r\n\r\n456"
txt2 = "123 \r\n\r\n456 "
expected = "123\r\n\r\n456"
assert_equal expected, TextFlowed.encode(txt1, 3)
assert_equal expected, TextFlowed.encode(txt1, 4)
assert_equal expected, TextFlowed.encode(txt1, 5)
assert_equal expected, TextFlowed.encode(txt2, 3)
assert_equal expected, TextFlowed.encode(txt2, 4)
assert_equal expected, TextFlowed.encode(txt2, 5)
end
def test_trim_trailing_spaces
txt = "123 456 "
expected = "123 \r\n456"
assert_equal expected, TextFlowed.encode(txt, 4)
end
def test_rfc_79_character_max_flowed_line_length
assert_equal (max = 79), TextFlowed::MAX_FLOWED_LINE
TextFlowed.encode('', max) # no error
assert_raises(ArgumentError) { TextFlowed.encode('', max+1) }
end
def test_rfc_max_smtp_line_length_boundary
long_word = 'x' * MIME::MAX_LINE_LENGTH
txt1 = long_word
txt2 = 'x' + long_word
txt3 = 'x ' + long_word
txt4 = 'x ' + long_word + ' x'
expected1 = long_word
expected2 = long_word + "\r\nx"
expected3 = "x \r\n" + long_word
expected4 = "x \r\n" + long_word + "\r\nx"
assert_equal expected1, TextFlowed.encode(txt1)
assert_equal expected2, TextFlowed.encode(txt2)
assert_equal expected3, TextFlowed.encode(txt3)
assert_equal expected4, TextFlowed.encode(txt4)
end
end
|