voruby2-preview 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,56 @@
1
+ require 'test/unit'
2
+
3
+ require 'voruby/resolver/sesame'
4
+ include VORuby::Resolver
5
+
6
+ class SesameTest < Test::Unit::TestCase
7
+ def test_resolve
8
+ sesame = Sesame.resolve('m51', :all)
9
+
10
+ assert_equal 'http://cdsws.u-strasbg.fr/axis/services/Sesame', sesame.end_point
11
+ assert_equal false, sesame.check_availability
12
+ assert_equal 'm51', sesame.target
13
+ assert_equal 3, sesame.resolvers.size
14
+
15
+ resolver = sesame.resolvers.find { |r| r.name == 'Simbad' }
16
+ assert_equal 'Simbad', resolver.name
17
+
18
+ assert_equal 'Seyfert_2', resolver.otype
19
+ assert_equal '13:29:52.36 +47:11:40.8', resolver.jpos
20
+ assert_equal 202.4682083, resolver.jradeg
21
+ assert_equal 47.1946667, resolver.jdedeg
22
+ assert_equal '1999ApJS..125..409C', resolver.ref_pos
23
+ assert_equal 10800, resolver.err_ra_mas
24
+ assert_equal 10800, resolver.err_de_mas
25
+ assert_equal nil, resolver.z
26
+ assert_equal nil, resolver.errz
27
+ assert_equal nil, resolver.refz
28
+ assert_equal 600, resolver.vel
29
+ assert_equal nil, resolver.err_vel
30
+ assert_equal '2004A&A...422...39S', resolver.ref_vel
31
+ assert_equal 'Sc', resolver.mtype
32
+ assert_equal nil, resolver.sptype
33
+ assert_equal 'M 51', resolver.oname
34
+
35
+ assert_equal [202.4682083, 47.1946667], resolver.position
36
+ assert_equal ['13:29:52.36', '+47:11:40.8'], resolver.position(:sexigesimal)
37
+
38
+ assert_equal [
39
+ "M 51", "NGC 5194", "4C 47.36A", "APG 85A", "APG 85", "BD+47 2063",
40
+ "[DML87] 671", "GB1 1327+475", "[H92] 27", "IRAS F13277+4727",
41
+ "IRAS 13277+4727", "ISOSS J13299+4714", "KHG 1-C 5", "KPG 379a",
42
+ "LEDA 47404", "[LPS2002] 16", "[M98c] 132746.9+472716", "MCG+08-25-012",
43
+ "NAME WHIRLPOOL", "NAME QUESTION MARK GALAXY", "NAME WHIRLPOOL GALAXY",
44
+ "PLX 3084", "RX J1329.8+4711", "1RXS J132953.8+471143", "[SLK2004] 853",
45
+ "[T76] 85A", "TC 827", "UGC 8493", "[VDD93] 187A", "VV 403", "VV 1a",
46
+ "VV 1", "[VV2000c] J132952.4+471141", "[VV2003c] J132952.4+471141",
47
+ "[VV2006c] J132952.4+471141", "[VV98c] J132952.7+471143",
48
+ "XMMU J132952.9+471140", "Z 1327.8+4727", "Z 246 - 8"
49
+ ], resolver.aliases
50
+ end
51
+
52
+ def test_resolve_position
53
+ assert_equal [202.4682083, 47.1946667],
54
+ Sesame.resolve_position('m51')
55
+ end
56
+ end
@@ -0,0 +1,714 @@
1
+ require 'voruby/votable/1.0/votable'
2
+ require 'test/unit'
3
+
4
+ include VORuby::VOTable::V1_0
5
+
6
+ module VORuby
7
+ module VOTable
8
+ module V1_0
9
+ module Test
10
+
11
+ module Methods
12
+ def test_construction
13
+ obj = self.class_to_test.new(self.inputs)
14
+ outputs = self.respond_to?(:expected_outputs) ? self.expected_outputs : self.inputs
15
+
16
+ outputs.each do |name, value|
17
+ result = obj.send(name)
18
+ assert_equal result, outputs[name]
19
+ end
20
+ end
21
+
22
+ def test_accessors
23
+ obj = self.class_to_test.new
24
+ outputs = self.respond_to?(:expected_outputs) ? self.expected_outputs : self.inputs
25
+
26
+ if self.inputs.is_a?(Hash)
27
+ self.inputs.each do |name, value|
28
+ obj.send("#{name}=", value)
29
+ assert_equal obj.send(name), outputs[name]
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ class VOTableTest < ::Test::Unit::TestCase
36
+ include Methods
37
+
38
+ def class_to_test; VOTable end
39
+
40
+ def inputs
41
+ {
42
+ :version => '1.0',
43
+ :id => 'my_test_votable',
44
+ :description => Description.new,
45
+ :definitions => Definitions.new,
46
+ :infos => [Info.new],
47
+ :resources => [Resource.new]
48
+ }
49
+ end
50
+
51
+ def test_to_html
52
+ votable = VOTable.new(
53
+ :version => '1.0',
54
+ :coordinate_systems => [
55
+ Coosys.new(:id => 'J2000', :equinox => 'J2000.', :epoch => 'J2000.', :system => 'eq_FK5')
56
+ ],
57
+ :resources => [
58
+ Resource.new(
59
+ :name => 'myFavouriteGalaxies',
60
+ :tables => [
61
+ Table.new(
62
+ :name => 'results',
63
+ :description => Description.new(:text => 'Velocities and Distance estimations'),
64
+ :params => [
65
+ Param.new(
66
+ :name => 'Telescope',
67
+ :datatype => 'float',
68
+ :ucd => 'phys.size;instr.tel',
69
+ :unit => 'm',
70
+ :value => '3.6'
71
+ )
72
+ ],
73
+ :fields => [
74
+ Field.new(:name => 'RA', :id => 'col1', :ucd => 'pos.eq.ra;meta.main',
75
+ :ref => 'J2000', :datatype => 'float', :width => 6, :precision => '2', :unit => 'deg'),
76
+ Field.new(:name => 'Dec', :id => 'col2', :ucd => 'pos.eq.dec;meta.main',
77
+ :ref => 'J2000', :datatype => 'float', :width => 6, :precision => '2', :unit => 'deg'),
78
+ Field.new(:name => 'Name', :id => 'col3', :ucd => 'meta.id;meta.main',
79
+ :datatype => 'char', :arraysize => '8*'),
80
+ Field.new(:name => 'RVel', :id => 'col4', :ucd => 'src.veloc.hc', :datatype => 'int',
81
+ :width => 5, :unit => 'km/s'),
82
+ Field.new(:name => 'e_RVel', :id => 'col5', :ucd => 'stat.error;src.veloc.hc',
83
+ :datatype => 'int', :width => 3, :unit => 'km/s'),
84
+ Field.new(:name => 'R', :id => 'col6', :ucd => 'phys.distance', :datatype => 'float',
85
+ :width => 4, :precision => '1', :unit => 'Mpc',
86
+ :description => Description.new(:text => 'Distance of Galaxy, assuming H=75km/s/Mpc'))
87
+ ],
88
+ :data => Data.new(
89
+ :format => TableData.new(
90
+ :trs => [
91
+ Tr.new(:tds => [
92
+ Td.new(:text => '010.68'), Td.new(:text => '+41.27'), Td.new(:text => 'N 224'),
93
+ Td.new(:text => '-297'), Td.new(:text => '5'), Td.new(:text => '0.7')
94
+ ]),
95
+ Tr.new(:tds => [
96
+ Td.new(:text => '287.43'), Td.new(:text => '-63.85'), Td.new(:text => 'N 6744'),
97
+ Td.new(:text => '839'), Td.new(:text => '6'), Td.new(:text => '10.4')
98
+ ]),
99
+ Tr.new(:tds => [
100
+ Td.new(:text => '023.48'), Td.new(:text => '+30.66'), Td.new(:text => 'N 598'),
101
+ Td.new(:text => '-182'), Td.new(:text => '3'), Td.new(:text => '0.7')
102
+ ])
103
+ ]
104
+ )
105
+ )
106
+ )
107
+ ]
108
+ )
109
+ ]
110
+ )
111
+
112
+ assert_equal(
113
+ File.read('test/voruby/votable/1.0/votable.html').strip.gsub(/\n+\s*/, ''),
114
+ votable.to_html.strip.gsub(/\n+\s*/, '')
115
+ )
116
+ end
117
+ end
118
+
119
+ class DescriptionTest < ::Test::Unit::TestCase
120
+ include Methods
121
+
122
+ def class_to_test; Description end
123
+
124
+ def inputs; {:text => 'A description'} end
125
+ end
126
+
127
+ class DefinitionsTest < ::Test::Unit::TestCase
128
+ include Methods
129
+
130
+ def class_to_test; Definitions end
131
+
132
+ def inputs
133
+ {
134
+ :coordinate_systems => [Coosys.new],
135
+ :params => [Param.new]
136
+ }
137
+ end
138
+ end
139
+
140
+ class CoosysTest < ::Test::Unit::TestCase
141
+ include Methods
142
+
143
+ def class_to_test; Coosys end
144
+
145
+ def inputs
146
+ {:id => 'my_coosys', :equinox => 'J2000', :epoch => 'B1950', :system => 'supergalactic'}
147
+ end
148
+ end
149
+
150
+ class ParamTest < ::Test::Unit::TestCase
151
+ include Methods
152
+
153
+ def class_to_test; Param end
154
+
155
+ def inputs
156
+ {
157
+ :id => 'my_param_test',
158
+ :unit => 'm/s',
159
+ :datatype => 'float',
160
+ :arraysize => '*',
161
+ :precision => '3',
162
+ :width => 6,
163
+ :ref => 'refer_to_1',
164
+ :name => 'My param test',
165
+ :ucd => 'phys.velocity',
166
+ :value => '123.456',
167
+ :description => Description.new,
168
+ :values => Values.new,
169
+ :links => [Link.new]
170
+ }
171
+ end
172
+
173
+ def test_casting
174
+ param = Param.new(:datatype => 'float', :arraysize => '*')
175
+ param.value = [123.4, 21.5]
176
+ assert_equal [123.4, 21.5], param.value(true)
177
+ end
178
+ end
179
+
180
+ class InfoTest < ::Test::Unit::TestCase
181
+ include Methods
182
+
183
+ def class_to_test; Info end
184
+
185
+ def inputs
186
+ {:id => 'my_info', :name => 'info_lite', :value => '123'}
187
+ end
188
+ end
189
+
190
+ class ResourceTest < ::Test::Unit::TestCase
191
+ include Methods
192
+
193
+ def class_to_test; Resource end
194
+
195
+ def inputs
196
+ {
197
+ :name => 'Test Resource',
198
+ :id => 'my_test_resource',
199
+ :type => 'a_type',
200
+ :description => Description.new,
201
+ :infos => [Info.new],
202
+ :coordinate_systems => [Coosys.new],
203
+ :params => [Param.new],
204
+ :links => [Link.new],
205
+ :tables => [Table.new],
206
+ :resources => [Resource.new]
207
+ }
208
+ end
209
+ end
210
+
211
+ class LinkTest < ::Test::Unit::TestCase
212
+ include Methods
213
+
214
+ def class_to_test; Link end
215
+
216
+ def inputs
217
+ {
218
+ :id => 'my_link', :content_role => 'hints', :content_type => 'text/html',
219
+ :title => 'link title', :value => 'this is value',
220
+ :href => 'http://www.google.com/', :gref => 'a gref',
221
+ :action => 'http://www.noao.edu/actions/mine'
222
+ }
223
+ end
224
+
225
+ def expected_outputs
226
+ self.inputs.merge({
227
+ :href => URI.parse('http://www.google.com/'),
228
+ :action => URI.parse('http://www.noao.edu/actions/mine')
229
+ })
230
+ end
231
+ end
232
+
233
+ class TableTest < ::Test::Unit::TestCase
234
+ include Methods
235
+
236
+ def class_to_test; Table end
237
+
238
+ def inputs
239
+ {
240
+ :id => 'my_table',
241
+ :name => 'My Table',
242
+ :ref => 'ref1',
243
+ :description => Description.new,
244
+ :data => Data.new(),
245
+ :fields => [Field.new],
246
+ :links => [Link.new]
247
+ }
248
+ end
249
+
250
+ def test_to_html
251
+ table = Table.new(
252
+ :id => 'table1',
253
+ :description => Description.new(:text => 'A test table'),
254
+ :fields => [
255
+ Field.new(:name => 'RA', :id => 'col1', :ucd => 'pos.eq.ra;meta.main',
256
+ :ref => 'J2000', :datatype => 'float', :width => 6, :precision => '2', :unit => 'deg'),
257
+ Field.new(:name => 'Dec', :id => 'col2', :ucd => 'pos.eq.dec;meta.main',
258
+ :ref => 'J2000', :datatype => 'float', :width => 6, :precision => '2', :unit => 'deg'),
259
+ Field.new(:name => 'Name', :id => 'col3', :ucd => 'meta.id;meta.main',
260
+ :datatype => 'char', :arraysize => '8*')
261
+ ],
262
+ :data => Data.new(
263
+ :format => TableData.new(
264
+ :trs => [
265
+ Tr.new(:tds => [Td.new(:text => '123'), Td.new(:text => '456'), Td.new(:text => 'my_obj1')]),
266
+ Tr.new(:tds => [Td.new(:text => '789'), Td.new(:text => '112'), Td.new(:text => 'my_obj2')]),
267
+ Tr.new(:tds => [Td.new(:text => '145'), Td.new(:text => '178'), Td.new(:text => 'my_obj3')])
268
+ ]
269
+ )
270
+ )
271
+ )
272
+
273
+ assert_equal(
274
+ '<table id="table1">' +
275
+ '<caption>A test table</caption>' +
276
+ '<thead>' +
277
+ '<tr>' +
278
+ '<th>' +
279
+ '<div class="field" id="col1">' +
280
+ '<div class="name">RA</div>' +
281
+ '<div class="ucd">pos.eq.ra;meta.main</div>' +
282
+ '<div class="unit">deg</div>' +
283
+ '<span class="datatype">float</span>' +
284
+ '</div>' +
285
+ '</th>' +
286
+ '<th>' +
287
+ '<div class="field" id="col2">' +
288
+ '<div class="name">Dec</div>' +
289
+ '<div class="ucd">pos.eq.dec;meta.main</div>' +
290
+ '<div class="unit">deg</div>' +
291
+ '<span class="datatype">float</span>' +
292
+ '</div>' +
293
+ '</th>' +
294
+ '<th>' +
295
+ '<div class="field" id="col3">' +
296
+ '<div class="name">Name</div>' +
297
+ '<div class="ucd">meta.id;meta.main</div>' +
298
+ '<span class="datatype">char</span>' +
299
+ '<span class="arraysize">8*</span>' +
300
+ '</div>' +
301
+ '</th>' +
302
+ '</tr>' +
303
+ '</thead>' +
304
+ '<tbody>' +
305
+ '<tr>' +
306
+ '<td>123</td>' +
307
+ '<td>456</td>' +
308
+ '<td>my_obj1</td>' +
309
+ '</tr>' +
310
+ '<tr>' +
311
+ '<td>789</td>' +
312
+ '<td>112</td>' +
313
+ '<td>my_obj2</td>' +
314
+ '</tr>' +
315
+ '<tr>' +
316
+ '<td>145</td>' +
317
+ '<td>178</td>' +
318
+ '<td>my_obj3</td>' +
319
+ '</tr>' +
320
+ '</tbody>' +
321
+ '</table>',
322
+ table.to_html.strip.gsub(/\n+\s*/, '')
323
+ )
324
+ end
325
+ end
326
+
327
+ class FieldTest < ::Test::Unit::TestCase
328
+ include Methods
329
+
330
+ def class_to_test; Field end
331
+
332
+ def inputs
333
+ {
334
+ :id => 'my_field',
335
+ :unit => 'm/s',
336
+ :datatype => 'float',
337
+ :precision => '3',
338
+ :width => '6',
339
+ :precision => '3',
340
+ :ref => 'my_ref',
341
+ :name => 'Velocity',
342
+ :ucd => 'phys.velocity',
343
+ :arraysize => '*',
344
+ :type => 'a_type',
345
+ :description => Description.new,
346
+ :values => [Values.new],
347
+ :links => [Link.new]
348
+ }
349
+ end
350
+
351
+ def expected_outputs
352
+ self.inputs.merge({:width => 6})
353
+ end
354
+
355
+ def test_to_html
356
+ field = Field.new(:id => 'col1', :name => 'Name', :ucd => 'meta.id;meta.main', :datatype => 'char', :arraysize => '*')
357
+ assert_equal(
358
+ '<div class="field" id="col1">' +
359
+ '<div class="name">Name</div>' +
360
+ '<div class="ucd">meta.id;meta.main</div>' +
361
+ '<span class="datatype">char</span>' +
362
+ '<span class="arraysize">*</span>' +
363
+ '</div>',
364
+ field.to_html.strip.gsub(/\n+\s*/, '')
365
+ )
366
+ end
367
+ end
368
+
369
+ class ValuesTest < ::Test::Unit::TestCase
370
+ include Methods
371
+
372
+ def class_to_test; Values end
373
+
374
+ def inputs
375
+ {
376
+ :id => 'my_values',
377
+ :type => 'a_type',
378
+ :null => ' ',
379
+ :invalid => 'true',
380
+ :max => Max.new,
381
+ :min => Min.new,
382
+ :options => [Option.new]
383
+ }
384
+ end
385
+
386
+ def test_invalid
387
+ values = Values.new(:invalid => true)
388
+ assert_equal true, values.invalid?
389
+
390
+ values.invalid = false
391
+ assert_equal false, values.invalid?
392
+ end
393
+ end
394
+
395
+ class MinTest < ::Test::Unit::TestCase
396
+ include Methods
397
+
398
+ def class_to_test; Min end
399
+
400
+ def inputs
401
+ {:value => '10.2', :inclusive => 'no'}
402
+ end
403
+
404
+ def test_inclusive
405
+ min = Min.new(self.inputs)
406
+ assert_equal false, min.inclusive?
407
+ end
408
+
409
+ def test_alternate_inclusives
410
+ min = Min.new(:inclusive => false)
411
+ assert_equal 'no', min.inclusive
412
+ min.inclusive = true
413
+ assert_equal 'yes', min.inclusive
414
+ end
415
+ end
416
+
417
+ class MaxTest < ::Test::Unit::TestCase
418
+ include Methods
419
+
420
+ def class_to_test; Max end
421
+
422
+ def inputs
423
+ {:value => '10.2', :inclusive => 'yes'}
424
+ end
425
+
426
+ def test_inclusive
427
+ max = Max.new(self.inputs)
428
+ assert_equal true, max.inclusive?
429
+ end
430
+
431
+ def test_alternate_inclusives
432
+ max = Max.new(:inclusive => false)
433
+ assert_equal 'no', max.inclusive
434
+ max.inclusive = true
435
+ assert_equal 'yes', max.inclusive
436
+ end
437
+ end
438
+
439
+ class OptionTest < ::Test::Unit::TestCase
440
+ include Methods
441
+
442
+ def class_to_test; Option end
443
+
444
+ def inputs
445
+ {
446
+ :name => 'my_option',
447
+ :value => 'blahdeblah'
448
+ }
449
+ end
450
+ end
451
+
452
+ class DataTest < ::Test::Unit::TestCase
453
+ include Methods
454
+
455
+ def class_to_test; Data end
456
+
457
+ def inputs
458
+ {
459
+ :format => TableData.new
460
+ }
461
+ end
462
+
463
+ def test_alternative_formats
464
+ data = Data.new(:format => Binary.new)
465
+ assert_equal Binary.new, data.format
466
+
467
+ data = Data.new(:format => Fits.new)
468
+ assert_equal Fits.new, data.format
469
+ end
470
+ end
471
+
472
+ class TableDataTest < ::Test::Unit::TestCase
473
+ include Methods
474
+
475
+ def class_to_test; TableData end
476
+
477
+ def inputs; {:trs => [Tr.new]} end
478
+ end
479
+
480
+ class BinaryTest < ::Test::Unit::TestCase
481
+ include Methods
482
+
483
+ def class_to_test; Binary end
484
+
485
+ def inputs; {:stream => Stream.new()} end
486
+ end
487
+
488
+ class StreamTest < ::Test::Unit::TestCase
489
+ include Methods
490
+
491
+ def class_to_test; Stream end
492
+
493
+ def inputs
494
+ {
495
+ :type => 'other', :href => 'http://www.noao.edu/', :actuate => 'onRequest',
496
+ :encoding => 'gzip', :expires => '2007-12-05T08:45:14', :rights => 'none',
497
+ :text => 'Some text'
498
+ }
499
+ end
500
+
501
+ def expected_outputs
502
+ self.inputs.merge({
503
+ :href => URI.parse(self.inputs[:href]),
504
+ :expires => DateTime.parse(self.inputs[:expires])
505
+ })
506
+ end
507
+
508
+ def test_retrieve
509
+ stream = Stream.new(:href => 'http://www.noao.edu/index.shtml')
510
+ file = stream.retrieve
511
+ #assert_kind_of Tempfile, file
512
+ assert_match /National Optical Astronomy Observatory/, file.read
513
+
514
+ stream = Stream.new(:text => 'my text')
515
+ file = stream.retrieve
516
+ assert_kind_of StringIO, file
517
+ assert_equal 'my text', file.read
518
+ end
519
+ end
520
+
521
+ class FitsTest < ::Test::Unit::TestCase
522
+ include Methods
523
+
524
+ def class_to_test; Fits end
525
+
526
+ def inputs
527
+ {
528
+ :extnum => '2',
529
+ :stream => Stream.new
530
+ }
531
+ end
532
+
533
+ def expected_outputs
534
+ self.inputs.merge({:extnum => 2})
535
+ end
536
+
537
+ # def test_to_rfits
538
+ # fits = Fits.new(:stream => Stream.new(:href => 'http://fits.gsfc.nasa.gov/nrao_data/samples/image/swp05569slg.fits'))
539
+ # rfits = fits.to_rfits
540
+ #
541
+ # (VORuby.rfits?) ? assert_kind_of(RFits::File, rfits) : assert_kind_of(Tempfile, rfits)
542
+ # end
543
+ end
544
+
545
+ class TrTest < ::Test::Unit::TestCase
546
+ include Methods
547
+
548
+ def class_to_test; Tr end
549
+
550
+ def inputs; {:tds => [Td.new]} end
551
+
552
+ def test_to_html
553
+ tr = Tr.new(:tds => [Td.new(:text => 'hello'), Td.new(:text => 'world')])
554
+ assert_equal("<tr><td>hello</td><td>world</td></tr>", tr.to_html.strip.gsub(/\n+\s*/, ''))
555
+ end
556
+ end
557
+
558
+ class TdTest < ::Test::Unit::TestCase
559
+ include Methods
560
+
561
+ def class_to_test; Td end
562
+
563
+ def inputs
564
+ {
565
+ :ref => 'my_ref1',
566
+ :text => 'my value'
567
+ }
568
+ end
569
+
570
+ def test_casting
571
+ table = Table.new(
572
+ :fields => [
573
+ Field.new(:name => 'col1', :datatype => 'boolean'),
574
+ Field.new(:name => 'col1_2', :datatype => 'boolean', :arraysize => '*'),
575
+ Field.new(:name => 'col2', :datatype => 'bit'),
576
+ Field.new(:name => 'col2_2', :datatype => 'bit', :arraysize => '*'),
577
+ Field.new(:name => 'col3', :datatype => 'unsignedByte'),
578
+ Field.new(:name => 'col3_2', :datatype => 'unsignedByte', :arraysize => '*'),
579
+ Field.new(:name => 'col4', :datatype => 'short'),
580
+ Field.new(:name => 'col4_2', :datatype => 'short', :arraysize => '*'),
581
+ Field.new(:name => 'col5', :datatype => 'int'),
582
+ Field.new(:name => 'col5_2', :datatype => 'int', :arraysize => '*'),
583
+ Field.new(:name => 'col6', :datatype => 'long'),
584
+ Field.new(:name => 'col6_2', :datatype => 'long', :arraysize => '*'),
585
+ Field.new(:name => 'col7', :datatype => 'char'),
586
+ Field.new(:name => 'col7_2', :datatype => 'char', :arraysize => '*'),
587
+ Field.new(:name => 'col8', :datatype => 'unicodeChar'),
588
+ Field.new(:name => 'col8_2', :datatype => 'unicodeChar', :arraysize => '*'),
589
+ Field.new(:name => 'col9', :datatype => 'float'),
590
+ Field.new(:name => 'col9_2', :datatype => 'float', :arraysize => '*'),
591
+ Field.new(:name => 'col10', :datatype => 'double'),
592
+ Field.new(:name => 'col10_2', :datatype => 'double', :arraysize => '*'),
593
+ Field.new(:name => 'col11', :datatype => 'floatComplex'),
594
+ Field.new(:name => 'col11_2', :datatype => 'floatComplex', :arraysize => '*'),
595
+ Field.new(:name => 'col12', :datatype => 'doubleComplex'),
596
+ Field.new(:name => 'col12_2', :datatype => 'doubleComplex', :arraysize => '*')
597
+ ],
598
+ :data => Data.new(
599
+ :format => TableData.new(
600
+ :trs => [
601
+ Tr.new(:tds => [
602
+ Td.new(:text => 't'),
603
+ Td.new(:text => 't f 1 true false 0'),
604
+ Td.new(:text => '1'),
605
+ Td.new(:text => '1 1 0 1 1'),
606
+ Td.new(:text => 'a'),
607
+ Td.new(:text => 'a b c d'),
608
+ Td.new(:text => '34'),
609
+ Td.new(:text => '34 12 4 1'),
610
+ Td.new(:text => '100'),
611
+ Td.new(:text => '100 101 102'),
612
+ Td.new(:text => '1000'),
613
+ Td.new(:text => '1000 1001 1002'),
614
+ Td.new(:text => 'a'),
615
+ Td.new(:text => 'hello'),
616
+ Td.new(:text => 'b'),
617
+ Td.new(:text => 'world'),
618
+ Td.new(:text => '12.1'),
619
+ Td.new(:text => '1.1 2.2 3.3'),
620
+ Td.new(:text => '1000'),
621
+ Td.new(:text => '100.1, 200.2, 300.3'),
622
+ Td.new(:text => '7.2 5.5'),
623
+ Td.new(:text => '1.1 10.1 3.2 2.2 9.0 7.1')
624
+ ])
625
+ ]
626
+ )
627
+ )
628
+ )
629
+
630
+ tr = table.data.format.trs.first
631
+
632
+ # Retrieval...
633
+ assert_equal true, tr.tds[0].value
634
+ assert_equal [true, false, true, true, false, false], tr.tds[1].value
635
+ assert_equal 1, tr.tds[2].value
636
+ assert_equal [1, 1, 0, 1, 1], tr.tds[3].value
637
+ assert_equal 97, tr.tds[4].value
638
+ assert_equal [97, 98, 99, 100], tr.tds[5].value
639
+ assert_equal 34, tr.tds[6].value
640
+ assert_equal [34, 12, 4, 1], tr.tds[7].value
641
+ assert_equal 100, tr.tds[8].value
642
+ assert_equal [100, 101, 102], tr.tds[9].value
643
+ assert_equal 1000, tr.tds[10].value
644
+ assert_equal [1000, 1001, 1002], tr.tds[11].value
645
+ assert_equal 'a', tr.tds[12].value
646
+ assert_equal 'hello', tr.tds[13].value
647
+ assert_equal 'b', tr.tds[14].value
648
+ assert_equal 'world', tr.tds[15].value
649
+ assert_equal 12.1, tr.tds[16].value
650
+ assert_equal [1.1, 2.2, 3.3], tr.tds[17].value
651
+ assert_equal 1000, tr.tds[18].value
652
+ assert_equal [100.1, 200.2, 300.3], tr.tds[19].value
653
+ assert_equal Complex.new(7.2, 5.5), tr.tds[20].value
654
+ assert_equal [Complex.new(1.1, 10.1), Complex.new(3.2, 2.2), Complex.new(9.0, 7.1)], tr.tds[21].value
655
+
656
+ # Setters
657
+ tr.tds[0].value = true
658
+ assert_equal true, tr.tds[0].value
659
+ tr.tds[2].value = 1
660
+ assert_equal 1, tr.tds[2].value
661
+ tr.tds[4].value = 'a'
662
+ assert_equal 97, tr.tds[4].value
663
+ tr.tds[6].value = 1000
664
+ assert_equal 1000, tr.tds[6].value
665
+ tr.tds[8].value = 10000
666
+ assert_equal 10000, tr.tds[8].value
667
+ tr.tds[10].value = 1000000
668
+ assert_equal 1000000, tr.tds[10].value
669
+ tr.tds[12].value = 'b'
670
+ assert_equal 'b', tr.tds[12].value
671
+ tr.tds[14].value = 'B'
672
+ assert_equal 'B', tr.tds[14].value
673
+ tr.tds[16].value = 1.1
674
+ assert_equal 1.1, tr.tds[16].value
675
+ tr.tds[18].value = 10001.1
676
+ assert_equal 10001.1, tr.tds[18].value
677
+ tr.tds[20].value = Complex.new(1.1, 2.2)
678
+ assert_equal Complex.new(1.1, 2.2), tr.tds[20].value
679
+
680
+ # This should be an array...
681
+ assert_raise RuntimeError do
682
+ tr.tds[1].value = 1
683
+ end
684
+
685
+ # And this should be a scalar...
686
+ assert_raise RuntimeError do
687
+ tr.tds[0].value = [1, 0, 1, 1]
688
+ end
689
+ end
690
+
691
+ def test_to_html
692
+ td = Td.new(:text => '1 1 0 1 1')
693
+ assert_equal("<td>1 1 0 1 1</td>", td.to_html.strip.gsub(/\n+\s*/, ''))
694
+ end
695
+ end
696
+
697
+ class NSVOTableTest < ::Test::Unit::TestCase
698
+ def test_ns
699
+ votable = VOTable.new(File.open('test/voruby/votable/1.0/votable.ns.xml'))
700
+ table = votable.resources.first.tables.first
701
+
702
+ assert_equal 'ra', table.fields[-3].name
703
+ assert_equal 'double', table.fields[-3].datatype
704
+ assert_equal 10, table.fields[-3].width
705
+
706
+ assert_equal -14.0986, table.data.format.trs.first.tds[3].value
707
+ assert_equal 1.0456679, table.data.format.trs[1].tds[-2].value
708
+ end
709
+ end
710
+
711
+ end
712
+ end
713
+ end
714
+ end