metra_schedule 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +339 -0
- data/README.rdoc +83 -0
- data/Rakefile +14 -0
- data/lib/metra.rb +10 -0
- data/lib/metra/cacher.rb +60 -0
- data/lib/metra/classmethods.rb +10 -0
- data/lib/metra/line.rb +169 -0
- data/lib/metra/parser.rb +108 -0
- data/lib/metra/stop.rb +18 -0
- data/lib/metra/train.rb +26 -0
- data/lib/metra/train_data.rb +37 -0
- data/test/fixture/UP_NW.html +34958 -0
- data/test/test_cacher.rb +82 -0
- data/test/test_line.rb +253 -0
- data/test/test_metra.rb +10 -0
- data/test/test_parser.rb +137 -0
- data/test/test_stop.rb +32 -0
- data/test/test_train.rb +54 -0
- metadata +81 -0
data/test/test_cacher.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), "../lib", "metra")
|
5
|
+
|
6
|
+
class TestLine < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def cleanup_dir
|
9
|
+
FileUtils.rmtree(MetraSchedule::Cacher.new.cache_dir)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_init
|
13
|
+
assert_nothing_raised do
|
14
|
+
MetraSchedule::Cacher.new
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_check_for_and_create_metra_cache_dir
|
19
|
+
cleanup_dir
|
20
|
+
c = MetraSchedule::Cacher.new
|
21
|
+
assert_equal(false, c.check_for_metra_cache_dir)
|
22
|
+
c.create_metra_cache_dir
|
23
|
+
assert_equal(true, c.check_for_metra_cache_dir)
|
24
|
+
cleanup_dir
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_create_cache_dir_if_not_exists
|
28
|
+
cleanup_dir
|
29
|
+
c = MetraSchedule::Cacher.new
|
30
|
+
assert_equal(false, c.check_for_metra_cache_dir)
|
31
|
+
assert_equal(true, c.create_cache_dir_if_not_exists)
|
32
|
+
cleanup_dir
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_check_if_line_cache_file_exists
|
36
|
+
cleanup_dir
|
37
|
+
c = MetraSchedule::Cacher.new
|
38
|
+
l = Metra.new.line(:up_nw)
|
39
|
+
c.create_cache_dir_if_not_exists
|
40
|
+
assert_equal(false, c.line_exists?(l))
|
41
|
+
cleanup_dir
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_create_engine_cache
|
45
|
+
cleanup_dir
|
46
|
+
c = MetraSchedule::Cacher.new
|
47
|
+
line = Metra.new.line(:up_nw)
|
48
|
+
c.create_cache_dir_if_not_exists
|
49
|
+
|
50
|
+
stop1 = MetraSchedule::Stop.new :station => :barrington, :time => Time.parse('12:30')
|
51
|
+
stop2 = MetraSchedule::Stop.new :station => :arlington_heights, :time => Time.parse('12:30')
|
52
|
+
stop3 = MetraSchedule::Stop.new :station => :ogilve, :time => Time.parse('13:30')
|
53
|
+
train1 = MetraSchedule::Train.new :stops => [stop1, stop2, stop3], :direction => :outbound, :schedule => :weekday
|
54
|
+
train2 = MetraSchedule::Train.new :stops => [stop1, stop3], :direction => :outbound, :schedule => :weekday
|
55
|
+
train3 = MetraSchedule::Train.new :stops => [stop2, stop3], :direction => :outbound, :schedule => :weekday
|
56
|
+
line.engines = [train1, train2, train3]
|
57
|
+
|
58
|
+
assert_equal(true, c.persist_line(line))
|
59
|
+
assert_equal(line.engines.count, c.retrieve_line(line).engines.count)
|
60
|
+
cleanup_dir
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_load_cache
|
64
|
+
cleanup_dir
|
65
|
+
c = MetraSchedule::Cacher.new
|
66
|
+
line = Metra.new.line(:up_nw)
|
67
|
+
c.create_cache_dir_if_not_exists
|
68
|
+
|
69
|
+
stop1 = MetraSchedule::Stop.new :station => :barrington, :time => Time.parse('12:30')
|
70
|
+
stop2 = MetraSchedule::Stop.new :station => :arlington_heights, :time => Time.parse('12:30')
|
71
|
+
stop3 = MetraSchedule::Stop.new :station => :ogilve, :time => Time.parse('13:30')
|
72
|
+
train1 = MetraSchedule::Train.new :stops => [stop1, stop2, stop3], :direction => :outbound, :schedule => :weekday
|
73
|
+
train2 = MetraSchedule::Train.new :stops => [stop1, stop3], :direction => :outbound, :schedule => :weekday
|
74
|
+
train3 = MetraSchedule::Train.new :stops => [stop2, stop3], :direction => :outbound, :schedule => :weekday
|
75
|
+
line.engines = [train1, train2, train3]
|
76
|
+
|
77
|
+
assert_equal(true, MetraSchedule::Cacher.store_to_cache(line))
|
78
|
+
assert_equal(c.retrieve_line(line).engines.count, MetraSchedule::Cacher.load_from_cache(line).engines.count)
|
79
|
+
cleanup_dir
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
data/test/test_line.rb
ADDED
@@ -0,0 +1,253 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.join(File.dirname(__FILE__), "../lib", "metra")
|
3
|
+
|
4
|
+
class TestLine < Test::Unit::TestCase
|
5
|
+
|
6
|
+
# INTEGRATION:
|
7
|
+
# def test_update_schedule
|
8
|
+
# line = Metra.new.line(:up_nw).outbound
|
9
|
+
# line.update_schedule
|
10
|
+
# assert_not_nil(line.trains)
|
11
|
+
# end
|
12
|
+
|
13
|
+
def test_initialize_with_line_name
|
14
|
+
assert_nothing_raised do
|
15
|
+
Metra.new.line(:up_nw)
|
16
|
+
end
|
17
|
+
assert_raise ArgumentError do
|
18
|
+
Metra.new.line("blah")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_initialize_with_incorrect_line_symbol
|
23
|
+
assert_raise ArgumentError do
|
24
|
+
Metra.new.line(:blah)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_has_name_and_url
|
29
|
+
line = Metra.new.line(:up_nw)
|
30
|
+
assert_equal("Union Pacific Northwest", line.name)
|
31
|
+
assert_equal("http://metrarail.com/metra/en/home/maps_schedules/metra_system_map/up-nw/schedule.full.html", line.url)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_direction
|
35
|
+
line = Metra.new.line(:up_nw)
|
36
|
+
assert_nothing_raised do
|
37
|
+
line.direction :outbound
|
38
|
+
end
|
39
|
+
assert_equal(:outbound, line.dir)
|
40
|
+
assert_nothing_raised do
|
41
|
+
line.direction :inbound
|
42
|
+
end
|
43
|
+
assert_equal(:inbound, line.dir)
|
44
|
+
assert_equal(line.direction.class, Metra.new.line(:up_nw).class)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_direction_incorrect_argument
|
48
|
+
assert_raise ArgumentError do
|
49
|
+
line = Metra.new.line(:up_nw).direction(:blah)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_outbound
|
54
|
+
line = Metra.new.line(:up_nw)
|
55
|
+
assert_equal(line.direction(:outbound), line.outbound)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_inbound
|
59
|
+
line = Metra.new.line(:up_nw)
|
60
|
+
assert_equal(line.direction(:inbound), line.inbound)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_schedule
|
64
|
+
line = Metra.new.line(:up_nw)
|
65
|
+
assert_nothing_raised do
|
66
|
+
line.schedule :weekday
|
67
|
+
end
|
68
|
+
assert_equal(:weekday, line.sched)
|
69
|
+
assert_nothing_raised do
|
70
|
+
line.schedule :saturday
|
71
|
+
end
|
72
|
+
assert_equal(:saturday, line.sched)
|
73
|
+
assert_nothing_raised do
|
74
|
+
line.schedule :sunday
|
75
|
+
end
|
76
|
+
assert_equal(:sunday, line.sched)
|
77
|
+
assert_nothing_raised do
|
78
|
+
line.schedule :holiday
|
79
|
+
end
|
80
|
+
assert_equal(:holiday, line.sched)
|
81
|
+
assert_equal(line.schedule.class, Metra.new.line(:up_nw).class)
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_weekday
|
85
|
+
line = Metra.new.line(:up_nw)
|
86
|
+
assert_equal(line.schedule(:weekday), line.weekday)
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_saturday
|
90
|
+
line = Metra.new.line(:up_nw)
|
91
|
+
assert_equal(line.schedule(:saturday), line.saturday)
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_sunday
|
95
|
+
line = Metra.new.line(:up_nw)
|
96
|
+
assert_equal(line.schedule(:sunday), line.sunday)
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_holiday
|
100
|
+
line = Metra.new.line(:up_nw)
|
101
|
+
assert_equal(line.schedule(:holiday), line.holiday)
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_set_station
|
105
|
+
line = Metra.new.line(:up_nw)
|
106
|
+
line.set_station(:start, :barrington)
|
107
|
+
assert_equal(:barrington, line.start)
|
108
|
+
line.set_station(:destination, :barrington)
|
109
|
+
assert_equal(:barrington, line.destination)
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_set_station_invalid_station
|
113
|
+
line = Metra.new.line(:up_nw)
|
114
|
+
assert_raises ArgumentError do
|
115
|
+
line.set_station(:start, :bleepy_bleepy)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_from
|
120
|
+
line = Metra.new.line(:up_nw)
|
121
|
+
assert_equal(line.set_station(:start, :barrington), line.from(:barrington))
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_to
|
125
|
+
line = Metra.new.line(:up_nw)
|
126
|
+
assert_equal(line.set_station(:destination, :ogilve), line.to(:ogilve))
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_at
|
130
|
+
line = Metra.new.line(:up_nw)
|
131
|
+
test_time = "12:30PM"
|
132
|
+
assert_nothing_raised do
|
133
|
+
line.at(test_time)
|
134
|
+
line.at(Time.now)
|
135
|
+
end
|
136
|
+
assert_equal(line.time, Time.parse(test_time))
|
137
|
+
assert_raises ArgumentError do
|
138
|
+
line.at(:bloopybloop)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_deduce_direction
|
143
|
+
line = Metra.new.line(:up_nw)
|
144
|
+
|
145
|
+
assert_equal(:outbound, line.from(:ogilve).to(:barrington).deduce_direction)
|
146
|
+
assert_equal(:inbound, line.from(:barrington).to(:ogilve).deduce_direction)
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_trains_filter_by_station
|
150
|
+
line = Metra.new.line(:up_nw)
|
151
|
+
|
152
|
+
stop1 = MetraSchedule::Stop.new :station => :barrington, :time => Time.parse('12:30')
|
153
|
+
stop2 = MetraSchedule::Stop.new :station => :arlington_heights, :time => Time.parse('12:30')
|
154
|
+
stop3 = MetraSchedule::Stop.new :station => :ogilve, :time => Time.parse('13:30')
|
155
|
+
train1 = MetraSchedule::Train.new :stops => [stop1, stop2, stop3], :direction => :outbound, :schedule => :weekday
|
156
|
+
train2 = MetraSchedule::Train.new :stops => [stop1, stop3], :direction => :outbound, :schedule => :weekday
|
157
|
+
train3 = MetraSchedule::Train.new :stops => [stop2, stop3], :direction => :outbound, :schedule => :weekday
|
158
|
+
line.engines = [train1, train2, train3]
|
159
|
+
|
160
|
+
valid_trains = line.to(:barrington).from(:ogilve).trains
|
161
|
+
assert_equal([train1, train2], valid_trains)
|
162
|
+
end
|
163
|
+
|
164
|
+
def test_trains_filter_by_start
|
165
|
+
line = Metra.new.line(:up_nw)
|
166
|
+
|
167
|
+
stop1 = MetraSchedule::Stop.new :station => :arlington_heights, :time => Time.parse('12:30')
|
168
|
+
stop2 = MetraSchedule::Stop.new :station => :arlington_heights, :time => Time.parse('12:40')
|
169
|
+
stop3 = MetraSchedule::Stop.new :station => :ogilve, :time => Time.parse('13:30')
|
170
|
+
train1 = MetraSchedule::Train.new :stops => [stop1, stop3], :direction => :inbound, :schedule => :weekday
|
171
|
+
train2 = MetraSchedule::Train.new :stops => [stop2, stop3], :direction => :inbound, :schedule => :weekday
|
172
|
+
line.engines = [train1, train2]
|
173
|
+
|
174
|
+
valid_trains = line.to(:ogilve).from(:arlington_heights).at('12:35').trains
|
175
|
+
assert_equal([train2], valid_trains)
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_trains_just_direction_and_time
|
179
|
+
line = Metra.new.line(:up_nw)
|
180
|
+
|
181
|
+
stop1 = MetraSchedule::Stop.new :station => :barrington, :time => Time.parse('12:30')
|
182
|
+
stop2 = MetraSchedule::Stop.new :station => :arlington_heights, :time => Time.parse('12:30')
|
183
|
+
stop3 = MetraSchedule::Stop.new :station => :ogilve, :time => Time.parse('13:30')
|
184
|
+
train1 = MetraSchedule::Train.new :stops => [stop1, stop2, stop3], :direction => :outbound, :schedule => :weekday
|
185
|
+
train2 = MetraSchedule::Train.new :stops => [stop1, stop3], :direction => :outbound, :schedule => :weekday
|
186
|
+
train3 = MetraSchedule::Train.new :stops => [stop2, stop3], :direction => :outbound, :schedule => :weekday
|
187
|
+
line.engines = [train1, train2, train3]
|
188
|
+
|
189
|
+
valid_trains = line.outbound.at('12:00').trains
|
190
|
+
assert_equal([train1, train2, train3], valid_trains)
|
191
|
+
end
|
192
|
+
|
193
|
+
def test_filter_by_direction
|
194
|
+
line = Metra.new.line(:up_nw)
|
195
|
+
|
196
|
+
stop1 = MetraSchedule::Stop.new :station => :barrington, :time => Time.parse('12:30')
|
197
|
+
stop2 = MetraSchedule::Stop.new :station => :ogilve, :time => Time.parse('13:30')
|
198
|
+
|
199
|
+
train1 = MetraSchedule::Train.new :direction => :outbound, :stops => [stop1, stop2], :schedule => :weekday
|
200
|
+
train2 = MetraSchedule::Train.new :direction => :inbound, :stops => [stop1, stop2], :schedule => :weekday
|
201
|
+
train3 = MetraSchedule::Train.new :direction => :outbound, :stops => [stop1, stop2], :schedule => :weekday
|
202
|
+
line.engines = [train1, train2, train3]
|
203
|
+
|
204
|
+
valid_trains = line.to(:barrington).from(:ogilve).trains
|
205
|
+
assert_equal([train1, train3], valid_trains)
|
206
|
+
end
|
207
|
+
|
208
|
+
def test_filter_by_schedule
|
209
|
+
line = Metra.new.line(:up_nw)
|
210
|
+
|
211
|
+
stop1 = MetraSchedule::Stop.new :station => :barrington, :time => Time.parse('12:30')
|
212
|
+
stop2 = MetraSchedule::Stop.new :station => :ogilve, :time => Time.parse('13:30')
|
213
|
+
|
214
|
+
train1 = MetraSchedule::Train.new :direction => :outbound, :stops => [stop1, stop2], :schedule => :weekday
|
215
|
+
train2 = MetraSchedule::Train.new :direction => :outbound, :stops => [stop1, stop2], :schedule => :holiday
|
216
|
+
train3 = MetraSchedule::Train.new :direction => :outbound, :stops => [stop1, stop2], :schedule => :saturday
|
217
|
+
train4 = MetraSchedule::Train.new :direction => :outbound, :stops => [stop1, stop2], :schedule => :sunday
|
218
|
+
line.engines = [train1, train2, train3, train4]
|
219
|
+
|
220
|
+
valid_weekday = line.to(:barrington).from(:ogilve).weekday.trains
|
221
|
+
assert_equal([train1], valid_weekday)
|
222
|
+
valid_saturday = line.to(:barrington).from(:ogilve).saturday.trains
|
223
|
+
assert_equal([train3], valid_saturday)
|
224
|
+
valid_holiday = line.to(:barrington).from(:ogilve).holiday.trains
|
225
|
+
assert_equal([train2, train4], valid_holiday)
|
226
|
+
valid_sunday = line.to(:barrington).from(:ogilve).sunday.trains
|
227
|
+
assert_equal([train2, train4], valid_sunday)
|
228
|
+
end
|
229
|
+
|
230
|
+
def test_no_engines
|
231
|
+
line = Metra.new.line(:up_nw)
|
232
|
+
|
233
|
+
assert_nothing_raised do
|
234
|
+
line.outbound.trains
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
def test_all_trains_on_line
|
239
|
+
line = Metra.new.line(:up_nw)
|
240
|
+
|
241
|
+
stop1 = MetraSchedule::Stop.new :station => :barrington, :time => Time.parse('12:30')
|
242
|
+
stop2 = MetraSchedule::Stop.new :station => :ogilve, :time => Time.parse('13:30')
|
243
|
+
|
244
|
+
train1 = MetraSchedule::Train.new :direction => :inbound, :stops => [stop1, stop2], :schedule => :weekday
|
245
|
+
train2 = MetraSchedule::Train.new :direction => :outbound, :stops => [stop1, stop2], :schedule => :holiday
|
246
|
+
train3 = MetraSchedule::Train.new :direction => :inbound, :stops => [stop1, stop2], :schedule => :saturday
|
247
|
+
train4 = MetraSchedule::Train.new :direction => :outbound, :stops => [stop1, stop2], :schedule => :sunday
|
248
|
+
line.engines = [train1, train2, train3, train4]
|
249
|
+
|
250
|
+
assert_equal([train1, train2, train3, train4], line.trains)
|
251
|
+
end
|
252
|
+
|
253
|
+
end
|
data/test/test_metra.rb
ADDED
data/test/test_parser.rb
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.join(File.dirname(__FILE__), "../lib", "metra")
|
3
|
+
|
4
|
+
class TestLine < Test::Unit::TestCase
|
5
|
+
include MetraSchedule::TrainData
|
6
|
+
|
7
|
+
def up_nw_stub
|
8
|
+
f = File.open(File.join(File.dirname(__FILE__), 'fixture/UP_NW.html'), 'r')
|
9
|
+
parser = MetraSchedule::Parser.new f
|
10
|
+
parser.line = LINES[:up_nw]
|
11
|
+
parser.scrape
|
12
|
+
parser
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_init
|
16
|
+
assert_nothing_raised do
|
17
|
+
@@p = MetraSchedule::Parser.new 'http://blake.com'
|
18
|
+
end
|
19
|
+
assert_not_nil(up_nw_stub.html_doc)
|
20
|
+
assert_not_nil(@@p.html_doc)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_seperate_tables
|
24
|
+
p = up_nw_stub
|
25
|
+
assert_equal(2, p.tables.find_all {|t| t[:schedule] == :weekday}.count)
|
26
|
+
assert_equal(2, p.tables.find_all {|t| t[:schedule] == :saturday}.count)
|
27
|
+
assert_equal(2, p.tables.find_all {|t| t[:schedule] == :sunday}.count)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_sanitize
|
31
|
+
p = up_nw_stub
|
32
|
+
list = [1, 2, 3]
|
33
|
+
assert_equal(2, p.sanitize(list).count)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_train_count
|
37
|
+
p = up_nw_stub
|
38
|
+
assert_equal(16, p.train_count(p.tables[0][:tables][0]))
|
39
|
+
assert_equal(16, p.train_count(p.tables[0][:tables][1]))
|
40
|
+
assert_equal(12, p.train_count(p.tables[1][:tables][0]))
|
41
|
+
assert_equal(7, p.train_count(p.tables[2][:tables][0]))
|
42
|
+
assert_equal(16, p.train_count(p.tables[3][:tables][0]))
|
43
|
+
assert_equal(16, p.train_count(p.tables[3][:tables][1]))
|
44
|
+
assert_equal(1, p.train_count(p.tables[3][:tables][2]))
|
45
|
+
assert_equal(12, p.train_count(p.tables[4][:tables][0]))
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_stop_count
|
49
|
+
p = up_nw_stub
|
50
|
+
assert_equal(23, p.stop_count(p.tables[0][:tables][0]))
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_make_stop_inbound
|
54
|
+
p = up_nw_stub
|
55
|
+
|
56
|
+
node = p.tables[0][:tables][0].xpath("tbody[4]/tr/td[1]")[0]
|
57
|
+
expected = MetraSchedule::Stop.new :station => :crystal_lake, :time => Time.parse("4:47AM")
|
58
|
+
assert_equal(expected.station, p.make_stop(node, 3, :inbound).station)
|
59
|
+
assert_equal(expected.time, p.make_stop(node, 3, :inbound).time)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_make_stop_outbound
|
63
|
+
p = up_nw_stub
|
64
|
+
|
65
|
+
node = p.tables[3][:tables][0].xpath("tbody[4]/tr/td[1]")[0]
|
66
|
+
expected = MetraSchedule::Stop.new :station => :jefferson_park, :time => Time.parse("6:13AM")
|
67
|
+
assert_equal(expected.station, p.make_stop(node, 3, :outbound).station)
|
68
|
+
assert_equal(expected.time, p.make_stop(node, 3, :outbound).time)
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_make_stop_nil
|
72
|
+
p = up_nw_stub
|
73
|
+
|
74
|
+
node = p.tables[0][:tables][0].xpath("tbody[1]/tr/td[1]")[0]
|
75
|
+
assert_nil(p.make_stop(node, 0, :inbound))
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_make_stop_am
|
79
|
+
p = up_nw_stub
|
80
|
+
|
81
|
+
node = p.tables[0][:tables][1].xpath("tbody[18]/tr/td[5]")[0]
|
82
|
+
expected = MetraSchedule::Stop.new :station => :norwood_park, :time => Time.parse("11:57AM")
|
83
|
+
assert_equal(expected.station, p.make_stop(node, 17, :inbound).station)
|
84
|
+
assert_equal(expected.time, p.make_stop(node, 17, :inbound).time)
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_make_stop_pm
|
88
|
+
p = up_nw_stub
|
89
|
+
|
90
|
+
node = p.tables[0][:tables][1].xpath("tbody[20]/tr/td[5]")[0]
|
91
|
+
expected = MetraSchedule::Stop.new :station => :jefferson_park, :time => Time.parse("12:01PM")
|
92
|
+
assert_equal(expected.station, p.make_stop(node, 19, :inbound).station)
|
93
|
+
assert_equal(expected.time, p.make_stop(node, 19, :inbound).time)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_find_stops
|
97
|
+
p = up_nw_stub
|
98
|
+
|
99
|
+
table = p.tables[0][:tables][0]
|
100
|
+
assert_equal(19, p.find_stops(table, 1, :inbound).count)
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_find_stops_express
|
104
|
+
p = up_nw_stub
|
105
|
+
|
106
|
+
table = p.tables[0][:tables][0]
|
107
|
+
stops = p.find_stops(table, 5, :inbound)
|
108
|
+
assert_equal(Time.parse("6:43AM").to_f , stops[6].time.to_f)
|
109
|
+
assert_equal(:arlington_park, stops[6].station)
|
110
|
+
assert_equal(10, stops.count)
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_make_trains_count
|
114
|
+
p = up_nw_stub
|
115
|
+
trains = p.make_trains
|
116
|
+
assert_equal(104, p.make_trains.count)
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_find_train_num
|
120
|
+
p = up_nw_stub
|
121
|
+
train_602 = p.make_trains.first
|
122
|
+
train_632 = p.make_trains[15]
|
123
|
+
|
124
|
+
assert_equal(602, train_602.train_num)
|
125
|
+
assert_equal(632, train_632.train_num)
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_find_bike_count
|
129
|
+
p = up_nw_stub
|
130
|
+
train_602 = p.make_trains.first
|
131
|
+
train_640 = p.make_trains[18]
|
132
|
+
|
133
|
+
assert_equal(nil, train_602.bike_limit)
|
134
|
+
assert_equal(12, train_640.bike_limit)
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|