rmail 0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/NEWS +309 -0
- data/NOTES +14 -0
- data/README +83 -0
- data/THANKS +25 -0
- data/TODO +112 -0
- data/guide/Intro.txt +122 -0
- data/guide/MIME.txt +6 -0
- data/guide/TableOfContents.txt +13 -0
- data/install.rb +1023 -0
- data/lib/rmail.rb +50 -0
- data/lib/rmail/address.rb +829 -0
- data/lib/rmail/header.rb +987 -0
- data/lib/rmail/mailbox.rb +62 -0
- data/lib/rmail/mailbox/mboxreader.rb +182 -0
- data/lib/rmail/message.rb +201 -0
- data/lib/rmail/parser.rb +412 -0
- data/lib/rmail/parser/multipart.rb +217 -0
- data/lib/rmail/parser/pushbackreader.rb +173 -0
- data/lib/rmail/serialize.rb +190 -0
- data/lib/rmail/utils.rb +59 -0
- data/rmail.gemspec +17 -0
- data/tests/addrgrammar.txt +113 -0
- data/tests/data/mbox.odd +4 -0
- data/tests/data/mbox.simple +8 -0
- data/tests/data/multipart/data.1 +5 -0
- data/tests/data/multipart/data.10 +1 -0
- data/tests/data/multipart/data.11 +9 -0
- data/tests/data/multipart/data.12 +9 -0
- data/tests/data/multipart/data.13 +3 -0
- data/tests/data/multipart/data.14 +3 -0
- data/tests/data/multipart/data.15 +3 -0
- data/tests/data/multipart/data.16 +3 -0
- data/tests/data/multipart/data.17 +0 -0
- data/tests/data/multipart/data.2 +5 -0
- data/tests/data/multipart/data.3 +2 -0
- data/tests/data/multipart/data.4 +3 -0
- data/tests/data/multipart/data.5 +1 -0
- data/tests/data/multipart/data.6 +2 -0
- data/tests/data/multipart/data.7 +3 -0
- data/tests/data/multipart/data.8 +5 -0
- data/tests/data/multipart/data.9 +4 -0
- data/tests/data/parser.badmime1 +4 -0
- data/tests/data/parser.badmime2 +6 -0
- data/tests/data/parser.nested-multipart +75 -0
- data/tests/data/parser.nested-simple +12 -0
- data/tests/data/parser.nested-simple2 +16 -0
- data/tests/data/parser.nested-simple3 +21 -0
- data/tests/data/parser.rfc822 +65 -0
- data/tests/data/parser.simple-mime +24 -0
- data/tests/data/parser/multipart.1 +8 -0
- data/tests/data/parser/multipart.10 +4 -0
- data/tests/data/parser/multipart.11 +12 -0
- data/tests/data/parser/multipart.12 +12 -0
- data/tests/data/parser/multipart.13 +6 -0
- data/tests/data/parser/multipart.14 +6 -0
- data/tests/data/parser/multipart.15 +6 -0
- data/tests/data/parser/multipart.16 +6 -0
- data/tests/data/parser/multipart.2 +8 -0
- data/tests/data/parser/multipart.3 +5 -0
- data/tests/data/parser/multipart.4 +6 -0
- data/tests/data/parser/multipart.5 +4 -0
- data/tests/data/parser/multipart.6 +5 -0
- data/tests/data/parser/multipart.7 +6 -0
- data/tests/data/parser/multipart.8 +8 -0
- data/tests/data/parser/multipart.9 +7 -0
- data/tests/data/transparency/absolute.1 +5 -0
- data/tests/data/transparency/absolute.2 +1 -0
- data/tests/data/transparency/absolute.3 +2 -0
- data/tests/data/transparency/absolute.4 +3 -0
- data/tests/data/transparency/absolute.5 +4 -0
- data/tests/data/transparency/absolute.6 +49 -0
- data/tests/data/transparency/message.1 +73 -0
- data/tests/data/transparency/message.2 +34 -0
- data/tests/data/transparency/message.3 +63 -0
- data/tests/data/transparency/message.4 +5 -0
- data/tests/data/transparency/message.5 +15 -0
- data/tests/data/transparency/message.6 +1185 -0
- data/tests/runtests.rb +35 -0
- data/tests/testaddress.rb +1192 -0
- data/tests/testbase.rb +207 -0
- data/tests/testheader.rb +1207 -0
- data/tests/testmailbox.rb +47 -0
- data/tests/testmboxreader.rb +161 -0
- data/tests/testmessage.rb +257 -0
- data/tests/testparser.rb +634 -0
- data/tests/testparsermultipart.rb +205 -0
- data/tests/testpushbackreader.rb +40 -0
- data/tests/testserialize.rb +264 -0
- data/tests/testtestbase.rb +112 -0
- data/tests/testtranspparency.rb +105 -0
- metadata +143 -0
@@ -0,0 +1,112 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
# Copyright (C) 2001, 2002 Matt Armstrong. All rights reserved.
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
6
|
+
# modification, are permitted provided that the following conditions are met:
|
7
|
+
#
|
8
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
9
|
+
# this list of conditions and the following disclaimer.
|
10
|
+
# 2. Redistributions in binary form must reproduce the above copyright
|
11
|
+
# notice, this list of conditions and the following disclaimer in the
|
12
|
+
# documentation and/or other materials provided with the distribution.
|
13
|
+
# 3. The name of the author may not be used to endorse or promote products
|
14
|
+
# derived from this software without specific prior written permission.
|
15
|
+
#
|
16
|
+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
17
|
+
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
18
|
+
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
19
|
+
# NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
20
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
21
|
+
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
22
|
+
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
23
|
+
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
24
|
+
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
25
|
+
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
26
|
+
#
|
27
|
+
|
28
|
+
# Test the TestBase class itself
|
29
|
+
|
30
|
+
require 'rubyunit'
|
31
|
+
require 'tests/testbase.rb'
|
32
|
+
|
33
|
+
class TestTestBase < TestBase
|
34
|
+
|
35
|
+
def test_cleandir
|
36
|
+
Dir.mkdir("_testdir_")
|
37
|
+
Dir.mkdir("_testdir_/testsubdir")
|
38
|
+
File.open("_testdir_/testfile", "w") { |file|
|
39
|
+
file.puts "some data"
|
40
|
+
}
|
41
|
+
File.open("_testdir_/testsubdir/testfile", "w") { |file|
|
42
|
+
file.puts "some data"
|
43
|
+
}
|
44
|
+
assert(test(?e, "_testdir_"))
|
45
|
+
assert(test(?e, "_testdir_/testsubdir"))
|
46
|
+
assert(test(?e, "_testdir_/testsubdir/testfile"))
|
47
|
+
assert(test(?e, "_testdir_/testfile"))
|
48
|
+
cleandir("_testdir_")
|
49
|
+
assert(test(?e, "_testdir_"))
|
50
|
+
assert(!test(?e, "_testdir_/testsubdir"))
|
51
|
+
assert(!test(?e, "_testdir_/testsubdir/testfile"))
|
52
|
+
assert(!test(?e, "_testdir_/testfile"))
|
53
|
+
assert_equal(0, Dir.delete('_testdir_'))
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_file_contains
|
57
|
+
scratch = scratch_filename("file_contains")
|
58
|
+
File.open(scratch, "w") { |f|
|
59
|
+
f.puts "contains AAA"
|
60
|
+
f.puts "contains BBB"
|
61
|
+
}
|
62
|
+
assert(file_contains(scratch, /BBB/))
|
63
|
+
assert(file_contains(scratch, "AAA"))
|
64
|
+
assert(file_contains(scratch, /contains AAA/))
|
65
|
+
assert(file_contains(scratch, "contains BBB"))
|
66
|
+
assert_equal(false, file_contains(scratch, /contains CCC/))
|
67
|
+
assert_equal(false, file_contains(scratch, "contains CCC"))
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_ruby_program
|
71
|
+
assert_not_nil(ruby_program)
|
72
|
+
assert_kind_of(String, ruby_program)
|
73
|
+
end
|
74
|
+
|
75
|
+
def verify_scratch_dir_name(dir)
|
76
|
+
assert_match(/scratch.*TestTestBase.*test/, dir)
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_scratch_dir
|
80
|
+
assert_not_nil(scratch_dir)
|
81
|
+
assert_kind_of(String, scratch_dir)
|
82
|
+
verify_scratch_dir_name(scratch_dir)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_scratch_filename
|
86
|
+
name = scratch_filename("foobar")
|
87
|
+
assert_kind_of(String, name)
|
88
|
+
verify_scratch_dir_name(File.dirname(name))
|
89
|
+
assert_equal("foobar", File.basename(name))
|
90
|
+
|
91
|
+
name = scratch_filename("foobar")
|
92
|
+
assert_kind_of(String, name)
|
93
|
+
verify_scratch_dir_name(File.dirname(name))
|
94
|
+
assert_equal("foobar.1", File.basename(name))
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_string_as_file
|
98
|
+
string = "yo\nman\n"
|
99
|
+
string_as_file(string) { |f|
|
100
|
+
assert_equal(string, f.readlines.join(''))
|
101
|
+
}
|
102
|
+
string2 = " yo\n man\n"
|
103
|
+
string_as_file(string2) { |f|
|
104
|
+
assert_equal("yo\nman\n", f.readlines.join(''))
|
105
|
+
}
|
106
|
+
string_as_file(string2, false) { |f|
|
107
|
+
assert_equal(string2, f.readlines.join(''))
|
108
|
+
}
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
@@ -0,0 +1,105 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
# Copyright (C) 2002 Matt Armstrong. All rights reserved.
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
6
|
+
# modification, are permitted provided that the following conditions are met:
|
7
|
+
#
|
8
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
9
|
+
# this list of conditions and the following disclaimer.
|
10
|
+
# 2. Redistributions in binary form must reproduce the above copyright
|
11
|
+
# notice, this list of conditions and the following disclaimer in the
|
12
|
+
# documentation and/or other materials provided with the distribution.
|
13
|
+
# 3. The name of the author may not be used to endorse or promote products
|
14
|
+
# derived from this software without specific prior written permission.
|
15
|
+
#
|
16
|
+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
17
|
+
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
18
|
+
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
19
|
+
# NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
20
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
21
|
+
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
22
|
+
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
23
|
+
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
24
|
+
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
25
|
+
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
26
|
+
#
|
27
|
+
|
28
|
+
require 'tests/testbase'
|
29
|
+
require 'rmail/parser'
|
30
|
+
require 'rmail/serialize'
|
31
|
+
|
32
|
+
class TestRMailTransparency < TestBase
|
33
|
+
def do_file(file)
|
34
|
+
full_name = data_filename(file)
|
35
|
+
message1 = data_as_file(file) { |f|
|
36
|
+
RMail::Parser.new.parse(f)
|
37
|
+
}
|
38
|
+
scratch_base = file.gsub(/[^\w]/, '-')
|
39
|
+
scratch_name = scratch_filename(scratch_base)
|
40
|
+
message2 = File.open(scratch_name, "w+") { |f|
|
41
|
+
RMail::Serialize.new(f).serialize(message1)
|
42
|
+
f.seek(0)
|
43
|
+
RMail::Parser.new.parse(f)
|
44
|
+
}
|
45
|
+
if message1 != message2
|
46
|
+
puts "-" * 70
|
47
|
+
pp message1
|
48
|
+
puts "-" * 70
|
49
|
+
pp message2
|
50
|
+
puts "-" * 70
|
51
|
+
end
|
52
|
+
assert(File.compare(full_name, scratch_name),
|
53
|
+
"parse->serialize failure transparency #{file}")
|
54
|
+
assert_equal(message1, message2,
|
55
|
+
"parse->serialize->parse transparency failure #{file}")
|
56
|
+
end
|
57
|
+
|
58
|
+
# Test that all our various input files get formatted on output the
|
59
|
+
# same way they came in.
|
60
|
+
def test_transparency_simple_mime
|
61
|
+
do_file('parser.simple-mime')
|
62
|
+
end
|
63
|
+
def test_transparency_rfc822
|
64
|
+
do_file('parser.rfc822')
|
65
|
+
end
|
66
|
+
def test_transparency_nested_multipart
|
67
|
+
do_file('parser.nested-multipart')
|
68
|
+
end
|
69
|
+
def test_transparency_message_01
|
70
|
+
do_file("transparency/message.1")
|
71
|
+
end
|
72
|
+
def test_transparency_message_02
|
73
|
+
do_file("transparency/message.2")
|
74
|
+
end
|
75
|
+
def test_transparency_message_03
|
76
|
+
do_file("transparency/message.3")
|
77
|
+
end
|
78
|
+
def test_transparency_message_04
|
79
|
+
do_file("transparency/message.4")
|
80
|
+
end
|
81
|
+
def test_transparency_message_05
|
82
|
+
do_file("transparency/message.5")
|
83
|
+
end
|
84
|
+
def test_transparency_message_06
|
85
|
+
do_file("transparency/message.6")
|
86
|
+
end
|
87
|
+
def test_transparency_absolute_01
|
88
|
+
do_file('transparency/absolute.1')
|
89
|
+
end
|
90
|
+
def test_transparency_absolute_02
|
91
|
+
do_file('transparency/absolute.2')
|
92
|
+
end
|
93
|
+
def test_transparency_absolute_03
|
94
|
+
do_file('transparency/absolute.3')
|
95
|
+
end
|
96
|
+
def test_transparency_absolute_04
|
97
|
+
do_file('transparency/absolute.4')
|
98
|
+
end
|
99
|
+
def test_transparency_absolute_05
|
100
|
+
do_file('transparency/absolute.5')
|
101
|
+
end
|
102
|
+
def test_transparency_absolute_06
|
103
|
+
do_file('transparency/absolute.6')
|
104
|
+
end
|
105
|
+
end
|
metadata
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: "0.8"
|
3
|
+
specification_version: 1
|
4
|
+
name: rmail
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: "0.17"
|
7
|
+
date: 2004-10-22
|
8
|
+
summary: "This is RubyMail, a lightweight mail library containing various utility classes and modules that allow Ruby scripts to parse, modify, and generate MIME mail messages."
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
author: Matt Armstrong
|
12
|
+
email: matt@lickey.com
|
13
|
+
homepage: http://www.lickey.com/rubymail/
|
14
|
+
rubyforge_project:
|
15
|
+
description:
|
16
|
+
autorequire: rmail
|
17
|
+
default_executable:
|
18
|
+
bindir: bin
|
19
|
+
has_rdoc: true
|
20
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
21
|
+
requirements:
|
22
|
+
-
|
23
|
+
- ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: 1.6.7
|
26
|
+
version:
|
27
|
+
platform: ruby
|
28
|
+
files:
|
29
|
+
- lib
|
30
|
+
- NEWS
|
31
|
+
- TODO
|
32
|
+
- NOTES
|
33
|
+
- guide
|
34
|
+
- tests
|
35
|
+
- README
|
36
|
+
- THANKS
|
37
|
+
- install.rb
|
38
|
+
- rmail.gemspec
|
39
|
+
- lib/rmail.rb
|
40
|
+
- lib/rmail
|
41
|
+
- lib/rmail/parser.rb
|
42
|
+
- lib/rmail/message.rb
|
43
|
+
- lib/rmail/header.rb
|
44
|
+
- lib/rmail/mailbox
|
45
|
+
- lib/rmail/address.rb
|
46
|
+
- lib/rmail/parser
|
47
|
+
- lib/rmail/mailbox.rb
|
48
|
+
- lib/rmail/serialize.rb
|
49
|
+
- lib/rmail/utils.rb
|
50
|
+
- lib/rmail/mailbox/mboxreader.rb
|
51
|
+
- lib/rmail/parser/multipart.rb
|
52
|
+
- lib/rmail/parser/pushbackreader.rb
|
53
|
+
- guide/MIME.txt
|
54
|
+
- guide/TableOfContents.txt
|
55
|
+
- guide/Intro.txt
|
56
|
+
- tests/data
|
57
|
+
- tests/addrgrammar.txt
|
58
|
+
- tests/testmboxreader.rb
|
59
|
+
- tests/testpushbackreader.rb
|
60
|
+
- tests/runtests.rb
|
61
|
+
- tests/testaddress.rb
|
62
|
+
- tests/testtestbase.rb
|
63
|
+
- tests/testserialize.rb
|
64
|
+
- tests/testparser.rb
|
65
|
+
- tests/testtranspparency.rb
|
66
|
+
- tests/testmailbox.rb
|
67
|
+
- tests/testheader.rb
|
68
|
+
- tests/testparsermultipart.rb
|
69
|
+
- tests/testbase.rb
|
70
|
+
- tests/testmessage.rb
|
71
|
+
- tests/data/parser.rfc822
|
72
|
+
- tests/data/transparency
|
73
|
+
- tests/data/parser.simple-mime
|
74
|
+
- tests/data/parser.badmime1
|
75
|
+
- tests/data/parser.badmime2
|
76
|
+
- tests/data/multipart
|
77
|
+
- tests/data/parser.nested-multipart
|
78
|
+
- tests/data/mbox.odd
|
79
|
+
- tests/data/parser
|
80
|
+
- tests/data/parser.nested-simple
|
81
|
+
- tests/data/mbox.simple
|
82
|
+
- tests/data/parser.nested-simple2
|
83
|
+
- tests/data/parser.nested-simple3
|
84
|
+
- tests/data/transparency/message.1
|
85
|
+
- tests/data/transparency/message.2
|
86
|
+
- tests/data/transparency/message.3
|
87
|
+
- tests/data/transparency/message.4
|
88
|
+
- tests/data/transparency/message.5
|
89
|
+
- tests/data/transparency/message.6
|
90
|
+
- tests/data/transparency/absolute.1
|
91
|
+
- tests/data/transparency/absolute.2
|
92
|
+
- tests/data/transparency/absolute.3
|
93
|
+
- tests/data/transparency/absolute.4
|
94
|
+
- tests/data/transparency/absolute.5
|
95
|
+
- tests/data/transparency/absolute.6
|
96
|
+
- tests/data/multipart/data.10
|
97
|
+
- tests/data/multipart/data.11
|
98
|
+
- tests/data/multipart/data.12
|
99
|
+
- tests/data/multipart/data.13
|
100
|
+
- tests/data/multipart/data.14
|
101
|
+
- tests/data/multipart/data.15
|
102
|
+
- tests/data/multipart/data.16
|
103
|
+
- tests/data/multipart/data.17
|
104
|
+
- tests/data/multipart/data.1
|
105
|
+
- tests/data/multipart/data.2
|
106
|
+
- tests/data/multipart/data.3
|
107
|
+
- tests/data/multipart/data.4
|
108
|
+
- tests/data/multipart/data.5
|
109
|
+
- tests/data/multipart/data.6
|
110
|
+
- tests/data/multipart/data.7
|
111
|
+
- tests/data/multipart/data.8
|
112
|
+
- tests/data/multipart/data.9
|
113
|
+
- tests/data/parser/multipart.1
|
114
|
+
- tests/data/parser/multipart.2
|
115
|
+
- tests/data/parser/multipart.3
|
116
|
+
- tests/data/parser/multipart.4
|
117
|
+
- tests/data/parser/multipart.5
|
118
|
+
- tests/data/parser/multipart.6
|
119
|
+
- tests/data/parser/multipart.7
|
120
|
+
- tests/data/parser/multipart.8
|
121
|
+
- tests/data/parser/multipart.9
|
122
|
+
- tests/data/parser/multipart.10
|
123
|
+
- tests/data/parser/multipart.11
|
124
|
+
- tests/data/parser/multipart.12
|
125
|
+
- tests/data/parser/multipart.13
|
126
|
+
- tests/data/parser/multipart.14
|
127
|
+
- tests/data/parser/multipart.15
|
128
|
+
- tests/data/parser/multipart.16
|
129
|
+
test_files:
|
130
|
+
- tests/runtests.rb
|
131
|
+
rdoc_options:
|
132
|
+
- "--main"
|
133
|
+
- README
|
134
|
+
extra_rdoc_files:
|
135
|
+
- README
|
136
|
+
- NOTES
|
137
|
+
- NEWS
|
138
|
+
- TODO
|
139
|
+
- THANKS
|
140
|
+
executables: []
|
141
|
+
extensions: []
|
142
|
+
requirements: []
|
143
|
+
dependencies: []
|