aixm 0.3.5 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -28,7 +28,11 @@ describe AIXM::Feature::Airport do
28
28
 
29
29
  describe :id= do
30
30
  it "fails on invalid values" do
31
- [nil, 'A', 'AB', 'ABCDE', 'AB 1234'].wont_be_written_to subject, :id
31
+ [nil, 'A', 'ABCDE', 'AB 1234'].wont_be_written_to subject, :id
32
+ end
33
+
34
+ it "combines 2 character region with an 8 characters digest from name" do
35
+ subject.tap { |s| s.id = 'lf' }.id.must_equal 'LFD18754F5'
32
36
  end
33
37
 
34
38
  it "upcases valid values" do
@@ -124,6 +128,20 @@ describe AIXM::Feature::Airport do
124
128
  macro :timetable
125
129
  end
126
130
 
131
+ describe :operator= do
132
+ it "fails on invalid values" do
133
+ [123].wont_be_written_to subject, :operator
134
+ end
135
+
136
+ it "accepts nil value" do
137
+ [nil].must_be_written_to subject, :operator
138
+ end
139
+
140
+ it "upcases and transcodes valid values" do
141
+ subject.tap { |s| s.operator = 'Municipality of Nîmes-Alès' }.operator.must_equal 'MUNICIPALITY OF NIMES-ALES'
142
+ end
143
+ end
144
+
127
145
  describe :remarks= do
128
146
  macro :remarks
129
147
  end
@@ -159,7 +177,7 @@ describe AIXM::Feature::Airport do
159
177
 
160
178
  it "adds helipad to the array" do
161
179
  count = subject.helipads.count
162
- subject.add_helipad(AIXM.helipad(name: 'H2'))
180
+ subject.add_helipad(AIXM.helipad(name: 'H2', xy: AIXM::Factory.xy))
163
181
  subject.helipads.count.must_equal count + 1
164
182
  end
165
183
  end
@@ -215,6 +233,7 @@ describe AIXM::Feature::Airport do
215
233
  <valElev>146</valElev>
216
234
  <uomDistVer>FT</uomDistVer>
217
235
  <valMagVar>1.08</valMagVar>
236
+ <txtNameAdmin>MUNICIPALITY OF PUJAUT</txtNameAdmin>
218
237
  <valTransitionAlt>10000</valTransitionAlt>
219
238
  <uomTransitionAlt>FT</uomTransitionAlt>
220
239
  <txtRmk>Restricted access</txtRmk>
@@ -238,6 +257,12 @@ describe AIXM::Feature::Airport do
238
257
  <codePcnMaxTirePressure>W</codePcnMaxTirePressure>
239
258
  <codePcnEvalMethod>T</codePcnEvalMethod>
240
259
  <txtPcnNote>Paved shoulder on 2.5m on each side of the RWY.</txtPcnNote>
260
+ <valSiwlWeight>1500</valSiwlWeight>
261
+ <uomSiwlWeight>KG</uomSiwlWeight>
262
+ <valSiwlTirePressure>0.5</valSiwlTirePressure>
263
+ <uomSiwlTirePressure>MPA</uomSiwlTirePressure>
264
+ <valAuwWeight>30</valAuwWeight>
265
+ <uomAuwWeight>T</uomAuwWeight>
241
266
  <codeSts>CLSD</codeSts>
242
267
  <txtRmk>Markings eroded</txtRmk>
243
268
  </Rwy>
@@ -278,6 +303,24 @@ describe AIXM::Feature::Airport do
278
303
  <uomDist>M</uomDist>
279
304
  <txtRmk>forth remarks</txtRmk>
280
305
  </Rdd>
306
+ <Rls>
307
+ <RlsUid>
308
+ <RdnUid>
309
+ <RwyUid>
310
+ <AhpUid>
311
+ <codeId>LFNT</codeId>
312
+ </AhpUid>
313
+ <txtDesig>16L/34R</txtDesig>
314
+ </RwyUid>
315
+ <txtDesig>16L</txtDesig>
316
+ </RdnUid>
317
+ <codePsn>AIM</codePsn>
318
+ </RlsUid>
319
+ <txtDescr>omnidirectional</txtDescr>
320
+ <codeIntst>LIM</codeIntst>
321
+ <codeColour>GRN</codeColour>
322
+ <txtRmk>lighting remarks</txtRmk>
323
+ </Rls>
281
324
  <Rdn>
282
325
  <RdnUid>
283
326
  <RwyUid>
@@ -315,6 +358,86 @@ describe AIXM::Feature::Airport do
315
358
  <uomDist>M</uomDist>
316
359
  <txtRmk>back remarks</txtRmk>
317
360
  </Rdd>
361
+ <Rls>
362
+ <RlsUid>
363
+ <RdnUid>
364
+ <RwyUid>
365
+ <AhpUid>
366
+ <codeId>LFNT</codeId>
367
+ </AhpUid>
368
+ <txtDesig>16L/34R</txtDesig>
369
+ </RwyUid>
370
+ <txtDesig>34R</txtDesig>
371
+ </RdnUid>
372
+ <codePsn>AIM</codePsn>
373
+ </RlsUid>
374
+ <txtDescr>omnidirectional</txtDescr>
375
+ <codeIntst>LIM</codeIntst>
376
+ <codeColour>GRN</codeColour>
377
+ <txtRmk>lighting remarks</txtRmk>
378
+ </Rls>
379
+ <Fto>
380
+ <FtoUid>
381
+ <AhpUid>
382
+ <codeId>LFNT</codeId>
383
+ </AhpUid>
384
+ <txtDesig>H1</txtDesig>
385
+ </FtoUid>
386
+ <valLen>35</valLen>
387
+ <valWid>35</valWid>
388
+ <uomDim>M</uomDim>
389
+ <codeComposition>CONC</codeComposition>
390
+ <codePreparation>PAVED</codePreparation>
391
+ <codeCondSfc>FAIR</codeCondSfc>
392
+ <valPcnClass>30</valPcnClass>
393
+ <codePcnPavementType>F</codePcnPavementType>
394
+ <codePcnPavementSubgrade>A</codePcnPavementSubgrade>
395
+ <codePcnMaxTirePressure>W</codePcnMaxTirePressure>
396
+ <codePcnEvalMethod>U</codePcnEvalMethod>
397
+ <txtPcnNote>Cracks near the center</txtPcnNote>
398
+ <valSiwlWeight>1500</valSiwlWeight>
399
+ <uomSiwlWeight>KG</uomSiwlWeight>
400
+ <valSiwlTirePressure>0.5</valSiwlTirePressure>
401
+ <uomSiwlTirePressure>MPA</uomSiwlTirePressure>
402
+ <valAuwWeight>8</valAuwWeight>
403
+ <uomAuwWeight>T</uomAuwWeight>
404
+ <txtProfile>Northwest from RWY 12/30</txtProfile>
405
+ <txtMarking>Dashed white lines</txtMarking>
406
+ <codeSts>OTHER</codeSts>
407
+ <txtRmk>Authorizaton by AD operator required</txtRmk>
408
+ </Fto>
409
+ <Fdn>
410
+ <FdnUid>
411
+ <FtoUid>
412
+ <AhpUid>
413
+ <codeId>LFNT</codeId>
414
+ </AhpUid>
415
+ <txtDesig>H1</txtDesig>
416
+ </FtoUid>
417
+ <txtDesig>35</txtDesig>
418
+ </FdnUid>
419
+ <valTrueBrg>355</valTrueBrg>
420
+ <valMagBrg>356</valMagBrg>
421
+ <txtRmk>Avoid flight over residental area</txtRmk>
422
+ </Fdn>
423
+ <Fls>
424
+ <FlsUid>
425
+ <FdnUid>
426
+ <FtoUid>
427
+ <AhpUid>
428
+ <codeId>LFNT</codeId>
429
+ </AhpUid>
430
+ <txtDesig>H1</txtDesig>
431
+ </FtoUid>
432
+ <txtDesig>35</txtDesig>
433
+ </FdnUid>
434
+ <codePsn>AIM</codePsn>
435
+ </FlsUid>
436
+ <txtDescr>omnidirectional</txtDescr>
437
+ <codeIntst>LIM</codeIntst>
438
+ <codeColour>GRN</codeColour>
439
+ <txtRmk>lighting remarks</txtRmk>
440
+ </Fls>
318
441
  <Tla>
319
442
  <TlaUid>
320
443
  <AhpUid>
@@ -322,6 +445,12 @@ describe AIXM::Feature::Airport do
322
445
  </AhpUid>
323
446
  <txtDesig>H1</txtDesig>
324
447
  </TlaUid>
448
+ <FtoUid>
449
+ <AhpUid>
450
+ <codeId>LFNT</codeId>
451
+ </AhpUid>
452
+ <txtDesig>H1</txtDesig>
453
+ </FtoUid>
325
454
  <geoLat>43.99915000N</geoLat>
326
455
  <geoLong>004.75154444E</geoLong>
327
456
  <codeDatum>WGE</codeDatum>
@@ -338,10 +467,33 @@ describe AIXM::Feature::Airport do
338
467
  <codePcnPavementSubgrade>A</codePcnPavementSubgrade>
339
468
  <codePcnMaxTirePressure>W</codePcnMaxTirePressure>
340
469
  <codePcnEvalMethod>U</codePcnEvalMethod>
341
- <txtPcnNote>Cracks near the center.</txtPcnNote>
470
+ <txtPcnNote>Cracks near the center</txtPcnNote>
471
+ <valSiwlWeight>1500</valSiwlWeight>
472
+ <uomSiwlWeight>KG</uomSiwlWeight>
473
+ <valSiwlTirePressure>0.5</valSiwlTirePressure>
474
+ <uomSiwlTirePressure>MPA</uomSiwlTirePressure>
475
+ <valAuwWeight>8</valAuwWeight>
476
+ <uomAuwWeight>T</uomAuwWeight>
477
+ <codeClassHel>1</codeClassHel>
478
+ <txtMarking>Continuous white lines</txtMarking>
342
479
  <codeSts>OTHER</codeSts>
343
480
  <txtRmk>Authorizaton by AD operator required</txtRmk>
344
481
  </Tla>
482
+ <Tls>
483
+ <TlsUid>
484
+ <TlaUid>
485
+ <AhpUid>
486
+ <codeId>LFNT</codeId>
487
+ </AhpUid>
488
+ <txtDesig>H1</txtDesig>
489
+ </TlaUid>
490
+ <codePsn>AIM</codePsn>
491
+ </TlsUid>
492
+ <txtDescr>omnidirectional</txtDescr>
493
+ <codeIntst>LIM</codeIntst>
494
+ <codeColour>GRN</codeColour>
495
+ <txtRmk>lighting remarks</txtRmk>
496
+ </Tls>
345
497
  <Ahu>
346
498
  <AhuUid>
347
499
  <AhpUid>
@@ -408,11 +560,12 @@ describe AIXM::Feature::Airport do
408
560
 
409
561
  it "builds correct minimal OFMX" do
410
562
  AIXM.ofmx!
411
- subject.z = subject.declination = subject.transition_z = subject.remarks = nil
412
- subject.instance_variable_set(:'@addresses', [])
413
- subject.instance_variable_set(:'@runways', [])
414
- subject.instance_variable_set(:'@helipads', [])
415
- subject.instance_variable_set(:'@usage_limitations', [])
563
+ %i(z declination transition_z operator remarks).each { |a| subject.send(:"#{a}=", nil) }
564
+ subject.instance_eval { @addresses.clear }
565
+ subject.instance_eval { @runways.clear }
566
+ subject.instance_eval { @fatos.clear }
567
+ subject.instance_eval { @helipads.clear }
568
+ subject.instance_eval { @usage_limitations.clear }
416
569
  subject.to_xml.must_equal <<~END
417
570
  <!-- Airport: LFNT AVIGNON-PUJAUT -->
418
571
  <Ahp source="LF|GEN|0.0 FACTORY|0|0">
@@ -0,0 +1,189 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe AIXM::P do
4
+ subject do
5
+ AIXM::Factory.p
6
+ end
7
+
8
+ describe :pres= do
9
+ it "fails on invalid values" do
10
+ [:foobar, -1].wont_be_written_to subject, :pres
11
+ end
12
+
13
+ it "converts Numeric to Float" do
14
+ subject.tap { |s| s.pres = 5 }.pres.must_equal 5.0
15
+ end
16
+ end
17
+
18
+ describe :unit= do
19
+ it "fails on invalid values" do
20
+ [:foobar, 123].wont_be_written_to subject, :unit
21
+ end
22
+
23
+ it "symbolizes and downcases values" do
24
+ subject.tap { |s| s.unit = "P" }.unit.must_equal :p
25
+ end
26
+ end
27
+
28
+ describe :to_p do
29
+ it "leaves pascal untouched" do
30
+ subject = AIXM.p(2, :p)
31
+ subject.to_p.must_be_same_as subject
32
+ end
33
+
34
+ it "converts megapascal to pascal" do
35
+ AIXM.p(0.01, :mpa).to_p.must_equal AIXM.p(10_000, :p)
36
+ end
37
+
38
+ it "converts psi to pascal" do
39
+ AIXM.p(0.03, :psi).to_p.must_equal AIXM.p(206.8427187, :p)
40
+ end
41
+
42
+ it "converts bar to pascal" do
43
+ AIXM.p(0.02, :bar).to_p.must_equal AIXM.p(2000, :p)
44
+ end
45
+
46
+ it "converts mmhg to pascal" do
47
+ AIXM.p(0.02, :torr).to_p.must_equal AIXM.p(2.66644, :p)
48
+ end
49
+ end
50
+
51
+ describe :to_mpa do
52
+ it "leaves megapascal untouched" do
53
+ subject = AIXM.p(2, :mpa)
54
+ subject.to_mpa.must_be_same_as subject
55
+ end
56
+
57
+ it "converts pascal to megapascal" do
58
+ AIXM.p(10_000, :p).to_mpa.must_equal AIXM.p(0.01, :mpa)
59
+ end
60
+
61
+ it "converts psi to megapascal" do
62
+ AIXM.p(300, :psi).to_mpa.must_equal AIXM.p(2.06842719, :mpa)
63
+ end
64
+
65
+ it "converts bar to megapascal" do
66
+ AIXM.p(22, :bar).to_mpa.must_equal AIXM.p(2.2, :mpa)
67
+ end
68
+
69
+ it "converts mmhg to megapascal" do
70
+ AIXM.p(205, :torr).to_mpa.must_equal AIXM.p(0.02733101, :mpa)
71
+ end
72
+ end
73
+
74
+ describe :to_psi do
75
+ it "leaves psi untouched" do
76
+ subject = AIXM.p(2, :psi)
77
+ subject.to_psi.must_be_same_as subject
78
+ end
79
+
80
+ it "converts pascal to psi" do
81
+ AIXM.p(500, :p).to_psi.must_equal AIXM.p(0.07251887, :psi)
82
+ end
83
+
84
+ it "converts megapascal to psi" do
85
+ AIXM.p(0.1, :mpa).to_psi.must_equal AIXM.p(14.5037738, :psi)
86
+ end
87
+
88
+ it "converts bar to psi" do
89
+ AIXM.p(30, :bar).to_psi.must_equal AIXM.p(435.113214, :psi)
90
+ end
91
+
92
+ it "converts mmhg to psi" do
93
+ AIXM.p(20, :torr).to_psi.must_equal AIXM.p(0.38673443, :psi)
94
+ end
95
+ end
96
+
97
+ describe :to_bar do
98
+ it "leaves bars untouched" do
99
+ subject = AIXM.p(2, :bar)
100
+ subject.to_bar.must_be_same_as subject
101
+ end
102
+
103
+ it "converts pascal to bars" do
104
+ AIXM.p(10_000, :p).to_bar.must_equal AIXM.p(0.1, :bar)
105
+ end
106
+
107
+ it "converts megapascal to bars" do
108
+ AIXM.p(0.1, :mpa).to_bar.must_equal AIXM.p(1, :bar)
109
+ end
110
+
111
+ it "converts psi to bars" do
112
+ AIXM.p(90, :psi).to_bar.must_equal AIXM.p(6.20528156, :bar)
113
+ end
114
+
115
+ it "converts mmhg to bars" do
116
+ AIXM.p(7000, :torr).to_bar.must_equal AIXM.p(9.33254, :bar)
117
+ end
118
+ end
119
+
120
+ describe :to_torr do
121
+ it "leaves mmhg untouched" do
122
+ subject = AIXM.p(2, :torr)
123
+ subject.to_torr.must_be_same_as subject
124
+ end
125
+
126
+ it "converts pascal to mmhg" do
127
+ AIXM.p(12_000, :p).to_torr.must_equal AIXM.p(90.0072, :torr)
128
+ end
129
+
130
+ it "converts megapascal to mmhg" do
131
+ AIXM.p(0.1, :mpa).to_torr.must_equal AIXM.p(750.06, :torr)
132
+ end
133
+
134
+ it "converts psi to mmhg" do
135
+ AIXM.p(2, :psi).to_torr.must_equal AIXM.p(103.42963306, :torr)
136
+ end
137
+
138
+ it "converts bar to mmhg" do
139
+ AIXM.p(0.35, :bar).to_torr.must_equal AIXM.p(262.521, :torr)
140
+ end
141
+ end
142
+
143
+ describe :<=> do
144
+ it "recognizes objects with identical unit and pressure as equal" do
145
+ a = AIXM.p(12, :bar)
146
+ b = AIXM.p(12.0, 'BAR')
147
+ a.must_equal b
148
+ end
149
+
150
+ it "recognizes objects with different units and converted pressure as equal" do
151
+ a = AIXM.p(12, :bar)
152
+ b = AIXM.p(174.0452856, 'PSI')
153
+ a.must_equal b
154
+ end
155
+
156
+ it "recognizes objects with different units and identical pressure as unequal" do
157
+ a = AIXM.p(12, :bar)
158
+ b = AIXM.p(12, :p)
159
+ a.wont_equal b
160
+ end
161
+
162
+ it "recognizes objects of different class as unequal" do
163
+ a = AIXM.p(12, :bar)
164
+ b = :oggy
165
+ a.wont_equal b
166
+ end
167
+ end
168
+
169
+ describe :hash do
170
+ it "returns an integer" do
171
+ subject.hash.must_be_instance_of Integer
172
+ end
173
+
174
+ it "allows for the use of instances as hash keys" do
175
+ dupe = subject.dup
176
+ { subject => true }[dupe].must_equal true
177
+ end
178
+ end
179
+
180
+ describe :zero? do
181
+ it "returns true for zero pressure" do
182
+ subject.tap { |s| s.pres = 0 }.must_be :zero?
183
+ end
184
+
185
+ it "returns false for non-zero pressure" do
186
+ subject.tap { |s| s.pres = 1 }.wont_be :zero?
187
+ end
188
+ end
189
+ end
@@ -4,22 +4,6 @@ using AIXM::Refinements
4
4
 
5
5
  describe AIXM::Refinements do
6
6
 
7
- context Object do
8
- describe :then_if do
9
- subject do
10
- "foobar"
11
- end
12
-
13
- it "must return self if the condition is false" do
14
- subject.then_if(false) { |s| s.gsub(/o/, 'i') }.must_equal subject
15
- end
16
-
17
- it "must return apply the block if the condition is true" do
18
- subject.then_if(true) { |s| s.gsub(/o/, 'i') }.must_equal 'fiibar'
19
- end
20
- end
21
- end
22
-
23
7
  context Array do
24
8
  describe :to_digest do
25
9
  it "must digest single string" do
@@ -171,6 +155,22 @@ describe AIXM::Refinements do
171
155
  end
172
156
  end
173
157
 
158
+ context Object do
159
+ describe :then_if do
160
+ subject do
161
+ "foobar"
162
+ end
163
+
164
+ it "must return self if the condition is false" do
165
+ subject.then_if(false) { |s| s.gsub(/o/, 'i') }.must_equal subject
166
+ end
167
+
168
+ it "must return apply the block if the condition is true" do
169
+ subject.then_if(true) { |s| s.gsub(/o/, 'i') }.must_equal 'fiibar'
170
+ end
171
+ end
172
+ end
173
+
174
174
  context Regexp do
175
175
  describe :decapture do
176
176
  it "should replace capture groups with non-capture groups" do