metar-parser 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/locales/en.yml ADDED
@@ -0,0 +1,111 @@
1
+ # encoding: utf8
2
+ en:
3
+ date:
4
+ formats:
5
+ default: '%d/%m/%Y'
6
+ comparison:
7
+ more_than: more than
8
+ less_than: less than
9
+ units:
10
+ pressure:
11
+ bar:
12
+ full: bar
13
+ metar:
14
+ altitude:
15
+ at: at
16
+ distance:
17
+ unknown: unknown
18
+ sky_conditions:
19
+ clear skies: clear skies
20
+ broken: broken cloud
21
+ few: few clouds
22
+ scattered: scattered cloud
23
+ overcast: overcast
24
+ runway_visible_range:
25
+ runway: runway
26
+ from: from
27
+ to: to
28
+ weather:
29
+ mist: mist
30
+ dust: dust
31
+ blowing dust: blowing dust
32
+ low drifting dust: low drifting dust
33
+ nearby blowing dust: nearby blowing dust
34
+ heavy drizzle: heavy drizzle
35
+ light drizzle: light drizzle
36
+ heavy freezing drizzle: heavy freezing drizzle
37
+ light freezing drizzle: light freezing drizzle
38
+ fog: fog
39
+ patches of fog: patches of fog
40
+ freezing fog: freezing fog
41
+ shallow fog: shallow fog
42
+ partial fog: partial fog
43
+ nearby fog: nearby fog
44
+ smoke: smoke
45
+ hail: hail
46
+ heavy shower of hail: heavy shower of hail
47
+ light shower of hail: light shower of hail
48
+ heavy shower of small hail: heavy shower of small hail
49
+ light shower of small hail: light shower of small hail
50
+ haze: haze
51
+ ice crystals: ice crystals
52
+ heavy ice pellets: heavy ice pellets
53
+ light ice pellets: light ice pellets
54
+ dust whirls: dust whirls
55
+ nearby dust whirls: nearby dust whirls
56
+ spray: spray
57
+ rain: rain
58
+ heavy rain: heavy rain
59
+ light rain: light rain
60
+ heavy shower of rain: heavy shower of rain
61
+ light shower of rain: light shower of rain
62
+ heavy freezing rain: heavy freezing rain
63
+ light freezing rain: light freezing rain
64
+ sand: sand
65
+ blowing sand: blowing sand
66
+ low drifting sand: low drifting sand
67
+ nearby blowing sand: nearby blowing sand
68
+ nearby shower: nearby shower
69
+ snow: snow
70
+ heavy snow: heavy snow
71
+ light snow: light snow
72
+ heavy shower of snow: heavy shower of snow
73
+ light shower of snow: light shower of snow
74
+ blowing snow: blowing snow
75
+ low drifting snow: low drifting snow
76
+ nearby blowing snow: nearby blowing snow
77
+ heavy snow grains: heavy snow grains
78
+ light snow grains: light snow grains
79
+ snow and rain: snow and rain
80
+ squall: squall
81
+ unknown phenomenon: unknown phenomenon
82
+ heavy freezing unknown phenomenon: heavy freezing unknown phenomenon
83
+ light freezing unknown phenomenon: light freezing unknown phenomenon
84
+ heavy shower of freezing unknown phenomenon: heavy shower of freezing unknown phenomenon
85
+ light shower of freezing unknown phenomenon: light shower of freezing unknown phenomenon
86
+ volcanic ash: volcanic ash
87
+ nearby volcanic ash: nearby volcanic ash
88
+ funnel cloud: funnel cloud
89
+ nearby funnel cloud: nearby funnel cloud
90
+ sand storm: sand storm
91
+ heavy sand storm: heavy sand storm
92
+ light sand storm: light sand storm
93
+ nearby sand storm: nearby sand storm
94
+ dust storm: dust storm
95
+ heavy dust storm: heavy dust storm
96
+ light dust storm: light dust storm
97
+ nearby dust storm: nearby dust storm
98
+ thunderstorm: thunderstorm
99
+ nearby thunderstorm: nearby thunderstorm
100
+ heavy thunderstorm and hail: heavy thunderstorm and hail
101
+ light thunderstorm and hail: light thunderstorm and hail
102
+ heavy thunderstorm and small hail: heavy thunderstorm and small hail
103
+ light thunderstorm and small hail: light thunderstorm and small hail
104
+ heavy thunderstorm and rain: heavy thunderstorm and rain
105
+ light thunderstorm and rain: light thunderstorm and rain
106
+ heavy thunderstorm and snow: heavy thunderstorm and snow
107
+ light thunderstorm and snow: light thunderstorm and snow
108
+ heavy thunderstorm and unknown phenomenon: heavy thunderstorm and unknown phenomenon
109
+ light thunderstorm and unknown phenomenon: light thunderstorm and unknown phenomenon
110
+ heavy unknown phenomenon: heavy unknown phenomenon
111
+ light unknown phenomenon: light unknown phenomenon
data/locales/it.yml ADDED
@@ -0,0 +1,111 @@
1
+ # encoding: utf8
2
+ it:
3
+ date:
4
+ formats:
5
+ default: '%d/%m/%Y'
6
+ comparison:
7
+ more_than: piú di
8
+ less_than: meno di
9
+ units:
10
+ pressure:
11
+ bar:
12
+ full: bar
13
+ metar:
14
+ altitude:
15
+ at: a
16
+ distance:
17
+ unknown: sconosciuto
18
+ sky_conditions:
19
+ clear skies: cielo sereno
20
+ broken: nuvolosità parziale
21
+ few: poche nuvole
22
+ scattered: nuvole sparse
23
+ overcast: chiuso
24
+ runway_visible_range:
25
+ runway: pista
26
+ from: da
27
+ to: a
28
+ weather:
29
+ mist: foschia
30
+ dust: polvere
31
+ blowing dust: polviscolo
32
+ low drifting dust: deriva bassa di polviscolo # ?
33
+ nearby blowing dust: deriva vicina di polviscolo # ?
34
+ heavy drizzle: pioggerellina fitta
35
+ light drizzle: pioggerellina rada
36
+ heavy freezing drizzle: pioggerellina ghiacciata pesante
37
+ light freezing drizzle: pioggerellina ghiacciata leggera
38
+ fog: nebbia
39
+ patches of fog: nebbia a banchi
40
+ freezing fog: nebbia ghiacciata
41
+ shallow fog: nebbia bassa
42
+ partial fog: nebbia parziale
43
+ nearby fog: nebbia vicina
44
+ smoke: fumo
45
+ hail: grandine
46
+ heavy shower of hail: grandinata intensa
47
+ light shower of hail: grandinata leggera
48
+ heavy shower of small hail: grandinata fine intensa
49
+ light shower of small hail: grandinata fine leggera
50
+ haze: foschia
51
+ ice crystals: cristalli di ghiaccio
52
+ heavy ice pellets: caduta intensa di cristalli di ghiaccio
53
+ light ice pellets: caduta leggera di cristalli di ghiaccio
54
+ dust whirls: vortici di polvere
55
+ nearby dust whirls: vortici di polvere vicini
56
+ spray: "spruzzi d'aqua"
57
+ rain: pioggia
58
+ heavy rain: pioggia pesante
59
+ light rain: pioggia leggera
60
+ heavy shower of rain: acquazzone intenso
61
+ light shower of rain: acquazzone leggero
62
+ heavy freezing rain: pioggia ghiacciata pesante
63
+ light freezing rain: pioggia ghiacciata leggera
64
+ sand: sabbia
65
+ blowing sand: sabbia e vento
66
+ low drifting sand: deriva bassa di sabbia
67
+ nearby blowing sand: deriva di sabbia vicina
68
+ nearby shower: acquazzone vicino
69
+ snow: neve
70
+ heavy snow: neve pesante
71
+ light snow: neve leggera
72
+ heavy shower of snow: nevicata pesante
73
+ light shower of snow: nevicata leggera
74
+ blowing snow: neve portata dal vento
75
+ low drifting snow: deriva di neve
76
+ nearby blowing snow: neve portata dal vento vicino
77
+ heavy snow grains: caudta intensa di granelli di neve
78
+ light snow grains: caduta leggera di granelli di neve
79
+ snow and rain: neve mista a pioggia
80
+ squall: bufera
81
+ unknown phenomenon: fenomeno sconosciuto
82
+ heavy freezing unknown phenomenon: fenomeno ghiacciato sconosciuto pesante
83
+ light freezing unknown phenomenon: fenomeno ghiacciato sconosciuto leggero
84
+ heavy shower of freezing unknown phenomenon: scroscio pesante ghiacciata di fenomeno sconosciuto
85
+ light shower of freezing unknown phenomenon: scroscio leggero ghiacciata di fenomeno sconosciuto
86
+ volcanic ash: cenere volcanica
87
+ nearby volcanic ash: cenere volcanica vicina
88
+ funnel cloud: nube a imbuto
89
+ nearby funnel cloud: nube a imbuto vicina
90
+ sand storm: tempesta di sabbia
91
+ heavy sand storm: tempesta di sabbia pesante
92
+ light sand storm: tempesta di sabbia leggera
93
+ nearby sand storm: tempesta di sabbia vicina
94
+ dust storm: tempesta di polvere
95
+ heavy dust storm: tempesta di polvere pesante
96
+ light dust storm: tempesta di polvere leggera
97
+ nearby dust storm: tempesta di polvere vicina
98
+ thunderstorm: temporale
99
+ nearby thunderstorm: temporale vicino
100
+ heavy thunderstorm and hail: temporale con grandine intenso
101
+ light thunderstorm and hail: temporale con grandine leggero
102
+ heavy thunderstorm and small hail: temporale con grandine fine intenso
103
+ light thunderstorm and small hail: temporale con grandine fine leggero
104
+ heavy thunderstorm and rain: temporale con pioggia intensa
105
+ light thunderstorm and rain: temporale con pioggia leggera
106
+ heavy thunderstorm and snow: temporale con neve intensa
107
+ light thunderstorm and snow: temporale con neve leggera
108
+ heavy thunderstorm and unknown phenomenon: temporale con fenomeno sconosciuto intenso
109
+ light thunderstorm and unknown phenomenon: temporale con fenomeno sconosciuto leggero
110
+ heavy unknown phenomenon: fenomeno sconosciuto intenso
111
+ light unknown phenomenon: fenomeno sconosciuto leggero
data/test/all_tests.rb ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ Dir['unit/*test.rb'].each do |test_file|
4
+ puts test_file
5
+ require File.join(File.dirname(__FILE__), test_file)
6
+ end
@@ -0,0 +1,14 @@
1
+ require 'rubygems' if RUBY_VERSION < '1.9'
2
+ require File.join(File.expand_path(File.dirname(__FILE__) + '/../lib'), 'metar')
3
+
4
+ Metar::Station.load_local
5
+
6
+ RAW_EXAMPLE = "2010/02/06 15:20\nLIRQ 061520Z 01007KT 350V050 9999 SCT035 BKN080 08/02 Q1005"
7
+ # Use a fixed string for testing
8
+ Metar::Raw.instance_eval do
9
+ def fetch(cccc)
10
+ RAW_EXAMPLE
11
+ end
12
+ end
13
+
14
+ require 'test/unit'
@@ -0,0 +1,183 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require File.dirname(__FILE__) + '/../metar_test_helper'
5
+
6
+ class TestMetarData < Test::Unit::TestCase
7
+
8
+ def setup
9
+ I18n.locale = :en
10
+ end
11
+
12
+ def test_m9t_translations_available
13
+ assert_equal('10 kilometers', M9t::Distance.new(10000, {:units => :kilometers, :precision => 0}).to_s)
14
+ end
15
+
16
+ # Speed
17
+ def test_speed_parse_blank_gives_nil
18
+ speed = Metar::Speed.parse('')
19
+ assert_nil(speed)
20
+ end
21
+
22
+ def test_class_options_set
23
+ assert_not_nil(Metar::Speed.options)
24
+ end
25
+
26
+ def test_speed_parse_default_unit
27
+ speed = Metar::Speed.parse('12')
28
+ assert_equal(12, speed.to_kilometers_per_hour)
29
+ assert_equal(:kilometers_per_hour, speed.options[:units])
30
+ end
31
+
32
+ def test_speed_parse_kilometers_per_hour
33
+ speed = Metar::Speed.parse('12KMH')
34
+ assert_equal(12, speed.to_kilometers_per_hour)
35
+ assert_equal(:kilometers_per_hour, speed.options[:units])
36
+ end
37
+
38
+ def test_speed_parse_knots
39
+ speed = Metar::Speed.parse('12KT')
40
+ assert_equal(:knots, speed.options[:units])
41
+ end
42
+
43
+ def test_speed_parse_meters_per_second
44
+ speed = Metar::Speed.parse('12MPS')
45
+ assert_equal(:meters_per_second, speed.options[:units])
46
+ end
47
+
48
+ # Temperature
49
+ def test_temperature_parse_blank_gives_nil
50
+ temperature = Metar::Temperature.parse('')
51
+ assert_nil(temperature)
52
+ end
53
+
54
+ def test_temperature_parse_incorrect_gives_nil
55
+ temperature = Metar::Temperature.parse('XYZ')
56
+ assert_nil(temperature)
57
+ end
58
+
59
+ def test_temperature_parse_positive
60
+ temperature = Metar::Temperature.parse('12')
61
+ assert_equal(12, temperature.value)
62
+ end
63
+
64
+ def test_temperature_parse_negative
65
+ temperature = Metar::Temperature.parse('M12')
66
+ assert_equal(-12, temperature.value)
67
+ end
68
+
69
+ # Distance
70
+ def test_distance_nil
71
+ distance = Metar::Distance.new
72
+ I18n.locale = :en
73
+ assert_equal('unknown', distance.to_s)
74
+ I18n.locale = :it
75
+ assert_equal('sconosciuto', distance.to_s)
76
+ end
77
+
78
+ # Wind
79
+ def test_wind
80
+ wind = Metar::Wind.parse('24006KT')
81
+ assert_equal(240, wind.direction.value)
82
+ assert_equal(6, wind.speed.to_knots)
83
+ assert_equal(:knots, wind.speed.options[:units])
84
+ end
85
+
86
+ # VariableWind
87
+ def test_variable_wind
88
+ variable_wind = Metar::VariableWind.parse('350V050')
89
+ assert_equal(350, variable_wind.direction1.value)
90
+ assert_equal(50, variable_wind.direction2.value)
91
+ end
92
+
93
+ # Visibility
94
+ def test_visibility_parse_blank
95
+ visibility = Metar::Visibility.parse('')
96
+ assert_nil(visibility)
97
+ end
98
+
99
+ def test_visibility_parse_comparator_defaults_to_nil
100
+ visibility = Metar::Visibility.parse('0200NDV')
101
+ assert_nil(visibility.comparator)
102
+ end
103
+
104
+ def test_visibility_parse_9999
105
+ visibility = Metar::Visibility.parse('9999')
106
+ assert_equal('more than 10km', visibility.to_s)
107
+ I18n.locale = :it
108
+ assert_equal('piú di 10km', visibility.to_s)
109
+ end
110
+
111
+ def test_visibility_parse_ndv
112
+ visibility = Metar::Visibility.parse('0200NDV')
113
+ assert_equal(200, visibility.distance.value)
114
+ assert_nil(visibility.direction)
115
+ end
116
+
117
+ def test_visibility_parse_us_fractions_1_4
118
+ visibility = Metar::Visibility.parse('1/4SM')
119
+ assert_equal(M9t::Distance.miles(0.25).value, visibility.distance.value)
120
+ assert_equal(:miles, visibility.distance.options[:units])
121
+ end
122
+
123
+ def test_visibility_parse_us_fractions_2_1_2
124
+ visibility = Metar::Visibility.parse('2 1/2SM')
125
+ assert_equal(M9t::Distance.miles(2.5).value, visibility.distance.value)
126
+ assert_equal(:miles, visibility.distance.options[:units])
127
+ end
128
+
129
+ def test_visibility_parse_kilometers
130
+ visibility = Metar::Visibility.parse('5KM')
131
+ assert_equal(5000.0, visibility.distance.value)
132
+ assert_equal(:kilometers, visibility.distance.options[:units])
133
+ end
134
+
135
+ def test_visibility_parse_compass
136
+ visibility = Metar::Visibility.parse('5NE')
137
+ assert_equal(5000.0, visibility.distance.value)
138
+ assert_equal(:kilometers, visibility.distance.options[:units])
139
+ assert_equal(45.0, visibility.direction.value)
140
+ visibility.distance.options[:units] = :kilometers
141
+ visibility.distance.options[:abbreviated] = true
142
+ visibility.distance.options[:precision] = 0
143
+ visibility.direction.options[:units] = :compass
144
+ assert_equal('5km NE', visibility.to_s)
145
+ end
146
+
147
+ # RunwayVisibleRange
148
+ def test_runway_visible_range
149
+ runway_visible_range = Metar::RunwayVisibleRange.parse('R12/1000N')
150
+ assert_equal('12', runway_visible_range.designator)
151
+ assert_equal(1000, runway_visible_range.visibility1.distance.value)
152
+ assert_equal(:no_change, runway_visible_range.tendency)
153
+ end
154
+
155
+ def test_runway_visible_range_variable
156
+ runway_visible_range = Metar::RunwayVisibleRange.parse('R10R/1600VP6000FT')
157
+ assert_equal('10R', runway_visible_range.designator)
158
+ assert_equal(1600, runway_visible_range.visibility1.distance.to_feet)
159
+ assert_equal(6000, runway_visible_range.visibility2.distance.to_feet)
160
+ end
161
+
162
+ # WeatherPhenomenon
163
+ def test_weather_phenomenon_i18n
164
+ freezing_rain = Metar::WeatherPhenomenon.parse('FZFG')
165
+ assert_equal('freezing fog', freezing_rain.to_s)
166
+ I18n.locale = :it
167
+ assert_equal('nebbia ghiacciata', freezing_rain.to_s)
168
+ end
169
+
170
+ # SkyCondition
171
+ def test_sky_condition
172
+ sky_condition = Metar::SkyCondition.parse('BKN016')
173
+ assert_equal('broken', sky_condition.quantity)
174
+ assert_equal(480, sky_condition.height.value)
175
+ end
176
+
177
+ # VerticalVisibility
178
+ def test_vertical_visibility
179
+ vertical_visibility = Metar::VerticalVisibility.parse('VV001')
180
+ assert_equal(30, vertical_visibility.value)
181
+ end
182
+
183
+ end
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require File.dirname(__FILE__) + '/../metar_test_helper'
5
+
6
+ class TestMetarParser < Test::Unit::TestCase
7
+
8
+ def setup
9
+ end
10
+
11
+ def test_new
12
+ raw = Metar::Raw.new('PAIL', "2010/02/06 16:10\nPAIL 061610Z 24006KT 1 3/4SM -SN BKN016 OVC030 M17/M20 A2910 RMK AO2 P0000")
13
+ assert_nothing_thrown do
14
+ report = Metar::Parser.new(raw)
15
+ end
16
+ end
17
+
18
+ def test_date
19
+ parser = setup_parser('PAIL', "2010/02/06 16:10\nPAIL 061610Z 24006KT 1 3/4SM -SN BKN016 OVC030 M17/M20 A2910 RMK AO2 P0000")
20
+ assert_equal(Date.new(2010, 2, 6), parser.date)
21
+ end
22
+
23
+ def test_wind
24
+ parser = setup_parser('PAIL', "2010/02/06 16:10\nPAIL 061610Z 24006KT 1 3/4SM -SN BKN016 OVC030 M17/M20 A2910 RMK AO2 P0000")
25
+ assert_in_delta(240, parser.wind.direction.value, 0.0001)
26
+ assert_in_delta(6, parser.wind.speed.to_knots, 0.0001)
27
+ end
28
+
29
+ def test_variable_wind
30
+ parser = setup_parser('LIRQ', "2010/02/06 15:20\nLIRQ 061520Z 01007KT 350V050 9999 SCT035 BKN080 08/02 Q1005")
31
+ assert_in_delta(350, parser.variable_wind.direction1.value, 0.0001)
32
+ assert_in_delta(50, parser.variable_wind.direction2.value, 0.0001)
33
+ end
34
+
35
+ def test_visibility_miles_and_fractions
36
+ parser = setup_parser('PAIL', "2010/02/06 16:10\nPAIL 061610Z 24006KT 1 3/4SM -SN BKN016 OVC030 M17/M20 A2910 RMK AO2 P0000")
37
+ assert_in_delta(1.75, parser.visibility.distance.to_miles, 0.01)
38
+ assert_equal(:miles, parser.visibility.distance.options[:units])
39
+ end
40
+
41
+ def test_runway_visible_range
42
+ parser = setup_parser('ESSB', "2010/02/15 10:20\nESSB 151020Z 26003KT 2000 R12/1000N R30/1500N VV002 M07/M07 Q1013 1271//55")
43
+ assert_equal(2, parser.runway_visible_range.length)
44
+ assert_equal('12', parser.runway_visible_range[0].designator)
45
+ assert_equal(1000, parser.runway_visible_range[0].visibility1.distance.value)
46
+ assert_equal(:no_change, parser.runway_visible_range[0].tendency)
47
+ end
48
+
49
+ def test_runway_visible_range_variable
50
+ parser = setup_parser('KPDX', "2010/02/15 11:08\nKPDX 151108Z 11006KT 1/4SM R10R/1600VP6000FT FG OVC002 05/05 A3022 RMK AO2")
51
+ assert_equal(1600.0, parser.runway_visible_range[0].visibility1.distance.to_feet)
52
+ assert_equal(:feet, parser.runway_visible_range[0].visibility1.distance.options[:units])
53
+ assert_equal(6000.0, parser.runway_visible_range[0].visibility2.distance.to_feet)
54
+ assert_equal(:feet, parser.runway_visible_range[0].visibility2.distance.options[:units])
55
+ end
56
+
57
+ def test_present_weather
58
+ parser = setup_parser('PAIL', "2010/02/06 16:10\nPAIL 061610Z 24006KT 1 3/4SM -SN BKN016 OVC030 M17/M20 A2910 RMK AO2 P0000")
59
+ assert_equal(1, parser.present_weather.length)
60
+ assert_equal('light', parser.present_weather[0].modifier)
61
+ assert_equal('snow', parser.present_weather[0].phenomenon)
62
+ end
63
+
64
+ def test_sky_conditions
65
+ parser = setup_parser('PAIL', "2010/02/06 16:10\nPAIL 061610Z 24006KT 1 3/4SM -SN BKN016 OVC030 M17/M20 A2910 RMK AO2 P0000")
66
+ assert_equal(2, parser.sky_conditions.length)
67
+ assert_equal('broken', parser.sky_conditions[0].quantity)
68
+ assert_equal(480, parser.sky_conditions[0].height.value)
69
+ assert_equal('overcast', parser.sky_conditions[1].quantity)
70
+ assert_equal(900, parser.sky_conditions[1].height.value)
71
+ end
72
+
73
+ def test_vertical_visibility
74
+ parser = setup_parser('CYXS', "2010/02/15 10:34\nCYXS 151034Z AUTO 09003KT 1/8SM FZFG VV001 M03/M03 A3019 RMK SLP263 ICG")
75
+ assert_equal(30, parser.vertical_visibility.value)
76
+ end
77
+
78
+ def test_temperature
79
+ parser = setup_parser('PAIL', "2010/02/06 16:10\nPAIL 061610Z 24006KT 1 3/4SM -SN BKN016 OVC030 M17/M20 A2910 RMK AO2 P0000")
80
+ assert_equal(-17, parser.temperature.value)
81
+ end
82
+
83
+ def test_dew_point
84
+ parser = setup_parser('PAIL', "2010/02/06 16:10\nPAIL 061610Z 24006KT 1 3/4SM -SN BKN016 OVC030 M17/M20 A2910 RMK AO2 P0000")
85
+ assert_equal(-20, parser.dew_point.value)
86
+ end
87
+
88
+ def test_sea_level_pressure
89
+ parser = setup_parser('PAIL', "2010/02/06 16:10\nPAIL 061610Z 24006KT 1 3/4SM -SN BKN016 OVC030 M17/M20 A2910 RMK AO2 P0000")
90
+ assert_equal(29.10, parser.sea_level_pressure.to_inches_of_mercury)
91
+ assert_equal(:bar, parser.sea_level_pressure.options[:units])
92
+ end
93
+
94
+ private
95
+
96
+ def setup_parser(cccc, metar)
97
+ raw = Metar::Raw.new(cccc, metar)
98
+ Metar::Parser.new(raw)
99
+ end
100
+
101
+ end
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../metar_test_helper'
4
+
5
+ class TestMetarRaw < Test::Unit::TestCase
6
+
7
+ def setup
8
+ end
9
+
10
+ def test_fetch
11
+ raw = Metar::Raw.fetch('LIRQ')
12
+ assert_instance_of(String, raw)
13
+ end
14
+
15
+ def test_new
16
+ assert_nothing_thrown do
17
+ raw = Metar::Raw.new('LIRQ')
18
+ end
19
+ end
20
+
21
+ def test_attributes
22
+ raw = Metar::Raw.new('LIRQ')
23
+ assert_equal('LIRQ', raw.cccc)
24
+ assert_instance_of(Time, raw.time)
25
+ assert_instance_of(String, raw.metar)
26
+ end
27
+
28
+ end
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require File.dirname(__FILE__) + '/../metar_test_helper'
5
+
6
+ class TestMetarReport < Test::Unit::TestCase
7
+ def setup
8
+ I18n.locale = :en
9
+ end
10
+
11
+ def test_date
12
+ report = setup_report('LIRQ', "2010/02/06 15:20\nLIRQ 061520Z 01007KT 350V050 9999 SCT035 BKN080 08/02 Q1005")
13
+ assert_equal('06/02/2010', report.date)
14
+ end
15
+
16
+ def test_time
17
+ report = setup_report('LIRQ', "2010/02/06 15:20\nLIRQ 061520Z 01007KT 350V050 9999 SCT035 BKN080 08/02 Q1005")
18
+ assert_equal('15:20', report.time)
19
+ end
20
+
21
+ def test_wind_knots
22
+ report = setup_report('LIRQ', "2010/02/06 15:20\nLIRQ 061520Z 01007KT 350V050 9999 SCT035 BKN080 08/02 Q1005")
23
+ assert_equal('10° 7 knots', report.wind)
24
+ I18n.locale = :it
25
+ assert_equal('10° 7 nodi', report.wind)
26
+ end
27
+
28
+ def test_variable_wind
29
+ report = setup_report('LIRQ', "2010/02/06 15:20\nLIRQ 061520Z 01007KT 350V050 9999 SCT035 BKN080 08/02 Q1005")
30
+ assert_equal('350 degrees - 50 degrees', report.variable_wind)
31
+ end
32
+
33
+ def test_visibility
34
+ report = setup_report('LIRQ', "2010/02/06 15:20\nLIRQ 061520Z 01007KT 350V050 9999 SCT035 BKN080 08/02 Q1005")
35
+ assert_equal('more than 10km', report.visibility)
36
+ end
37
+
38
+ def test_runway_visible_range
39
+ report = setup_report('ESSB', "2010/02/15 10:20\nESSB 151020Z 26003KT 2000 R12/1000N R30/1500N VV002 M07/M07 Q1013 1271//55")
40
+ assert_equal('runway 12: 1000m, runway 30: 1500m', report.runway_visible_range)
41
+ end
42
+
43
+ def test_runway_visible_range_variable
44
+ report = setup_report('KPDX', "2010/02/15 11:08\nKPDX 151108Z 11006KT 1/4SM R10R/1600VP6000FT FG OVC002 05/05 A3022 RMK AO2")
45
+ assert_equal('runway 10R: from 1600ft to more than 6000ft', report.runway_visible_range)
46
+ end
47
+
48
+ def test_present_weather
49
+ report = setup_report('DAAS', "2010/02/15 10:00\nDAAS 151000Z 16012KT 9999 -RA FEW010 BKN026 06/05 Q1006")
50
+ assert_equal('light rain', report.present_weather)
51
+ I18n.locale = :it
52
+ assert_equal('pioggia leggera', report.present_weather)
53
+ end
54
+
55
+ def test_sky_conditions
56
+ report = setup_report('LIRQ', "2010/02/06 15:20\nLIRQ 061520Z 01007KT 350V050 9999 SCT035 BKN080 08/02 Q1005")
57
+ I18n.locale = :en
58
+ assert_equal('scattered cloud at 1050m, broken cloud at 2400m', report.sky_conditions)
59
+ I18n.locale = :it
60
+ assert_equal('nuvole sparse a 1050m, nuvolosità parziale a 2400m', report.sky_conditions)
61
+ end
62
+
63
+ def test_vertical_visibility
64
+ report = setup_report('CYXS', "2010/02/15 10:34\nCYXS 151034Z AUTO 09003KT 1/8SM FZFG VV001 M03/M03 A3019 RMK SLP263 ICG")
65
+ assert_equal('30m', report.vertical_visibility)
66
+ end
67
+
68
+ def test_temperature
69
+ report = setup_report('LIRQ', "2010/02/06 15:20\nLIRQ 061520Z 01007KT 350V050 9999 SCT035 BKN080 08/02 Q1005")
70
+ assert_equal('8°C', report.temperature)
71
+ end
72
+
73
+ def test_dew_point
74
+ report = setup_report('LIRQ', "2010/02/06 15:20\nLIRQ 061520Z 01007KT 350V050 9999 SCT035 BKN080 08/02 Q1005")
75
+ assert_equal('2°C', report.dew_point)
76
+ end
77
+
78
+ def test_sea_level_pressure
79
+ report = setup_report('LIRQ', "2010/02/06 15:20\nLIRQ 061520Z 01007KT 350V050 9999 SCT035 BKN080 08/02 Q1005")
80
+ assert_equal('1.00500 bar', report.sea_level_pressure)
81
+ end
82
+
83
+ private
84
+
85
+ def setup_report(cccc, metar)
86
+ raw = Metar::Raw.new(cccc, metar)
87
+ parser = Metar::Parser.new(raw)
88
+ Metar::Report.new(parser)
89
+ end
90
+
91
+ end