when_exe 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +171 -0
  3. data/lib/when_exe.rb +78 -47
  4. data/lib/when_exe/basictypes.rb +752 -747
  5. data/lib/when_exe/calendarnote.rb +805 -801
  6. data/lib/when_exe/calendartypes.rb +1583 -1531
  7. data/lib/when_exe/coordinates.rb +16 -15
  8. data/lib/when_exe/core/duration.rb +114 -110
  9. data/lib/when_exe/core/extension.rb +504 -504
  10. data/lib/when_exe/ephemeris.rb +1917 -1913
  11. data/lib/when_exe/ephemeris/moon.rb +333 -333
  12. data/lib/when_exe/ephemeris/notes.rb +389 -387
  13. data/lib/when_exe/ephemeris/planets.rb +585 -585
  14. data/lib/when_exe/ephemeris/sun.rb +214 -214
  15. data/lib/when_exe/googlecalendar.rb +144 -140
  16. data/lib/when_exe/icalendar.rb +1636 -1636
  17. data/lib/when_exe/inspect.rb +46 -22
  18. data/lib/when_exe/locales/akt.rb +176 -176
  19. data/lib/when_exe/locales/encoding_conversion.rb +134 -126
  20. data/lib/when_exe/locales/iast.rb +90 -90
  21. data/lib/when_exe/locales/locale.rb +750 -746
  22. data/lib/when_exe/locales/transliteration_table.rb +62 -62
  23. data/lib/when_exe/mini_application.rb +307 -305
  24. data/lib/when_exe/parts/enumerator.rb +2 -2
  25. data/lib/when_exe/parts/geometric_complex.rb +397 -397
  26. data/lib/when_exe/parts/method_cash.rb +224 -224
  27. data/lib/when_exe/parts/resource.rb +1069 -1071
  28. data/lib/when_exe/parts/timezone.rb +240 -230
  29. data/lib/when_exe/region/armenian.rb +56 -56
  30. data/lib/when_exe/region/babylonian.rb +405 -0
  31. data/lib/when_exe/region/bahai.rb +146 -146
  32. data/lib/when_exe/region/balinese.rb +622 -622
  33. data/lib/when_exe/region/chinese.rb +95 -25
  34. data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
  35. data/lib/when_exe/region/chinese/epochs.rb +1 -1
  36. data/lib/when_exe/region/chinese/twins.rb +803 -795
  37. data/lib/when_exe/region/christian.rb +824 -824
  38. data/lib/when_exe/region/coptic.rb +106 -87
  39. data/lib/when_exe/region/discordian.rb +225 -225
  40. data/lib/when_exe/region/far_east.rb +188 -188
  41. data/lib/when_exe/region/french.rb +56 -56
  42. data/lib/when_exe/region/geologicalage.rb +639 -639
  43. data/lib/when_exe/region/goddess.rb +58 -58
  44. data/lib/when_exe/region/indian.rb +1254 -1251
  45. data/lib/when_exe/region/iranian.rb +8 -8
  46. data/lib/when_exe/region/islamic.rb +3 -3
  47. data/lib/when_exe/region/japanese.rb +93 -99
  48. data/lib/when_exe/region/japanese/calendars.rb +396 -397
  49. data/lib/when_exe/region/japanese/epochs.rb +26 -26
  50. data/lib/when_exe/region/japanese/nihon_shoki.rb +71 -71
  51. data/lib/when_exe/region/japanese/notes.rb +1383 -1386
  52. data/lib/when_exe/region/japanese/residues.rb +1306 -1306
  53. data/lib/when_exe/region/japanese/twins.rb +225 -225
  54. data/lib/when_exe/region/japanese/weeks.rb +112 -0
  55. data/lib/when_exe/region/javanese.rb +230 -230
  56. data/lib/when_exe/region/jewish.rb +126 -126
  57. data/lib/when_exe/region/korean.rb +378 -378
  58. data/lib/when_exe/region/m17n.rb +114 -113
  59. data/lib/when_exe/region/martian.rb +258 -255
  60. data/lib/when_exe/region/mayan.rb +32 -32
  61. data/lib/when_exe/region/residue.rb +89 -89
  62. data/lib/when_exe/region/roman.rb +36 -24
  63. data/lib/when_exe/region/ryukyu.rb +97 -97
  64. data/lib/when_exe/region/shire.rb +240 -240
  65. data/lib/when_exe/region/soviet.rb +209 -0
  66. data/lib/when_exe/region/symmetry.rb +50 -50
  67. data/lib/when_exe/region/thai.rb +336 -335
  68. data/lib/when_exe/region/tibetan.rb +316 -315
  69. data/lib/when_exe/region/vietnamese.rb +440 -439
  70. data/lib/when_exe/region/weekdate.rb +80 -80
  71. data/lib/when_exe/region/world.rb +175 -175
  72. data/lib/when_exe/region/yerm.rb +14 -14
  73. data/lib/when_exe/region/zoroastrian.rb +203 -203
  74. data/lib/when_exe/timestandard.rb +707 -681
  75. data/lib/when_exe/tmduration.rb +338 -330
  76. data/lib/when_exe/tmobjects.rb +1346 -1325
  77. data/lib/when_exe/tmposition.rb +2115 -2072
  78. data/lib/when_exe/tmreference.rb +1693 -1669
  79. data/lib/when_exe/version.rb +1 -1
  80. data/link_to_online_documents +1 -1
  81. data/test/examples/JapanHolidaysRFC6350.ics +1 -1
  82. data/test/test.rb +67 -61
  83. data/test/test/basictypes.rb +409 -409
  84. data/test/test/calendarnote.rb +86 -69
  85. data/test/test/calendartypes.rb +97 -97
  86. data/test/test/coordinates.rb +396 -396
  87. data/test/test/ephemeris.rb +83 -74
  88. data/test/test/ephemeris/moon.rb +14 -14
  89. data/test/test/ephemeris/planets.rb +14 -14
  90. data/test/test/ephemeris/sun.rb +14 -14
  91. data/test/test/googlecalendar.rb +194 -176
  92. data/test/test/icalendar.rb +867 -858
  93. data/test/test/inspect.rb +117 -117
  94. data/test/test/parts.rb +487 -487
  95. data/test/test/region/balinese.rb +34 -0
  96. data/test/test/region/chinese.rb +218 -206
  97. data/test/test/region/christian.rb +245 -245
  98. data/test/test/region/coptic.rb +27 -27
  99. data/test/test/region/french.rb +33 -33
  100. data/test/test/region/geologicalage.rb +17 -17
  101. data/test/test/region/indian.rb +57 -57
  102. data/test/test/region/iran.rb +54 -54
  103. data/test/test/region/islamic.rb +18 -18
  104. data/test/test/region/japanese.rb +237 -219
  105. data/test/test/region/jewish.rb +61 -61
  106. data/test/test/region/m17n.rb +184 -184
  107. data/test/test/region/mayan.rb +195 -195
  108. data/test/test/region/residue.rb +147 -139
  109. data/test/test/region/thai.rb +116 -116
  110. data/test/test/region/tibetan.rb +30 -30
  111. data/test/test/region/vietnamese.rb +102 -102
  112. data/test/test/region/yerm.rb +146 -146
  113. data/test/test/timestandard.rb +81 -81
  114. data/test/test/tmobjects.rb +328 -328
  115. data/test/test/tmposition.rb +397 -284
  116. data/test/test/tmreference.rb +157 -157
  117. metadata +13 -10
@@ -6,5 +6,5 @@
6
6
  =end
7
7
 
8
8
  module When
9
- VERSION = "0.3.6"
9
+ VERSION = "0.3.7"
10
10
  end
@@ -1,4 +1,4 @@
1
1
  See online documents.
2
2
  wiki: http://www2u.biglobe.ne.jp/~suchowan/when_exe_wiki.html
3
- yard: http://rubydoc.info/gems/when_exe/0.3.5/frames
3
+ yard: http://rubydoc.info/gems/when_exe/frames
4
4
  demo: http://hosi.org
@@ -1,5 +1,5 @@
1
1
  BEGIN:VCALENDAR
2
- # Copyright (C) 2011 Takashi SUGA
2
+ # Copyright (C) 2011-2014 Takashi SUGA
3
3
  #
4
4
  # You may use and/or modify this file according to the license
5
5
  # described in the LICENSE.txt file included in this archive.
@@ -1,61 +1,67 @@
1
- #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
3
- =begin
4
- Copyright (C) 2011-2014 Takashi SUGA
5
-
6
- You may use and/or modify this file according to the license
7
- described in the LICENSE.txt file included in this archive.
8
- =end
9
-
10
- require 'pp'
11
- require 'date'
12
- begin
13
- require 'minitest/unit'
14
- require 'minitest/autorun'
15
- Test = MiniTest
16
- class Test::Unit::TestCase
17
- alias :assert_raise :assert_raises
18
- end
19
- rescue LoadError
20
- require 'test/unit'
21
- end
22
-
23
- class Test::Unit::TestCase
24
- def setup
25
- When._setup_({:multi_thread=>true})
26
- end
27
- end
28
-
29
- require 'when_exe'
30
- require 'when_exe/mini_application'
31
- #include When
32
-
33
- require './test/parts'
34
- require './test/basictypes'
35
- require './test/ephemeris'
36
- require './test/timestandard'
37
- require './test/coordinates'
38
- require './test/icalendar'
39
- require './test/tmobjects'
40
- require './test/tmreference'
41
- require './test/tmposition'
42
- require './test/calendartypes'
43
- require './test/calendarnote'
44
- require './test/inspect'
45
- require './test/googlecalendar'
46
- require './test/region/m17n'
47
- require './test/region/residue'
48
- require './test/region/christian'
49
- require './test/region/japanese'
50
- require './test/region/chinese'
51
- require './test/region/vietnamese'
52
- require './test/region/tibetan'
53
- require './test/region/thai'
54
- require './test/region/indian'
55
- require './test/region/iran'
56
- require './test/region/mayan'
57
- require './test/region/jewish'
58
- require './test/region/french'
59
- require './test/region/coptic'
60
- require './test/region/yerm'
61
- require './test/region/geologicalage'
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ =begin
4
+ Copyright (C) 2011-2014 Takashi SUGA
5
+
6
+ You may use and/or modify this file according to the license
7
+ described in the LICENSE.txt file included in this archive.
8
+ =end
9
+
10
+ require 'pp'
11
+ require 'date'
12
+ begin
13
+ require 'minitest/autorun'
14
+ module MiniTest
15
+ TestCase = MiniTest.const_defined?(:Test) ? Test : Unit::TestCase
16
+ end
17
+ rescue LoadError
18
+ require 'test/unit'
19
+ MiniTest = Test
20
+ module Test
21
+ TestCase = Unit::TestCase
22
+ class Unit::TestCase
23
+ alias :assert_raises :assert_raise
24
+ end
25
+ end
26
+ end
27
+
28
+ class MiniTest::TestCase
29
+ def setup
30
+ When._setup_({:multi_thread=>true})
31
+ end
32
+ end
33
+
34
+ require 'when_exe'
35
+ require 'when_exe/mini_application'
36
+ #include When
37
+
38
+ require './test/parts'
39
+ require './test/basictypes'
40
+ require './test/ephemeris'
41
+ require './test/timestandard'
42
+ require './test/coordinates'
43
+ require './test/icalendar'
44
+ require './test/tmobjects'
45
+ require './test/tmreference'
46
+ require './test/tmposition'
47
+ require './test/calendartypes'
48
+ require './test/calendarnote'
49
+ require './test/inspect'
50
+ require './test/googlecalendar'
51
+ require './test/region/m17n'
52
+ require './test/region/residue'
53
+ require './test/region/christian'
54
+ require './test/region/japanese'
55
+ require './test/region/chinese'
56
+ require './test/region/vietnamese'
57
+ require './test/region/tibetan'
58
+ require './test/region/balinese'
59
+ require './test/region/thai'
60
+ require './test/region/indian'
61
+ require './test/region/iran'
62
+ require './test/region/mayan'
63
+ require './test/region/jewish'
64
+ require './test/region/french'
65
+ require './test/region/coptic'
66
+ require './test/region/yerm'
67
+ require './test/region/geologicalage'
@@ -1,409 +1,409 @@
1
- # -*- coding: utf-8 -*-
2
- =begin
3
- Copyright (C) 2011-2014 Takashi SUGA
4
-
5
- You may use and/or modify this file according to the license
6
- described in the LICENSE.txt file included in this archive.
7
- =end
8
-
9
- module Test
10
-
11
- module BasicTypes
12
-
13
- #
14
- # ISO 8601 Date and Time Representation
15
- #
16
- class DateTime < Unit::TestCase
17
-
18
- def test__to_array_assert
19
- assert_raises(TypeError) { When::BasicTypes::DateTime._to_array(1) }
20
- assert_raises(ArgumentError) { When::BasicTypes::DateTime._to_array("") }
21
- end
22
-
23
- def test__x0301_5_2_1
24
- [ # 5.2.1 暦日付
25
- ["19850412", [ 0, "1985-04-12"]], # 1 完全表記 基本形式
26
- ["1985-04-12", [ 0, "1985-04-12"]], # 1 完全表記 拡張形式
27
- ["1985-04", [-1, "1985-04" ]], # 2 a) 下位省略表記 特定の月 基本形式
28
- ["1985", [-2, "1985" ]], # 2 b) 下位省略表記 特定の年 基本形式
29
- ["19", [-4, "1900" ]], # 2 c) 下位省略表記 特定の百年台 基本形式
30
- ["850412", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代の特定の日 基本形式
31
- ["85-04-12", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代の特定の日 拡張形式
32
- ["-8504", [-1, "1985-04" ]], # 3 b) 上位省略表記 ある百年代の特定の月 基本形式
33
- ["-85-04", [-1, "1985-04" ]], # 3 b) 上位省略表記 ある百年代の特定の月 拡張形式
34
- ["-85", [-2, "1985" ]], # 3 c) 上位省略表記 ある百年代の特定の年 基本形式
35
- ["--0412", [ 0, "1985-04-12"]], # 3 d) 上位省略表記 ある年の特定の月日 基本形式
36
- ["--04-12", [ 0, "1985-04-12"]], # 3 d) 上位省略表記 ある年の特定の月日 拡張形式
37
- ["--04", [-1, "1985-04" ]], # 3 e) 上位省略表記 ある年の特定の月 基本形式
38
- ["---12", [ 0, "1985-04-12"]], # 3 f) 上位省略表記 ある月の特定の日 基本形式
39
- ["+019850412", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
40
- ["+01985-04-12", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
41
- ["+01985-04", [-1, "1985-04" ]], # 4 b) 拡大表記 特定の月 基本形式
42
- ["+01985", [-2, "1985" ]], # 4 c) 拡大表記 特定の年 基本形式
43
- ["+019", [-4, "1900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
44
- ].each do |sample|
45
- date = When.when?(sample[0], {:abbr=>[1985,4,12]})
46
- assert_equal(sample[1], [date.precision, date.to_s])
47
- end
48
- end
49
-
50
- def test__x0301_5_2_1_4
51
- [ # 5.2.1.4 暦日付 拡大表記(Abbr 指定なし)
52
- ["-019850412", [ 0, "-01985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
53
- ["+019850412", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
54
- ["-01985-04-12", [ 0, "-01985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
55
- ["+01985-04-12", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
56
- ["-01985-04", [-1, "-01985-04" ]], # 4 b) 拡大表記 特定の月 基本形式
57
- ["+01985-04", [-1, "1985-04" ]], # 4 b) 拡大表記 特定の月 基本形式
58
- ["-01985", [-2, "-01985" ]], # 4 c) 拡大表記 特定の年 基本形式
59
- ["+01985", [-2, "1985" ]], # 4 c) 拡大表記 特定の年 基本形式
60
- ["-0190", [-2, "-00190" ]], # 4 d) 拡大表記 特定の年 基本形式
61
- ["+0190", [-2, "0190" ]], # 4 d) 拡大表記 特定の年 基本形式
62
- ["-019", [-4, "-01900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
63
- ["+019", [-4, "1900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
64
- ["-119", [-4, "-11900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
65
- ["+119", [-4, "+11900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
66
- ].each do |sample|
67
- date = When.when?(sample[0])
68
- assert_equal(sample[1], [date.precision, date.to_s])
69
- end
70
- end
71
-
72
- def test__x0301_5_2_2
73
- [ # 5.2.2 年間通算日
74
- ["1985102", [ 0, "1985-04-12"]], # 1 完全表記 基本形式
75
- ["1985-102", [ 0, "1985-04-12"]], # 1 完全表記 拡張形式
76
- ["85102", [ 0, "1985-04-12"]], # 2 a) 上位省略表記 ある百年代の特定の年日 基本形式
77
- ["85-102", [ 0, "1985-04-12"]], # 2 a) 上位省略表記 ある百年代の特定の年日 拡張形式
78
- ["-102", [ 0, "1985-04-12"]], # 2 b) 上位省略表記 ある年の特定の日 基本形式
79
- ["+01985102", [ 0, "1985-04-12"]], # 3 a) 拡大表記 特定の日 基本形式
80
- ["+01985-102", [ 0, "1985-04-12"]], # 3 a) 拡大表記 特定の日 拡張形式
81
- ].each do |sample|
82
- date = When.when?(sample[0], {:abbr=>[1985,4,12]})
83
- assert_equal(sample[1], [date.precision, date.to_s])
84
- end
85
- end
86
-
87
- def test__x0301_5_2_3
88
- [ # 5.2.3 暦週日付
89
- ["1985W155", [ 0, "1985-04-12"]], # 1 完全表記 基本形式
90
- ["1985-W15-5", [ 0, "1985-04-12"]], # 1 完全表記 拡張形式
91
- ["1985W15", [ 0, "1985-04-08...1985-04-15"]], # 2 a) 下位省略表記 基本形式
92
- ["1985-W15", [ 0, "1985-04-08...1985-04-15"]], # 2 a) 下位省略表記 拡張形式
93
- ["85W155", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代における年週日 基本形式
94
- ["85-W15-5", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代における年週日 拡張形式
95
- ["85W15", [ 0, "1985-04-08...1985-04-15"]], # 3 b) 上位省略表記 ある百年代における年週 基本形式
96
- ["85-W15", [ 0, "1985-04-08...1985-04-15"]], # 3 b) 上位省略表記 ある百年代における年週 拡張形式
97
- ["-5W155", [ 0, "1985-04-12"]], # 3 c) 上位省略表記 ある十年代における年週日 基本形式
98
- ["-5-W15-5", [ 0, "1985-04-12"]], # 3 c) 上位省略表記 ある十年代における年週日 拡張形式
99
- ["-5W15", [ 0, "1985-04-08...1985-04-15"]], # 3 d) 上位省略表記 ある十年代における年週 基本形式
100
- ["-5-W15", [ 0, "1985-04-08...1985-04-15"]], # 3 d) 上位省略表記 ある十年代における年週 拡張形式
101
- ["-W155", [ 0, "1985-04-12"]], # 3 e) 上位省略表記 ある年の週日 基本形式
102
- ["-W15-5", [ 0, "1985-04-12"]], # 3 e) 上位省略表記 ある年の週日 拡張形式
103
- ["-W15", [ 0, "1985-04-08...1985-04-15"]], # 3 f) 上位省略表記 ある年の週 基本形式
104
- ["-W-5", [ 0, "1985-04-12"]], # 3 g) 上位省略表記 ある週の日 基本形式
105
- ["+01985W155", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
106
- ["+01985-W15-5", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
107
- ["+01985W15", [ 0, "1985-04-08...1985-04-15"]], # 4 b) 拡大表記 特定の週 基本形式
108
- ["+01985-W15", [ 0, "1985-04-08...1985-04-15"]], # 4 c) 拡大表記 特定の週 拡張形式
109
- ].each do |sample|
110
- date = When.when?(sample[0], {:abbr=>[1985,15,5]})
111
- assert_equal(sample[1], [date.precision, date.to_s])
112
- end
113
-
114
- result = []
115
- (1900...1928).each do |year|
116
- date = ::Date.new(year, 1, 1) - 7
117
- 14.times do
118
- gdate = When.TemporalPosition(date.year, date.month, date.day)
119
- strdate = date.strftime('%G-W%V-%u')
120
- strgdate = gdate.strftime('%G-W%V-%u')
121
- w1date = When::WeekDate ^ date
122
- w2date = When.when?(strdate, {:frame=>When::WeekDate})
123
- strw1date = w1date.strftime
124
- strw2date = w2date.strftime
125
- result << [[strdate, strgdate, strw1date, strw2date].uniq.size, date.jd == w1date.to_i, date.jd == w2date.to_i]
126
- end
127
- end
128
- assert_equal([[1, true, true]], result.uniq)
129
- end
130
-
131
- def test__x0301_5_2_4
132
- [ # 5.2.4 元号による日付
133
- ["60.04.12", [ 0, "S60(1985).04.12"]], # 1 完全表記 基本形式
134
- ["S60.04.12", [ 0, "S60(1985).04.12"]], # 1 完全表記 拡張形式
135
- ].each do |sample|
136
- date = When.when?(sample[0], {:era_name=>'S'})
137
- assert_equal(sample[1], [date.precision, date.to_s])
138
- end
139
- end
140
-
141
- def test__x0301_5_3_1
142
- When::TM::Clock.local_time = When::UTC
143
-
144
- [ # 5.3.1 地方時の時刻
145
- ["T232050", [ 3, "T23:20:50" ]], # 1 完全表記 基本形式
146
- ["T23:20:50", [ 3, "T23:20:50" ]], # 1 完全表記 拡張形式
147
- ["T2320", [ 2, "T23:20" ]], # 2 a) 下位省略表記 特定の時分 基本形式
148
- ["T23:20", [ 2, "T23:20" ]], # 2 a) 下位省略表記 特定の時分 拡張形式
149
- ["T23", [ 1, "T23" ]], # 2 b) 下位省略表記 特定の時 基本形式
150
- ].each do |sample|
151
- date = When.when?(sample[0])
152
- assert_equal(sample[1], [date.precision, date.to_s])
153
- end
154
-
155
- [ # 3 小数点を用いる表記
156
- ["T232050.5", 4, [ 4, "T23:20:50.5" ]], # a) 特定の時分秒及び秒の小数部分 基本形式
157
- ["T152735,5", 4, [ 4, "T15:27:35.5" ]], # a) 特定の時分秒及び秒の小数部分 基本形式
158
- ["T23:20:50.5", 4, [ 4, "T23:20:50.5" ]], # a) 特定の時分秒及び秒の小数部分 拡張形式
159
- ["T2320.8", 3, [ 3, "T23:20:48" ]], # b) 特定の時分及び分の小数部分 基本形式
160
- ["T23:20.8", 3, [ 3, "T23:20:48" ]], # b) 特定の時分及び分の小数部分 拡張形式
161
- ["T23.3", 2, [ 2, "T23:18" ]], # c) 特定の時及び時の小数部分 基本形式
162
- ].each do |sample|
163
- date = When.when?(sample[0], {:precision=>sample[1]})
164
- assert_equal(sample[2], [date.precision, date.to_s])
165
- end
166
-
167
- [ # 4 上位省略表記
168
- ["T-2050", [ 3, "T23:20:50" ]], # a) ある時“hour”における特定の分秒 基本形式
169
- ["T-:20:50", [ 3, "T23:20:50" ]], # a) ある時“hour”における特定の分秒 拡張形式
170
- ["T-20", [ 2, "T23:20" ]], # b) ある時“hour”における特定の分 基本形式
171
- ["T--50", [ 3, "T23:20:50" ]], # c) ある分の特定の秒 基本形式
172
- ].each do |sample|
173
- date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50]})
174
- assert_equal(sample[1], [date.precision, date.to_s])
175
- end
176
-
177
- [ # 4 小数点を用いる上位省略表記
178
- ["T-2050.5", 4, [ 4, "T23:20:50.5" ]], # a) ある時“hour”における特定の分秒 基本形式
179
- ["T-2735,5", 4, [ 4, "T23:27:35.5" ]], # a) ある時“hour”における特定の分秒 基本形式
180
- ["T-:20:50.5", 4, [ 4, "T23:20:50.5" ]], # a) ある時“hour”における特定の分秒 拡張形式
181
- ["T-20.8", 3, [ 3, "T23:20:48" ]], # b) ある時“hour”における特定の分 基本形式
182
- ["T--50.5", 4, [ 4, "T23:20:50.5" ]], # c) ある分の特定の秒 基本形式
183
- ].each do |sample|
184
- date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50], :precision=>sample[1]})
185
- assert_equal(sample[2], [date.precision, date.to_s])
186
- end
187
- end
188
-
189
- def test__x0301_5_3_2
190
- When::TM::Clock.local_time = When.Clock("+0900")
191
- [ # 5.3.2 夜の12時
192
- ["19850412T240000", [ 3, "1985-04-13T00:00:00"]], # 完全表記 基本形式
193
- ["1985-04-12T24:00:00", [ 3, "1985-04-13T00:00:00"]], # 完全表記 拡張形式
194
- ["19850412T2400", [ 2, "1985-04-13T00:00" ]], # 下位省略表記 基本形式
195
- ["1985-04-12T24:00", [ 2, "1985-04-13T00:00" ]], # 下位省略表記 拡張形式
196
- ].each do |sample|
197
- date = When.when?(sample[0])
198
- assert_equal(sample[1], [date.precision, date.to_s])
199
- end
200
- end
201
-
202
- def test__x0301_5_3_3
203
- [ # 5.3.3 協定世界時(UTC)の時刻
204
- ["T232050Z", [ 3, "T23:20:50Z" ]], # 1 完全表記 基本形式
205
- ["T23:20:50Z", [ 3, "T23:20:50Z" ]], # 1 完全表記 拡張形式
206
- ["T2320Z", [ 2, "T23:20Z" ]], # 2 a) 下位省略表記 特定の時分 基本形式
207
- ["T23:20Z", [ 2, "T23:20Z" ]], # 2 a) 下位省略表記 特定の時分 拡張形式
208
- ["T23Z", [ 1, "T23Z" ]], # 2 b) 下位省略表記 特定の時 基本形式
209
- ].each do |sample|
210
- date = When.when?(sample[0])
211
- assert_equal(sample[1], [date.precision, date.to_s])
212
- end
213
-
214
- [ # 3 小数点を用いる表記
215
- ["T232050.5Z", 4, [ 4, "T23:20:50.5Z" ]], # a) 特定の時分秒及び秒の小数部分 基本形式
216
- ["T23:20:50.5Z",4, [ 4, "T23:20:50.5Z" ]], # a) 特定の時分秒及び秒の小数部分 拡張形式
217
- ["T2320.8Z", 3, [ 3, "T23:20:48Z" ]], # b) 特定の時分及び分の小数部分 基本形式
218
- ["T23:20.8Z", 3, [ 3, "T23:20:48Z" ]], # b) 特定の時分及び分の小数部分 拡張形式
219
- ["T23.3Z", 2, [ 2, "T23:18Z" ]], # c) 特定の時及び時の小数部分 基本形式
220
- ].each do |sample|
221
- date = When.when?(sample[0], {:precision=>sample[1]})
222
- assert_equal(sample[2], [date.precision, date.to_s])
223
- end
224
-
225
- [ # 4 上位省略表記
226
- ["T-2050Z", [ 3, "T23:20:50Z" ]], # a) ある時“hour”における特定の分秒 基本形式
227
- ["T-:20:50Z", [ 3, "T23:20:50Z" ]], # a) ある時“hour”における特定の分秒 拡張形式
228
- ["T-20Z", [ 2, "T23:20Z" ]], # b) ある時“hour”における特定の分 基本形式
229
- ["T--50Z", [ 3, "T23:20:50Z" ]], # c) ある分の特定の秒 基本形式
230
- ].each do |sample|
231
- date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50]})
232
- assert_equal(sample[1], [date.precision, date.to_s])
233
- end
234
-
235
- [ # 4 小数点を用いる上位省略表記
236
- ["T-2050.5Z", 4, [ 4, "T23:20:50.5Z" ]], # a) ある時“hour”における特定の分秒 基本形式
237
- ["T-:20:50.5Z", 4, [ 4, "T23:20:50.5Z" ]], # a) ある時“hour”における特定の分秒 拡張形式
238
- ["T-20.8Z", 3, [ 3, "T23:20:48Z" ]], # b) ある時“hour”における特定の分 基本形式
239
- ["T--50.5Z", 4, [ 4, "T23:20:50.5Z" ]], # c) ある分の特定の秒 基本形式
240
- ].each do |sample|
241
- date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50], :precision=>sample[1]})
242
- assert_equal(sample[2], [date.precision, date.to_s])
243
- end
244
- end
245
-
246
- def test__x0301_5_3_4
247
- [ # 5.3.4 地方時及び協定世界時
248
- ["T+0100", [ 0, "T+01:00" ]], # 1 地方時と協定世界時との差(時差の表記) 基本形式
249
- ["T+01", [ 0, "T+01:00" ]], # 1 地方時と協定世界時との差(時差の表記) 基本形式
250
- ["T+01:00", [ 0, "T+01:00" ]], # 1 地方時と協定世界時との差(時差の表記) 拡張形式
251
- ["T152746+0100", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
252
- ["T152746-0500", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
253
- ["T152746+01", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
254
- ["T152746-05", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
255
- ["T15:27:46+01:00", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
256
- ["T15:27:46-05:00", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
257
- ["T15:27:46+01", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
258
- ["T15:27:46-05", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
259
- ].each do |sample|
260
- date = When.when?(sample[0])
261
- assert_equal(sample[1], [date.precision, date.to_s])
262
- end
263
- end
264
-
265
- def test__x0301_5_4_2
266
- When::TM::Clock.local_time = When.Clock("+0900")
267
- [ # 5.4.2 完全表記以外の表記
268
- ["19850412T1015", [ 2, "1985-04-12T10:15" ]], # a) 暦日付及び地方時 基本形式
269
- ["1985-04-12T10:15", [ 2, "1985-04-12T10:15" ]], # a) 暦日付及び地方時 拡張形式
270
- ["1985102T1015Z", [ 2, "1985-04-12T10:15Z" ]], # b) 年間通算日及び協定世界時 基本形式
271
- ["1985-102T10:15Z", [ 2, "1985-04-12T10:15Z" ]], # b) 年間通算日及び協定世界時 拡張形式
272
- ["1985W155T1015+0400", [ 2, "1985-04-12T10:15+04:00" ]], # c) 暦週日付,地方時,及びUTCとの差 基本形式
273
- ["1985-W15-5T10:15+04:00",[ 2, "1985-04-12T10:15+04:00" ]], # c) 暦週日付,地方時,及びUTCとの差 拡張形式
274
- ].each do |sample|
275
- date = When.when?(sample[0])
276
- assert_equal(sample[1], [date.precision, date.to_s])
277
- end
278
- end
279
-
280
- def test__x0301_5_5_4
281
- When::TM::Clock.local_time = When.Clock("+0900") # 時間間隔の表記
282
- [ # 5.5.4 完全表記
283
- ["19850412T232050/19850625T103000", "1985-04-12T23:20:50..1985-06-25T10:30:00" ], # 1 始点及び終点 基本形式
284
- ["1985-04-12T23:20:50/1985-06-25T10:30:00", "1985-04-12T23:20:50..1985-06-25T10:30:00" ], # 1 始点及び終点 拡張形式
285
- ["P2Y10M15DT10H30M20S", "P2Y10M15DT10H30M20S" ], # 2.1 時間の単位の指示記号付
286
- ["P6W", "P6W" ], # 2.1 時間の単位の指示記号付
287
- ["P1Y6M", "P1Y6M" ], # 2.1 時間の単位の指示記号付
288
- ["PT72H", "PT72H" ], # 2.1 時間の単位の指示記号付
289
- ["P00021015T103020", "P2Y10M15DT10H30M20S" ], # 2.2 代用形式 基本形式
290
- ["P0001-06", "P1Y6M" ], # 2.2 代用形式 基本形式
291
- ["P010600", "P1Y6M" ], # 2.2 代用形式 基本形式
292
- ["P0002-10-15T10:30:20", "P2Y10M15DT10H30M20S" ], # 2.2 代用形式 拡張形式
293
- ["19850412T232050/P1Y2M15DT12H30M0S", "1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 基本形式
294
- ["19850412T232050/P00010215T123000", "1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 基本形式
295
- ["1985-04-12T23:20:50/P1Y2M15DT12H30M0S", "1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 拡張形式
296
- ["1985-04-12T23:20:50/P0001-02-15T12:30:00","1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 拡張形式
297
- ["P1Y2M15DT12H30M0S/19850412T232050", "1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 基本形式
298
- ["P00010215T123000/19850412T232050", "1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 基本形式
299
- ["P1Y2M15DT12H30M0S/1985-04-12T23:20:50", "1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 拡張形式
300
- ["P0001-02-15T12:30:00/1985-04-12T23:20:50","1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 拡張形式
301
- ].each do |sample|
302
- assert_equal(sample[1], When.when?(sample[0]).to_s)
303
- end
304
- end
305
-
306
- def test__x0301_5_6_3
307
- When::TM::Clock.local_time = When.Clock("+0900") # 反復時間間隔の表記
308
- [ # 5.6.3 完全表記
309
- ["R2/19850412T232050/19850625T103000", ["1985-04-12T23:20:50","1985-06-25T10:30:00"]], # 始点及び終点
310
- ["R2/P2Y10M15DT10H30M20S", ["P2Y10M15DT10H30M20S","P2Y10M15DT10H30M20S"]], # 時間間隔
311
- ["R2/19850412T232050/P1Y2M15DT12H30M0S", ["1985-04-12T23:20:50","1986-06-28T11:50:50"]], # 始点及び時間間隔
312
- ["R2/P1Y2M15DT12H30M0S/19850412T232050", ["1984-01-28T10:50:50","1985-04-12T23:20:50"]], # 時間間隔及び終点
313
- ].each do |sample|
314
- event = When.when?(sample[0])
315
- sample[1].each do |date|
316
- assert_equal(date, event.shift.to_s)
317
- end
318
- end
319
- [ # 5.6.3 完全表記
320
- ["R/19850412T232050/19850625T103000", ["1985-04-12T23:20:50","1985-06-25T10:30:00"]], # 始点及び終点
321
- ["R/19850412T232050/P1Y2M15DT12H30M0S", ["1985-04-12T23:20:50","1986-06-28T11:50:50"]], # 始点及び時間間隔
322
- ].each do |sample|
323
- event = When.when?(sample[0]).each
324
- sample[1].each do |date|
325
- assert_equal(date, event.succ.to_s)
326
- end
327
- end
328
- end
329
- end
330
-
331
- #
332
- # ISO 8601 Date Representation
333
- #
334
- class Date < Unit::TestCase
335
- def test__to_array_basic_ISO8601
336
- assert_equal([nil, [1985,4,12]], When::BasicTypes::Date._to_array_basic_ISO8601('19850412'))
337
- assert_equal([nil, [1985]], When::BasicTypes::Date._to_array_basic_ISO8601('1985'))
338
- assert_equal([:century, [1900]], When::BasicTypes::Date._to_array_basic_ISO8601('19'))
339
- end
340
-
341
- def test__to_array_extended_ISO8601
342
- assert_equal([nil, [1985,4,12]], When::BasicTypes::Date._to_array_extended_ISO8601('1985-04-12'))
343
- assert_equal([nil, [1985,4]], When::BasicTypes::Date._to_array_extended_ISO8601('1985-04'))
344
- # assert_equal([19,nil,nil], When::BasicTypes::Date._to_array_extended_ISO8601('19'))
345
- end
346
- end
347
-
348
- #
349
- # ISO 8601 Time Representation
350
- #
351
- class Time < Unit::TestCase
352
- def test_nothing
353
- end
354
- end
355
-
356
- #
357
- # M17n String
358
- #
359
- class M17n < Unit::TestCase
360
- Term1 = When::BasicTypes::M17n.new('Tokyo', 'zip')
361
- Term2 = When::BasicTypes::M17n.new(<<LABEL, <<NS, <<LOCALE)
362
- [
363
- Getsuyou
364
- Monday
365
- ]
366
- LABEL
367
- ISO, jwiki=http://ja.wikipedia.org/wiki/, ewiki=http://en.wikipedia.org/wiki/
368
- NS
369
- =jwiki:, en=ewiki:
370
- LOCALE
371
- Term3 = When.Resource('_co:Common::Week::Monday::Monday')
372
-
373
- def test__code_space
374
- assert_equal('zip', Term1.codeSpace)
375
- assert_equal("ISO", Term2.codeSpace)
376
- assert_equal(nil, Term3.codeSpace)
377
- end
378
-
379
- def test__label
380
- assert_equal("Getsuyou", Term2.label.to_s)
381
- assert_equal(String, Term2.label.class)
382
- assert_equal("Monday", Term3.label.to_s)
383
- end
384
- end
385
-
386
- class Object < Unit::TestCase
387
- def test_nothing
388
- end
389
- end
390
-
391
- end
392
-
393
- module RS
394
- class Identifier < Unit::TestCase
395
- def test__forward
396
- name = When.Residue('Monday').label
397
- monday = When::RS::Identifier.new(name)
398
- assert_equal("月曜日", monday / 'ja')
399
- end
400
- end
401
- end
402
-
403
- module EX
404
- class Extent < Unit::TestCase
405
- def test_nothing
406
- end
407
- end
408
- end
409
- end
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2011-2014 Takashi SUGA
4
+
5
+ You may use and/or modify this file according to the license
6
+ described in the LICENSE.txt file included in this archive.
7
+ =end
8
+
9
+ module MiniTest
10
+
11
+ module BasicTypes
12
+
13
+ #
14
+ # ISO 8601 Date and Time Representation
15
+ #
16
+ class DateTime < TestCase
17
+
18
+ def test__to_array_assert
19
+ assert_raises(TypeError) { When::BasicTypes::DateTime._to_array(1) }
20
+ assert_raises(ArgumentError) { When::BasicTypes::DateTime._to_array("") }
21
+ end
22
+
23
+ def test__x0301_5_2_1
24
+ [ # 5.2.1 暦日付
25
+ ["19850412", [ 0, "1985-04-12"]], # 1 完全表記 基本形式
26
+ ["1985-04-12", [ 0, "1985-04-12"]], # 1 完全表記 拡張形式
27
+ ["1985-04", [-1, "1985-04" ]], # 2 a) 下位省略表記 特定の月 基本形式
28
+ ["1985", [-2, "1985" ]], # 2 b) 下位省略表記 特定の年 基本形式
29
+ ["19", [-4, "1900" ]], # 2 c) 下位省略表記 特定の百年台 基本形式
30
+ ["850412", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代の特定の日 基本形式
31
+ ["85-04-12", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代の特定の日 拡張形式
32
+ ["-8504", [-1, "1985-04" ]], # 3 b) 上位省略表記 ある百年代の特定の月 基本形式
33
+ ["-85-04", [-1, "1985-04" ]], # 3 b) 上位省略表記 ある百年代の特定の月 拡張形式
34
+ ["-85", [-2, "1985" ]], # 3 c) 上位省略表記 ある百年代の特定の年 基本形式
35
+ ["--0412", [ 0, "1985-04-12"]], # 3 d) 上位省略表記 ある年の特定の月日 基本形式
36
+ ["--04-12", [ 0, "1985-04-12"]], # 3 d) 上位省略表記 ある年の特定の月日 拡張形式
37
+ ["--04", [-1, "1985-04" ]], # 3 e) 上位省略表記 ある年の特定の月 基本形式
38
+ ["---12", [ 0, "1985-04-12"]], # 3 f) 上位省略表記 ある月の特定の日 基本形式
39
+ ["+019850412", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
40
+ ["+01985-04-12", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
41
+ ["+01985-04", [-1, "1985-04" ]], # 4 b) 拡大表記 特定の月 基本形式
42
+ ["+01985", [-2, "1985" ]], # 4 c) 拡大表記 特定の年 基本形式
43
+ ["+019", [-4, "1900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
44
+ ].each do |sample|
45
+ date = When.when?(sample[0], {:abbr=>[1985,4,12]})
46
+ assert_equal(sample[1], [date.precision, date.to_s])
47
+ end
48
+ end
49
+
50
+ def test__x0301_5_2_1_4
51
+ [ # 5.2.1.4 暦日付 拡大表記(Abbr 指定なし)
52
+ ["-019850412", [ 0, "-01985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
53
+ ["+019850412", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
54
+ ["-01985-04-12", [ 0, "-01985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
55
+ ["+01985-04-12", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
56
+ ["-01985-04", [-1, "-01985-04" ]], # 4 b) 拡大表記 特定の月 基本形式
57
+ ["+01985-04", [-1, "1985-04" ]], # 4 b) 拡大表記 特定の月 基本形式
58
+ ["-01985", [-2, "-01985" ]], # 4 c) 拡大表記 特定の年 基本形式
59
+ ["+01985", [-2, "1985" ]], # 4 c) 拡大表記 特定の年 基本形式
60
+ ["-0190", [-2, "-00190" ]], # 4 d) 拡大表記 特定の年 基本形式
61
+ ["+0190", [-2, "0190" ]], # 4 d) 拡大表記 特定の年 基本形式
62
+ ["-019", [-4, "-01900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
63
+ ["+019", [-4, "1900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
64
+ ["-119", [-4, "-11900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
65
+ ["+119", [-4, "+11900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
66
+ ].each do |sample|
67
+ date = When.when?(sample[0])
68
+ assert_equal(sample[1], [date.precision, date.to_s])
69
+ end
70
+ end
71
+
72
+ def test__x0301_5_2_2
73
+ [ # 5.2.2 年間通算日
74
+ ["1985102", [ 0, "1985-04-12"]], # 1 完全表記 基本形式
75
+ ["1985-102", [ 0, "1985-04-12"]], # 1 完全表記 拡張形式
76
+ ["85102", [ 0, "1985-04-12"]], # 2 a) 上位省略表記 ある百年代の特定の年日 基本形式
77
+ ["85-102", [ 0, "1985-04-12"]], # 2 a) 上位省略表記 ある百年代の特定の年日 拡張形式
78
+ ["-102", [ 0, "1985-04-12"]], # 2 b) 上位省略表記 ある年の特定の日 基本形式
79
+ ["+01985102", [ 0, "1985-04-12"]], # 3 a) 拡大表記 特定の日 基本形式
80
+ ["+01985-102", [ 0, "1985-04-12"]], # 3 a) 拡大表記 特定の日 拡張形式
81
+ ].each do |sample|
82
+ date = When.when?(sample[0], {:abbr=>[1985,4,12]})
83
+ assert_equal(sample[1], [date.precision, date.to_s])
84
+ end
85
+ end
86
+
87
+ def test__x0301_5_2_3
88
+ [ # 5.2.3 暦週日付
89
+ ["1985W155", [ 0, "1985-04-12"]], # 1 完全表記 基本形式
90
+ ["1985-W15-5", [ 0, "1985-04-12"]], # 1 完全表記 拡張形式
91
+ ["1985W15", [ 0, "1985-04-08...1985-04-15"]], # 2 a) 下位省略表記 基本形式
92
+ ["1985-W15", [ 0, "1985-04-08...1985-04-15"]], # 2 a) 下位省略表記 拡張形式
93
+ ["85W155", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代における年週日 基本形式
94
+ ["85-W15-5", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代における年週日 拡張形式
95
+ ["85W15", [ 0, "1985-04-08...1985-04-15"]], # 3 b) 上位省略表記 ある百年代における年週 基本形式
96
+ ["85-W15", [ 0, "1985-04-08...1985-04-15"]], # 3 b) 上位省略表記 ある百年代における年週 拡張形式
97
+ ["-5W155", [ 0, "1985-04-12"]], # 3 c) 上位省略表記 ある十年代における年週日 基本形式
98
+ ["-5-W15-5", [ 0, "1985-04-12"]], # 3 c) 上位省略表記 ある十年代における年週日 拡張形式
99
+ ["-5W15", [ 0, "1985-04-08...1985-04-15"]], # 3 d) 上位省略表記 ある十年代における年週 基本形式
100
+ ["-5-W15", [ 0, "1985-04-08...1985-04-15"]], # 3 d) 上位省略表記 ある十年代における年週 拡張形式
101
+ ["-W155", [ 0, "1985-04-12"]], # 3 e) 上位省略表記 ある年の週日 基本形式
102
+ ["-W15-5", [ 0, "1985-04-12"]], # 3 e) 上位省略表記 ある年の週日 拡張形式
103
+ ["-W15", [ 0, "1985-04-08...1985-04-15"]], # 3 f) 上位省略表記 ある年の週 基本形式
104
+ ["-W-5", [ 0, "1985-04-12"]], # 3 g) 上位省略表記 ある週の日 基本形式
105
+ ["+01985W155", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
106
+ ["+01985-W15-5", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
107
+ ["+01985W15", [ 0, "1985-04-08...1985-04-15"]], # 4 b) 拡大表記 特定の週 基本形式
108
+ ["+01985-W15", [ 0, "1985-04-08...1985-04-15"]], # 4 c) 拡大表記 特定の週 拡張形式
109
+ ].each do |sample|
110
+ date = When.when?(sample[0], {:abbr=>[1985,15,5]})
111
+ assert_equal(sample[1], [date.precision, date.to_s])
112
+ end
113
+
114
+ result = []
115
+ (1900...1928).each do |year|
116
+ date = ::Date.new(year, 1, 1) - 7
117
+ 14.times do
118
+ gdate = When.TemporalPosition(date.year, date.month, date.day)
119
+ strdate = date.strftime('%G-W%V-%u')
120
+ strgdate = gdate.strftime('%G-W%V-%u')
121
+ w1date = When::WeekDate ^ date
122
+ w2date = When.when?(strdate, {:frame=>When::WeekDate})
123
+ strw1date = w1date.strftime
124
+ strw2date = w2date.strftime
125
+ result << [[strdate, strgdate, strw1date, strw2date].uniq.size, date.jd == w1date.to_i, date.jd == w2date.to_i]
126
+ end
127
+ end
128
+ assert_equal([[1, true, true]], result.uniq)
129
+ end
130
+
131
+ def test__x0301_5_2_4
132
+ [ # 5.2.4 元号による日付
133
+ ["60.04.12", [ 0, "S60(1985).04.12"]], # 1 完全表記 基本形式
134
+ ["S60.04.12", [ 0, "S60(1985).04.12"]], # 1 完全表記 拡張形式
135
+ ].each do |sample|
136
+ date = When.when?(sample[0], {:era_name=>'S'})
137
+ assert_equal(sample[1], [date.precision, date.to_s])
138
+ end
139
+ end
140
+
141
+ def test__x0301_5_3_1
142
+ When::TM::Clock.local_time = When::UTC
143
+
144
+ [ # 5.3.1 地方時の時刻
145
+ ["T232050", [ 3, "T23:20:50" ]], # 1 完全表記 基本形式
146
+ ["T23:20:50", [ 3, "T23:20:50" ]], # 1 完全表記 拡張形式
147
+ ["T2320", [ 2, "T23:20" ]], # 2 a) 下位省略表記 特定の時分 基本形式
148
+ ["T23:20", [ 2, "T23:20" ]], # 2 a) 下位省略表記 特定の時分 拡張形式
149
+ ["T23", [ 1, "T23" ]], # 2 b) 下位省略表記 特定の時 基本形式
150
+ ].each do |sample|
151
+ date = When.when?(sample[0])
152
+ assert_equal(sample[1], [date.precision, date.to_s])
153
+ end
154
+
155
+ [ # 3 小数点を用いる表記
156
+ ["T232050.5", 4, [ 4, "T23:20:50.5" ]], # a) 特定の時分秒及び秒の小数部分 基本形式
157
+ ["T152735,5", 4, [ 4, "T15:27:35.5" ]], # a) 特定の時分秒及び秒の小数部分 基本形式
158
+ ["T23:20:50.5", 4, [ 4, "T23:20:50.5" ]], # a) 特定の時分秒及び秒の小数部分 拡張形式
159
+ ["T2320.8", 3, [ 3, "T23:20:48" ]], # b) 特定の時分及び分の小数部分 基本形式
160
+ ["T23:20.8", 3, [ 3, "T23:20:48" ]], # b) 特定の時分及び分の小数部分 拡張形式
161
+ ["T23.3", 2, [ 2, "T23:18" ]], # c) 特定の時及び時の小数部分 基本形式
162
+ ].each do |sample|
163
+ date = When.when?(sample[0], {:precision=>sample[1]})
164
+ assert_equal(sample[2], [date.precision, date.to_s])
165
+ end
166
+
167
+ [ # 4 上位省略表記
168
+ ["T-2050", [ 3, "T23:20:50" ]], # a) ある時“hour”における特定の分秒 基本形式
169
+ ["T-:20:50", [ 3, "T23:20:50" ]], # a) ある時“hour”における特定の分秒 拡張形式
170
+ ["T-20", [ 2, "T23:20" ]], # b) ある時“hour”における特定の分 基本形式
171
+ ["T--50", [ 3, "T23:20:50" ]], # c) ある分の特定の秒 基本形式
172
+ ].each do |sample|
173
+ date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50]})
174
+ assert_equal(sample[1], [date.precision, date.to_s])
175
+ end
176
+
177
+ [ # 4 小数点を用いる上位省略表記
178
+ ["T-2050.5", 4, [ 4, "T23:20:50.5" ]], # a) ある時“hour”における特定の分秒 基本形式
179
+ ["T-2735,5", 4, [ 4, "T23:27:35.5" ]], # a) ある時“hour”における特定の分秒 基本形式
180
+ ["T-:20:50.5", 4, [ 4, "T23:20:50.5" ]], # a) ある時“hour”における特定の分秒 拡張形式
181
+ ["T-20.8", 3, [ 3, "T23:20:48" ]], # b) ある時“hour”における特定の分 基本形式
182
+ ["T--50.5", 4, [ 4, "T23:20:50.5" ]], # c) ある分の特定の秒 基本形式
183
+ ].each do |sample|
184
+ date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50], :precision=>sample[1]})
185
+ assert_equal(sample[2], [date.precision, date.to_s])
186
+ end
187
+ end
188
+
189
+ def test__x0301_5_3_2
190
+ When::TM::Clock.local_time = When.Clock("+0900")
191
+ [ # 5.3.2 夜の12時
192
+ ["19850412T240000", [ 3, "1985-04-13T00:00:00"]], # 完全表記 基本形式
193
+ ["1985-04-12T24:00:00", [ 3, "1985-04-13T00:00:00"]], # 完全表記 拡張形式
194
+ ["19850412T2400", [ 2, "1985-04-13T00:00" ]], # 下位省略表記 基本形式
195
+ ["1985-04-12T24:00", [ 2, "1985-04-13T00:00" ]], # 下位省略表記 拡張形式
196
+ ].each do |sample|
197
+ date = When.when?(sample[0])
198
+ assert_equal(sample[1], [date.precision, date.to_s])
199
+ end
200
+ end
201
+
202
+ def test__x0301_5_3_3
203
+ [ # 5.3.3 協定世界時(UTC)の時刻
204
+ ["T232050Z", [ 3, "T23:20:50Z" ]], # 1 完全表記 基本形式
205
+ ["T23:20:50Z", [ 3, "T23:20:50Z" ]], # 1 完全表記 拡張形式
206
+ ["T2320Z", [ 2, "T23:20Z" ]], # 2 a) 下位省略表記 特定の時分 基本形式
207
+ ["T23:20Z", [ 2, "T23:20Z" ]], # 2 a) 下位省略表記 特定の時分 拡張形式
208
+ ["T23Z", [ 1, "T23Z" ]], # 2 b) 下位省略表記 特定の時 基本形式
209
+ ].each do |sample|
210
+ date = When.when?(sample[0])
211
+ assert_equal(sample[1], [date.precision, date.to_s])
212
+ end
213
+
214
+ [ # 3 小数点を用いる表記
215
+ ["T232050.5Z", 4, [ 4, "T23:20:50.5Z" ]], # a) 特定の時分秒及び秒の小数部分 基本形式
216
+ ["T23:20:50.5Z",4, [ 4, "T23:20:50.5Z" ]], # a) 特定の時分秒及び秒の小数部分 拡張形式
217
+ ["T2320.8Z", 3, [ 3, "T23:20:48Z" ]], # b) 特定の時分及び分の小数部分 基本形式
218
+ ["T23:20.8Z", 3, [ 3, "T23:20:48Z" ]], # b) 特定の時分及び分の小数部分 拡張形式
219
+ ["T23.3Z", 2, [ 2, "T23:18Z" ]], # c) 特定の時及び時の小数部分 基本形式
220
+ ].each do |sample|
221
+ date = When.when?(sample[0], {:precision=>sample[1]})
222
+ assert_equal(sample[2], [date.precision, date.to_s])
223
+ end
224
+
225
+ [ # 4 上位省略表記
226
+ ["T-2050Z", [ 3, "T23:20:50Z" ]], # a) ある時“hour”における特定の分秒 基本形式
227
+ ["T-:20:50Z", [ 3, "T23:20:50Z" ]], # a) ある時“hour”における特定の分秒 拡張形式
228
+ ["T-20Z", [ 2, "T23:20Z" ]], # b) ある時“hour”における特定の分 基本形式
229
+ ["T--50Z", [ 3, "T23:20:50Z" ]], # c) ある分の特定の秒 基本形式
230
+ ].each do |sample|
231
+ date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50]})
232
+ assert_equal(sample[1], [date.precision, date.to_s])
233
+ end
234
+
235
+ [ # 4 小数点を用いる上位省略表記
236
+ ["T-2050.5Z", 4, [ 4, "T23:20:50.5Z" ]], # a) ある時“hour”における特定の分秒 基本形式
237
+ ["T-:20:50.5Z", 4, [ 4, "T23:20:50.5Z" ]], # a) ある時“hour”における特定の分秒 拡張形式
238
+ ["T-20.8Z", 3, [ 3, "T23:20:48Z" ]], # b) ある時“hour”における特定の分 基本形式
239
+ ["T--50.5Z", 4, [ 4, "T23:20:50.5Z" ]], # c) ある分の特定の秒 基本形式
240
+ ].each do |sample|
241
+ date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50], :precision=>sample[1]})
242
+ assert_equal(sample[2], [date.precision, date.to_s])
243
+ end
244
+ end
245
+
246
+ def test__x0301_5_3_4
247
+ [ # 5.3.4 地方時及び協定世界時
248
+ ["T+0100", [ 0, "T+01:00" ]], # 1 地方時と協定世界時との差(時差の表記) 基本形式
249
+ ["T+01", [ 0, "T+01:00" ]], # 1 地方時と協定世界時との差(時差の表記) 基本形式
250
+ ["T+01:00", [ 0, "T+01:00" ]], # 1 地方時と協定世界時との差(時差の表記) 拡張形式
251
+ ["T152746+0100", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
252
+ ["T152746-0500", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
253
+ ["T152746+01", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
254
+ ["T152746-05", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
255
+ ["T15:27:46+01:00", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
256
+ ["T15:27:46-05:00", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
257
+ ["T15:27:46+01", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
258
+ ["T15:27:46-05", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
259
+ ].each do |sample|
260
+ date = When.when?(sample[0])
261
+ assert_equal(sample[1], [date.precision, date.to_s])
262
+ end
263
+ end
264
+
265
+ def test__x0301_5_4_2
266
+ When::TM::Clock.local_time = When.Clock("+0900")
267
+ [ # 5.4.2 完全表記以外の表記
268
+ ["19850412T1015", [ 2, "1985-04-12T10:15" ]], # a) 暦日付及び地方時 基本形式
269
+ ["1985-04-12T10:15", [ 2, "1985-04-12T10:15" ]], # a) 暦日付及び地方時 拡張形式
270
+ ["1985102T1015Z", [ 2, "1985-04-12T10:15Z" ]], # b) 年間通算日及び協定世界時 基本形式
271
+ ["1985-102T10:15Z", [ 2, "1985-04-12T10:15Z" ]], # b) 年間通算日及び協定世界時 拡張形式
272
+ ["1985W155T1015+0400", [ 2, "1985-04-12T10:15+04:00" ]], # c) 暦週日付,地方時,及びUTCとの差 基本形式
273
+ ["1985-W15-5T10:15+04:00",[ 2, "1985-04-12T10:15+04:00" ]], # c) 暦週日付,地方時,及びUTCとの差 拡張形式
274
+ ].each do |sample|
275
+ date = When.when?(sample[0])
276
+ assert_equal(sample[1], [date.precision, date.to_s])
277
+ end
278
+ end
279
+
280
+ def test__x0301_5_5_4
281
+ When::TM::Clock.local_time = When.Clock("+0900") # 時間間隔の表記
282
+ [ # 5.5.4 完全表記
283
+ ["19850412T232050/19850625T103000", "1985-04-12T23:20:50..1985-06-25T10:30:00" ], # 1 始点及び終点 基本形式
284
+ ["1985-04-12T23:20:50/1985-06-25T10:30:00", "1985-04-12T23:20:50..1985-06-25T10:30:00" ], # 1 始点及び終点 拡張形式
285
+ ["P2Y10M15DT10H30M20S", "P2Y10M15DT10H30M20S" ], # 2.1 時間の単位の指示記号付
286
+ ["P6W", "P6W" ], # 2.1 時間の単位の指示記号付
287
+ ["P1Y6M", "P1Y6M" ], # 2.1 時間の単位の指示記号付
288
+ ["PT72H", "PT72H" ], # 2.1 時間の単位の指示記号付
289
+ ["P00021015T103020", "P2Y10M15DT10H30M20S" ], # 2.2 代用形式 基本形式
290
+ ["P0001-06", "P1Y6M" ], # 2.2 代用形式 基本形式
291
+ ["P010600", "P1Y6M" ], # 2.2 代用形式 基本形式
292
+ ["P0002-10-15T10:30:20", "P2Y10M15DT10H30M20S" ], # 2.2 代用形式 拡張形式
293
+ ["19850412T232050/P1Y2M15DT12H30M0S", "1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 基本形式
294
+ ["19850412T232050/P00010215T123000", "1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 基本形式
295
+ ["1985-04-12T23:20:50/P1Y2M15DT12H30M0S", "1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 拡張形式
296
+ ["1985-04-12T23:20:50/P0001-02-15T12:30:00","1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 拡張形式
297
+ ["P1Y2M15DT12H30M0S/19850412T232050", "1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 基本形式
298
+ ["P00010215T123000/19850412T232050", "1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 基本形式
299
+ ["P1Y2M15DT12H30M0S/1985-04-12T23:20:50", "1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 拡張形式
300
+ ["P0001-02-15T12:30:00/1985-04-12T23:20:50","1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 拡張形式
301
+ ].each do |sample|
302
+ assert_equal(sample[1], When.when?(sample[0]).to_s)
303
+ end
304
+ end
305
+
306
+ def test__x0301_5_6_3
307
+ When::TM::Clock.local_time = When.Clock("+0900") # 反復時間間隔の表記
308
+ [ # 5.6.3 完全表記
309
+ ["R2/19850412T232050/19850625T103000", ["1985-04-12T23:20:50","1985-06-25T10:30:00"]], # 始点及び終点
310
+ ["R2/P2Y10M15DT10H30M20S", ["P2Y10M15DT10H30M20S","P2Y10M15DT10H30M20S"]], # 時間間隔
311
+ ["R2/19850412T232050/P1Y2M15DT12H30M0S", ["1985-04-12T23:20:50","1986-06-28T11:50:50"]], # 始点及び時間間隔
312
+ ["R2/P1Y2M15DT12H30M0S/19850412T232050", ["1984-01-28T10:50:50","1985-04-12T23:20:50"]], # 時間間隔及び終点
313
+ ].each do |sample|
314
+ event = When.when?(sample[0])
315
+ sample[1].each do |date|
316
+ assert_equal(date, event.shift.to_s)
317
+ end
318
+ end
319
+ [ # 5.6.3 完全表記
320
+ ["R/19850412T232050/19850625T103000", ["1985-04-12T23:20:50","1985-06-25T10:30:00"]], # 始点及び終点
321
+ ["R/19850412T232050/P1Y2M15DT12H30M0S", ["1985-04-12T23:20:50","1986-06-28T11:50:50"]], # 始点及び時間間隔
322
+ ].each do |sample|
323
+ event = When.when?(sample[0]).each
324
+ sample[1].each do |date|
325
+ assert_equal(date, event.succ.to_s)
326
+ end
327
+ end
328
+ end
329
+ end
330
+
331
+ #
332
+ # ISO 8601 Date Representation
333
+ #
334
+ class Date < TestCase
335
+ def test__to_array_basic_ISO8601
336
+ assert_equal([nil, [1985,4,12]], When::BasicTypes::Date._to_array_basic_ISO8601('19850412'))
337
+ assert_equal([nil, [1985]], When::BasicTypes::Date._to_array_basic_ISO8601('1985'))
338
+ assert_equal([:century, [1900]], When::BasicTypes::Date._to_array_basic_ISO8601('19'))
339
+ end
340
+
341
+ def test__to_array_extended_ISO8601
342
+ assert_equal([nil, [1985,4,12]], When::BasicTypes::Date._to_array_extended_ISO8601('1985-04-12'))
343
+ assert_equal([nil, [1985,4]], When::BasicTypes::Date._to_array_extended_ISO8601('1985-04'))
344
+ # assert_equal([19,nil,nil], When::BasicTypes::Date._to_array_extended_ISO8601('19'))
345
+ end
346
+ end
347
+
348
+ #
349
+ # ISO 8601 Time Representation
350
+ #
351
+ class Time < TestCase
352
+ def test_nothing
353
+ end
354
+ end
355
+
356
+ #
357
+ # M17n String
358
+ #
359
+ class M17n < TestCase
360
+ Term1 = When::BasicTypes::M17n.new('Tokyo', 'zip')
361
+ Term2 = When::BasicTypes::M17n.new(<<LABEL, <<NS, <<LOCALE)
362
+ [
363
+ Getsuyou
364
+ Monday
365
+ ]
366
+ LABEL
367
+ ISO, jwiki=http://ja.wikipedia.org/wiki/, ewiki=http://en.wikipedia.org/wiki/
368
+ NS
369
+ =jwiki:, en=ewiki:
370
+ LOCALE
371
+ Term3 = When.Resource('_co:Common::Week::Monday::Monday')
372
+
373
+ def test__code_space
374
+ assert_equal('zip', Term1.codeSpace)
375
+ assert_equal("ISO", Term2.codeSpace)
376
+ assert_equal(nil, Term3.codeSpace)
377
+ end
378
+
379
+ def test__label
380
+ assert_equal("Getsuyou", Term2.label.to_s)
381
+ assert_equal(String, Term2.label.class)
382
+ assert_equal("Monday", Term3.label.to_s)
383
+ end
384
+ end
385
+
386
+ class Object < TestCase
387
+ def test_nothing
388
+ end
389
+ end
390
+
391
+ end
392
+
393
+ module RS
394
+ class Identifier < TestCase
395
+ def test__forward
396
+ name = When.Residue('Monday').label
397
+ monday = When::RS::Identifier.new(name)
398
+ assert_equal("月曜日", monday / 'ja')
399
+ end
400
+ end
401
+ end
402
+
403
+ module EX
404
+ class Extent < TestCase
405
+ def test_nothing
406
+ end
407
+ end
408
+ end
409
+ end