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.
- data/LICENSE +339 -0
- data/Rakefile.rb +113 -0
- data/lib/symphony.rb +1 -0
- data/lib/symphony/symphony.rb +247 -0
- data/lib/voruby.rb +186 -0
- data/lib/voruby/misc/libxml_ext.rb +121 -0
- data/lib/voruby/misc/rexml_ext.rb +223 -0
- data/lib/voruby/resolver/resolver.rb +12 -0
- data/lib/voruby/resolver/sesame.rb +299 -0
- data/lib/voruby/votable/1.0/votable.rb +1807 -0
- data/lib/voruby/votable/1.1/votable.rb +2100 -0
- data/lib/voruby/votable/votable.rb +308 -0
- data/lib/voruby/wesix/wesix.rb +491 -0
- data/test/voruby/resolver/sesame/test.rb +56 -0
- data/test/voruby/votable/1.0/test.rb +714 -0
- data/test/voruby/votable/1.0/votable.basic.xml +660 -0
- data/test/voruby/votable/1.0/votable.html +86 -0
- data/test/voruby/votable/1.0/votable.ns.xml +56 -0
- data/test/voruby/votable/1.1/test.rb +785 -0
- data/test/voruby/votable/1.1/votable.basic.xml +38 -0
- data/test/voruby/votable/1.1/votable.html +86 -0
- data/test/voruby/votable/1.1/votable.large.xml +168492 -0
- data/test/voruby/votable/1.1/votable.ns.xml +56 -0
- data/test/voruby/votable/test.rb +15 -0
- data/test/voruby/wesix/test.rb +268 -0
- data/test/voruby/wesix/testr.fits +28 -0
- metadata +119 -0
@@ -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
|