ruby-net-nntp 0.0.7 → 0.0.8

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.
@@ -1,5 +1,5 @@
1
1
  module Net
2
2
  class NNTP
3
- VERSION = "0.0.7"
3
+ VERSION = "0.0.8"
4
4
  end
5
5
  end
@@ -1,28 +1,28 @@
1
1
  module Net
2
- class NNTP
3
- class Article
4
- attr_accessor :id, :messageid, :subject, :group
5
- attr_reader :overview_format, :bytes, :lines, :xref, :date, :from
2
+ class NNTP
3
+ class Article
4
+ attr_accessor :id, :messageid, :subject, :group
5
+ attr_reader :overview_format, :bytes, :lines, :xref, :date, :from
6
6
 
7
- def initialize
8
- @overview_format = %w{id}
9
- end
7
+ def initialize
8
+ @overview_format = %w{id}
9
+ end
10
10
 
11
- def overview_format=(format)
12
- if Array === format
13
- @overview_format = format
14
- else
15
- @overview_format = Net::NNTP.parse_overview_format format
16
- end
17
- end
11
+ def overview_format=(format)
12
+ if Array === format
13
+ @overview_format = format
14
+ else
15
+ @overview_format = Net::NNTP.parse_overview_format format
16
+ end
17
+ end
18
18
 
19
- def overview(over)
20
- over.split(/\t/).each_with_index do |value, index|
21
- ident = @overview_format[index]
22
- eval "@#{ident} = value;"
23
- end
24
- end
19
+ def overview(over)
20
+ over.split(/\t/).each_with_index do |value, index|
21
+ ident = @overview_format[index]
22
+ eval "@#{ident} = value;"
23
+ end
24
+ end
25
25
 
26
- end
27
- end
26
+ end
27
+ end
28
28
  end
@@ -1,76 +1,76 @@
1
1
  module Net
2
2
 
3
- class NNTP
4
-
5
- class Group
6
- attr_reader :name, :article_count, :article_first, :article_last
7
- attr_reader :hi, :lo, :postingmode
8
-
9
- def initialize(name)
10
- @name = name
11
- @articles ||= Articles.new(self)
12
- #@articles.group = self
13
- @article_first = @article_last = @article_count = nil
14
- end
15
-
16
- def article_info=(art_array)
17
- @article_count = art_array[0].to_i
18
- @article_first = art_array[1].to_i
19
- @article_last = art_array[2].to_i
20
- end
21
-
22
- def articles
23
- @articles
24
- end
25
-
26
- def articles=(articles)
27
- @articles = articles
28
- end
29
-
30
- def listinfo(hi, lo, postingmode)
31
- @hi = hi
32
- @lo = lo
33
- @postingmode = postingmode
34
- end
35
-
36
- def inspect
3
+ class NNTP
4
+
5
+ class Group
6
+ attr_reader :name, :article_count, :article_first, :article_last
7
+ attr_reader :hi, :lo, :postingmode
8
+
9
+ def initialize(name)
10
+ @name = name
11
+ @articles ||= Articles.new(self)
12
+ #@articles.group = self
13
+ @article_first = @article_last = @article_count = nil
14
+ end
15
+
16
+ def article_info=(art_array)
17
+ @article_count = art_array[0].to_i
18
+ @article_first = art_array[1].to_i
19
+ @article_last = art_array[2].to_i
20
+ end
21
+
22
+ def articles
23
+ @articles
24
+ end
25
+
26
+ def articles=(articles)
27
+ @articles = articles
28
+ end
29
+
30
+ def listinfo(hi, lo, postingmode)
31
+ @hi = hi
32
+ @lo = lo
33
+ @postingmode = postingmode
34
+ end
35
+
36
+ def inspect
37
37
  "Group: #{@name} #{@article_count} #{@article_first} #{@article_last}"
38
- end
38
+ end
39
39
 
40
- class Articles
40
+ class Articles
41
41
 
42
- attr_accessor :group
42
+ attr_accessor :group
43
43
 
44
- def initialize(group)
45
- @articles ||=[]
46
- end
44
+ def initialize(group)
45
+ @articles ||=[]
46
+ end
47
47
 
48
- def build_from_over(over, format)
49
- article = Article.new
50
- article.overview_format = format
51
- article.overview(over)
52
- @articles << article
53
- end
48
+ def build_from_over(over, format)
49
+ article = Article.new
50
+ article.overview_format = format
51
+ article.overview(over)
52
+ @articles << article
53
+ end
54
54
 
55
- def length
56
- @articles.length
57
- end
55
+ def length
56
+ @articles.length
57
+ end
58
58
 
59
- def <<(article)
60
- @articles << article
61
- end
59
+ def <<(article)
60
+ @articles << article
61
+ end
62
62
 
63
- def create
64
- a = Article.new
65
- a.group = self.group
66
- @articles << a
67
- a
68
- end
63
+ def create
64
+ a = Article.new
65
+ a.group = self.group
66
+ @articles << a
67
+ a
68
+ end
69
69
 
70
- end
70
+ end
71
71
 
72
- end
72
+ end
73
73
 
74
- end
74
+ end
75
75
 
76
76
  end
@@ -6,257 +6,257 @@ require 'mock/mock_socket'
6
6
 
7
7
 
8
8
  module TestNet
9
- class TestNNTP < Test::Unit::TestCase
9
+ class TestNNTP < Test::Unit::TestCase
10
10
 
11
- def setup
12
- unless @log
13
- @log = Log4r::Logger.new('net::nntp')
14
- fileout = Log4r::FileOutputter.new('net::nntp::fileout', :filename => File.join('logs', 'autotest.log'))
15
- fileout.formatter = Log4r::PatternFormatter.new(:pattern => '%d [%5l] : %m')
16
- @log.add fileout
17
- @log.level = Log4r::ALL
18
- end
19
- nntp_connect_and_auth('localhost', 119, 'dummy', 'test')
20
- end
11
+ def setup
12
+ unless @log
13
+ @log = Log4r::Logger.new('net::nntp')
14
+ fileout = Log4r::FileOutputter.new('net::nntp::fileout', :filename => File.join('logs', 'autotest.log'))
15
+ fileout.formatter = Log4r::PatternFormatter.new(:pattern => '%d [%5l] : %m')
16
+ @log.add fileout
17
+ @log.level = Log4r::ALL
18
+ end
19
+ nntp_connect_and_auth('localhost', 119, 'dummy', 'test')
20
+ end
21
21
 
22
- def test_new
23
- host = 'localhost'
24
- port = '119'
25
- assert_nothing_raised do
26
- @nntp = Net::NNTP.new(host)
27
- end
28
- assert_nothing_raised do
29
- nntp_new(host, port)
30
- end
31
- end
22
+ def test_new
23
+ host = 'localhost'
24
+ port = '119'
25
+ assert_nothing_raised do
26
+ @nntp = Net::NNTP.new(host)
27
+ end
28
+ assert_nothing_raised do
29
+ nntp_new(host, port)
30
+ end
31
+ end
32
32
 
33
- def test_connect
34
- assert_nothing_raised do
35
- @nntp.connect
36
- end
37
- end
33
+ def test_connect
34
+ assert_nothing_raised do
35
+ @nntp.connect
36
+ end
37
+ end
38
38
 
39
- def test_help
40
- help = @nntp.help.join
41
- assert_equal '100', help[0..2]
42
- assert_equal 473, help.length
43
- end
39
+ def test_help
40
+ help = @nntp.help.join
41
+ assert_equal '100', help[0..2]
42
+ assert_equal 429, help.length
43
+ end
44
44
 
45
- def test_authenticate
46
- assert_nothing_raised do
47
- assert nntp_connect_and_auth('localhost', 119, 'dummy', 'test')
48
- end
49
- end
45
+ def test_authenticate
46
+ assert_nothing_raised do
47
+ assert nntp_connect_and_auth('localhost', 119, 'dummy', 'test')
48
+ end
49
+ end
50
50
 
51
- def test_group
52
- assert_nothing_raised do
53
- group = @nntp.group('at.linux')
54
- assert_kind_of Net::NNTP::Group, group
55
- assert_equal 'at.linux', group.name
56
- assert_equal 12, group.article_count
57
- assert_equal 1363, group.article_first
58
- assert_equal 1375, group.article_last
59
- end
60
- end
51
+ def test_group
52
+ assert_nothing_raised do
53
+ group = @nntp.group('at.linux')
54
+ assert_kind_of Net::NNTP::Group, group
55
+ assert_equal 'at.linux', group.name
56
+ assert_equal 12, group.article_count
57
+ assert_equal 1363, group.article_first
58
+ assert_equal 1375, group.article_last
59
+ end
60
+ end
61
61
 
62
- def test_xhdr
63
- headers = @nntp.xhdr('at.linux', 'subject', :from => 1363, :to => 1375)
64
- assert_equal 15, headers.length
65
- assert_equal '221', headers[0][0..2]
66
- assert_equal "1364", headers[2].split[0]
67
- header = @nntp.xhdr('at.linux', 'subject', :message_id => "<slrnf26akq.ci5.hjp-usenet2@zeno.hjp.at>").join
68
- assert_equal 49, header.length
69
- assert_equal "1375", header.split[0]
70
- end
62
+ def test_xhdr
63
+ headers = @nntp.xhdr('subject', 'at.linux', :from => 1363, :to => 1375)
64
+ assert_equal 15, headers.length
65
+ assert_equal '221', headers[0][0..2]
66
+ assert_equal "1364", headers[2].split[0]
67
+ header = @nntp.xhdr('subject', 'at.linux', :message_id => "<slrnf26akq.ci5.hjp-usenet2@zeno.hjp.at>").join
68
+ assert_equal 47, header.length
69
+ assert_equal "1375", header.split[0]
70
+ end
71
71
 
72
- def test_xhdr_fails
73
- header = @nntp.xhdr('at.linux', '', {}).join
74
- assert_equal '502', header[0..2]
75
- assert_raise(Net::NNTP::CommandFailedError) do
76
- header = @nntp.xhdr('at.xxx', 'subject', {})
77
- end
78
- end
72
+ def test_xhdr_fails
73
+ header = @nntp.xhdr('', 'at.linux', {}).join
74
+ assert_equal '502', header[0..2]
75
+ assert_raise(Net::NNTP::CommandFailedError) do
76
+ header = @nntp.xhdr('at.xxx', 'subject', {})
77
+ end
78
+ end
79
79
 
80
80
 
81
- def test_group_fails
82
- assert_raise(Net::NNTP::CommandFailedError) do
83
- group = @nntp.group('at.xxx')
84
- end
85
- end
81
+ def test_group_fails
82
+ assert_raise(Net::NNTP::CommandFailedError) do
83
+ group = @nntp.group('at.xxx')
84
+ end
85
+ end
86
86
 
87
- def test_xover
88
- overviews = @nntp.xover('at.linux', :from => 1363, :to => 1375)
89
- assert_equal 15, overviews.length
90
- assert_equal '224', overviews[0][0..2]
91
- end
87
+ def test_xover
88
+ overviews = @nntp.xover('at.linux', :from => 1363, :to => 1375)
89
+ assert_equal 15, overviews.length
90
+ assert_equal '224', overviews[0][0..2]
91
+ end
92
92
 
93
- def test_over_or_xover
94
- assert @nntp.has_xover?
95
- assert @nntp.has_over?
96
- end
93
+ def test_over_or_xover
94
+ assert @nntp.has_xover?
95
+ assert @nntp.has_over?
96
+ end
97
97
 
98
- def test_xover_fails
99
- over = @nntp.xover('at.linux', :from => 1363, :to => 1375)
100
- over = @nntp.xover('at.linux', :message_id => "<slrnf26akq.ci5.hjp-usenet2@zeno.hjp.at>").join
101
- assert_equal '502', over[0..2]
102
- assert_raises(Net::NNTP::CommandFailedError) do
103
- over = @nntp.xover('at.xxx', :message_id => "<slrnf26akq.ci5.hjp-usenet2@zeno.hjp.at>")
104
- end
105
- end
98
+ def test_xover_fails
99
+ over = @nntp.xover('at.linux', :from => 1363, :to => 1375)
100
+ over = @nntp.xover('at.linux', :message_id => "<slrnf26akq.ci5.hjp-usenet2@zeno.hjp.at>").join
101
+ assert_equal '502', over[0..2]
102
+ assert_raises(Net::NNTP::CommandFailedError) do
103
+ over = @nntp.xover('at.xxx', :message_id => "<slrnf26akq.ci5.hjp-usenet2@zeno.hjp.at>")
104
+ end
105
+ end
106
106
 
107
- def test_listgroup
108
- list = @nntp.listgroup('at.linux')
109
- assert_equal 15, list.length
110
- match = /(\d{3}).*f\or\s+(\S+)\s/.match(list[0])
111
- assert_equal "211", match[1]
112
- assert_equal "at.linux", match[2]
113
- assert_equal "1365\r\n", list[3]
114
- end
107
+ def test_listgroup
108
+ list = @nntp.listgroup('at.linux')
109
+ assert_equal 15, list.length
110
+ match = /(\d{3}).*f\or\s+(\S+)\s/.match(list[0])
111
+ assert_equal "211", match[1]
112
+ assert_equal "at.linux", match[2]
113
+ assert_equal "1365", list[3]
114
+ end
115
115
 
116
- def test_list
117
- assert_respond_to @nntp, :list
118
- assert_nothing_raised do
119
- @nntp.list('overview.fmt')
120
- assert_equal 9, @nntp.overview_format.length
121
- @nntp.list()
122
- assert_not_equal 0, @nntp.grouplist.length
123
- assert_not_nil @nntp.grouplist
124
- assert_equal 'at.test', @nntp.grouplist['at.test'].name
125
- @nntp.list('active')
126
- assert_equal 'at.test', @nntp.grouplist['at.test'].name
127
- @nntp.list('active.times')
128
- @nntp.list('active.times', 'at.*')
129
- end
130
- assert_raise Net::NNTP::CommandFailedError do
131
- @nntp.list('distrib.pat', 'at.*')
132
- end
133
- end
116
+ def test_list
117
+ assert_respond_to @nntp, :list
118
+ assert_nothing_raised do
119
+ @nntp.list('overview.fmt')
120
+ assert_equal 9, @nntp.overview_format.length
121
+ @nntp.list()
122
+ assert_not_equal 0, @nntp.grouplist.length
123
+ assert_not_nil @nntp.grouplist
124
+ assert_equal 'at.test', @nntp.grouplist['at.test'].name
125
+ @nntp.list('active')
126
+ assert_equal 'at.test', @nntp.grouplist['at.test'].name
127
+ @nntp.list('active.times')
128
+ @nntp.list('active.times', 'at.*')
129
+ end
130
+ assert_raise Net::NNTP::CommandFailedError do
131
+ @nntp.list('distrib.pat', 'at.*')
132
+ end
133
+ end
134
134
 
135
- def test_article
136
- assert_raises Net::NNTP::CommandFailedError do
137
- article = @nntp.article
138
- end
139
- article = @nntp.article("<5d6be$4625ae23$51df8a12$32566@news.inode.at>")
140
- response, id, msgid = article[0].split
141
- assert_equal '220', response
142
- assert_equal '1392', id
143
- assert_equal "<5d6be$4625ae23$51df8a12$32566@news.inode.at>", msgid
144
- group = @nntp.group 'at.linux'
145
- article = @nntp.article '1392'
146
- response, id, msgid = article[0].split
147
- assert_equal '220', response
148
- assert_equal '1392', id
149
- assert_equal "<5d6be$4625ae23$51df8a12$32566@news.inode.at>", msgid
150
- end
135
+ def test_article
136
+ assert_raises Net::NNTP::CommandFailedError do
137
+ article = @nntp.article
138
+ end
139
+ article = @nntp.article("<5d6be$4625ae23$51df8a12$32566@news.inode.at>")
140
+ response, id, msgid = article[0].split
141
+ assert_equal '220', response
142
+ assert_equal '1392', id
143
+ assert_equal "<5d6be$4625ae23$51df8a12$32566@news.inode.at>", msgid
144
+ group = @nntp.group 'at.linux'
145
+ article = @nntp.article '1392'
146
+ response, id, msgid = article[0].split
147
+ assert_equal '220', response
148
+ assert_equal '1392', id
149
+ assert_equal "<5d6be$4625ae23$51df8a12$32566@news.inode.at>", msgid
150
+ end
151
151
 
152
- def test_head
153
- nntp_connect_and_auth('localhost', 119, 'dummy', 'test')
154
- assert_nothing_raised do
155
- assert_respond_to @nntp, :head
156
- end
157
- assert_raise Net::NNTP::CommandFailedError do
158
- head = @nntp.head
159
- end
160
- @nntp.group 'at.linux'
161
- @io = [
162
- "221 1430 <462dfa6f$0$23135$9b4e6d93@newsspool1.arcor-online.net> article retrieved - head follows\r\n",
163
- "Path: vietwist00.chello.at!newsfeed02.chello.at!newsfeed01.chello.at!newsfeed.arcor.de!newsspool1.arcor-online.net!news.arcor.de.POSTED!not-for-mail\r\n",
164
- "Message-ID: <462dfa6f$0$23135$9b4e6d93@newsspool1.arcor-online.net>\r\n",
165
- "From: Gerhard Engler <gerhard.engler@gmx.de>\r\n",
166
- "Newsgroups: at.linux\r\n",
167
- "Subject: Re: udev_node_mknod: /dev/capi Operation not permitted\r\n",
168
- "Date: Tue, 24 Apr 2007 14:39:11 +0200\r\n",
169
- "References: <4629ee10$0$10187$9b4e6d93@newsspool4.arcor-online.net> <slrnf2np7k.a8e.tom-usenet@eristoteles.iwoars.net>\r\n",
170
- "Lines: 26\r\n",
171
- "User-Agent: Thunderbird 1.5.0.10 (Windows/20070221)\r\n",
172
- "MIME-Version: 1.0\r\n",
173
- "In-Reply-To: <slrnf2np7k.a8e.tom-usenet@eristoteles.iwoars.net>\r\n",
174
- "Content-Type: text/plain; charset=ISO-8859-15; format=flowed\r\n",
175
- "Content-Transfer-Encoding: 7bit\r\n",
176
- "Organization: Arcor\r\n",
177
- "NNTP-Posting-Date: 24 Apr 2007 14:39:11 CEST\r\n",
178
- "NNTP-Posting-Host: 6cf11d8c.newsspool1.arcor-online.net\r\n",
179
- "X-Trace: DXC=Cd=D_AR>:`a^Y=RbYBPl4`ic==]BZ:afn4Fo<]lROoRaFl8W>\BH3Yb7K@fQgPi`FgUTEAfnAR\Ta@JWJ8E:^d<ob]cIfD6hVgh<SdIn0f]3?i\r\n",
180
- "X-Complaints-To: usenet-abuse@arcor.de\r\n",
181
- "Xref: sensor.twincode.net at.linux:1430\r\n",
182
- ".\r\n"
183
- ]
184
- head = @nntp.head
185
- assert_kind_of Array, head
186
- response, id, msgid = head[0].split
187
- assert_equal '221', response
188
- assert_equal '1430', id
189
- assert_equal '<462dfa6f$0$23135$9b4e6d93@newsspool1.arcor-online.net>', msgid
190
- end
152
+ def test_head
153
+ nntp_connect_and_auth('localhost', 119, 'dummy', 'test')
154
+ assert_nothing_raised do
155
+ assert_respond_to @nntp, :head
156
+ end
157
+ assert_raise Net::NNTP::CommandFailedError do
158
+ head = @nntp.head
159
+ end
160
+ @nntp.group 'at.linux'
161
+ @io = [
162
+ "221 1430 <462dfa6f$0$23135$9b4e6d93@newsspool1.arcor-online.net> article retrieved - head follows\r\n",
163
+ "Path: vietwist00.chello.at!newsfeed02.chello.at!newsfeed01.chello.at!newsfeed.arcor.de!newsspool1.arcor-online.net!news.arcor.de.POSTED!not-for-mail\r\n",
164
+ "Message-ID: <462dfa6f$0$23135$9b4e6d93@newsspool1.arcor-online.net>\r\n",
165
+ "From: Gerhard Engler <gerhard.engler@gmx.de>\r\n",
166
+ "Newsgroups: at.linux\r\n",
167
+ "Subject: Re: udev_node_mknod: /dev/capi Operation not permitted\r\n",
168
+ "Date: Tue, 24 Apr 2007 14:39:11 +0200\r\n",
169
+ "References: <4629ee10$0$10187$9b4e6d93@newsspool4.arcor-online.net> <slrnf2np7k.a8e.tom-usenet@eristoteles.iwoars.net>\r\n",
170
+ "Lines: 26\r\n",
171
+ "User-Agent: Thunderbird 1.5.0.10 (Windows/20070221)\r\n",
172
+ "MIME-Version: 1.0\r\n",
173
+ "In-Reply-To: <slrnf2np7k.a8e.tom-usenet@eristoteles.iwoars.net>\r\n",
174
+ "Content-Type: text/plain; charset=ISO-8859-15; format=flowed\r\n",
175
+ "Content-Transfer-Encoding: 7bit\r\n",
176
+ "Organization: Arcor\r\n",
177
+ "NNTP-Posting-Date: 24 Apr 2007 14:39:11 CEST\r\n",
178
+ "NNTP-Posting-Host: 6cf11d8c.newsspool1.arcor-online.net\r\n",
179
+ "X-Trace: DXC=Cd=D_AR>:`a^Y=RbYBPl4`ic==]BZ:afn4Fo<]lROoRaFl8W>\BH3Yb7K@fQgPi`FgUTEAfnAR\Ta@JWJ8E:^d<ob]cIfD6hVgh<SdIn0f]3?i\r\n",
180
+ "X-Complaints-To: usenet-abuse@arcor.de\r\n",
181
+ "Xref: sensor.twincode.net at.linux:1430\r\n",
182
+ ".\r\n"
183
+ ]
184
+ head = @nntp.head
185
+ assert_kind_of Array, head
186
+ response, id, msgid = head[0].split
187
+ assert_equal '221', response
188
+ assert_equal '1430', id
189
+ assert_equal '<462dfa6f$0$23135$9b4e6d93@newsspool1.arcor-online.net>', msgid
190
+ end
191
191
 
192
- def test_body
193
- assert_raises Net::NNTP::CommandFailedError do
194
- body = @nntp.body
195
- end
196
- body = @nntp.body("<5d6be$4625ae23$51df8a12$32566@news.inode.at>")
197
- response, id, msgid = body[0].split
198
- assert_equal '222', response
199
- assert_equal '1392', id
200
- assert_equal "<5d6be$4625ae23$51df8a12$32566@news.inode.at>", msgid
201
- group = @nntp.group 'at.linux'
202
- body = @nntp.body '1392'
203
- response, id, msgid = body[0].split
204
- assert_equal '222', response
205
- assert_equal '1392', id
206
- assert_equal "<5d6be$4625ae23$51df8a12$32566@news.inode.at>", msgid
207
- end
192
+ def test_body
193
+ assert_raises Net::NNTP::CommandFailedError do
194
+ body = @nntp.body
195
+ end
196
+ body = @nntp.body("<5d6be$4625ae23$51df8a12$32566@news.inode.at>")
197
+ response, id, msgid = body[0].split
198
+ assert_equal '222', response
199
+ assert_equal '1392', id
200
+ assert_equal "<5d6be$4625ae23$51df8a12$32566@news.inode.at>", msgid
201
+ group = @nntp.group 'at.linux'
202
+ body = @nntp.body '1392'
203
+ response, id, msgid = body[0].split
204
+ assert_equal '222', response
205
+ assert_equal '1392', id
206
+ assert_equal "<5d6be$4625ae23$51df8a12$32566@news.inode.at>", msgid
207
+ end
208
208
 
209
- def test_stat
210
- assert_nothing_raised do
211
- assert_respond_to @nntp, :stat
212
- end
213
- end
209
+ def test_stat
210
+ assert_nothing_raised do
211
+ assert_respond_to @nntp, :stat
212
+ end
213
+ end
214
214
 
215
- def test_last
216
- assert_raise Net::NNTP::ProtocolError do
217
- last = @nntp.last
218
- end
219
- @nntp.group 'at.linux'
220
- assert_raise Net::NNTP::CommandFailedError do
221
- last = @nntp.last
222
- end
223
- @nntp.next
224
- @nntp.next
225
- last = @nntp.last
226
- assert_kind_of String, last
227
- response, article, msgid, rest = last.split
228
- assert_equal "223", response
229
- assert_equal "1363", article
230
- end
215
+ def test_last
216
+ assert_raise Net::NNTP::ProtocolError do
217
+ last = @nntp.last
218
+ end
219
+ @nntp.group 'at.linux'
220
+ assert_raise Net::NNTP::CommandFailedError do
221
+ last = @nntp.last
222
+ end
223
+ @nntp.next
224
+ @nntp.next
225
+ last = @nntp.last
226
+ assert_kind_of String, last
227
+ response, article, msgid, rest = last.split
228
+ assert_equal "223", response
229
+ assert_equal "1363", article
230
+ end
231
231
 
232
- def test_next
233
- assert_raise Net::NNTP::ProtocolError do
234
- anext = @nntp.next
235
- end
236
- @nntp.group 'at.linux'
237
- anext = @nntp.next
238
- assert_kind_of String, anext
239
- response, article, msgid, rest = anext.split
240
- assert_equal "223", response
241
- assert_equal "1363", article
242
- assert_equal "<example.msgid@fake.host>", msgid
243
- anext = @nntp.next
244
- response, article, msgid, rest = anext.split
245
- assert_equal "1364", article
246
- end
232
+ def test_next
233
+ assert_raise Net::NNTP::ProtocolError do
234
+ anext = @nntp.next
235
+ end
236
+ @nntp.group 'at.linux'
237
+ anext = @nntp.next
238
+ assert_kind_of String, anext
239
+ response, article, msgid, rest = anext.split
240
+ assert_equal "223", response
241
+ assert_equal "1363", article
242
+ assert_equal "<example.msgid@fake.host>", msgid
243
+ anext = @nntp.next
244
+ response, article, msgid, rest = anext.split
245
+ assert_equal "1364", article
246
+ end
247
247
 
248
- private
249
- def nntp_new(host, port=119)
250
- @nntp = Net::NNTP.new(host, port)
251
- end
252
- def nntp_connect_and_auth(host, port, user, pass)
253
- @nntp = Net::NNTP.new(host, port)
254
- @nntp.instance_variable_set :@socket_class, MockSocket
255
- @nntp.connect
256
- @nntp.socket.activate
257
- @nntp.authenticate(user, pass)
258
- end
259
- end
248
+ private
249
+ def nntp_new(host, port=119)
250
+ @nntp = Net::NNTP.new(host, port)
251
+ end
252
+ def nntp_connect_and_auth(host, port, user, pass)
253
+ @nntp = Net::NNTP.new(host, port)
254
+ @nntp.instance_variable_set :@socket_class, MockSocket
255
+ @nntp.connect
256
+ @nntp.socket.activate
257
+ @nntp.authenticate(user, pass)
258
+ end
259
+ end
260
260
  end
261
261
 
262
262