lotus-utils 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,132 +0,0 @@
1
- require 'test_helper'
2
- require 'lotus/utils/class_attribute'
3
-
4
- describe Lotus::Utils::ClassAttribute do
5
- before do
6
- class ClassAttributeTest
7
- include Lotus::Utils::ClassAttribute
8
- class_attribute :callbacks, :functions, :values
9
- self.callbacks = [:a]
10
- self.values = [1]
11
- end
12
-
13
- class SubclassAttributeTest < ClassAttributeTest
14
- class_attribute :subattribute
15
- self.functions = [:x, :y]
16
- self.subattribute = 42
17
- end
18
-
19
- class SubSubclassAttributeTest < SubclassAttributeTest
20
- end
21
-
22
- class Vehicle
23
- include Lotus::Utils::ClassAttribute
24
- class_attribute :engines, :wheels
25
-
26
- self.engines = 0
27
- self.wheels = 0
28
- end
29
-
30
- class Car < Vehicle
31
- self.engines = 1
32
- self.wheels = 4
33
- end
34
-
35
- class Airplane < Vehicle
36
- self.engines = 4
37
- self.wheels = 16
38
- end
39
-
40
- class SmallAirplane < Airplane
41
- self.engines = 2
42
- self.wheels = 8
43
- end
44
- end
45
-
46
- after do
47
- [:ClassAttributeTest,
48
- :SubclassAttributeTest,
49
- :SubSubclassAttributeTest,
50
- :Vehicle,
51
- :Car,
52
- :Airplane,
53
- :SmallAirplane].each do |const|
54
- Object.send :remove_const, const
55
- end
56
- end
57
-
58
- it 'sets the given value' do
59
- ClassAttributeTest.callbacks.must_equal([:a])
60
- end
61
-
62
- it 'the value it is inherited by subclasses' do
63
- SubclassAttributeTest.callbacks.must_equal([:a])
64
- end
65
-
66
- it 'if the superclass value changes it does not affects subclasses' do
67
- ClassAttributeTest.functions = [:y]
68
- SubclassAttributeTest.functions.must_equal([:x, :y])
69
- end
70
-
71
- it 'if the subclass value changes it does not affects superclass' do
72
- SubclassAttributeTest.values = [3,2]
73
- ClassAttributeTest.values.must_equal([1])
74
- end
75
-
76
- describe 'when the subclass is defined in a different namespace' do
77
- before do
78
- module Lts
79
- module Routing
80
- class Resource
81
- class Action
82
- include Lotus::Utils::ClassAttribute
83
- class_attribute :verb
84
- end
85
-
86
- class New < Action
87
- self.verb = :get
88
- end
89
- end
90
-
91
- class Resources < Resource
92
- class New < Resource::New
93
- end
94
- end
95
- end
96
- end
97
- end
98
-
99
- it 'refers to the superclass value' do
100
- Lts::Routing::Resources::New.verb.must_equal :get
101
- end
102
- end
103
-
104
- # it 'if the subclass value changes it affects subclasses' do
105
- # values = [3,2]
106
- # SubclassAttributeTest.values = values
107
- # SubclassAttributeTest.values.must_equal(values)
108
- # SubSubclassAttributeTest.values.must_equal(values)
109
- # end
110
-
111
- it 'if the subclass defines an attribute it should not be available for the superclass' do
112
- -> { ClassAttributeTest.subattribute }.must_raise(NoMethodError)
113
- end
114
-
115
- it 'if the subclass defines an attribute it should be available for its subclasses' do
116
- SubSubclassAttributeTest.subattribute.must_equal 42
117
- end
118
-
119
- it 'preserves values within the inheritance chain' do
120
- Vehicle.engines.must_equal 0
121
- Vehicle.wheels.must_equal 0
122
-
123
- Car.engines.must_equal 1
124
- Car.wheels.must_equal 4
125
-
126
- Airplane.engines.must_equal 4
127
- Airplane.wheels.must_equal 16
128
-
129
- SmallAirplane.engines.must_equal 2
130
- SmallAirplane.wheels.must_equal 8
131
- end
132
- end
data/test/class_test.rb DELETED
@@ -1,47 +0,0 @@
1
- require 'test_helper'
2
- require 'lotus/utils/class'
3
-
4
- describe Lotus::Utils::Class do
5
- describe '.load!' do
6
- before do
7
- module App
8
- module Layer
9
- class Step
10
- end
11
- end
12
-
13
- module Service
14
- class Point
15
- end
16
- end
17
-
18
- class ServicePoint
19
- end
20
- end
21
- end
22
-
23
- it 'loads the class from the given static string' do
24
- Lotus::Utils::Class.load!('App::Layer::Step').must_equal(App::Layer::Step)
25
- end
26
-
27
- it 'raises error for missing constant' do
28
- -> { Lotus::Utils::Class.load!('MissingConstant') }.must_raise(NameError)
29
- end
30
-
31
- it 'loads the class from given string, by interpolating tokens' do
32
- Lotus::Utils::Class.load!('App::Service(::Point|Point)').must_equal(App::Service::Point)
33
- end
34
-
35
- it 'loads the class from given string, by interpolating string tokens and respecting their order' do
36
- Lotus::Utils::Class.load!('App::Service(Point|::Point)').must_equal(App::ServicePoint)
37
- end
38
-
39
- it 'loads the class from given string, by interpolating tokens and not stopping after first fail' do
40
- Lotus::Utils::Class.load!('App::(Layer|Layer::)Step').must_equal(App::Layer::Step)
41
- end
42
-
43
- it 'loads class from given string and namespace' do
44
- Lotus::Utils::Class.load!('(Layer|Layer::)Step', App).must_equal(App::Layer::Step)
45
- end
46
- end
47
- end
data/test/hash_test.rb DELETED
@@ -1,35 +0,0 @@
1
- require 'test_helper'
2
- require 'lotus/utils/hash'
3
-
4
- describe Lotus::Utils::Hash do
5
- it 'acts as a Ruby standard Hash' do
6
- hash = Lotus::Utils::Hash.new
7
- hash.must_be_kind_of(::Hash)
8
-
9
- ::Hash.new.methods.each do |m|
10
- hash.must_respond_to(m)
11
- end
12
- end
13
-
14
- it 'holds values passed to the constructor' do
15
- hash = Lotus::Utils::Hash.new('foo' => 'bar')
16
- hash['foo'].must_equal('bar')
17
- end
18
-
19
- describe '#symbolize!' do
20
- it 'symbolize keys' do
21
- hash = Lotus::Utils::Hash.new('fub' => 'baz')
22
- hash.symbolize!
23
-
24
- hash['fub'].must_be_nil
25
- hash[:fub].must_equal('baz')
26
- end
27
-
28
- it 'symbolize nested hashes' do
29
- hash = Lotus::Utils::Hash.new('nested' => {'key' => 'value'})
30
- hash.symbolize!
31
-
32
- hash[:nested][:key].must_equal('value')
33
- end
34
- end
35
- end
data/test/io_test.rb DELETED
@@ -1,29 +0,0 @@
1
- require 'test_helper'
2
- require 'lotus/utils/io'
3
-
4
- class IOTest
5
- TEST_CONSTANT = 'initial'
6
- end
7
-
8
- describe Lotus::Utils::IO do
9
- describe '.silence_warnings' do
10
- it 'lowers verbosity of stdout' do
11
- begin
12
- position = STDOUT.tell
13
-
14
- Lotus::Utils::IO.silence_warnings do
15
- IOTest::TEST_CONSTANT = 'redefined'
16
- end
17
-
18
- IOTest::TEST_CONSTANT.must_equal('redefined')
19
- STDOUT.tell.must_equal(position)
20
- rescue Errno::ESPIPE
21
- puts 'Skipping this test, IO#tell is not supported in this environment'
22
-
23
- Lotus::Utils::IO.silence_warnings do
24
- IOTest::TEST_CONSTANT = 'redefined'
25
- end
26
- end
27
- end
28
- end
29
- end
data/test/kernel_test.rb DELETED
@@ -1,1752 +0,0 @@
1
- require 'test_helper'
2
- require 'bigdecimal'
3
- require 'lotus/utils/kernel'
4
-
5
- describe Lotus::Utils::Kernel do
6
- describe '.Array' do
7
- describe 'successful operations' do
8
- before do
9
- ResultSet = Struct.new(:records) do
10
- def to_a
11
- records.to_a.sort
12
- end
13
- end
14
-
15
- Response = Struct.new(:status, :headers, :body) do
16
- def to_ary
17
- [status, headers, body]
18
- end
19
- end
20
-
21
- @result = Lotus::Utils::Kernel.Array(input)
22
- end
23
-
24
- after do
25
- Object.send(:remove_const, :ResultSet)
26
- Object.send(:remove_const, :Response)
27
- end
28
-
29
- describe 'when nil is given' do
30
- let(:input) { nil }
31
-
32
- it 'returns an empty array' do
33
- @result.must_equal nil
34
- end
35
- end
36
-
37
- describe 'when true is given' do
38
- let(:input) { true }
39
-
40
- it 'returns an empty array' do
41
- @result.must_equal [true]
42
- end
43
- end
44
-
45
- describe 'when false is given' do
46
- let(:input) { false }
47
-
48
- it 'returns an empty array' do
49
- @result.must_equal [false]
50
- end
51
- end
52
-
53
- describe 'when an object is given' do
54
- let(:input) { Object.new }
55
-
56
- it 'returns an array' do
57
- @result.must_equal [input]
58
- end
59
- end
60
-
61
- describe 'when an array is given' do
62
- let(:input) { [Object.new] }
63
-
64
- it 'returns an array' do
65
- @result.must_equal input
66
- end
67
- end
68
-
69
- describe 'when a nested array is given' do
70
- let(:input) { [1, [2, 3]] }
71
-
72
- it 'returns a flatten array' do
73
- @result.must_equal [1,2,3]
74
- end
75
- end
76
-
77
- describe 'when an array with nil values is given' do
78
- let(:input) { [1, [nil, 3]] }
79
-
80
- it 'returns a compacted array' do
81
- @result.must_equal [1,3]
82
- end
83
- end
84
-
85
- describe 'when an array with duplicated values is given' do
86
- let(:input) { [2, [2, 3]] }
87
-
88
- it 'returns an array with uniq values' do
89
- @result.must_equal [2,3]
90
- end
91
- end
92
-
93
- describe 'when a set is given' do
94
- let(:input) { Set.new([33,12]) }
95
-
96
- it 'returns an array with uniq values' do
97
- @result.must_equal [33, 12]
98
- end
99
- end
100
-
101
- describe 'when a object that implements #to_a is given' do
102
- let(:input) { ResultSet.new([2,1,3]) }
103
-
104
- it 'returns an array' do
105
- @result.must_equal [1,2,3]
106
- end
107
- end
108
-
109
- describe 'when a object that implements #to_ary is given' do
110
- let(:input) { Response.new(200, {}, 'hello') }
111
-
112
- it 'returns an array' do
113
- @result.must_equal [200, {}, 'hello']
114
- end
115
- end
116
- end
117
-
118
- describe 'failure operations' do
119
- describe "when a object that doesn't implements #nil? is given" do
120
- let(:input) { BasicObject.new }
121
-
122
- it 'raises an error' do
123
- -> { Lotus::Utils::Kernel.Array(input) }.must_raise NoMethodError
124
- end
125
- end
126
- end
127
- end
128
-
129
- describe '.Set' do
130
- before do
131
- UuidSet = Class.new do
132
- def initialize(*uuids)
133
- @uuids = uuids
134
- end
135
-
136
- def to_set
137
- Set.new.tap do |set|
138
- @uuids.each {|uuid| set.add(uuid) }
139
- end
140
- end
141
- end
142
-
143
- BaseObject = Class.new(BasicObject) do
144
- def nil?
145
- false
146
- end
147
- end
148
- end
149
-
150
- after do
151
- Object.send(:remove_const, :UuidSet)
152
- Object.send(:remove_const, :BaseObject)
153
- end
154
-
155
- describe 'successful operations' do
156
- before do
157
- @result = Lotus::Utils::Kernel.Set(input)
158
- end
159
-
160
- describe 'when nil is given' do
161
- let(:input) { nil }
162
-
163
- it 'returns nil' do
164
- @result.must_equal nil
165
- end
166
- end
167
-
168
- describe 'when true is given' do
169
- let(:input) { true }
170
-
171
- it 'returns a set' do
172
- @result.must_equal Set.new([true])
173
- end
174
- end
175
-
176
- describe 'when false is given' do
177
- let(:input) { false }
178
-
179
- it 'returns a set' do
180
- @result.must_equal Set.new([false])
181
- end
182
- end
183
-
184
- describe 'when an object is given' do
185
- let(:input) { Object.new }
186
-
187
- it 'returns an set' do
188
- @result.must_equal Set.new([input])
189
- end
190
- end
191
-
192
- describe 'when an array is given' do
193
- let(:input) { [1] }
194
-
195
- it 'returns an set' do
196
- @result.must_equal Set.new(input)
197
- end
198
- end
199
-
200
- describe 'when an hash is given' do
201
- let(:input) { Hash[a: 1] }
202
-
203
- it 'returns an set' do
204
- @result.must_equal Set.new([[:a, 1]])
205
- end
206
- end
207
-
208
- describe 'when a set is given' do
209
- let(:input) { Set.new([Object.new]) }
210
-
211
- it 'returns self' do
212
- @result.must_equal input
213
- end
214
- end
215
-
216
- describe 'when a nested array is given' do
217
- let(:input) { [1, [2, 3]] }
218
-
219
- it 'returns it wraps in a set' do
220
- @result.must_equal Set.new([1, [2, 3]])
221
- end
222
- end
223
-
224
- describe 'when an array with nil values is given' do
225
- let(:input) { [1, [nil, 3]] }
226
-
227
- it 'returns it wraps in a set' do
228
- @result.must_equal Set.new([1, [nil, 3]])
229
- end
230
- end
231
-
232
- describe 'when an set with duplicated values is given' do
233
- let(:input) { [2, 3, 3] }
234
-
235
- it 'returns an set with uniq values' do
236
- @result.must_equal Set.new([2,3])
237
- end
238
- end
239
-
240
- describe 'when an set with nested duplicated values is given' do
241
- let(:input) { [2, [2, 3]] }
242
-
243
- it 'returns it wraps in a set' do
244
- @result.must_equal Set.new([2, [2,3]])
245
- end
246
- end
247
-
248
- describe 'when a object that implements #to_set is given' do
249
- let(:input) { UuidSet.new(*args) }
250
- let(:args) { [SecureRandom.uuid, SecureRandom.uuid] }
251
-
252
- it 'returns an set' do
253
- @result.must_equal Set.new(args)
254
- end
255
- end
256
- end
257
-
258
- describe 'failure operations' do
259
- describe "when a an object that doesn't implement #nil?" do
260
- let(:input) { BasicObject.new }
261
-
262
- it 'raises error' do
263
- -> { Lotus::Utils::Kernel.Set(input) }.must_raise(NoMethodError)
264
- end
265
- end
266
-
267
- describe "when a an object that doesn't implement #respond_to?" do
268
- let(:input) { BaseObject.new }
269
-
270
- it 'raises error' do
271
- -> { Lotus::Utils::Kernel.Set(input) }.must_raise(NoMethodError)
272
- end
273
- end
274
- end
275
- end
276
-
277
- describe '.Hash' do
278
- before do
279
- Room = Class.new do
280
- def initialize(*args)
281
- @args = args
282
- end
283
-
284
- def to_h
285
- Hash[*@args]
286
- end
287
- end
288
-
289
- Record = Class.new do
290
- def initialize(attributes = {})
291
- @attributes = attributes
292
- end
293
-
294
- def to_hash
295
- @attributes
296
- end
297
- end
298
-
299
- BaseObject = Class.new(BasicObject) do
300
- def nil?
301
- false
302
- end
303
- end
304
- end
305
-
306
- after do
307
- Object.send(:remove_const, :Room)
308
- Object.send(:remove_const, :Record)
309
- Object.send(:remove_const, :BaseObject)
310
- end
311
-
312
- describe 'successful operations' do
313
- before do
314
- @result = Lotus::Utils::Kernel.Hash(input)
315
- end
316
-
317
- describe 'when nil is given' do
318
- let(:input) { nil }
319
-
320
- it 'returns an empty hash' do
321
- @result.must_equal nil
322
- end
323
- end
324
-
325
- describe 'when an hash is given' do
326
- let(:input) { Hash[l: 23] }
327
-
328
- it 'returns the input' do
329
- @result.must_equal input
330
- end
331
- end
332
-
333
- describe 'when an array is given' do
334
- let(:input) { [[:a, 1]] }
335
-
336
- it 'returns an hash' do
337
- @result.must_equal Hash[a: 1]
338
- end
339
- end
340
-
341
- describe 'when a set is given' do
342
- let(:input) { Set.new([['x', 12]]) }
343
-
344
- it 'returns an hash' do
345
- @result.must_equal Hash['x' => 12]
346
- end
347
- end
348
-
349
- describe 'when a object that implements #to_h is given' do
350
- let(:input) { Room.new(:key, 123456) }
351
-
352
- it 'returns an hash' do
353
- @result.must_equal Hash[key: 123456]
354
- end
355
- end
356
-
357
- describe 'when a object that implements #to_hash is given' do
358
- let(:input) { Record.new(name: 'L') }
359
-
360
- it 'returns an hash' do
361
- @result.must_equal Hash[name: 'L']
362
- end
363
- end
364
- end
365
-
366
- describe 'failure operations' do
367
- describe "when a an object that doesn't implement #nil?" do
368
- let(:input) { BasicObject.new }
369
-
370
- it 'raises error' do
371
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(NoMethodError)
372
- end
373
- end
374
-
375
- describe "when a an object that doesn't implement #respond_to?" do
376
- let(:input) { BaseObject.new }
377
-
378
- it 'raises error' do
379
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(NoMethodError)
380
- end
381
- end
382
-
383
- describe 'when true is given' do
384
- let(:input) { true }
385
-
386
- it 'raises error' do
387
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(TypeError)
388
- end
389
- end
390
-
391
- describe 'when false is given' do
392
- let(:input) { false }
393
-
394
- it 'raises error' do
395
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(TypeError)
396
- end
397
- end
398
-
399
- describe 'when an array with one element is given' do
400
- let(:input) { [1] }
401
-
402
- it 'raises error' do
403
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(TypeError)
404
- end
405
- end
406
-
407
- if RUBY_VERSION >= '2.1'
408
- describe 'when an array with two elements is given' do
409
- let(:input) { [:a, 1] }
410
-
411
- it 'raises error' do
412
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(TypeError)
413
- end
414
- end
415
- end
416
-
417
- describe 'when a set of one element is given' do
418
- let(:input) { Set.new([1]) }
419
-
420
- it 'raises error' do
421
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(TypeError)
422
- end
423
- end
424
-
425
- if RUBY_VERSION >= '2.1'
426
- describe 'when a set of two elements is given' do
427
- let(:input) { Set.new([:a, 1]) }
428
-
429
- it 'raises error' do
430
- -> { Lotus::Utils::Kernel.Hash(input) }.must_raise(TypeError)
431
- end
432
- end
433
- end
434
- end
435
- end
436
-
437
- describe '.Integer' do
438
- describe 'successful operations' do
439
- before do
440
- PersonFavNumber = Struct.new(:name) do
441
- def to_int
442
- 23
443
- end
444
- end
445
-
446
- @result = Lotus::Utils::Kernel.Integer(input)
447
- end
448
-
449
- after do
450
- Object.send(:remove_const, :PersonFavNumber)
451
- end
452
-
453
- describe 'when nil is given' do
454
- let(:input) { nil }
455
-
456
- it 'returns nil' do
457
- @result.must_equal nil
458
- end
459
- end
460
-
461
- describe 'when a fixnum given' do
462
- let(:input) { 1 }
463
-
464
- it 'returns an integer' do
465
- @result.must_equal 1
466
- end
467
- end
468
-
469
- describe 'when a float is given' do
470
- let(:input) { 1.2 }
471
-
472
- it 'returns an integer' do
473
- @result.must_equal 1
474
- end
475
- end
476
-
477
- describe 'when a string given' do
478
- let(:input) { '23' }
479
-
480
- it 'returns an integer' do
481
- @result.must_equal 23
482
- end
483
- end
484
-
485
- describe 'when a string representing a float number is given' do
486
- let(:input) { '23.4' }
487
-
488
- it 'returns an integer' do
489
- @result.must_equal 23
490
- end
491
- end
492
-
493
- describe 'when an octal is given' do
494
- let(:input) { 011 }
495
-
496
- it 'returns the string representation' do
497
- @result.must_equal 9
498
- end
499
- end
500
-
501
- describe 'when a hex is given' do
502
- let(:input) { 0xf5 }
503
-
504
- it 'returns the string representation' do
505
- @result.must_equal 245
506
- end
507
- end
508
-
509
- describe 'when a bignum is given' do
510
- let(:input) { 13289301283 ** 2 }
511
-
512
- it 'returns an bignum' do
513
- @result.must_equal 176605528590345446089
514
- end
515
- end
516
-
517
- describe 'when a bigdecimal is given' do
518
- let(:input) { BigDecimal.new('12.0001') }
519
-
520
- it 'returns an bignum' do
521
- @result.must_equal 12
522
- end
523
- end
524
-
525
- describe 'when a complex number is given' do
526
- let(:input) { Complex(0.3) }
527
-
528
- it 'returns an integer' do
529
- @result.must_equal 0
530
- end
531
- end
532
-
533
- describe 'when a string representing a complex number is given' do
534
- let(:input) { '2.5/1' }
535
-
536
- it 'returns an integer' do
537
- @result.must_equal 2
538
- end
539
- end
540
-
541
- describe 'when a rational number is given' do
542
- let(:input) { Rational(0.3) }
543
-
544
- it 'returns an integer' do
545
- @result.must_equal 0
546
- end
547
- end
548
-
549
- describe 'when a string representing a rational number is given' do
550
- let(:input) { '2/3' }
551
-
552
- it 'returns an integer' do
553
- @result.must_equal 2
554
- end
555
- end
556
-
557
- describe 'when a time is given' do
558
- let(:input) { Time.at(0).utc }
559
-
560
- it 'returns the string representation' do
561
- @result.must_equal 0
562
- end
563
- end
564
-
565
- describe 'when an object that implements #to_int is given' do
566
- let(:input) { PersonFavNumber.new('Luca') }
567
-
568
- it 'returns an integer' do
569
- @result.must_equal 23
570
- end
571
- end
572
- end
573
-
574
- describe 'failure operations' do
575
- describe 'true is given' do
576
- let(:input) { true }
577
-
578
- it 'raises error' do
579
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(TypeError)
580
- end
581
- end
582
-
583
- describe 'false is given' do
584
- let(:input) { false }
585
-
586
- it 'raises error' do
587
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(TypeError)
588
- end
589
- end
590
-
591
- describe 'when a date is given' do
592
- let(:input) { Date.today }
593
-
594
- it 'raises error' do
595
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(TypeError)
596
- end
597
- end
598
-
599
- describe 'when a datetime is given' do
600
- let(:input) { DateTime.now }
601
-
602
- it 'raises error' do
603
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(TypeError)
604
- end
605
- end
606
-
607
- describe "when a an object that doesn't implement #nil? " do
608
- let(:input) { BasicObject.new }
609
-
610
- it 'raises error' do
611
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(NoMethodError)
612
- end
613
- end
614
-
615
- describe "when a an object that doesn't implement any integer interface" do
616
- let(:input) { OpenStruct.new(color: 'purple') }
617
-
618
- it 'raises error' do
619
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(TypeError)
620
- end
621
- end
622
-
623
- describe 'when a bigdecimal infinity is given' do
624
- let(:input) { BigDecimal.new('Infinity') }
625
-
626
- it 'raises error' do
627
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(FloatDomainError)
628
- end
629
- end
630
-
631
- describe 'when a bigdecimal NaN is given' do
632
- let(:input) { BigDecimal.new('NaN') }
633
-
634
- it 'raises error' do
635
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(FloatDomainError)
636
- end
637
- end
638
-
639
- describe 'when a big complex number is given' do
640
- let(:input) { Complex(2,3) }
641
-
642
- it 'raises error' do
643
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(RangeError)
644
- end
645
- end
646
-
647
- describe 'when a big rational number is given' do
648
- let(:input) { Rational(-8) ** Rational(1, 3) }
649
-
650
- it 'raises error' do
651
- -> { Lotus::Utils::Kernel.Integer(input) }.must_raise(RangeError)
652
- end
653
- end
654
- end
655
- end
656
-
657
- describe '.Float' do
658
- describe 'successful operations' do
659
- before do
660
- class Pi
661
- def to_f
662
- 3.14
663
- end
664
- end
665
-
666
- @result = Lotus::Utils::Kernel.Float(input)
667
- end
668
-
669
- after do
670
- Object.send(:remove_const, :Pi)
671
- end
672
-
673
- describe 'when nil is given' do
674
- let(:input) { nil }
675
-
676
- it 'returns nil' do
677
- @result.must_equal nil
678
- end
679
- end
680
-
681
- describe 'when a float is given' do
682
- let(:input) { 1.2 }
683
-
684
- it 'returns the argument' do
685
- @result.must_equal 1.2
686
- end
687
- end
688
-
689
- describe 'when a fixnum given' do
690
- let(:input) { 1 }
691
-
692
- it 'returns a float' do
693
- @result.must_be_kind_of(Float)
694
- @result.must_equal 1.0
695
- end
696
- end
697
-
698
- describe 'when a string given' do
699
- let(:input) { '23' }
700
-
701
- it 'returns a float' do
702
- @result.must_be_kind_of(Float)
703
- @result.must_equal 23.0
704
- end
705
- end
706
-
707
- describe 'when a string representing a float number is given' do
708
- let(:input) { '23.4' }
709
-
710
- it 'returns a float' do
711
- @result.must_be_kind_of(Float)
712
- @result.must_equal 23.4
713
- end
714
- end
715
-
716
- describe 'when an octal is given' do
717
- let(:input) { 011 }
718
-
719
- it 'returns the base 10 float' do
720
- @result.must_equal 9.0
721
- end
722
- end
723
-
724
- describe 'when a hex is given' do
725
- let(:input) { 0xf5 }
726
-
727
- it 'returns the base 10 float' do
728
- @result.must_equal 245.0
729
- end
730
- end
731
-
732
- describe 'when a bignum is given' do
733
- let(:input) { 13289301283 ** 2 }
734
-
735
- it 'returns a float' do
736
- @result.must_be_kind_of(Float)
737
- @result.must_equal 176605528590345446089.0
738
- end
739
- end
740
-
741
- describe 'when a bigdecimal is given' do
742
- let(:input) { BigDecimal.new('12.0001') }
743
-
744
- it 'returns a float' do
745
- @result.must_be_kind_of(Float)
746
- @result.must_equal 12.0001
747
- end
748
- end
749
-
750
- describe 'when a bigdecimal infinity is given' do
751
- let(:input) { BigDecimal.new('Infinity') }
752
-
753
- it 'returns Infinity' do
754
- @result.must_be_kind_of(Float)
755
- @result.to_s.must_equal 'Infinity'
756
- end
757
- end
758
-
759
- describe 'when a bigdecimal NaN is given' do
760
- let(:input) { BigDecimal.new('NaN') }
761
-
762
- it 'returns NaN' do
763
- @result.must_be_kind_of(Float)
764
- @result.to_s.must_equal 'NaN'
765
- end
766
- end
767
-
768
- describe 'when a complex number is given' do
769
- let(:input) { Complex(0.3) }
770
-
771
- it 'returns a float' do
772
- @result.must_be_kind_of(Float)
773
- @result.must_equal 0.3
774
- end
775
- end
776
-
777
- describe 'when a string representing a complex number is given' do
778
- let(:input) { '2.5/1' }
779
-
780
- it 'returns a float' do
781
- @result.must_be_kind_of(Float)
782
- @result.must_equal 2.5
783
- end
784
- end
785
-
786
- describe 'when a rational number is given' do
787
- let(:input) { Rational(0.3) }
788
-
789
- it 'returns a float' do
790
- @result.must_be_kind_of(Float)
791
- @result.must_equal 0.3
792
- end
793
- end
794
-
795
- describe 'when a string representing a rational number is given' do
796
- let(:input) { '2/3' }
797
-
798
- it 'returns a float' do
799
- @result.must_be_kind_of(Float)
800
- @result.must_equal 2.0
801
- end
802
- end
803
-
804
- describe 'when a time is given' do
805
- let(:input) { Time.at(0).utc }
806
-
807
- it 'returns the float representation' do
808
- @result.must_be_kind_of(Float)
809
- @result.must_equal 0.0
810
- end
811
- end
812
-
813
- describe 'when an object that implements #to_int is given' do
814
- let(:input) { Pi.new }
815
-
816
- it 'returns a float' do
817
- @result.must_be_kind_of(Float)
818
- @result.must_equal 3.14
819
- end
820
- end
821
- end
822
-
823
- describe 'failure operations' do
824
- describe 'true is given' do
825
- let(:input) { true }
826
-
827
- it 'raises error' do
828
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(TypeError)
829
- end
830
- end
831
-
832
- describe 'false is given' do
833
- let(:input) { false }
834
-
835
- it 'raises error' do
836
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(TypeError)
837
- end
838
- end
839
-
840
- describe 'when a date is given' do
841
- let(:input) { Date.today }
842
-
843
- it 'raises error' do
844
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(TypeError)
845
- end
846
- end
847
-
848
- describe 'when a datetime is given' do
849
- let(:input) { DateTime.now }
850
-
851
- it 'raises error' do
852
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(TypeError)
853
- end
854
- end
855
-
856
- describe "when a an object that doesn't implement #nil? " do
857
- let(:input) { BasicObject.new }
858
-
859
- it 'raises error' do
860
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(NoMethodError)
861
- end
862
- end
863
-
864
- describe "when a an object that doesn't implement any float interface" do
865
- let(:input) { OpenStruct.new(color: 'purple') }
866
-
867
- it 'raises error' do
868
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(TypeError)
869
- end
870
- end
871
-
872
- describe 'when a big complex number is given' do
873
- let(:input) { Complex(2,3) }
874
-
875
- it 'raises error' do
876
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(RangeError)
877
- end
878
- end
879
-
880
- describe 'when a big rational number is given' do
881
- let(:input) { Rational(-8) ** Rational(1, 3) }
882
-
883
- it 'raises error' do
884
- -> { Lotus::Utils::Kernel.Float(input) }.must_raise(RangeError)
885
- end
886
- end
887
- end
888
- end
889
-
890
- describe '.String' do
891
- before do
892
- Book = Struct.new(:title)
893
-
894
- BaseObject = Class.new(BasicObject) do
895
- def nil?
896
- false
897
- end
898
- end
899
-
900
- SimpleObject = Class.new(BaseObject) do
901
- def to_s
902
- 'simple object'
903
- end
904
- end
905
-
906
- Isbn = Struct.new(:code) do
907
- def to_str
908
- code.to_s
909
- end
910
- end
911
- end
912
-
913
- after do
914
- Object.send(:remove_const, :Book)
915
- Object.send(:remove_const, :BaseObject)
916
- Object.send(:remove_const, :SimpleObject)
917
- Object.send(:remove_const, :Isbn)
918
- end
919
-
920
- describe 'successful operations' do
921
- before do
922
- @result = Lotus::Utils::Kernel.String(input)
923
- end
924
-
925
- describe 'when nil is given' do
926
- let(:input) { nil }
927
-
928
- it 'returns nil' do
929
- @result.must_be_nil
930
- end
931
- end
932
-
933
- describe 'when true is given' do
934
- let(:input) { true }
935
-
936
- it 'returns nil' do
937
- @result.must_equal 'true'
938
- end
939
- end
940
-
941
- describe 'when false is given' do
942
- let(:input) { false }
943
-
944
- it 'returns nil' do
945
- @result.must_equal 'false'
946
- end
947
- end
948
-
949
- describe 'when an empty string is given' do
950
- let(:input) { '' }
951
-
952
- it 'returns it' do
953
- @result.must_equal ''
954
- end
955
- end
956
-
957
- describe 'when a string is given' do
958
- let(:input) { 'ciao' }
959
-
960
- it 'returns it' do
961
- @result.must_equal 'ciao'
962
- end
963
- end
964
-
965
- describe 'when an integer is given' do
966
- let(:input) { 23 }
967
-
968
- it 'returns the string representation' do
969
- @result.must_equal '23'
970
- end
971
- end
972
-
973
- describe 'when a float is given' do
974
- let(:input) { 3.14 }
975
-
976
- it 'returns the string representation' do
977
- @result.must_equal '3.14'
978
- end
979
- end
980
-
981
- describe 'when an octal is given' do
982
- let(:input) { 013 }
983
-
984
- it 'returns the string representation' do
985
- @result.must_equal '11'
986
- end
987
- end
988
-
989
- describe 'when a hex is given' do
990
- let(:input) { 0xc0ff33 }
991
-
992
- it 'returns the string representation' do
993
- @result.must_equal '12648243'
994
- end
995
- end
996
-
997
- describe 'when a big decimal is given' do
998
- let(:input) { BigDecimal.new(7944.2343, 10) }
999
-
1000
- it 'returns the string representation' do
1001
- @result.must_equal '0.79442343E4'
1002
- end
1003
- end
1004
-
1005
- describe 'when a big decimal infinity is given' do
1006
- let(:input) { BigDecimal.new('Infinity') }
1007
-
1008
- it 'returns the string representation' do
1009
- @result.must_equal 'Infinity'
1010
- end
1011
- end
1012
-
1013
- describe 'when a big decimal NaN is given' do
1014
- let(:input) { BigDecimal.new('NaN') }
1015
-
1016
- it 'returns the string representation' do
1017
- @result.must_equal 'NaN'
1018
- end
1019
- end
1020
-
1021
- describe 'when a complex is given' do
1022
- let(:input) { Complex(11,2) }
1023
-
1024
- it 'returns the string representation' do
1025
- @result.must_equal '11+2i'
1026
- end
1027
- end
1028
-
1029
- describe 'when a rational is given' do
1030
- let(:input) { Rational(-22) }
1031
-
1032
- it 'returns the string representation' do
1033
- @result.must_equal '-22/1'
1034
- end
1035
- end
1036
-
1037
- describe 'when an empty array is given' do
1038
- let(:input) { [] }
1039
-
1040
- it 'returns the string representation' do
1041
- @result.must_equal '[]'
1042
- end
1043
- end
1044
-
1045
- describe 'when an array of integers is given' do
1046
- let(:input) { [1,2,3] }
1047
-
1048
- it 'returns the string representation' do
1049
- @result.must_equal '[1, 2, 3]'
1050
- end
1051
- end
1052
-
1053
- describe 'when an array of strings is given' do
1054
- let(:input) { %w[a b c] }
1055
-
1056
- it 'returns the string representation' do
1057
- @result.must_equal '["a", "b", "c"]'
1058
- end
1059
- end
1060
-
1061
- describe 'when an array of objects is given' do
1062
- let(:input) { [Object.new] }
1063
-
1064
- it 'returns the string representation' do
1065
- @result.must_match '[#<Object:'
1066
- end
1067
- end
1068
-
1069
- describe 'when an empty hash is given' do
1070
- let(:input) { {} }
1071
-
1072
- it 'returns the string representation' do
1073
- @result.must_equal '{}'
1074
- end
1075
- end
1076
-
1077
- describe 'when an hash is given' do
1078
- let(:input) { {a: 1, 'b' => 2} }
1079
-
1080
- it 'returns the string representation' do
1081
- @result.must_equal '{:a=>1, "b"=>2}'
1082
- end
1083
- end
1084
-
1085
- describe 'when a symbol is given' do
1086
- let(:input) { :lotus }
1087
-
1088
- it 'returns the string representation' do
1089
- @result.must_equal 'lotus'
1090
- end
1091
- end
1092
-
1093
- describe 'when an struct is given' do
1094
- let(:input) { Book.new('DDD') }
1095
-
1096
- it 'returns the string representation' do
1097
- @result.must_equal '#<struct Book title="DDD">'
1098
- end
1099
- end
1100
-
1101
- describe 'when an open struct is given' do
1102
- let(:input) { OpenStruct.new(title: 'DDD') }
1103
-
1104
- it 'returns the string representation' do
1105
- @result.must_equal '#<OpenStruct title="DDD">'
1106
- end
1107
- end
1108
-
1109
- describe 'when a date is given' do
1110
- let(:input) { Date.parse('2014-04-11') }
1111
-
1112
- it 'returns the string representation' do
1113
- @result.must_equal '2014-04-11'
1114
- end
1115
- end
1116
-
1117
- describe 'when a datetime is given' do
1118
- let(:input) { DateTime.parse('2014-04-11 09:45') }
1119
-
1120
- it 'returns the string representation' do
1121
- @result.must_equal '2014-04-11T09:45:00+00:00'
1122
- end
1123
- end
1124
-
1125
- describe 'when a time is given' do
1126
- let(:input) { Time.at(0).utc }
1127
-
1128
- it 'returns the string representation' do
1129
- @result.must_equal '1970-01-01 00:00:00 UTC'
1130
- end
1131
- end
1132
-
1133
- describe 'when a class is given' do
1134
- let(:input) { Fixnum }
1135
-
1136
- it 'returns the string representation' do
1137
- @result.must_equal 'Fixnum'
1138
- end
1139
- end
1140
-
1141
- describe 'when a module is given' do
1142
- let(:input) { Lotus }
1143
-
1144
- it 'returns the string representation' do
1145
- @result.must_equal 'Lotus'
1146
- end
1147
- end
1148
-
1149
- describe 'when an object implements #to_s' do
1150
- let(:input) { SimpleObject.new }
1151
-
1152
- it 'returns the string representation' do
1153
- @result.must_equal 'simple object'
1154
- end
1155
- end
1156
-
1157
- describe 'when an object implements #to_str' do
1158
- let(:input) { Isbn.new(123) }
1159
-
1160
- it 'returns the string representation' do
1161
- @result.must_equal '123'
1162
- end
1163
- end
1164
- end
1165
-
1166
- describe 'failure operations' do
1167
- describe "when a an object that doesn't implement #nil?" do
1168
- let(:input) { BasicObject.new }
1169
-
1170
- it 'raises error' do
1171
- -> { Lotus::Utils::Kernel.String(input) }.must_raise(NoMethodError)
1172
- end
1173
- end
1174
-
1175
- describe "when a an object that doesn't implement a string interface" do
1176
- let(:input) { BaseObject.new }
1177
-
1178
- it 'raises error' do
1179
- -> { Lotus::Utils::Kernel.String(input) }.must_raise(TypeError)
1180
- end
1181
- end
1182
- end
1183
- end
1184
-
1185
- describe '.Boolean' do
1186
- before do
1187
- Answer = Struct.new(:answer) do
1188
- def to_bool
1189
- case answer
1190
- when 'yes' then true
1191
- else false
1192
- end
1193
- end
1194
- end
1195
- end
1196
-
1197
- after do
1198
- Object.send(:remove_const, :Answer)
1199
- end
1200
-
1201
- describe 'successful operations' do
1202
- before do
1203
- @result = Lotus::Utils::Kernel.Boolean(input)
1204
- end
1205
-
1206
- describe 'when nil is given' do
1207
- let(:input) { nil }
1208
-
1209
- it 'returns nil' do
1210
- @result.must_be_nil
1211
- end
1212
- end
1213
-
1214
- describe 'when true is given' do
1215
- let(:input) { true }
1216
-
1217
- it 'returns true' do
1218
- @result.must_equal true
1219
- end
1220
- end
1221
-
1222
- describe 'when false is given' do
1223
- let(:input) { false }
1224
-
1225
- it 'returns false' do
1226
- @result.must_equal false
1227
- end
1228
- end
1229
-
1230
- describe 'when 0 is given' do
1231
- let(:input) { 0 }
1232
-
1233
- it 'returns false' do
1234
- @result.must_equal false
1235
- end
1236
- end
1237
-
1238
- describe 'when 1 is given' do
1239
- let(:input) { 1 }
1240
-
1241
- it 'returns true' do
1242
- @result.must_equal true
1243
- end
1244
- end
1245
-
1246
- describe 'when 2 is given' do
1247
- let(:input) { 2 }
1248
-
1249
- it 'returns false' do
1250
- @result.must_equal false
1251
- end
1252
- end
1253
-
1254
- describe 'when -1 is given' do
1255
- let(:input) { -1 }
1256
-
1257
- it 'returns false' do
1258
- @result.must_equal false
1259
- end
1260
- end
1261
-
1262
- describe 'when "0" is given' do
1263
- let(:input) { "0" }
1264
-
1265
- it 'returns false' do
1266
- @result.must_equal false
1267
- end
1268
- end
1269
-
1270
- describe 'when "1" is given' do
1271
- let(:input) { "1" }
1272
-
1273
- it 'returns true' do
1274
- @result.must_equal true
1275
- end
1276
- end
1277
-
1278
- describe 'when an object is given' do
1279
- let(:input) { Object.new }
1280
-
1281
- it 'returns true' do
1282
- @result.must_equal true
1283
- end
1284
- end
1285
-
1286
- describe 'when the given object responds to #to_bool' do
1287
- let(:input) { Answer.new('no') }
1288
-
1289
- it 'returns the result of the serialization' do
1290
- @result.must_equal false
1291
- end
1292
- end
1293
- end
1294
-
1295
- describe 'failure operations' do
1296
- describe "when a an object that doesn't implement #respond_to?" do
1297
- let(:input) { BasicObject.new }
1298
-
1299
- it 'raises error' do
1300
- -> { Lotus::Utils::Kernel.Boolean(input) }.must_raise(NoMethodError)
1301
- end
1302
- end
1303
- end
1304
- end
1305
-
1306
- describe '.Date' do
1307
- before do
1308
- class Christmas
1309
- def to_date
1310
- Date.parse('Dec, 25')
1311
- end
1312
- end
1313
-
1314
- BaseObject = Class.new(BasicObject) do
1315
- def nil?
1316
- false
1317
- end
1318
- end
1319
- end
1320
-
1321
- after do
1322
- Object.send(:remove_const, :Christmas)
1323
- Object.send(:remove_const, :BaseObject)
1324
- end
1325
-
1326
- describe 'successful operations' do
1327
- before do
1328
- @result = Lotus::Utils::Kernel.Date(input)
1329
- end
1330
-
1331
- describe 'when nil is given' do
1332
- let(:input) { nil }
1333
-
1334
- it 'returns nil' do
1335
- @result.must_be_nil
1336
- end
1337
- end
1338
-
1339
- describe 'when a date is given' do
1340
- let(:input) { Date.today }
1341
-
1342
- it 'returns the input' do
1343
- @result.must_equal input
1344
- end
1345
- end
1346
-
1347
- describe 'when a string that represents a date is given' do
1348
- let(:input) { '2014-04-17' }
1349
-
1350
- it 'returns a date' do
1351
- @result.must_equal Date.parse(input)
1352
- end
1353
- end
1354
-
1355
- describe 'when a string that represents a timestamp is given' do
1356
- let(:input) { '2014-04-17 18:50:01' }
1357
-
1358
- it 'returns a date' do
1359
- @result.must_equal Date.parse('2014-04-17')
1360
- end
1361
- end
1362
-
1363
- describe 'when a time is given' do
1364
- let(:input) { Time.now }
1365
-
1366
- it 'returns a date' do
1367
- @result.must_equal Date.today
1368
- end
1369
- end
1370
-
1371
- describe 'when a datetime is given' do
1372
- let(:input) { DateTime.now }
1373
-
1374
- it 'returns a date' do
1375
- @result.must_equal Date.today
1376
- end
1377
- end
1378
-
1379
- describe 'when an object that implements #to_date is given' do
1380
- let(:input) { Christmas.new }
1381
-
1382
- it 'returns a date' do
1383
- @result.must_equal Date.parse('Dec, 25')
1384
- end
1385
- end
1386
- end
1387
-
1388
- describe 'failure operations' do
1389
- describe 'when true is given' do
1390
- let(:input) { true }
1391
-
1392
- it 'raises error' do
1393
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise ArgumentError
1394
- end
1395
- end
1396
-
1397
- describe 'when false is given' do
1398
- let(:input) { false }
1399
-
1400
- it 'raises error' do
1401
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise ArgumentError
1402
- end
1403
- end
1404
-
1405
- describe 'when a fixnum is given' do
1406
- let(:input) { 2 }
1407
-
1408
- it 'raises error' do
1409
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise ArgumentError
1410
- end
1411
- end
1412
-
1413
- describe 'when a float is given' do
1414
- let(:input) { 2332.903007 }
1415
-
1416
- it 'raises error' do
1417
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise ArgumentError
1418
- end
1419
- end
1420
-
1421
- describe "when a string that doesn't represent a date is given" do
1422
- let(:input) { 'lego' }
1423
-
1424
- it 'raises error' do
1425
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise ArgumentError
1426
- end
1427
- end
1428
-
1429
- describe "when a string that represent a hour is given" do
1430
- let(:input) { '18:55' }
1431
-
1432
- it 'raises error' do
1433
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise ArgumentError
1434
- end
1435
- end
1436
-
1437
- describe "when an object that doesn't implement #respond_to?" do
1438
- let(:input) { BasicObject.new }
1439
-
1440
- it 'raises error' do
1441
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise NoMethodError
1442
- end
1443
- end
1444
-
1445
- describe "when an object that doesn't implement #nil?" do
1446
- let(:input) { BaseObject.new }
1447
-
1448
- it 'raises error' do
1449
- -> { Lotus::Utils::Kernel.Date(input) }.must_raise NoMethodError
1450
- end
1451
- end
1452
- end
1453
- end
1454
-
1455
- describe '.DateTime' do
1456
- before do
1457
- class NewYearEve
1458
- def to_datetime
1459
- DateTime.parse('Jan, 1')
1460
- end
1461
- end
1462
-
1463
- BaseObject = Class.new(BasicObject) do
1464
- def nil?
1465
- false
1466
- end
1467
- end
1468
- end
1469
-
1470
- after do
1471
- Object.send(:remove_const, :NewYearEve)
1472
- Object.send(:remove_const, :BaseObject)
1473
- end
1474
-
1475
- describe 'successful operations' do
1476
- before do
1477
- @result = Lotus::Utils::Kernel.DateTime(input)
1478
- end
1479
-
1480
- describe 'when nil is given' do
1481
- let(:input) { nil }
1482
-
1483
- it 'returns nil' do
1484
- @result.must_be_nil
1485
- end
1486
- end
1487
-
1488
- describe 'when a datetime is given' do
1489
- let(:input) { DateTime.now }
1490
-
1491
- it 'returns the input' do
1492
- @result.must_equal input
1493
- end
1494
- end
1495
-
1496
- describe 'when a date is given' do
1497
- let(:input) { Date.today }
1498
-
1499
- it 'returns a datetime' do
1500
- @result.must_equal DateTime.parse(Date.today.to_s)
1501
- end
1502
- end
1503
-
1504
- describe 'when a string that represents a date is given' do
1505
- let(:input) { '2014-04-17' }
1506
-
1507
- it 'returns a datetime' do
1508
- @result.must_equal DateTime.parse(input)
1509
- end
1510
- end
1511
-
1512
- describe 'when a string that represents a timestamp is given' do
1513
- let(:input) { '2014-04-17 22:51:48' }
1514
-
1515
- it 'returns a datetime' do
1516
- @result.must_equal DateTime.parse(input)
1517
- end
1518
- end
1519
-
1520
- describe 'when a time is given' do
1521
- let(:input) { Time.now }
1522
-
1523
- it 'returns a datetime' do
1524
- @result.must_equal input.to_datetime
1525
- end
1526
- end
1527
-
1528
- describe 'when an object that implements #to_datetime is given' do
1529
- let(:input) { NewYearEve.new }
1530
-
1531
- it 'returns a datetime' do
1532
- @result.must_equal DateTime.parse('Jan 1')
1533
- end
1534
- end
1535
-
1536
- describe "when a string that represent a hour is given" do
1537
- let(:input) { '23:12' }
1538
-
1539
- it 'returns a datetime' do
1540
- @result.must_equal DateTime.parse(input)
1541
- end
1542
- end
1543
-
1544
- describe 'when a float is given' do
1545
- let(:input) { 2332.903007 }
1546
-
1547
- it 'raises error' do
1548
- @result.must_equal Time.at(input).to_datetime
1549
- end
1550
- end
1551
-
1552
- describe 'when a fixnum is given' do
1553
- let(:input) { 34322 }
1554
-
1555
- it 'raises error' do
1556
- @result.must_equal Time.at(input).to_datetime
1557
- end
1558
- end
1559
- end
1560
-
1561
- describe 'failure operations' do
1562
- describe 'when true is given' do
1563
- let(:input) { true }
1564
-
1565
- it 'raises error' do
1566
- -> { Lotus::Utils::Kernel.DateTime(input) }.must_raise ArgumentError
1567
- end
1568
- end
1569
-
1570
- describe 'when false is given' do
1571
- let(:input) { false }
1572
-
1573
- it 'raises error' do
1574
- -> { Lotus::Utils::Kernel.DateTime(input) }.must_raise ArgumentError
1575
- end
1576
- end
1577
-
1578
- describe "when a string that doesn't represent a date is given" do
1579
- let(:input) { 'crab' }
1580
-
1581
- it 'raises error' do
1582
- -> { Lotus::Utils::Kernel.DateTime(input) }.must_raise ArgumentError
1583
- end
1584
- end
1585
-
1586
- describe "when an object that doesn't implement #respond_to?" do
1587
- let(:input) { BasicObject.new }
1588
-
1589
- it 'raises error' do
1590
- -> { Lotus::Utils::Kernel.DateTime(input) }.must_raise NoMethodError
1591
- end
1592
- end
1593
-
1594
- describe "when an object that doesn't implement #nil?" do
1595
- let(:input) { BaseObject.new }
1596
-
1597
- it 'raises error' do
1598
- -> { Lotus::Utils::Kernel.DateTime(input) }.must_raise NoMethodError
1599
- end
1600
- end
1601
- end
1602
- end
1603
-
1604
- describe '.Time' do
1605
- before do
1606
- class Epoch
1607
- def to_time
1608
- Time.at(0)
1609
- end
1610
- end
1611
-
1612
- BaseObject = Class.new(BasicObject) do
1613
- def nil?
1614
- false
1615
- end
1616
- end
1617
- end
1618
-
1619
- after do
1620
- Object.send(:remove_const, :Epoch)
1621
- Object.send(:remove_const, :BaseObject)
1622
- end
1623
-
1624
- describe 'successful operations' do
1625
- before do
1626
- @result = Lotus::Utils::Kernel.Time(input)
1627
- end
1628
-
1629
- describe 'when nil is given' do
1630
- let(:input) { nil }
1631
-
1632
- it 'returns nil' do
1633
- @result.must_be_nil
1634
- end
1635
- end
1636
-
1637
- describe 'when a time is given' do
1638
- let(:input) { Time.now }
1639
-
1640
- it 'returns the input' do
1641
- @result.must_equal input
1642
- end
1643
- end
1644
-
1645
- describe 'when a datetime is given' do
1646
- let(:input) { DateTime.now }
1647
-
1648
- it 'returns time' do
1649
- @result.must_equal input.to_time
1650
- end
1651
- end
1652
-
1653
- describe 'when a date is given' do
1654
- let(:input) { Date.today }
1655
-
1656
- it 'returns time' do
1657
- @result.must_equal input.to_time
1658
- end
1659
- end
1660
-
1661
- describe 'when a string that represents a date is given' do
1662
- let(:input) { '2014-04-18' }
1663
-
1664
- it 'returns time' do
1665
- @result.must_equal Time.parse(input)
1666
- end
1667
- end
1668
-
1669
- describe 'when a string that represents a timestamp is given' do
1670
- let(:input) { '2014-04-18 15:45:12' }
1671
-
1672
- it 'returns time' do
1673
- @result.must_equal Time.parse(input)
1674
- end
1675
- end
1676
-
1677
- describe 'when an object that implements #to_time is given' do
1678
- let(:input) { Epoch.new }
1679
-
1680
- it 'returns time' do
1681
- @result.must_equal Time.at(0)
1682
- end
1683
- end
1684
-
1685
- describe 'when a string that represent a hour is given' do
1686
- let(:input) { '15:47' }
1687
-
1688
- it 'returns a time' do
1689
- @result.must_equal Time.parse(input)
1690
- end
1691
- end
1692
-
1693
- describe 'when a fixnum is given' do
1694
- let(:input) { 38922 }
1695
-
1696
- it 'returns a time' do
1697
- @result.must_equal Time.at(input)
1698
- end
1699
- end
1700
-
1701
- describe 'when a float is given' do
1702
- let(:input) { 1332.9423843 }
1703
-
1704
- it 'returns a time' do
1705
- @result.must_equal Time.at(input)
1706
- end
1707
- end
1708
- end
1709
-
1710
- describe 'failure operations' do
1711
- describe 'when true is given' do
1712
- let(:input) { true }
1713
-
1714
- it 'raises error' do
1715
- -> { Lotus::Utils::Kernel.Time(input) }.must_raise ArgumentError
1716
- end
1717
- end
1718
-
1719
- describe 'when false is given' do
1720
- let(:input) { false }
1721
-
1722
- it 'raises error' do
1723
- -> { Lotus::Utils::Kernel.Time(input) }.must_raise ArgumentError
1724
- end
1725
- end
1726
-
1727
- describe "when a string that doesn't represent a date is given" do
1728
- let(:input) { 'boat' }
1729
-
1730
- it 'raises error' do
1731
- -> { Lotus::Utils::Kernel.Time(input) }.must_raise ArgumentError
1732
- end
1733
- end
1734
-
1735
- describe "when an object that doesn't implement #respond_to?" do
1736
- let(:input) { BasicObject.new }
1737
-
1738
- it 'raises error' do
1739
- -> { Lotus::Utils::Kernel.Time(input) }.must_raise NoMethodError
1740
- end
1741
- end
1742
-
1743
- describe "when an object that doesn't implement #nil?" do
1744
- let(:input) { BaseObject.new }
1745
-
1746
- it 'raises error' do
1747
- -> { Lotus::Utils::Kernel.Time(input) }.must_raise NoMethodError
1748
- end
1749
- end
1750
- end
1751
- end
1752
- end