octranspo 0.0.0
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/.gitignore +3 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +26 -0
- data/Rakefile +8 -0
- data/lib/octranspo.rb +20 -0
- data/lib/octranspo/headsign.rb +2539 -0
- data/lib/octranspo/headsigns.yml +40565 -0
- data/lib/octranspo/landmarks.rb +37 -0
- data/lib/octranspo/lingo.rb +125 -0
- data/lib/octranspo/lingo/headsign_messages.yml +104 -0
- data/lib/octranspo/lingo/headsign_signatures.yml +3 -0
- data/lib/octranspo/lingo/landmarks.yml +205 -0
- data/lib/octranspo/lingo/roadways.yml +1957 -0
- data/lib/octranspo/mobile_resource_methods.rb +98 -0
- data/lib/octranspo/mobile_route_data.rb +85 -0
- data/lib/octranspo/mobile_route_schedule.rb +118 -0
- data/lib/octranspo/mobile_stop_schedule.rb +137 -0
- data/lib/octranspo/remote_resource_methods.rb +89 -0
- data/lib/octranspo/route.rb +31 -0
- data/lib/octranspo/routes.yml +507 -0
- data/lib/octranspo/service_date.rb +17 -0
- data/lib/octranspo/stations.yml +77 -0
- data/lib/octranspo/stop.rb +69 -0
- data/lib/octranspo/stop_resource.rb +46 -0
- data/lib/octranspo/stops.yml +30696 -0
- data/lib/octranspo/version.rb +3 -0
- data/octranspo.gemspec +22 -0
- data/test/fixtures/mobile_route_data/20090323/route_123_index_0.html +457 -0
- data/test/fixtures/mobile_route_data/20090323/route_123_index_1.html +99 -0
- data/test/fixtures/mobile_route_data/20090323/route_1_index_0.html +700 -0
- data/test/fixtures/mobile_route_data/20090323/route_1_index_1.html +691 -0
- data/test/fixtures/mobile_route_data/20090323/route_2_index_0.html +682 -0
- data/test/fixtures/mobile_route_data/20090323/route_2_index_1.html +646 -0
- data/test/fixtures/mobile_route_data/20100323/route_123_index_0.html +469 -0
- data/test/fixtures/mobile_route_data/20100323/route_123_index_1.html +105 -0
- data/test/fixtures/mobile_route_data/20100323/route_1_index_0.html +703 -0
- data/test/fixtures/mobile_route_data/20100323/route_1_index_1.html +694 -0
- data/test/fixtures/mobile_route_data/20100323/route_2_index_0.html +685 -0
- data/test/fixtures/mobile_route_data/20100323/route_2_index_1.html +649 -0
- data/test/fixtures/mobile_route_data/20100323/route_3_index_0.html +649 -0
- data/test/fixtures/mobile_route_data/20100323/route_3_index_1.html +721 -0
- data/test/fixtures/mobile_route_schedule/20090323/route_18_direction_2_location_25.html +1038 -0
- data/test/fixtures/mobile_route_schedule/20090323/route_1_direction_1_location_0.html +1127 -0
- data/test/fixtures/mobile_route_schedule/20090323/route_2_direction_2_location_11.html +1430 -0
- data/test/fixtures/mobile_route_schedule/20090323/route_2_direction__location_11.html +104 -0
- data/test/fixtures/mobile_route_schedule/20100323/route_1_direction_1_location_0.html +1180 -0
- data/test/fixtures/mobile_route_schedule/20100323/route_2_direction_2_location_11.html +1554 -0
- data/test/fixtures/mobile_route_schedule/20100323/route_3_direction_1_location_0.html +1082 -0
- data/test/fixtures/mobile_route_schedule/20100323/route_3_direction_1_location_1.html +1082 -0
- data/test/fixtures/mobile_stop_schedule/20090323/location_1987.yml +198 -0
- data/test/fixtures/mobile_stop_schedule/20090323/location_1987_route_index_0.html +1283 -0
- data/test/fixtures/mobile_stop_schedule/20090323/location_1987_route_index_1.html +194 -0
- data/test/fixtures/mobile_stop_schedule/20090323/location_1987_route_index_2.html +116 -0
- data/test/fixtures/mobile_stop_schedule/20090323/location_3058_route_index_12.html +149 -0
- data/test/fixtures/mobile_stop_schedule/20090323/location_8789_route_index_0.html +1002 -0
- data/test/fixtures/mobile_stop_schedule/20100323/location_1987.yml +209 -0
- data/test/fixtures/mobile_stop_schedule/20100323/location_1987_route_index_0.html +1393 -0
- data/test/fixtures/mobile_stop_schedule/20100323/location_1987_route_index_1.html +206 -0
- data/test/fixtures/mobile_stop_schedule/20100323/location_1987_route_index_2.html +123 -0
- data/test/fixtures/mobile_stop_schedule/20100323/location_3058_route_index_12.html +278 -0
- data/test/fixtures/mobile_stop_schedule/20100323/location_7558_route_index_0.html +979 -0
- data/test/fixtures/mobile_stop_schedule/20100323/location_8789_route_index_0.html +1059 -0
- data/test/fixtures/stop_resource/1987.html +126 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/headsign_test.rb +34 -0
- data/test/unit/lingo_test.rb +139 -0
- data/test/unit/mobile_resource_methods_test.rb +25 -0
- data/test/unit/mobile_route_data_test.rb +124 -0
- data/test/unit/mobile_route_schedule_test.rb +210 -0
- data/test/unit/mobile_stop_schedule_test.rb +153 -0
- data/test/unit/service_date_test.rb +27 -0
- data/test/unit/stop_resource_test.rb +26 -0
- metadata +251 -0
@@ -0,0 +1,126 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
4
|
+
<html lang="EN">
|
5
|
+
<head>
|
6
|
+
<title>OC Travel Planner</title>
|
7
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
8
|
+
<meta http-equiv="expires" content="0"/>
|
9
|
+
<link rel="stylesheet" type="text/css" href="style.css">
|
10
|
+
<script type="text/javascript" language="JavaScript" src="js/validate.js"></script>
|
11
|
+
</head>
|
12
|
+
<body>
|
13
|
+
|
14
|
+
|
15
|
+
<script type="text/javascript" language="JavaScript" src="js/sniffer.js"></script>
|
16
|
+
<script type="text/javascript" language="JavaScript">
|
17
|
+
if (!detect())
|
18
|
+
{
|
19
|
+
document.open();
|
20
|
+
document.writeln('<div class="badBrowser">The travel planner works best with Netscape 6.1 and up, or Explorer 5 and up. If you are using other browsers or lower versions you may encounter problems. Would you like to proceed?</div>');
|
21
|
+
document.close();
|
22
|
+
}
|
23
|
+
</script>
|
24
|
+
|
25
|
+
<noscript>
|
26
|
+
<div class="noscript">
|
27
|
+
<h2>This site uses Javascript. Please enable Javascript in your web browser
|
28
|
+
before continuing.</h2>
|
29
|
+
</div>
|
30
|
+
</noscript>
|
31
|
+
<form name="tp_from560" method="get" action="From560Confirm.oci;jsessionid=1FA018169BEF95E84987E83622F4D35E">
|
32
|
+
<table cellpadding="0" cellspacing="0" summary="" class="banner">
|
33
|
+
<tr>
|
34
|
+
<td width="83"><img src="tripPlanning/images/tp_banner1.gif" width="83" height="43"></td>
|
35
|
+
<td width="718"><img src="tripPlanning/images/tp_banner2.gif" width="668" height="43"></td>
|
36
|
+
</tr>
|
37
|
+
</table>
|
38
|
+
<table cellpadding="0" cellspacing="0" summary="" class="progress">
|
39
|
+
<tr>
|
40
|
+
<td width="110"><img src="tripPlanning/images/tp_progress1.gif" width="110" height="30"></td>
|
41
|
+
<td width="20"> </td>
|
42
|
+
<td width="620" class="right"><img src="tripPlanning/images/tp_25percent.gif" width="596" height="25"></td>
|
43
|
+
</tr>
|
44
|
+
</table>
|
45
|
+
<table cellpadding="0" cellspacing="0" summary="" class="progressDesc">
|
46
|
+
<tr>
|
47
|
+
<td width="110"><img src="tripPlanning/images/tp_progressDesc1.gif" width="83" height="59"></td>
|
48
|
+
<td width="30"> </td>
|
49
|
+
<td width="60" class="stepText"> </td>
|
50
|
+
<td width="90" class="stepText"> </td>
|
51
|
+
<td width="60" class="stepText"> </td>
|
52
|
+
<td width="90" class="stepText"> </td>
|
53
|
+
<td width="60" class="stepText"> </td>
|
54
|
+
<td width="90" class="stepText"> </td>
|
55
|
+
<td width="60" class="stepText"> </td>
|
56
|
+
<td width="90" class="stepText"> </td>
|
57
|
+
</tr>
|
58
|
+
</table>
|
59
|
+
<table cellpadding="0" cellspacing="0" summary="" class="stepName">
|
60
|
+
<tr>
|
61
|
+
<td width="85"><img src="tripPlanning/images/tp_stepName1.gif" width="83" height="23"></td>
|
62
|
+
<td width="665"><img src="tripPlanning/images/text_fromWhere.gif" width="259" height="21"></td>
|
63
|
+
</tr>
|
64
|
+
</table>
|
65
|
+
<table cellpadding="0" cellspacing="0" summary="" class="tabs">
|
66
|
+
<tr>
|
67
|
+
<td width="63" rowspan="2" background="tripPlanning/images/tp_sideShim.gif" class="top"><img src="tripPlanning/images/tp_side.gif" width="63" height="300"></td>
|
68
|
+
<td width="30" height="58" class="tp_boxTop1"> </td>
|
69
|
+
<td width="85" height="58" class="tp_boxTop2"><a href="linkFromAddress.oci"><img src="tripPlanning/images/tp_addressOff.gif" alt="Address" title="Address" width="85" height="38" border="0"></a></td>
|
70
|
+
<td width="85" height="58" class="tp_boxTop2"><a href="linkFromIntersection.oci"><img src="tripPlanning/images/tp_intersectionOff.gif" alt="Intersection" title="Intersection" width="85" height="38" border="0"></a></td>
|
71
|
+
<td width="85" height="58" class="tp_boxTop2"><a href="FromLandmarkSetup.oci"><img src="tripPlanning/images/tp_landmarkOff.gif" alt="Landmark" title="Landmark" width="85" height="38" border="0"></a></td>
|
72
|
+
<td width="95" height="58" class="tp_boxTop2"><img src="tripPlanning/images/tp_560On.gif" alt="560-1000" title="560-1000" width="95" height="38" border="0"></td>
|
73
|
+
<td width="85" height="58" class="tp_boxTop2"><a href="linkFromMap.oci"><img src="tripPlanning/images/tp_mapOff.gif" alt="Map" title="Map" width="85" height="38" border="0"></a></td>
|
74
|
+
<td width="85" height="58" class="tp_boxTop2"><a href="linkFromHistory.oci"><img src="tripPlanning/images/tp_historyOff.gif" alt="History" title="Map" width="85" height="38" border="0"></a></td>
|
75
|
+
<td width="97" height="58" class="tp_boxTop2"><img src="tripPlanning/images/tp_line.gif" width="97" height="38"></td>
|
76
|
+
<td width="40" height="58" class="tp_boxTop3"> </td>
|
77
|
+
</tr>
|
78
|
+
<tr>
|
79
|
+
<td width="30" class="tp_boxLeft"> </td>
|
80
|
+
<td width="617" height="270" class="tp_box" colspan="7">
|
81
|
+
<table cellpadding="0" cellspacing="0" width="100%" height="100%">
|
82
|
+
<tr>
|
83
|
+
<td width="240"> </td>
|
84
|
+
<td height="50" width="80" class="center"><img src="tripPlanning/images/tp_img560.gif" width="70" height="43"></td>
|
85
|
+
<td colspan="5" width="257"> </td>
|
86
|
+
</tr>
|
87
|
+
<tr>
|
88
|
+
<td class="formPadding3" colspan="7">
|
89
|
+
<div class="padTop"> </div>
|
90
|
+
<table cellpadding="0" cellspacing="0" summary="">
|
91
|
+
<tr>
|
92
|
+
<td class="right">
|
93
|
+
<div class="instruction">Is this the right bus stop?</div>
|
94
|
+
|
95
|
+
|
96
|
+
(1987)
|
97
|
+
|
98
|
+
|
99
|
+
SOMERSET O-W / BRONSON
|
100
|
+
<input type="hidden" name="from560Code" value="1987">
|
101
|
+
|
102
|
+
</td>
|
103
|
+
<td class="padRight" nowrap>
|
104
|
+
<input name="ok" id="ok" type="image" src="tripPlanning/images/ok.gif" width="59" height="32" alt="OK" title="OK">
|
105
|
+
<a href="linkFrom560.oci"><img src="tripPlanning/images/no.gif" width="59" height="32" alt="NO" title="NO" border="0"></a>
|
106
|
+
</td>
|
107
|
+
</tr>
|
108
|
+
</table>
|
109
|
+
</td>
|
110
|
+
</tr>
|
111
|
+
</table>
|
112
|
+
</td>
|
113
|
+
<td width="40" class="tp_boxRight"> </td>
|
114
|
+
</tr>
|
115
|
+
</table>
|
116
|
+
<table cellpadding="0" cellspacing="0" summary="" class="last">
|
117
|
+
<tr>
|
118
|
+
<td width="63"><img src="tripPlanning/images/tp_bottom1.gif" width="63" height="37"></td>
|
119
|
+
<td width="30" class="tp_boxBottom1"> </td>
|
120
|
+
<td width="617" class="tp_boxBottom2"> </td>
|
121
|
+
<td width="40" class="tp_boxBottom3"> </td>
|
122
|
+
</tr>
|
123
|
+
</table>
|
124
|
+
</form>
|
125
|
+
</body>
|
126
|
+
</html>
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "bundler/setup"
|
3
|
+
require "octranspo"
|
4
|
+
require "test/unit"
|
5
|
+
require "active_support/test_case"
|
6
|
+
|
7
|
+
class Date
|
8
|
+
# date.at('12:00') => time object representing the date at noon
|
9
|
+
def at (string)
|
10
|
+
matches = /^(\d\d)(:)*(\d\d)$/.match(string)
|
11
|
+
hh, mm = Integer(matches[1]), Integer(matches[3])
|
12
|
+
duration = hh.hours + mm.minutes
|
13
|
+
to_time.in_time_zone.change :hour => hh, :min => mm
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "#{File.dirname(File.dirname(__FILE__))}/test_helper"
|
2
|
+
|
3
|
+
module OCTranspo
|
4
|
+
class HeadsignTest < ActiveSupport::TestCase
|
5
|
+
|
6
|
+
test "1 OTTAWA ROCKCLIFFE headsign" do
|
7
|
+
assert_equal "1 OTTAWA ROCKCLIFFE", OCTranspo::Headsign.find(1, "OTTAWA-ROCKCLIFFE", [{:code => "8789"}])
|
8
|
+
end
|
9
|
+
|
10
|
+
test "1X DOWNTOWN headsign" do
|
11
|
+
assert_equal "1 DOWNTOWN", OCTranspo::Headsign.find(1, "OTTAWA-ROCKCLIFFE", [{:code => "3009"}])
|
12
|
+
end
|
13
|
+
|
14
|
+
test "1 SOUTH KEYS headsign" do
|
15
|
+
assert_equal "1 SOUTH KEYS", OCTranspo::Headsign.find(1, "SOUTH KEYS", [{:code => "3037"}])
|
16
|
+
end
|
17
|
+
|
18
|
+
test "1X BILLINGS BRIDGE headsign" do
|
19
|
+
assert_equal "1X BILLINGS BRIDGE", OCTranspo::Headsign.find(1, "SOUTH KEYS", [{:code => "3034"}])
|
20
|
+
end
|
21
|
+
|
22
|
+
test "2 BAYSHORE headsign" do
|
23
|
+
assert_equal "2 BAYSHORE", OCTranspo::Headsign.find(2, "BAYSHORE", [{:code => "3050"}])
|
24
|
+
end
|
25
|
+
|
26
|
+
test "2 WESTBORO headsign" do
|
27
|
+
assert_equal "2 WESTBORO", OCTranspo::Headsign.find(2, "BAYSHORE", [{:code => "3012"}])
|
28
|
+
end
|
29
|
+
|
30
|
+
test "2 DOWNTOWN headsign" do
|
31
|
+
assert_equal "2 DOWNTOWN", OCTranspo::Headsign.find(2, "DOWNTOWN", [{:code => "3009"}])
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
require "#{File.dirname(File.dirname(__FILE__))}/test_helper"
|
2
|
+
|
3
|
+
module OCTranspo
|
4
|
+
class LingoTest < ActiveSupport::TestCase
|
5
|
+
|
6
|
+
include Lingo
|
7
|
+
|
8
|
+
test "translate location lingo for addresses" do
|
9
|
+
assert_equal "360 Coventry Rd.", translate_location("COVENTRY / AD. 360")
|
10
|
+
end
|
11
|
+
|
12
|
+
test "translate location lingo for addresses with back slashes" do
|
13
|
+
assert_equal "1520 Caldwell Ave.", translate_location("CALDWELL \\ AD. 1520")
|
14
|
+
end
|
15
|
+
|
16
|
+
test "translate location lingo for intersections" do
|
17
|
+
assert_equal "Somerset St. at Bronson Ave.", translate_location("SOMERSET O-W / BRONSON")
|
18
|
+
assert_equal "Coventry Rd. at Jetform Park", translate_location("COVENTRY / PARC JETFORM PARK")
|
19
|
+
assert_equal "Ballard Ct. at Blair Rd.", translate_location("BALLARD / BLAIR")
|
20
|
+
assert_equal "Ballard Rd. at Blair Rd.", translate_location("NRC ROAD BALLARD / BLAIR")
|
21
|
+
assert_equal "Blair Rd. at Meadowbrook Rd.", translate_location("BLAIR / MEADOWBROOK")
|
22
|
+
assert_equal "Broadview Ave. at Notre Dame High School", translate_location("BROADVIEW / É.S. NOTRE DAME")
|
23
|
+
assert_equal "Bridgestone Dr. at Windways Crescent", translate_location("BRIDGESTONE / WINDWAYS")
|
24
|
+
assert_equal "Eagleson Rd. at Cadence Gate", translate_location("EAGLESON / CADENCE")
|
25
|
+
assert_equal "Shirley’s Brook Dr. at Marconi Ave.", translate_location("SHIRLEY'S BROOK / MARCONI")
|
26
|
+
assert_equal "Stittsville Main St. at Bandelier Way", translate_location("MAIN STITTSVILLE / BANDELIER")
|
27
|
+
assert_equal "Cyrville Rd. at Maxime St.", translate_location("CYRVILLE / MAXIME")
|
28
|
+
assert_equal "Orléans Blvd. at Boyer Rd.", translate_location("ORLÉANS / BOYER")
|
29
|
+
assert_equal "Lees Ave. at Main St.", translate_location("LEES / MAIN")
|
30
|
+
assert_equal "Strandherd Dr. at Jockvale Rd.", translate_location("STRANDHERD / JOCKVALE")
|
31
|
+
assert_equal "Jeanne d’Arc Blvd. at Terry Fox Elementary School", translate_location("JEANNE D'ARC / ÉCOLE TERRY FOX SCHOOL")
|
32
|
+
assert_equal "Promenade Ave. at Terrasses de la Chaudière", translate_location("PROMENADE / TERRASSES DE LA CHAUDIÈRE")
|
33
|
+
assert_equal "Scott St. at Bayview Rd.", translate_location("SCOTT / BAYVIEW")
|
34
|
+
end
|
35
|
+
|
36
|
+
test "translate location lingo for intersections with back slashes" do
|
37
|
+
assert_equal "Ages Dr. at Hawthorne Rd.", translate_location("AGES \\ HAWTHORNE")
|
38
|
+
end
|
39
|
+
|
40
|
+
test "translate location lingo for stations" do
|
41
|
+
assert_equal "Bayshore Station", translate_location("BAYSHORE")
|
42
|
+
assert_equal "Baseline Station", translate_location("BASELINE")
|
43
|
+
assert_equal "Blair Station", translate_location("BLAIR")
|
44
|
+
end
|
45
|
+
|
46
|
+
test "translate location lingo for busway platforms at stations" do
|
47
|
+
assert_equal "Bayshore Station, Platform 1A", translate_location("BAYSHORE 1A")
|
48
|
+
assert_equal "Baseline Station, Platform 1E", translate_location("BASELINE 1E")
|
49
|
+
assert_equal "Lebreton Station, Platform 1A", translate_location("LEBRETON 1A")
|
50
|
+
assert_equal "St. Laurent Station, Platform 2A", translate_location("ST LAURENT 2A")
|
51
|
+
assert_equal "Tunney’s Pasture Station, Platform 1A", translate_location("TUNNEY'S PASTURE 1A")
|
52
|
+
end
|
53
|
+
|
54
|
+
test "translate location lingo for busway platforms at landmarks" do
|
55
|
+
assert_equal "Rideau Centre, Platform 3A", translate_location("RIDEAU 3A")
|
56
|
+
assert_equal "Rideau Centre, Platform 4A", translate_location("RIDEAU 4A")
|
57
|
+
end
|
58
|
+
|
59
|
+
test "translate location lingo for train platforms" do
|
60
|
+
assert_equal "Bayview Station, O-Train Platform", translate_platform("O-TRAIN BAYVIEW")
|
61
|
+
assert_equal "Carleton Station, Southbound Platform", translate_platform("O-TRAIN CARLETON S.")
|
62
|
+
assert_equal "Carleton Station, Northbound Platform", translate_platform("O-TRAIN CARLETON N.")
|
63
|
+
end
|
64
|
+
|
65
|
+
test "translate landmarks" do
|
66
|
+
assert_equal "Colonnade Rd. at OC Transpo Garage", translate_location("MERIVALE GARAGE / GARAGE MERIVALE")
|
67
|
+
assert_equal "Colonnade Rd. at OC Transpo Garage", translate_location("COLONNADE / GARAGE O.C. TRANSPO GARAGE")
|
68
|
+
end
|
69
|
+
|
70
|
+
test "translate locations in hull" do
|
71
|
+
assert_equal "Rue Laurier at Rue Élisabeth-Bruyère", translate_location("LAURIER / ÉLISABETH-BRUYÈRE")
|
72
|
+
assert_equal "Boulevard Des Allumettières at Rue Laurier", translate_location("ALLUMETTIÈRES / LAURIER")
|
73
|
+
end
|
74
|
+
|
75
|
+
test "translate broken lingo" do
|
76
|
+
assert_equal "Tunney’s Pasture Station, Platform 4A", translate_location("TUNNEY'S PASTURE4A")
|
77
|
+
assert_equal "Heron Station, Platform 4A", translate_location("HERON 4A ")
|
78
|
+
assert_equal "Heron Rd. at Edge Hill Pl.", translate_location("HERON/EDGEHILL")
|
79
|
+
assert_equal "Dauphin Rd. at Hillcrest High School", translate_location("NODE4518")
|
80
|
+
assert_equal "Campus Ave. at Library Rd.", translate_location("CAMPUS / COMMONS")
|
81
|
+
end
|
82
|
+
|
83
|
+
test "recognize lingo that represents an address" do
|
84
|
+
assert address?("COVENTRY / AD. 360")
|
85
|
+
assert ! address?("SOMERSET O-W / BRONSON")
|
86
|
+
assert ! address?("BAYSHORE")
|
87
|
+
assert ! address?("BAYSHORE 1A")
|
88
|
+
end
|
89
|
+
|
90
|
+
test "recognize lingo that represents an intersection" do
|
91
|
+
assert intersection?("SOMERSET O-W / BRONSON")
|
92
|
+
assert ! intersection?("COVENTRY / AD. 360")
|
93
|
+
assert ! intersection?("BAYSHORE")
|
94
|
+
assert ! intersection?("BAYSHORE 1A")
|
95
|
+
end
|
96
|
+
|
97
|
+
test "recognize lingo that represents a platform" do
|
98
|
+
assert platform?("BAYSHORE 1A")
|
99
|
+
assert ! platform?("SOMERSET O-W / BRONSON")
|
100
|
+
assert ! platform?("COVENTRY / AD. 360")
|
101
|
+
assert ! platform?("BAYSHORE")
|
102
|
+
end
|
103
|
+
|
104
|
+
test "extract address parts from lingo" do
|
105
|
+
extracted = extract_address_from("COVENTRY / AD. 360")
|
106
|
+
assert_equal "360", extracted[:number]
|
107
|
+
assert_equal "COVENTRY", extracted[:street]
|
108
|
+
end
|
109
|
+
|
110
|
+
test "extract intersection parts from lingo" do
|
111
|
+
extracted = extract_intersection_from("SOMERSET O-W / BRONSON")
|
112
|
+
assert_equal "SOMERSET O-W", extracted.first
|
113
|
+
assert_equal "BRONSON", extracted.last
|
114
|
+
end
|
115
|
+
|
116
|
+
test "extract platform parts from lingo" do
|
117
|
+
extracted = extract_platform_from("BAYSHORE 1A")
|
118
|
+
assert_equal "BAYSHORE", extracted[:station]
|
119
|
+
assert_equal "1A", extracted[:platform]
|
120
|
+
end
|
121
|
+
|
122
|
+
test "extract platform parts from lingo with two word station name" do
|
123
|
+
extracted = extract_platform_from("BILLINGS BRIDGE 1A")
|
124
|
+
assert_equal "BILLINGS BRIDGE", extracted[:station]
|
125
|
+
assert_equal "1A", extracted[:platform]
|
126
|
+
end
|
127
|
+
|
128
|
+
test "extract platform parts from lingo with extra space" do
|
129
|
+
extracted = extract_platform_from("LEBRETON 1A")
|
130
|
+
assert_equal "LEBRETON", extracted[:station]
|
131
|
+
assert_equal "1A", extracted[:platform]
|
132
|
+
end
|
133
|
+
|
134
|
+
test "translate headsign lingo" do
|
135
|
+
assert_equal "AIRPORT", translate_headsign_message("AIRPORT / AéROPORT")
|
136
|
+
assert_equal "LOCAL NORTH", translate_headsign_message("LOCAL NORTH/NORD")
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "#{File.dirname(File.dirname(__FILE__))}/test_helper"
|
2
|
+
|
3
|
+
module OCTranspo
|
4
|
+
class MobileResourceMethodsTest < ActiveSupport::TestCase
|
5
|
+
|
6
|
+
include MobileResourceMethods
|
7
|
+
|
8
|
+
def date
|
9
|
+
@date ||= Date.parse("20090303")
|
10
|
+
end
|
11
|
+
|
12
|
+
test "extracting time from text on a specific date" do
|
13
|
+
assert_equal date.at('04:00'), extract_time_from("4:00 AM", :date => date)
|
14
|
+
assert_equal date.at('06:30'), extract_time_from("6:30 AM", :date => date)
|
15
|
+
assert_equal date.at('12:00'), extract_time_from("12:00 PM", :date => date)
|
16
|
+
assert_equal date.at('15:30'), extract_time_from("3:30 PM", :date => date)
|
17
|
+
assert_equal date.at('23:57'), extract_time_from("11:57 PM", :date => date)
|
18
|
+
assert_equal date.next.at('02:30'), extract_time_from("2:30 AM", :date => date)
|
19
|
+
assert_equal date.next.at('03:59'), extract_time_from("3:59 AM", :date => date)
|
20
|
+
end
|
21
|
+
|
22
|
+
test "extracting flags from text" do
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require "#{File.dirname(File.dirname(__FILE__))}/test_helper"
|
2
|
+
|
3
|
+
module OCTranspo
|
4
|
+
class MobileRouteDataTest < ActiveSupport::TestCase
|
5
|
+
|
6
|
+
def date
|
7
|
+
@date ||= Date.parse("20100323")
|
8
|
+
end
|
9
|
+
|
10
|
+
def setup
|
11
|
+
OCTranspo::MobileRouteData.use_fixtures!
|
12
|
+
end
|
13
|
+
|
14
|
+
def teardown
|
15
|
+
OCTranspo::MobileRouteData.reset!
|
16
|
+
end
|
17
|
+
|
18
|
+
test "find two sets of data for route 1" do
|
19
|
+
route_data = OCTranspo::MobileRouteData.find(1, :date => date)
|
20
|
+
assert_equal 2, route_data.size
|
21
|
+
|
22
|
+
assert_equal "1", route_data[0][:route]
|
23
|
+
assert_equal "OTTAWA-ROCKCLIFFE", route_data[0][:direction]
|
24
|
+
assert_equal "2", route_data[0][:direction_index]
|
25
|
+
assert_equal 67, route_data[0][:stops].size
|
26
|
+
|
27
|
+
assert_equal "1", route_data[1][:route]
|
28
|
+
assert_equal "SOUTH KEYS", route_data[1][:direction]
|
29
|
+
assert_equal "1", route_data[1][:direction_index]
|
30
|
+
assert_equal 66, route_data[1][:stops].size
|
31
|
+
end
|
32
|
+
|
33
|
+
test "find two sets of data for route 2" do
|
34
|
+
route_data = OCTranspo::MobileRouteData.find(2, :date => date)
|
35
|
+
assert_equal 2, route_data.size
|
36
|
+
|
37
|
+
assert_equal "2", route_data[0][:route]
|
38
|
+
assert_equal "BAYSHORE", route_data[0][:direction]
|
39
|
+
assert_equal "2", route_data[0][:direction_index]
|
40
|
+
assert_equal 65, route_data[0][:stops].size
|
41
|
+
|
42
|
+
assert_equal "2", route_data[1][:route]
|
43
|
+
assert_equal "DOWNTOWN / CENTRE-VILLE", route_data[1][:direction]
|
44
|
+
assert_equal "1", route_data[1][:direction_index]
|
45
|
+
assert_equal 61, route_data[1][:stops].size
|
46
|
+
end
|
47
|
+
|
48
|
+
test "find one sets of data for route 123" do
|
49
|
+
route_data = OCTranspo::MobileRouteData.find(123, :date => date)
|
50
|
+
assert_equal 1, route_data.size
|
51
|
+
|
52
|
+
assert_equal "123", route_data[0][:route]
|
53
|
+
assert_equal "GLOUCESTER N. & BLAIR", route_data[0][:direction]
|
54
|
+
assert_equal "1", route_data[0][:direction_index]
|
55
|
+
assert_equal 41, route_data[0][:stops].size
|
56
|
+
end
|
57
|
+
|
58
|
+
test "find first set of data for bus route 2" do
|
59
|
+
route_direction = OCTranspo::MobileRouteData.find_one_direction(:route => 2, :index => 0, :date => date)
|
60
|
+
|
61
|
+
assert route_direction, "route direction is nil"
|
62
|
+
|
63
|
+
assert_equal "2", route_direction[:route]
|
64
|
+
assert_equal "BAYSHORE", route_direction[:direction]
|
65
|
+
assert_equal "2", route_direction[:direction_index]
|
66
|
+
|
67
|
+
assert route_direction[:stops].all? {|stop| stop.is_a?(Hash) }, "Some stops aren’t hashes!"
|
68
|
+
|
69
|
+
first_stop = route_direction[:stops].first
|
70
|
+
assert_equal "RIDEAU 4A", first_stop[:name]
|
71
|
+
assert_equal "3009", first_stop[:number]
|
72
|
+
assert_equal "RIDEAU", first_stop[:station]
|
73
|
+
assert_equal "4A", first_stop[:platform]
|
74
|
+
|
75
|
+
second_stop = route_direction[:stops].second
|
76
|
+
assert_equal "WELLINGTON / METCALFE", second_stop[:name]
|
77
|
+
assert_equal "7691", second_stop[:number]
|
78
|
+
assert second_stop[:station].nil?
|
79
|
+
assert second_stop[:platform].nil?
|
80
|
+
|
81
|
+
last_stop = route_direction[:stops].last
|
82
|
+
assert_equal "BAYSHORE 3A", last_stop[:name]
|
83
|
+
assert_equal "3050", last_stop[:number]
|
84
|
+
assert_equal "BAYSHORE", last_stop[:station]
|
85
|
+
assert_equal "3A", last_stop[:platform]
|
86
|
+
end
|
87
|
+
|
88
|
+
test "find opposite set of data for bus route 2" do
|
89
|
+
route_direction = OCTranspo::MobileRouteData.find_one_direction(:route => 2, :index => 1, :date => date)
|
90
|
+
|
91
|
+
assert_equal "2", route_direction[:route]
|
92
|
+
assert_equal "DOWNTOWN / CENTRE-VILLE", route_direction[:direction]
|
93
|
+
assert_equal "1", route_direction[:direction_index]
|
94
|
+
|
95
|
+
assert route_direction[:stops].all? {|stop| stop.is_a?(Hash) }, "Some stops aren’t hashes!"
|
96
|
+
|
97
|
+
first_stop = route_direction[:stops].first
|
98
|
+
assert_equal "3050", first_stop[:number]
|
99
|
+
assert_equal "BAYSHORE 4B", first_stop[:name]
|
100
|
+
assert_equal "BAYSHORE", first_stop[:station]
|
101
|
+
assert_equal "4B", first_stop[:platform]
|
102
|
+
|
103
|
+
last_stop = route_direction[:stops].last
|
104
|
+
assert_equal "3009", last_stop[:number]
|
105
|
+
assert_equal "RIDEAU 3A", last_stop[:name]
|
106
|
+
assert_equal "RIDEAU", last_stop[:station]
|
107
|
+
assert_equal "3A", last_stop[:platform]
|
108
|
+
end
|
109
|
+
|
110
|
+
test "url_for" do
|
111
|
+
expected = "http://www.octranspo.com/mobileweb/jnot/post.routelist.schedules.oci?rangeIndex=5&day=20100323&route=2&routeIndex=0"
|
112
|
+
criteria = {:route => 2, :index => 0, :date => date}
|
113
|
+
assert_equal expected, OCTranspo::MobileRouteData.url_for(criteria)
|
114
|
+
criteria = {:route => 2, :date => date}
|
115
|
+
assert_equal expected, OCTranspo::MobileRouteData.url_for(criteria)
|
116
|
+
end
|
117
|
+
|
118
|
+
test "url_for with index option" do
|
119
|
+
expected = "http://www.octranspo.com/mobileweb/jnot/post.routelist.schedules.oci?rangeIndex=5&day=20100323&route=2&routeIndex=1"
|
120
|
+
criteria = {:route => 2, :index => 1, :date => date}
|
121
|
+
assert_equal expected, OCTranspo::MobileRouteData.url_for(criteria)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|