voruby2-preview 1.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.
@@ -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