mailparser 0.4.22a
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY +141 -0
- data/README.txt +501 -0
- data/lib/mailparser.rb +558 -0
- data/lib/mailparser/conv_charset.rb +27 -0
- data/lib/mailparser/error.rb +7 -0
- data/lib/mailparser/loose.rb +292 -0
- data/lib/mailparser/obsolete.rb +403 -0
- data/lib/mailparser/rfc2045.rb +54 -0
- data/lib/mailparser/rfc2045/parser.rb +245 -0
- data/lib/mailparser/rfc2045/scanner.rb +54 -0
- data/lib/mailparser/rfc2047.rb +82 -0
- data/lib/mailparser/rfc2183.rb +33 -0
- data/lib/mailparser/rfc2183/parser.rb +186 -0
- data/lib/mailparser/rfc2183/scanner.rb +7 -0
- data/lib/mailparser/rfc2231.rb +57 -0
- data/lib/mailparser/rfc2822.rb +212 -0
- data/lib/mailparser/rfc2822/parser.rb +883 -0
- data/lib/mailparser/rfc2822/scanner.rb +119 -0
- data/test.rb +26 -0
- data/test/test_loose.rb +371 -0
- data/test/test_mailparser.rb +1130 -0
- data/test/test_obsolete.rb +615 -0
- data/test/test_rfc2045.rb +121 -0
- data/test/test_rfc2047.rb +118 -0
- data/test/test_rfc2183.rb +60 -0
- data/test/test_rfc2231.rb +167 -0
- data/test/test_rfc2822.rb +370 -0
- metadata +81 -0
@@ -0,0 +1,121 @@
|
|
1
|
+
# Copyright (C) 2006-2010 TOMITA Masahiro
|
2
|
+
# mailto:tommy@tmtm.org
|
3
|
+
|
4
|
+
require "mailparser/rfc2045"
|
5
|
+
|
6
|
+
unless ARGV.empty?
|
7
|
+
ARGV.each do |fname|
|
8
|
+
File.open(fname) do |f|
|
9
|
+
header = []
|
10
|
+
f.each do |line|
|
11
|
+
break if line.chomp.empty?
|
12
|
+
if line =~ /^\s/ then
|
13
|
+
header[-1] << line
|
14
|
+
else
|
15
|
+
header << line
|
16
|
+
end
|
17
|
+
end
|
18
|
+
header.each do |h|
|
19
|
+
begin
|
20
|
+
MailParser::RFC2045.parse(*h.split(/\s*:\s*/, 2))
|
21
|
+
rescue MailParser::ParseError => e
|
22
|
+
puts fname
|
23
|
+
p e
|
24
|
+
p h
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
exit
|
30
|
+
end
|
31
|
+
|
32
|
+
require "test/unit"
|
33
|
+
|
34
|
+
class TC_RFC2045 < Test::Unit::TestCase
|
35
|
+
def test_content_type_noparams()
|
36
|
+
c = MailParser::RFC2045.parse("content-type", "text/plain")
|
37
|
+
assert_equal("text", c.type)
|
38
|
+
assert_equal("plain", c.subtype)
|
39
|
+
assert_equal({}, c.params)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_content_type_charset()
|
43
|
+
c = MailParser::RFC2045.parse("content-type", "text/plain; charset=euc-jp")
|
44
|
+
assert_equal("text", c.type)
|
45
|
+
assert_equal("plain", c.subtype)
|
46
|
+
assert_equal(1, c.params.size)
|
47
|
+
assert_equal("euc-jp", c.params["charset"])
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_content_type_charset_upcase()
|
51
|
+
c = MailParser::RFC2045.parse("content-type", "TEXT/PLAIN; CHARSET=euc-jp")
|
52
|
+
assert_equal("text", c.type)
|
53
|
+
assert_equal("plain", c.subtype)
|
54
|
+
assert_equal(1, c.params.size)
|
55
|
+
assert_equal("euc-jp", c.params["charset"])
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_content_type_charset_quote()
|
59
|
+
c = MailParser::RFC2045.parse("content-type", "text/plain; charset=\"euc-jp\"")
|
60
|
+
assert_equal("text", c.type)
|
61
|
+
assert_equal("plain", c.subtype)
|
62
|
+
assert_equal(1, c.params.size)
|
63
|
+
assert_equal("euc-jp", c.params["charset"])
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_content_type_invalid()
|
67
|
+
assert_raises(MailParser::ParseError){MailParser::RFC2045.parse("content-type", "text/plain; name=\"hosts\"hoge")}
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_content_description()
|
71
|
+
c = MailParser::RFC2045.parse("content-description", "(hoge fuga>")
|
72
|
+
assert_equal("(hoge fuga>", c)
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_content_transfer_encoding()
|
76
|
+
c = MailParser::RFC2045.parse("content-transfer-encoding", "7bit")
|
77
|
+
assert_equal("7bit", c.mechanism)
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_content_id()
|
81
|
+
c = MailParser::RFC2045.parse("content-id", "<a@b.c>")
|
82
|
+
assert_equal("a@b.c", c.msg_id)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_mime_version()
|
86
|
+
v = MailParser::RFC2045.parse("mime-version", "1.0")
|
87
|
+
assert_equal("1.0", v)
|
88
|
+
assert_equal([], v.comments)
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_mime_version_with_comment()
|
92
|
+
v = MailParser::RFC2045.parse("mime-version", "1.0 (hoge)")
|
93
|
+
assert_equal("1.0", v)
|
94
|
+
assert_equal(["(hoge)"], v.comments)
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_mime_version_with_comment2()
|
98
|
+
v = MailParser::RFC2045.parse("mime-version", "1.(hoge)0")
|
99
|
+
assert_equal("1.0", v)
|
100
|
+
assert_equal(["(hoge)"], v.comments)
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_qp_decode()
|
104
|
+
assert_equal("IJKL", MailParser::RFC2045.qp_decode("=49=4A=4B=4C"))
|
105
|
+
assert_equal("IJKL", MailParser::RFC2045.qp_decode("=49=4a=4b=4c"))
|
106
|
+
assert_equal("abcdefg", MailParser::RFC2045.qp_decode("abcd=\r\nefg"))
|
107
|
+
assert_equal("abcdefg", MailParser::RFC2045.qp_decode("abcd= \r\nefg"))
|
108
|
+
assert_equal("abcdefg", MailParser::RFC2045.qp_decode("abcd=\nefg"))
|
109
|
+
assert_equal("abcdefg", MailParser::RFC2045.qp_decode("abcd= \nefg"))
|
110
|
+
assert_equal("abcd\r\nefg", MailParser::RFC2045.qp_decode("abcd=\r\n\r\nefg"))
|
111
|
+
assert_equal("abcd\r\nefg", MailParser::RFC2045.qp_decode("abcd= \r\n\r\nefg"))
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_b64_decode()
|
115
|
+
assert_equal("abcdefg", MailParser::RFC2045.b64_decode("YWJjZGVmZw=="))
|
116
|
+
assert_equal("01234567890123456789", MailParser::RFC2045.b64_decode("MDEyMzQ1Njc4OTAxMjM0NTY3ODk="))
|
117
|
+
assert_equal("01234567890123456789", MailParser::RFC2045.b64_decode("MDEyMzQ1Njc4\nOTAxMjM0NTY3ODk="))
|
118
|
+
assert_equal("01234567890123456789", MailParser::RFC2045.b64_decode("MDEyMzQ1Nj\nc4OTAxMjM0NTY3ODk="))
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Copyright (C) 2006-2010 TOMITA Masahiro
|
3
|
+
# mailto:tommy@tmtm.org
|
4
|
+
|
5
|
+
require "mailparser/rfc2047"
|
6
|
+
require "test/unit"
|
7
|
+
|
8
|
+
class TC_RFC2047 < Test::Unit::TestCase
|
9
|
+
def test_q_decode_ascii()
|
10
|
+
assert_equal("hoge", MailParser::RFC2047.q_decode("hoge"))
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_q_decode_space()
|
14
|
+
assert_equal("a b", MailParser::RFC2047.q_decode("a_b"))
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_q_decode_utf8()
|
18
|
+
assert_equal("とみた", MailParser::RFC2047.q_decode("=E3=81=A8=E3=81=BF=E3=81=9F"))
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_q_decode_utf8_ascii()
|
22
|
+
assert_equal("とaみbた", MailParser::RFC2047.q_decode("=E3=81=A8a=E3=81=BFb=E3=81=9F"))
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_q_decode_end_equal()
|
26
|
+
assert_equal("abc", MailParser::RFC2047.q_decode("abc="))
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_b_decode_ascii()
|
30
|
+
assert_equal("hoge", MailParser::RFC2047.b_decode("aG9nZQ=="))
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_b_decode_utf8()
|
34
|
+
assert_equal("とみた", MailParser::RFC2047.b_decode("44Go44G/44Gf"))
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_b_decode_invalid_space()
|
38
|
+
assert_equal("とみた", MailParser::RFC2047.b_decode("44Go 44 G/4 4Gf"))
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_split_decode_q_ascii()
|
42
|
+
s = MailParser::RFC2047.split_decode("=?us-ascii?q?hoge?=")
|
43
|
+
assert_equal(1, s.size)
|
44
|
+
assert_equal("hoge", s[0])
|
45
|
+
assert_equal("us-ascii", s[0].charset)
|
46
|
+
assert_equal("=?us-ascii?q?hoge?=", s[0].raw)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_split_decode_q_ascii_upcase()
|
50
|
+
s = MailParser::RFC2047.split_decode("=?US-ASCII?Q?hoge?=")
|
51
|
+
assert_equal(1, s.size)
|
52
|
+
assert_equal("hoge", s[0])
|
53
|
+
assert_equal("us-ascii", s[0].charset)
|
54
|
+
assert_equal("=?US-ASCII?Q?hoge?=", s[0].raw)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_decode_q_ascii()
|
58
|
+
s = MailParser::RFC2047.decode("=?us-ascii?q?hoge?=")
|
59
|
+
assert_equal("hoge", s)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_decode_q_b()
|
63
|
+
s = MailParser::RFC2047.decode("=?us-ascii?q?hoge?= =?us-ascii?b?aG9nZQ==?=")
|
64
|
+
assert_equal("hogehoge", s)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_decode_plain()
|
68
|
+
s = MailParser::RFC2047.decode("abcdefg")
|
69
|
+
assert_equal("abcdefg", s)
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_decode_encode_plain()
|
73
|
+
s = MailParser::RFC2047.decode("012345 =?us-ascii?q?hoge?= abcdefg")
|
74
|
+
assert_equal("012345 hoge abcdefg", s)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_decode_encode_plain2()
|
78
|
+
s = MailParser::RFC2047.decode("=?us-ascii?q?hoge?= abcdefg =?us-ascii?q?fuga?=")
|
79
|
+
assert_equal("hoge abcdefg fuga", s)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_decode_unknown_charset()
|
83
|
+
s = MailParser::RFC2047.decode("=?hoge?q?hoge?=")
|
84
|
+
assert_equal("hoge", s)
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_decode_unknown_charset2()
|
88
|
+
s = MailParser::RFC2047.decode("=?hoge?q?hoge?=", "UTF-8")
|
89
|
+
assert_equal("=?hoge?q?hoge?=", s)
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_decode_unknown_charset3()
|
93
|
+
s = MailParser::RFC2047.decode("abcdefg =?hoge?q?hoge?= =?us-ascii?q?fuga?=")
|
94
|
+
assert_equal("abcdefg hogefuga", s)
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_decode_unknown_charset4()
|
98
|
+
s = MailParser::RFC2047.decode("abcdefg =?hoge?q?hoge?= =?us-ascii?q?fuga?=", "UTF-8")
|
99
|
+
assert_equal("abcdefg =?hoge?q?hoge?= fuga", s)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_decode_sjis()
|
103
|
+
s = MailParser::RFC2047.decode("=?sjis?b?h0A=?=", "UTF-8")
|
104
|
+
assert_equal("\xe2\x91\xa0", s)
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_decode_iso2022jp()
|
108
|
+
s = MailParser::RFC2047.decode("=?iso-2022-jp?b?GyRCLSEbKEI=?=", "UTF-8")
|
109
|
+
assert_equal("\xe2\x91\xa0", s)
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_decode_charset_converter()
|
113
|
+
proc = Proc.new{|f,t,s| s.gsub(/o/, "X")}
|
114
|
+
s = MailParser::RFC2047.decode("=?us-ascii?q?hoge?=", :output_charset=>"utf-8", :charset_converter=>proc)
|
115
|
+
assert_equal("hXge", s)
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Copyright (C) 2006-2010 TOMITA Masahiro
|
2
|
+
# mailto:tommy@tmtm.org
|
3
|
+
|
4
|
+
require "mailparser/rfc2183"
|
5
|
+
|
6
|
+
unless ARGV.empty?
|
7
|
+
ARGV.each do |fname|
|
8
|
+
File.open(fname) do |f|
|
9
|
+
header = []
|
10
|
+
f.each do |line|
|
11
|
+
break if line.chomp.empty?
|
12
|
+
if line =~ /^\s/ then
|
13
|
+
header[-1] << line
|
14
|
+
else
|
15
|
+
header << line
|
16
|
+
end
|
17
|
+
end
|
18
|
+
header.each do |h|
|
19
|
+
begin
|
20
|
+
MailParser::RFC2183.parse(*h.split(/\s*:\s*/, 2))
|
21
|
+
rescue MailParser::ParseError => e
|
22
|
+
puts fname
|
23
|
+
p e
|
24
|
+
p h
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
exit
|
30
|
+
end
|
31
|
+
|
32
|
+
require "test/unit"
|
33
|
+
|
34
|
+
class TC_RFC2183 < Test::Unit::TestCase
|
35
|
+
def test_content_disposition_noparams()
|
36
|
+
c = MailParser::RFC2183.parse("content-disposition", "inline")
|
37
|
+
assert_equal("inline", c.type)
|
38
|
+
assert_equal({}, c.params)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_content_disposition_charset()
|
42
|
+
c = MailParser::RFC2183.parse("content-disposition", "inline; filename=hoge")
|
43
|
+
assert_equal("inline", c.type)
|
44
|
+
assert_equal(1, c.params.size)
|
45
|
+
assert_equal("hoge", c.params["filename"])
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_content_disposition_charset_upcase()
|
49
|
+
c = MailParser::RFC2183.parse("content-disposition", "INLINE; FILENAME=HOGE")
|
50
|
+
assert_equal("inline", c.type)
|
51
|
+
assert_equal("HOGE", c.params["filename"])
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_content_disposition_charset_quote()
|
55
|
+
c = MailParser::RFC2183.parse("content-disposition", "inline; filename=\"hoge\"")
|
56
|
+
assert_equal("inline", c.type)
|
57
|
+
assert_equal(1, c.params.size)
|
58
|
+
assert_equal("hoge", c.params["filename"])
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
# Copyright (C) 2006-2010 TOMITA Masahiro
|
2
|
+
# mailto:tommy@tmtm.org
|
3
|
+
|
4
|
+
require "mailparser/rfc2231"
|
5
|
+
require "test/unit"
|
6
|
+
|
7
|
+
class TC_RFC2231 < Test::Unit::TestCase
|
8
|
+
def test_parse_param()
|
9
|
+
params = {
|
10
|
+
"hoge" => "fuga",
|
11
|
+
"foo" => "bar",
|
12
|
+
}
|
13
|
+
h = MailParser::RFC2231.parse_param(params)
|
14
|
+
assert_equal("fuga", h["hoge"])
|
15
|
+
assert_equal(nil, h["hoge"].charset)
|
16
|
+
assert_equal(nil, h["hoge"].language)
|
17
|
+
assert_equal("bar", h["foo"])
|
18
|
+
assert_equal(nil, h["foo"].charset)
|
19
|
+
assert_equal(nil, h["foo"].language)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_parse_param2()
|
23
|
+
params = {
|
24
|
+
"hoge*0" => "fuga",
|
25
|
+
"hoge*1" => "bar",
|
26
|
+
"foo" => "bar",
|
27
|
+
}
|
28
|
+
h = MailParser::RFC2231.parse_param(params)
|
29
|
+
assert_equal("fugabar", h["hoge"])
|
30
|
+
assert_equal(nil, h["hoge"].charset)
|
31
|
+
assert_equal(nil, h["hoge"].language)
|
32
|
+
assert_equal("bar", h["foo"])
|
33
|
+
assert_equal(nil, h["foo"].charset)
|
34
|
+
assert_equal(nil, h["foo"].language)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_parse_param3()
|
38
|
+
params = {
|
39
|
+
"hoge*0*" => "''fuga",
|
40
|
+
"hoge*1" => "bar",
|
41
|
+
"foo" => "bar",
|
42
|
+
}
|
43
|
+
h = MailParser::RFC2231.parse_param(params)
|
44
|
+
assert_equal("fugabar", h["hoge"])
|
45
|
+
assert_equal("", h["hoge"].charset)
|
46
|
+
assert_equal("", h["hoge"].language)
|
47
|
+
assert_equal("bar", h["foo"])
|
48
|
+
assert_equal(nil, h["foo"].charset)
|
49
|
+
assert_equal(nil, h["foo"].language)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_parse_param4()
|
53
|
+
params = {
|
54
|
+
"hoge*0*" => "euc-jp'ja'fuga",
|
55
|
+
"hoge*1" => "bar",
|
56
|
+
"foo" => "bar",
|
57
|
+
}
|
58
|
+
h = MailParser::RFC2231.parse_param(params)
|
59
|
+
assert_equal("fugabar", h["hoge"])
|
60
|
+
assert_equal("euc-jp", h["hoge"].charset)
|
61
|
+
assert_equal("ja", h["hoge"].language)
|
62
|
+
assert_equal("bar", h["foo"])
|
63
|
+
assert_equal(nil, h["foo"].charset)
|
64
|
+
assert_equal(nil, h["foo"].language)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_parse_param5()
|
68
|
+
params = {
|
69
|
+
"hoge*0*" => "''%30%31%32%33",
|
70
|
+
"hoge*1" => "%34%35%36",
|
71
|
+
"foo" => "bar",
|
72
|
+
}
|
73
|
+
h = MailParser::RFC2231.parse_param(params)
|
74
|
+
assert_equal("0123%34%35%36", h["hoge"])
|
75
|
+
assert_equal("", h["hoge"].charset)
|
76
|
+
assert_equal("", h["hoge"].language)
|
77
|
+
assert_equal("bar", h["foo"])
|
78
|
+
assert_equal(nil, h["foo"].charset)
|
79
|
+
assert_equal(nil, h["foo"].language)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_parse_param6()
|
83
|
+
params = {
|
84
|
+
"hoge*" => "''fuga",
|
85
|
+
"foo" => "bar",
|
86
|
+
}
|
87
|
+
h = MailParser::RFC2231.parse_param(params)
|
88
|
+
assert_equal("fuga", h["hoge"])
|
89
|
+
assert_equal("", h["hoge"].charset)
|
90
|
+
assert_equal("", h["hoge"].language)
|
91
|
+
assert_equal("bar", h["foo"])
|
92
|
+
assert_equal(nil, h["foo"].charset)
|
93
|
+
assert_equal(nil, h["foo"].language)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_parse_param7()
|
97
|
+
params = {
|
98
|
+
"hoge*" => "fuga",
|
99
|
+
}
|
100
|
+
assert_raises(MailParser::ParseError){MailParser::RFC2231.parse_param(params)}
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_parse_param7_1()
|
104
|
+
params = {
|
105
|
+
"hoge*" => "fuga",
|
106
|
+
}
|
107
|
+
h = MailParser::RFC2231.parse_param(params, false)
|
108
|
+
assert_equal("fuga", h["hoge"])
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_parse_param8()
|
112
|
+
params = {
|
113
|
+
"hoge*0*" => "fuga",
|
114
|
+
}
|
115
|
+
assert_raises(MailParser::ParseError){MailParser::RFC2231.parse_param(params)}
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_parse_param8_1()
|
119
|
+
params = {
|
120
|
+
"hoge*0*" => "fuga",
|
121
|
+
}
|
122
|
+
h = MailParser::RFC2231.parse_param(params, false)
|
123
|
+
assert_equal("fuga", h["hoge"])
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_parse_param_charset_converter
|
127
|
+
params = {
|
128
|
+
"hoge*" => "xcharset'xlang'%41%42%43",
|
129
|
+
}
|
130
|
+
h = MailParser::RFC2231.parse_param(params, :output_charset=>"xx", :charset_converter=>Proc.new{|f,t,s| s.downcase})
|
131
|
+
assert_equal "abc", h["hoge"]
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_rfc_example()
|
135
|
+
params = {
|
136
|
+
"URL*0" => "ftp://",
|
137
|
+
"URL*1" => "cs.utk.edu.pub/moore/bulk-mailer/buik-mailer.tar"
|
138
|
+
}
|
139
|
+
h = MailParser::RFC2231.parse_param(params)
|
140
|
+
assert_equal("ftp://cs.utk.edu.pub/moore/bulk-mailer/buik-mailer.tar", h["URL"])
|
141
|
+
assert_equal(nil, h["URL"].charset)
|
142
|
+
assert_equal(nil, h["URL"].language)
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_rfc_example2()
|
146
|
+
params = {
|
147
|
+
"title*" => "us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A"
|
148
|
+
}
|
149
|
+
h = MailParser::RFC2231.parse_param(params)
|
150
|
+
assert_equal("This is ***fun***", h["title"])
|
151
|
+
assert_equal("us-ascii", h["title"].charset)
|
152
|
+
assert_equal("en-us", h["title"].language)
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_rfc_example3()
|
156
|
+
params = {
|
157
|
+
"title*0*" => "us-ascii'en'This%20is%20even%20more%20",
|
158
|
+
"title*1*" => "%2A%2A%2Afun%2A%2A%2A%20",
|
159
|
+
"title*2" => "isn't it!"
|
160
|
+
}
|
161
|
+
h = MailParser::RFC2231.parse_param(params)
|
162
|
+
assert_equal("This is even more ***fun*** isn't it!", h["title"])
|
163
|
+
assert_equal("us-ascii", h["title"].charset)
|
164
|
+
assert_equal("en", h["title"].language)
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|