PageRenderTime 51ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/projects/jruby-1.7.3/test/externals/ruby1.9/date/test_date_strptime.rb

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Ruby | 486 lines | 424 code | 57 blank | 5 comment | 9 complexity | 7cb53573a7f1d29087e06d5100148440 MD5 | raw file
  1. require 'test/unit'
  2. require 'date'
  3. class TestDateStrptime < Test::Unit::TestCase
  4. STRFTIME_2001_02_03 = {
  5. '%A'=>['Saturday',{:wday=>6}],
  6. '%a'=>['Sat',{:wday=>6}],
  7. '%B'=>['February',{:mon=>2}],
  8. '%b'=>['Feb',{:mon=>2}],
  9. '%c'=>['Sat Feb 3 00:00:00 2001',
  10. {:wday=>6,:mon=>2,:mday=>3,:hour=>0,:min=>0,:sec=>0,:year=>2001}],
  11. '%d'=>['03',{:mday=>3}],
  12. '%e'=>[' 3',{:mday=>3}],
  13. '%H'=>['00',{:hour=>0}],
  14. '%I'=>['12',{:hour=>0}],
  15. '%j'=>['034',{:yday=>34}],
  16. '%M'=>['00',{:min=>0}],
  17. '%m'=>['02',{:mon=>2}],
  18. '%p'=>['AM',{}],
  19. '%S'=>['00',{:sec=>0}],
  20. '%U'=>['04',{:wnum0=>4}],
  21. '%W'=>['05',{:wnum1=>5}],
  22. '%X'=>['00:00:00',{:hour=>0,:min=>0,:sec=>0}],
  23. '%x'=>['02/03/01',{:mon=>2,:mday=>3,:year=>2001}],
  24. '%Y'=>['2001',{:year=>2001}],
  25. '%y'=>['01',{:year=>2001}],
  26. '%Z'=>['+00:00',{:zone=>'+00:00',:offset=>0}],
  27. '%%'=>['%',{}],
  28. '%C'=>['20',{}],
  29. '%D'=>['02/03/01',{:mon=>2,:mday=>3,:year=>2001}],
  30. '%F'=>['2001-02-03',{:year=>2001,:mon=>2,:mday=>3}],
  31. '%G'=>['2001',{:cwyear=>2001}],
  32. '%g'=>['01',{:cwyear=>2001}],
  33. '%h'=>['Feb',{:mon=>2}],
  34. '%k'=>[' 0',{:hour=>0}],
  35. '%L'=>['000',{:sec_fraction=>0}],
  36. '%l'=>['12',{:hour=>0}],
  37. '%N'=>['000000000',{:sec_fraction=>0}],
  38. '%n'=>["\n",{}],
  39. '%P'=>['am',{}],
  40. '%Q'=>['981158400000',{:seconds=>981158400.to_r}],
  41. '%R'=>['00:00',{:hour=>0,:min=>0}],
  42. '%r'=>['12:00:00 AM',{:hour=>0,:min=>0,:sec=>0}],
  43. '%s'=>['981158400',{:seconds=>981158400}],
  44. '%T'=>['00:00:00',{:hour=>0,:min=>0,:sec=>0}],
  45. '%t'=>["\t",{}],
  46. '%u'=>['6',{:cwday=>6}],
  47. '%V'=>['05',{:cweek=>5}],
  48. '%v'=>[' 3-Feb-2001',{:mday=>3,:mon=>2,:year=>2001}],
  49. '%z'=>['+0000',{:zone=>'+0000',:offset=>0}],
  50. '%+'=>['Sat Feb 3 00:00:00 +00:00 2001',
  51. {:wday=>6,:mon=>2,:mday=>3,
  52. :hour=>0,:min=>0,:sec=>0,:zone=>'+00:00',:offset=>0,:year=>2001}],
  53. }
  54. STRFTIME_2001_02_03_CVS19 = {
  55. }
  56. STRFTIME_2001_02_03_GNUext = {
  57. '%:z'=>['+00:00',{:zone=>'+00:00',:offset=>0}],
  58. '%::z'=>['+00:00:00',{:zone=>'+00:00:00',:offset=>0}],
  59. '%:::z'=>['+00',{:zone=>'+00',:offset=>0}],
  60. }
  61. STRFTIME_2001_02_03.update(STRFTIME_2001_02_03_CVS19)
  62. STRFTIME_2001_02_03.update(STRFTIME_2001_02_03_GNUext)
  63. def test__strptime
  64. STRFTIME_2001_02_03.each do |f, s|
  65. if (f == '%I' and s[0] == '12') or
  66. (f == '%l' and s[0] == '12') # hour w/o merid
  67. s[1][:hour] = 12
  68. end
  69. assert_equal(s[1], Date._strptime(s[0], f), [f, s].inspect)
  70. case f[-1,1]
  71. when 'c', 'C', 'x', 'X', 'y', 'Y'
  72. f2 = f.sub(/\A%/, '%E')
  73. assert_equal(s[1], Date._strptime(s[0], f2), [f2, s].inspect)
  74. else
  75. f2 = f.sub(/\A%/, '%E')
  76. assert_equal(nil, Date._strptime(s[0], f2), [f2, s].inspect)
  77. assert_equal({}, Date._strptime(f2, f2), [f2, s].inspect)
  78. end
  79. case f[-1,1]
  80. when 'd', 'e', 'H', 'I', 'm', 'M', 'S', 'u', 'U', 'V', 'w', 'W', 'y'
  81. f2 = f.sub(/\A%/, '%O')
  82. assert_equal(s[1], Date._strptime(s[0], f2), [f2, s].inspect)
  83. else
  84. f2 = f.sub(/\A%/, '%O')
  85. assert_equal(nil, Date._strptime(s[0], f2), [f2, s].inspect)
  86. assert_equal({}, Date._strptime(f2, f2), [f2, s].inspect)
  87. end
  88. end
  89. end
  90. def test__strptime__2
  91. h = Date._strptime('2001-02-03')
  92. assert_equal([2001,2,3], h.values_at(:year,:mon,:mday))
  93. h = DateTime._strptime('2001-02-03T12:13:14Z')
  94. assert_equal([2001,2,3,12,13,14],
  95. h.values_at(:year,:mon,:mday,:hour,:min,:sec))
  96. assert_equal({}, Date._strptime('', ''))
  97. assert_equal({:leftover=>"\s"*3}, Date._strptime("\s"*3, ''))
  98. assert_equal({:leftover=>'x'}, Date._strptime("\nx", "\n"))
  99. assert_equal({}, Date._strptime('', "\s"*3))
  100. assert_equal({}, Date._strptime("\s"*3, "\s"*3))
  101. assert_equal({}, Date._strptime("\tfoo\n\000\r", "\tfoo\n\000\r"))
  102. assert_equal({}, Date._strptime("foo\n\nbar", "foo\sbar"))
  103. assert_equal({}, Date._strptime("%\n", "%\n")) # gnu
  104. assert_equal({}, Date._strptime('%%', '%%%'))
  105. assert_equal({:wday=>6}, Date._strptime('Saturday'*1024 + ',', '%A'*1024 + ','))
  106. assert_equal({:wday=>6}, Date._strptime('Saturday'*1024 + ',', '%a'*1024 + ','))
  107. assert_equal({}, Date._strptime('Anton von Webern', 'Anton von Webern'))
  108. end
  109. def test__strptime__3
  110. [
  111. # iso8601
  112. [['2001-02-03', '%Y-%m-%d'], [2001,2,3,nil,nil,nil,nil,nil,nil]],
  113. [['2001-02-03T23:59:60', '%Y-%m-%dT%H:%M:%S'], [2001,2,3,23,59,60,nil,nil,nil]],
  114. [['2001-02-03T23:59:60+09:00', '%Y-%m-%dT%H:%M:%S%Z'], [2001,2,3,23,59,60,'+09:00',9*3600,nil]],
  115. [['-2001-02-03T23:59:60+09:00', '%Y-%m-%dT%H:%M:%S%Z'], [-2001,2,3,23,59,60,'+09:00',9*3600,nil]],
  116. [['+012345-02-03T23:59:60+09:00', '%Y-%m-%dT%H:%M:%S%Z'], [12345,2,3,23,59,60,'+09:00',9*3600,nil]],
  117. [['-012345-02-03T23:59:60+09:00', '%Y-%m-%dT%H:%M:%S%Z'], [-12345,2,3,23,59,60,'+09:00',9*3600,nil]],
  118. # ctime(3), asctime(3)
  119. [['Thu Jul 29 14:47:19 1999', '%c'], [1999,7,29,14,47,19,nil,nil,4]],
  120. [['Thu Jul 29 14:47:19 -1999', '%c'], [-1999,7,29,14,47,19,nil,nil,4]],
  121. # date(1)
  122. [['Thu Jul 29 16:39:41 EST 1999', '%a %b %d %H:%M:%S %Z %Y'], [1999,7,29,16,39,41,'EST',-5*3600,4]],
  123. [['Thu Jul 29 16:39:41 MET DST 1999', '%a %b %d %H:%M:%S %Z %Y'], [1999,7,29,16,39,41,'MET DST',2*3600,4]],
  124. [['Thu Jul 29 16:39:41 AMT 1999', '%a %b %d %H:%M:%S %Z %Y'], [1999,7,29,16,39,41,'AMT',nil,4]],
  125. [['Thu Jul 29 16:39:41 AMT -1999', '%a %b %d %H:%M:%S %Z %Y'], [-1999,7,29,16,39,41,'AMT',nil,4]],
  126. [['Thu Jul 29 16:39:41 GMT+09 1999', '%a %b %d %H:%M:%S %Z %Y'], [1999,7,29,16,39,41,'GMT+09',9*3600,4]],
  127. [['Thu Jul 29 16:39:41 GMT+0908 1999', '%a %b %d %H:%M:%S %Z %Y'], [1999,7,29,16,39,41,'GMT+0908',9*3600+8*60,4]],
  128. [['Thu Jul 29 16:39:41 GMT+090807 1999', '%a %b %d %H:%M:%S %Z %Y'], [1999,7,29,16,39,41,'GMT+090807',9*3600+8*60+7,4]],
  129. [['Thu Jul 29 16:39:41 GMT-09 1999', '%a %b %d %H:%M:%S %Z %Y'], [1999,7,29,16,39,41,'GMT-09',-9*3600,4]],
  130. [['Thu Jul 29 16:39:41 GMT-09:08 1999', '%a %b %d %H:%M:%S %Z %Y'], [1999,7,29,16,39,41,'GMT-09:08',-9*3600-8*60,4]],
  131. [['Thu Jul 29 16:39:41 GMT-09:08:07 1999', '%a %b %d %H:%M:%S %Z %Y'], [1999,7,29,16,39,41,'GMT-09:08:07',-9*3600-8*60-7,4]],
  132. [['Thu Jul 29 16:39:41 GMT-3.5 1999', '%a %b %d %H:%M:%S %Z %Y'], [1999,7,29,16,39,41,'GMT-3.5',-3*3600-30*60,4]],
  133. [['Thu Jul 29 16:39:41 GMT-3,5 1999', '%a %b %d %H:%M:%S %Z %Y'], [1999,7,29,16,39,41,'GMT-3,5',-3*3600-30*60,4]],
  134. [['Thu Jul 29 16:39:41 Mountain Daylight Time 1999', '%a %b %d %H:%M:%S %Z %Y'], [1999,7,29,16,39,41,'Mountain Daylight Time',-6*3600,4]],
  135. [['Thu Jul 29 16:39:41 E. Australia Standard Time 1999', '%a %b %d %H:%M:%S %Z %Y'], [1999,7,29,16,39,41,'E. Australia Standard Time',10*3600,4]],
  136. # rfc822
  137. [['Thu, 29 Jul 1999 09:54:21 UT', '%a, %d %b %Y %H:%M:%S %Z'], [1999,7,29,9,54,21,'UT',0,4]],
  138. [['Thu, 29 Jul 1999 09:54:21 GMT', '%a, %d %b %Y %H:%M:%S %Z'], [1999,7,29,9,54,21,'GMT',0,4]],
  139. [['Thu, 29 Jul 1999 09:54:21 PDT', '%a, %d %b %Y %H:%M:%S %Z'], [1999,7,29,9,54,21,'PDT',-7*3600,4]],
  140. [['Thu, 29 Jul 1999 09:54:21 z', '%a, %d %b %Y %H:%M:%S %Z'], [1999,7,29,9,54,21,'z',0,4]],
  141. [['Thu, 29 Jul 1999 09:54:21 +0900', '%a, %d %b %Y %H:%M:%S %Z'], [1999,7,29,9,54,21,'+0900',9*3600,4]],
  142. [['Thu, 29 Jul 1999 09:54:21 +0430', '%a, %d %b %Y %H:%M:%S %Z'], [1999,7,29,9,54,21,'+0430',4*3600+30*60,4]],
  143. [['Thu, 29 Jul 1999 09:54:21 -0430', '%a, %d %b %Y %H:%M:%S %Z'], [1999,7,29,9,54,21,'-0430',-4*3600-30*60,4]],
  144. [['Thu, 29 Jul -1999 09:54:21 -0430', '%a, %d %b %Y %H:%M:%S %Z'], [-1999,7,29,9,54,21,'-0430',-4*3600-30*60,4]],
  145. # etc
  146. [['06-DEC-99', '%d-%b-%y'], [1999,12,6,nil,nil,nil,nil,nil,nil]],
  147. [['sUnDay oCtoBer 31 01', '%A %B %d %y'], [2001,10,31,nil,nil,nil,nil,nil,0]],
  148. [["October\t\n\v\f\r 15,\t\n\v\f\r99", '%B %d, %y'], [1999,10,15,nil,nil,nil,nil,nil,nil]],
  149. [["October\t\n\v\f\r 15,\t\n\v\f\r99", '%B%t%d,%n%y'], [1999,10,15,nil,nil,nil,nil,nil,nil]],
  150. [['09:02:11 AM', '%I:%M:%S %p'], [nil,nil,nil,9,2,11,nil,nil,nil]],
  151. [['09:02:11 A.M.', '%I:%M:%S %p'], [nil,nil,nil,9,2,11,nil,nil,nil]],
  152. [['09:02:11 PM', '%I:%M:%S %p'], [nil,nil,nil,21,2,11,nil,nil,nil]],
  153. [['09:02:11 P.M.', '%I:%M:%S %p'], [nil,nil,nil,21,2,11,nil,nil,nil]],
  154. [['12:33:44 AM', '%r'], [nil,nil,nil,0,33,44,nil,nil,nil]],
  155. [['01:33:44 AM', '%r'], [nil,nil,nil,1,33,44,nil,nil,nil]],
  156. [['11:33:44 AM', '%r'], [nil,nil,nil,11,33,44,nil,nil,nil]],
  157. [['12:33:44 PM', '%r'], [nil,nil,nil,12,33,44,nil,nil,nil]],
  158. [['01:33:44 PM', '%r'], [nil,nil,nil,13,33,44,nil,nil,nil]],
  159. [['11:33:44 PM', '%r'], [nil,nil,nil,23,33,44,nil,nil,nil]],
  160. [['11:33:44 PM AMT', '%I:%M:%S %p %Z'], [nil,nil,nil,23,33,44,'AMT',nil,nil]],
  161. [['11:33:44 P.M. AMT', '%I:%M:%S %p %Z'], [nil,nil,nil,23,33,44,'AMT',nil,nil]],
  162. [['fri1feb034pm+5', '%a%d%b%y%H%p%Z'], [2003,2,1,16,nil,nil,'+5',5*3600,5]]
  163. ].each do |x, y|
  164. h = Date._strptime(*x)
  165. a = h.values_at(:year,:mon,:mday,:hour,:min,:sec,:zone,:offset,:wday)
  166. if y[1] == -1
  167. a[1] = -1
  168. a[2] = h[:yday]
  169. end
  170. assert_equal(y, a, [x, y, a].inspect)
  171. end
  172. end
  173. def test__strptime__width
  174. [
  175. [['99', '%y'], [1999,nil,nil,nil,nil,nil,nil,nil,nil]],
  176. [['01', '%y'], [2001,nil,nil,nil,nil,nil,nil,nil,nil]],
  177. [['19 99', '%C %y'], [1999,nil,nil,nil,nil,nil,nil,nil,nil]],
  178. [['20 01', '%C %y'], [2001,nil,nil,nil,nil,nil,nil,nil,nil]],
  179. [['1999', '%C%y'], [1999,nil,nil,nil,nil,nil,nil,nil,nil]],
  180. [['2001', '%C%y'], [2001,nil,nil,nil,nil,nil,nil,nil,nil]],
  181. [['20060806', '%Y'], [20060806,nil,nil,nil,nil,nil,nil,nil,nil]],
  182. [['20060806', "%Y\s"], [20060806,nil,nil,nil,nil,nil,nil,nil,nil]],
  183. [['20060806', '%Y%m%d'], [2006,8,6,nil,nil,nil,nil,nil,nil]],
  184. [['2006908906', '%Y9%m9%d'], [2006,8,6,nil,nil,nil,nil,nil,nil]],
  185. [['12006 08 06', '%Y %m %d'], [12006,8,6,nil,nil,nil,nil,nil,nil]],
  186. [['12006-08-06', '%Y-%m-%d'], [12006,8,6,nil,nil,nil,nil,nil,nil]],
  187. [['200608 6', '%Y%m%e'], [2006,8,6,nil,nil,nil,nil,nil,nil]],
  188. [['2006333', '%Y%j'], [2006,-1,333,nil,nil,nil,nil,nil,nil]],
  189. [['20069333', '%Y9%j'], [2006,-1,333,nil,nil,nil,nil,nil,nil]],
  190. [['12006 333', '%Y %j'], [12006,-1,333,nil,nil,nil,nil,nil,nil]],
  191. [['12006-333', '%Y-%j'], [12006,-1,333,nil,nil,nil,nil,nil,nil]],
  192. [['232425', '%H%M%S'], [nil,nil,nil,23,24,25,nil,nil,nil]],
  193. [['23924925', '%H9%M9%S'], [nil,nil,nil,23,24,25,nil,nil,nil]],
  194. [['23 24 25', '%H %M %S'], [nil,nil,nil,23,24,25,nil,nil,nil]],
  195. [['23:24:25', '%H:%M:%S'], [nil,nil,nil,23,24,25,nil,nil,nil]],
  196. [[' 32425', '%k%M%S'], [nil,nil,nil,3,24,25,nil,nil,nil]],
  197. [[' 32425', '%l%M%S'], [nil,nil,nil,3,24,25,nil,nil,nil]],
  198. [['FriAug', '%a%b'], [nil,8,nil,nil,nil,nil,nil,nil,5]],
  199. [['FriAug', '%A%B'], [nil,8,nil,nil,nil,nil,nil,nil,5]],
  200. [['FridayAugust', '%A%B'], [nil,8,nil,nil,nil,nil,nil,nil,5]],
  201. [['FridayAugust', '%a%b'], [nil,8,nil,nil,nil,nil,nil,nil,5]]
  202. ].each do |x, y|
  203. h = Date._strptime(*x)
  204. a = h.values_at(:year,:mon,:mday,:hour,:min,:sec,:zone,:offset,:wday)
  205. if y[1] == -1
  206. a[1] = -1
  207. a[2] = h[:yday]
  208. end
  209. assert_equal(y, a, [x, y, a].inspect)
  210. end
  211. end
  212. def test__strptime__fail
  213. assert_not_nil(Date._strptime('2001.', '%Y.'))
  214. assert_not_nil(Date._strptime("2001.\s", '%Y.'))
  215. assert_not_nil(Date._strptime('2001.', "%Y.\s"))
  216. assert_not_nil(Date._strptime("2001.\s", "%Y.\s"))
  217. assert_nil(Date._strptime('2001', '%Y.'))
  218. assert_nil(Date._strptime("2001\s", '%Y.'))
  219. assert_nil(Date._strptime('2001', "%Y.\s"))
  220. assert_nil(Date._strptime("2001\s", "%Y.\s"))
  221. assert_nil(Date._strptime('2001-13-31', '%Y-%m-%d'))
  222. assert_nil(Date._strptime('2001-12-00', '%Y-%m-%d'))
  223. assert_nil(Date._strptime('2001-12-32', '%Y-%m-%d'))
  224. assert_nil(Date._strptime('2001-12-00', '%Y-%m-%e'))
  225. assert_nil(Date._strptime('2001-12-32', '%Y-%m-%e'))
  226. assert_nil(Date._strptime('2001-12-31', '%y-%m-%d'))
  227. assert_nil(Date._strptime('2004-000', '%Y-%j'))
  228. assert_nil(Date._strptime('2004-367', '%Y-%j'))
  229. assert_nil(Date._strptime('2004-366', '%y-%j'))
  230. assert_not_nil(Date._strptime('24:59:59', '%H:%M:%S'))
  231. assert_not_nil(Date._strptime('24:59:59', '%k:%M:%S'))
  232. assert_not_nil(Date._strptime('24:59:60', '%H:%M:%S'))
  233. assert_not_nil(Date._strptime('24:59:60', '%k:%M:%S'))
  234. assert_nil(Date._strptime('24:60:59', '%H:%M:%S'))
  235. assert_nil(Date._strptime('24:60:59', '%k:%M:%S'))
  236. assert_nil(Date._strptime('24:59:61', '%H:%M:%S'))
  237. assert_nil(Date._strptime('24:59:61', '%k:%M:%S'))
  238. assert_nil(Date._strptime('00:59:59', '%I:%M:%S'))
  239. assert_nil(Date._strptime('13:59:59', '%I:%M:%S'))
  240. assert_nil(Date._strptime('00:59:59', '%l:%M:%S'))
  241. assert_nil(Date._strptime('13:59:59', '%l:%M:%S'))
  242. assert_not_nil(Date._strptime('0', '%U'))
  243. assert_nil(Date._strptime('54', '%U'))
  244. assert_not_nil(Date._strptime('0', '%W'))
  245. assert_nil(Date._strptime('54', '%W'))
  246. assert_nil(Date._strptime('0', '%V'))
  247. assert_nil(Date._strptime('54', '%V'))
  248. assert_nil(Date._strptime('0', '%u'))
  249. assert_not_nil(Date._strptime('7', '%u'))
  250. assert_not_nil(Date._strptime('0', '%w'))
  251. assert_nil(Date._strptime('7', '%w'))
  252. assert_nil(Date._strptime('Sanday', '%A'))
  253. assert_nil(Date._strptime('Jenuary', '%B'))
  254. assert_not_nil(Date._strptime('Sundai', '%A'))
  255. assert_not_nil(Date._strptime('Januari', '%B'))
  256. assert_nil(Date._strptime('Sundai,', '%A,'))
  257. assert_nil(Date._strptime('Januari,', '%B,'))
  258. end
  259. def test_strptime
  260. assert_equal(Date.new, Date.strptime)
  261. d = Date.new(2002,3,14)
  262. assert_equal(d, Date.strptime(d.to_s))
  263. assert_equal(Date.new(2002,3,14), Date.strptime('2002-03-14'))
  264. d = DateTime.new(2002,3,14,11,22,33, 0)
  265. assert_equal(d, DateTime.strptime(d.to_s))
  266. assert_equal(DateTime.new(2002,3,14,11,22,33, 0),
  267. DateTime.strptime('2002-03-14T11:22:33Z'))
  268. assert_equal(DateTime.new(2002,3,14,11,22,33, 0),
  269. DateTime.strptime('2002-03-14T11:22:33Z', '%Y-%m-%dT%H:%M:%S%Z'))
  270. assert_equal(DateTime.new(2002,3,14,11,22,33, 9.to_r/24),
  271. DateTime.strptime('2002-03-14T11:22:33+09:00', '%Y-%m-%dT%H:%M:%S%Z'))
  272. assert_equal(DateTime.new(2002,3,14,11,22,33, -9.to_r/24),
  273. DateTime.strptime('2002-03-14T11:22:33-09:00', '%FT%T%Z'))
  274. assert_equal(DateTime.new(2002,3,14,11,22,33, -9.to_r/24) + 123456789.to_r/1000000000/86400,
  275. DateTime.strptime('2002-03-14T11:22:33.123456789-09:00', '%FT%T.%N%Z'))
  276. end
  277. def test_strptime__2
  278. n = 10**9
  279. (Date.new(2006,6,1)..Date.new(2007,6,1)).each do |d|
  280. [
  281. '%Y %m %d',
  282. '%C %y %m %d',
  283. '%Y %j',
  284. '%C %y %j',
  285. '%G %V %w',
  286. '%G %V %u',
  287. '%C %g %V %w',
  288. '%C %g %V %u',
  289. '%Y %U %w',
  290. '%Y %U %u',
  291. '%Y %W %w',
  292. '%Y %W %u',
  293. '%C %y %U %w',
  294. '%C %y %U %u',
  295. '%C %y %W %w',
  296. '%C %y %W %u',
  297. ].each do |fmt|
  298. s = d.strftime(fmt)
  299. d2 = Date.strptime(s, fmt)
  300. assert_equal(d, d2, [fmt, d.to_s, d2.to_s].inspect)
  301. end
  302. [
  303. '%Y %m %d %H %M %S',
  304. '%Y %m %d %H %M %S %N',
  305. '%C %y %m %d %H %M %S',
  306. '%C %y %m %d %H %M %S %N',
  307. '%Y %j %H %M %S',
  308. '%Y %j %H %M %S %N',
  309. '%C %y %j %H %M %S',
  310. '%C %y %j %H %M %S %N',
  311. '%s',
  312. '%s %N',
  313. '%Q',
  314. '%Q %N',
  315. ].each do |fmt|
  316. s = d.strftime(fmt)
  317. d2 = DateTime.strptime(s, fmt)
  318. assert_equal(d, d2, [fmt, d.to_s, d2.to_s].inspect)
  319. end
  320. end
  321. end
  322. def test_strptime__minus
  323. d = DateTime.strptime('-1', '%s')
  324. assert_equal([1969, 12, 31, 23, 59, 59],
  325. [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
  326. d = DateTime.strptime('-86400', '%s')
  327. assert_equal([1969, 12, 31, 0, 0, 0],
  328. [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
  329. d = DateTime.strptime('-999', '%Q')
  330. assert_equal([1969, 12, 31, 23, 59, 59, 1.to_r/10**3],
  331. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.sec_fraction])
  332. d = DateTime.strptime('-1000', '%Q')
  333. assert_equal([1969, 12, 31, 23, 59, 59, 0],
  334. [d.year, d.mon, d.mday, d.hour, d.min, d.sec, d.sec_fraction])
  335. end
  336. def test_strptime__comp
  337. n = DateTime.now
  338. d = DateTime.strptime('073', '%j')
  339. assert_equal([n.year, 73, 0, 0, 0],
  340. [d.year, d.yday, d.hour, d.min, d.sec])
  341. d = DateTime.strptime('13', '%d')
  342. assert_equal([n.year, n.mon, 13, 0, 0, 0],
  343. [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
  344. d = DateTime.strptime('Mar', '%b')
  345. assert_equal([n.year, 3, 1, 0, 0, 0],
  346. [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
  347. d = DateTime.strptime('2004', '%Y')
  348. assert_equal([2004, 1, 1, 0, 0, 0],
  349. [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
  350. d = DateTime.strptime('Mar 13', '%b %d')
  351. assert_equal([n.year, 3, 13, 0, 0, 0],
  352. [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
  353. d = DateTime.strptime('Mar 2004', '%b %Y')
  354. assert_equal([2004, 3, 1, 0, 0, 0],
  355. [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
  356. d = DateTime.strptime('23:55', '%H:%M')
  357. assert_equal([n.year, n.mon, n.mday, 23, 55, 0],
  358. [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
  359. d = DateTime.strptime('23:55:30', '%H:%M:%S')
  360. assert_equal([n.year, n.mon, n.mday, 23, 55, 30],
  361. [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
  362. d = DateTime.strptime('Sun 23:55', '%a %H:%M')
  363. d2 = d - d.wday
  364. assert_equal([d2.year, d2.mon, d2.mday, 23, 55, 0],
  365. [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
  366. d = DateTime.strptime('Aug 23:55', '%b %H:%M')
  367. assert_equal([n.year, 8, 1, 23, 55, 0],
  368. [d.year, d.mon, d.mday, d.hour, d.min, d.sec])
  369. d = DateTime.strptime('2004', '%G')
  370. assert_equal([2004, 1, 1, 0, 0, 0],
  371. [d.cwyear, d.cweek, d.cwday, d.hour, d.min, d.sec])
  372. d = DateTime.strptime('11', '%V')
  373. assert_equal([n.cwyear, 11, 1, 0, 0, 0],
  374. [d.cwyear, d.cweek, d.cwday, d.hour, d.min, d.sec])
  375. d = DateTime.strptime('6', '%u')
  376. assert_equal([n.cwyear, n.cweek, 6, 0, 0, 0],
  377. [d.cwyear, d.cweek, d.cwday, d.hour, d.min, d.sec])
  378. d = DateTime.strptime('11-6', '%V-%u')
  379. assert_equal([n.cwyear, 11, 6, 0, 0, 0],
  380. [d.cwyear, d.cweek, d.cwday, d.hour, d.min, d.sec])
  381. d = DateTime.strptime('2004-11', '%G-%V')
  382. assert_equal([2004, 11, 1, 0, 0, 0],
  383. [d.cwyear, d.cweek, d.cwday, d.hour, d.min, d.sec])
  384. d = DateTime.strptime('11-6', '%U-%w')
  385. assert_equal([n.year, 11, 6, 0, 0, 0],
  386. [d.year, d.strftime('%U').to_i, d.wday, d.hour, d.min, d.sec])
  387. d = DateTime.strptime('2004-11', '%Y-%U')
  388. assert_equal([2004, 11, 0, 0, 0, 0],
  389. [d.year, d.strftime('%U').to_i, d.wday, d.hour, d.min, d.sec])
  390. d = DateTime.strptime('11-6', '%W-%w')
  391. assert_equal([n.year, 11, 6, 0, 0, 0],
  392. [d.year, d.strftime('%W').to_i, d.wday, d.hour, d.min, d.sec])
  393. d = DateTime.strptime('2004-11', '%Y-%W')
  394. assert_equal([2004, 11, 1, 0, 0, 0],
  395. [d.year, d.strftime('%W').to_i, d.wday, d.hour, d.min, d.sec])
  396. end
  397. def test_strptime__d_to_s
  398. d = Date.new(2002,3,14)
  399. assert_equal(d, Date.strptime(d.to_s))
  400. d = DateTime.new(2002,3,14,11,22,33, 9.to_r/24)
  401. assert_equal(d, DateTime.strptime(d.to_s))
  402. end
  403. def test_strptime__ex
  404. assert_raise(ArgumentError) do
  405. Date.strptime('')
  406. end
  407. assert_raise(ArgumentError) do
  408. DateTime.strptime('')
  409. end
  410. assert_raise(ArgumentError) do
  411. Date.strptime('2001-02-29', '%F')
  412. end
  413. assert_raise(ArgumentError) do
  414. DateTime.strptime('2001-02-29T23:59:60', '%FT%T')
  415. end
  416. assert_raise(ArgumentError) do
  417. Date.strptime('23:55', '%H:%M')
  418. end
  419. assert_raise(ArgumentError) do
  420. Date.strptime('01-31-2011', '%m/%d/%Y')
  421. end
  422. end
  423. def test_given_string
  424. s = '2001-02-03T04:05:06Z'
  425. s0 = s.dup
  426. assert_not_equal({}, Date._strptime(s, '%FT%T%Z'))
  427. assert_equal(s0, s)
  428. end
  429. end