aixm 0.3.5 → 0.3.6

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.
@@ -0,0 +1,260 @@
1
+ require_relative '../../../spec_helper'
2
+
3
+ describe AIXM::Component::FATO do
4
+ subject do
5
+ AIXM::Factory.airport.fatos.first
6
+ end
7
+
8
+ describe :name= do
9
+ it "fails on invalid values" do
10
+ [nil, :foobar, 123].wont_be_written_to subject, :name
11
+ end
12
+
13
+ it "upcases and transcodes valid values" do
14
+ subject.tap { |s| s.name = 'h1' }.name.must_equal 'H1'
15
+ end
16
+ end
17
+
18
+ describe :length= do
19
+ it "fails on invalid values" do
20
+ [:foobar, 0, 1, AIXM.d(0, :m)].wont_be_written_to subject, :length
21
+ end
22
+
23
+ it "accepts nil value" do
24
+ [nil].must_be_written_to subject, :length
25
+ end
26
+ end
27
+
28
+ describe :width= do
29
+ it "fails on invalid values" do
30
+ [:foobar, 0, 1, AIXM.d(0, :m)].wont_be_written_to subject, :width
31
+ end
32
+
33
+ it "accepts nil value" do
34
+ [nil].must_be_written_to subject, :width
35
+ end
36
+ end
37
+
38
+ describe :marking= do
39
+ macro :marking
40
+ end
41
+
42
+ describe :profile= do
43
+ it "accepts nil value" do
44
+ [nil].must_be_written_to subject, :profile
45
+ end
46
+
47
+ it "stringifies valid values" do
48
+ subject.tap { |s| s.profile = 'foobar' }.profile.must_equal 'foobar'
49
+ subject.tap { |s| s.profile = 123 }.profile.must_equal '123'
50
+ end
51
+ end
52
+
53
+ describe :status= do
54
+ it "fails on invalid values" do
55
+ [:foobar, 123].wont_be_written_to subject, :status
56
+ end
57
+
58
+ it "accepts nil value" do
59
+ [nil].must_be_written_to subject, :status
60
+ end
61
+
62
+ it "looks up valid values" do
63
+ subject.tap { |s| s.status = :closed }.status.must_equal :closed
64
+ subject.tap { |s| s.status = :SPOWER }.status.must_equal :secondary_power
65
+ end
66
+ end
67
+
68
+ describe :remarks= do
69
+ macro :remarks
70
+ end
71
+
72
+ describe :xml= do
73
+ it "builds correct complete OFMX" do
74
+ AIXM.ofmx!
75
+ subject.to_xml.must_equal <<~END
76
+ <Fto>
77
+ <FtoUid>
78
+ <AhpUid>
79
+ <codeId>LFNT</codeId>
80
+ </AhpUid>
81
+ <txtDesig>H1</txtDesig>
82
+ </FtoUid>
83
+ <valLen>35</valLen>
84
+ <valWid>35</valWid>
85
+ <uomDim>M</uomDim>
86
+ <codeComposition>CONC</codeComposition>
87
+ <codePreparation>PAVED</codePreparation>
88
+ <codeCondSfc>FAIR</codeCondSfc>
89
+ <valPcnClass>30</valPcnClass>
90
+ <codePcnPavementType>F</codePcnPavementType>
91
+ <codePcnPavementSubgrade>A</codePcnPavementSubgrade>
92
+ <codePcnMaxTirePressure>W</codePcnMaxTirePressure>
93
+ <codePcnEvalMethod>U</codePcnEvalMethod>
94
+ <txtPcnNote>Cracks near the center</txtPcnNote>
95
+ <valSiwlWeight>1500</valSiwlWeight>
96
+ <uomSiwlWeight>KG</uomSiwlWeight>
97
+ <valSiwlTirePressure>0.5</valSiwlTirePressure>
98
+ <uomSiwlTirePressure>MPA</uomSiwlTirePressure>
99
+ <valAuwWeight>8</valAuwWeight>
100
+ <uomAuwWeight>T</uomAuwWeight>
101
+ <txtProfile>Northwest from RWY 12/30</txtProfile>
102
+ <txtMarking>Dashed white lines</txtMarking>
103
+ <codeSts>OTHER</codeSts>
104
+ <txtRmk>Authorizaton by AD operator required</txtRmk>
105
+ </Fto>
106
+ <Fdn>
107
+ <FdnUid>
108
+ <FtoUid>
109
+ <AhpUid>
110
+ <codeId>LFNT</codeId>
111
+ </AhpUid>
112
+ <txtDesig>H1</txtDesig>
113
+ </FtoUid>
114
+ <txtDesig>35</txtDesig>
115
+ </FdnUid>
116
+ <valTrueBrg>355</valTrueBrg>
117
+ <valMagBrg>356</valMagBrg>
118
+ <txtRmk>Avoid flight over residental area</txtRmk>
119
+ </Fdn>
120
+ <Fls>
121
+ <FlsUid>
122
+ <FdnUid>
123
+ <FtoUid>
124
+ <AhpUid>
125
+ <codeId>LFNT</codeId>
126
+ </AhpUid>
127
+ <txtDesig>H1</txtDesig>
128
+ </FtoUid>
129
+ <txtDesig>35</txtDesig>
130
+ </FdnUid>
131
+ <codePsn>AIM</codePsn>
132
+ </FlsUid>
133
+ <txtDescr>omnidirectional</txtDescr>
134
+ <codeIntst>LIM</codeIntst>
135
+ <codeColour>GRN</codeColour>
136
+ <txtRmk>lighting remarks</txtRmk>
137
+ </Fls>
138
+ END
139
+ end
140
+
141
+ it "builds correct minimal OFMX" do
142
+ AIXM.ofmx!
143
+ %i(length width profile marking status remarks).each { |a| subject.send(:"#{a}=", nil) }
144
+ %i(composition preparation condition pcn siwl_weight siwl_tire_pressure auw_weight remarks).each { |a| subject.surface.send(:"#{a}=", nil) }
145
+ subject.directions['35'].instance_eval { @lightings.clear }
146
+ subject.to_xml.must_equal <<~END
147
+ <Fto>
148
+ <FtoUid>
149
+ <AhpUid>
150
+ <codeId>LFNT</codeId>
151
+ </AhpUid>
152
+ <txtDesig>H1</txtDesig>
153
+ </FtoUid>
154
+ </Fto>
155
+ <Fdn>
156
+ <FdnUid>
157
+ <FtoUid>
158
+ <AhpUid>
159
+ <codeId>LFNT</codeId>
160
+ </AhpUid>
161
+ <txtDesig>H1</txtDesig>
162
+ </FtoUid>
163
+ <txtDesig>35</txtDesig>
164
+ </FdnUid>
165
+ <valTrueBrg>355</valTrueBrg>
166
+ <valMagBrg>356</valMagBrg>
167
+ <txtRmk>Avoid flight over residental area</txtRmk>
168
+ </Fdn>
169
+ END
170
+ end
171
+ end
172
+ end
173
+
174
+ describe AIXM::Component::FATO::Direction do
175
+ subject do
176
+ AIXM::Factory.airport.fatos.first.directions['35']
177
+ end
178
+
179
+ describe :name= do
180
+ it "fails on invalid values" do
181
+ [nil, :foobar, 'OGGY'].wont_be_written_to subject, :name
182
+ end
183
+ end
184
+
185
+ describe :geographic_orientation= do
186
+ it "fails on invalid values" do
187
+ [:foobar, -1, 10].wont_be_written_to subject, :geographic_orientation
188
+ end
189
+ end
190
+
191
+ describe :remarks= do
192
+ macro :remarks
193
+ end
194
+
195
+ describe :magnetic_orientation do
196
+ it "is calculated correctly" do
197
+ subject.geographic_orientation = AIXM.a(16)
198
+ subject.magnetic_orientation.must_equal AIXM.a(17)
199
+ end
200
+ end
201
+
202
+ describe :xml= do
203
+ it "builds correct complete OFMX" do
204
+ AIXM.ofmx!
205
+ subject.to_xml.must_equal <<~END
206
+ <Fdn>
207
+ <FdnUid>
208
+ <FtoUid>
209
+ <AhpUid>
210
+ <codeId>LFNT</codeId>
211
+ </AhpUid>
212
+ <txtDesig>H1</txtDesig>
213
+ </FtoUid>
214
+ <txtDesig>35</txtDesig>
215
+ </FdnUid>
216
+ <valTrueBrg>355</valTrueBrg>
217
+ <valMagBrg>356</valMagBrg>
218
+ <txtRmk>Avoid flight over residental area</txtRmk>
219
+ </Fdn>
220
+ <Fls>
221
+ <FlsUid>
222
+ <FdnUid>
223
+ <FtoUid>
224
+ <AhpUid>
225
+ <codeId>LFNT</codeId>
226
+ </AhpUid>
227
+ <txtDesig>H1</txtDesig>
228
+ </FtoUid>
229
+ <txtDesig>35</txtDesig>
230
+ </FdnUid>
231
+ <codePsn>AIM</codePsn>
232
+ </FlsUid>
233
+ <txtDescr>omnidirectional</txtDescr>
234
+ <codeIntst>LIM</codeIntst>
235
+ <codeColour>GRN</codeColour>
236
+ <txtRmk>lighting remarks</txtRmk>
237
+ </Fls>
238
+ END
239
+ end
240
+
241
+ it "builds correct minimal OFMX" do
242
+ AIXM.ofmx!
243
+ %i(geographic_orientation remarks).each { |a| subject.send(:"#{a}=", nil) }
244
+ subject.instance_eval { @lightings.clear }
245
+ subject.to_xml.must_equal <<~END
246
+ <Fdn>
247
+ <FdnUid>
248
+ <FtoUid>
249
+ <AhpUid>
250
+ <codeId>LFNT</codeId>
251
+ </AhpUid>
252
+ <txtDesig>H1</txtDesig>
253
+ </FtoUid>
254
+ <txtDesig>35</txtDesig>
255
+ </FdnUid>
256
+ </Fdn>
257
+ END
258
+ end
259
+ end
260
+ end
@@ -47,6 +47,35 @@ describe AIXM::Component::Helipad do
47
47
  end
48
48
  end
49
49
 
50
+ describe :marking= do
51
+ macro :marking
52
+ end
53
+
54
+ describe :fato= do
55
+ it "fails on invalid values" do
56
+ [:foobar, 0].wont_be_written_to subject, :fato
57
+ end
58
+
59
+ it "accepts valid values" do
60
+ [nil, AIXM::Factory.fato].must_be_written_to subject, :fato
61
+ end
62
+ end
63
+
64
+ describe :helicopter_class= do
65
+ it "fails on invalid values" do
66
+ [:foobar, 123].wont_be_written_to subject, :helicopter_class
67
+ end
68
+
69
+ it "accepts nil value" do
70
+ [nil].must_be_written_to subject, :helicopter_class
71
+ end
72
+
73
+ it "looks up valid values" do
74
+ subject.tap { |s| s.helicopter_class = 1 }.helicopter_class.must_equal :'1'
75
+ subject.tap { |s| s.helicopter_class = :OTHER }.helicopter_class.must_equal :other
76
+ end
77
+ end
78
+
50
79
  describe :status= do
51
80
  it "fails on invalid values" do
52
81
  [:foobar, 123].wont_be_written_to subject, :status
@@ -77,6 +106,12 @@ describe AIXM::Component::Helipad do
77
106
  </AhpUid>
78
107
  <txtDesig>H1</txtDesig>
79
108
  </TlaUid>
109
+ <FtoUid>
110
+ <AhpUid>
111
+ <codeId>LFNT</codeId>
112
+ </AhpUid>
113
+ <txtDesig>H1</txtDesig>
114
+ </FtoUid>
80
115
  <geoLat>43.99915000N</geoLat>
81
116
  <geoLong>004.75154444E</geoLong>
82
117
  <codeDatum>WGE</codeDatum>
@@ -93,17 +128,41 @@ describe AIXM::Component::Helipad do
93
128
  <codePcnPavementSubgrade>A</codePcnPavementSubgrade>
94
129
  <codePcnMaxTirePressure>W</codePcnMaxTirePressure>
95
130
  <codePcnEvalMethod>U</codePcnEvalMethod>
96
- <txtPcnNote>Cracks near the center.</txtPcnNote>
131
+ <txtPcnNote>Cracks near the center</txtPcnNote>
132
+ <valSiwlWeight>1500</valSiwlWeight>
133
+ <uomSiwlWeight>KG</uomSiwlWeight>
134
+ <valSiwlTirePressure>0.5</valSiwlTirePressure>
135
+ <uomSiwlTirePressure>MPA</uomSiwlTirePressure>
136
+ <valAuwWeight>8</valAuwWeight>
137
+ <uomAuwWeight>T</uomAuwWeight>
138
+ <codeClassHel>1</codeClassHel>
139
+ <txtMarking>Continuous white lines</txtMarking>
97
140
  <codeSts>OTHER</codeSts>
98
141
  <txtRmk>Authorizaton by AD operator required</txtRmk>
99
142
  </Tla>
143
+ <Tls>
144
+ <TlsUid>
145
+ <TlaUid>
146
+ <AhpUid>
147
+ <codeId>LFNT</codeId>
148
+ </AhpUid>
149
+ <txtDesig>H1</txtDesig>
150
+ </TlaUid>
151
+ <codePsn>AIM</codePsn>
152
+ </TlsUid>
153
+ <txtDescr>omnidirectional</txtDescr>
154
+ <codeIntst>LIM</codeIntst>
155
+ <codeColour>GRN</codeColour>
156
+ <txtRmk>lighting remarks</txtRmk>
157
+ </Tls>
100
158
  END
101
159
  end
102
160
 
103
161
  it "builds correct minimal OFMX" do
104
162
  AIXM.ofmx!
105
- %i(z length width status remarks).each { |a| subject.send(:"#{a}=", nil) }
106
- %i(composition preparation condition pcn remarks).each { |a| subject.surface.send(:"#{a}=", nil) }
163
+ %i(z length width helicopter_class marking status remarks).each { |a| subject.send(:"#{a}=", nil) }
164
+ %i(composition preparation condition pcn siwl_weight siwl_tire_pressure auw_weight remarks).each { |a| subject.surface.send(:"#{a}=", nil) }
165
+ subject.instance_eval { @lightings.clear }
107
166
  subject.to_xml.must_equal <<~END
108
167
  <Tla>
109
168
  <TlaUid>
@@ -112,6 +171,12 @@ describe AIXM::Component::Helipad do
112
171
  </AhpUid>
113
172
  <txtDesig>H1</txtDesig>
114
173
  </TlaUid>
174
+ <FtoUid>
175
+ <AhpUid>
176
+ <codeId>LFNT</codeId>
177
+ </AhpUid>
178
+ <txtDesig>H1</txtDesig>
179
+ </FtoUid>
115
180
  <geoLat>43.99915000N</geoLat>
116
181
  <geoLong>004.75154444E</geoLong>
117
182
  <codeDatum>WGE</codeDatum>
@@ -0,0 +1,88 @@
1
+ require_relative '../../../spec_helper'
2
+
3
+ describe AIXM::Component::Lighting do
4
+ subject do
5
+ AIXM::Factory.airport.runways.first.forth.lightings.first
6
+ end
7
+
8
+ describe :position= do
9
+ it "fails on invalid values" do
10
+ [:foobar, 123, nil].wont_be_written_to subject, :position
11
+ end
12
+
13
+ it "looks up valid values" do
14
+ subject.tap { |s| s.position = :edge }.position.must_equal :edge
15
+ subject.tap { |s| s.position = :SWYEND }.position.must_equal :stopway_end
16
+ end
17
+ end
18
+
19
+ describe :description= do
20
+ it "accepts nil value" do
21
+ [nil].must_be_written_to subject, :description
22
+ end
23
+
24
+ it "stringifies valid values" do
25
+ subject.tap { |s| s.description = 'foobar' }.description.must_equal 'foobar'
26
+ subject.tap { |s| s.description = 123 }.description.must_equal '123'
27
+ end
28
+ end
29
+
30
+ describe :intensity= do
31
+ it "fails on invalid values" do
32
+ [:foobar, 123].wont_be_written_to subject, :intensity
33
+ end
34
+
35
+ it "accepts nil value" do
36
+ [nil].must_be_written_to subject, :intensity
37
+ end
38
+
39
+ it "looks up valid values" do
40
+ subject.tap { |s| s.intensity = :low }.intensity.must_equal :low
41
+ subject.tap { |s| s.intensity = 'LIM' }.intensity.must_equal :medium
42
+ end
43
+ end
44
+
45
+ describe :color= do
46
+ it "fails on invalid values" do
47
+ [:foobar, 123].wont_be_written_to subject, :color
48
+ end
49
+
50
+ it "accepts nil value" do
51
+ [nil].must_be_written_to subject, :color
52
+ end
53
+
54
+ it "looks up valid values" do
55
+ subject.tap { |s| s.color = :blue }.color.must_equal :blue
56
+ subject.tap { |s| s.color = 'GRN' }.color.must_equal :green
57
+ end
58
+ end
59
+
60
+ describe :remarks= do
61
+ macro :remarks
62
+ end
63
+
64
+ describe :to_xml do
65
+ it "builds correct complete AIXM/OFMX" do
66
+ subject.to_xml(as: :Rls).must_equal <<~END
67
+ <Rls>
68
+ <RlsUid>
69
+ <RdnUid>
70
+ <RwyUid>
71
+ <AhpUid>
72
+ <codeId>LFNT</codeId>
73
+ </AhpUid>
74
+ <txtDesig>16L/34R</txtDesig>
75
+ </RwyUid>
76
+ <txtDesig>16L</txtDesig>
77
+ </RdnUid>
78
+ <codePsn>AIM</codePsn>
79
+ </RlsUid>
80
+ <txtDescr>omnidirectional</txtDescr>
81
+ <codeIntst>LIM</codeIntst>
82
+ <codeColour>GRN</codeColour>
83
+ <txtRmk>lighting remarks</txtRmk>
84
+ </Rls>
85
+ END
86
+ end
87
+ end
88
+ end