/activesupport/test/core_ext/date_time_ext_test.rb

https://github.com/phuibonhoa/rails · Ruby · 412 lines · 350 code · 59 blank · 3 comment · 0 complexity · cf6738e7f4520620b964fa47a29b1539 MD5 · raw file

  1. require 'abstract_unit'
  2. require 'active_support/time'
  3. class DateTimeExtCalculationsTest < Test::Unit::TestCase
  4. def test_to_s
  5. datetime = DateTime.new(2005, 2, 21, 14, 30, 0, 0)
  6. assert_equal "2005-02-21 14:30:00", datetime.to_s(:db)
  7. assert_equal "14:30", datetime.to_s(:time)
  8. assert_equal "21 Feb 14:30", datetime.to_s(:short)
  9. assert_equal "February 21, 2005 14:30", datetime.to_s(:long)
  10. assert_equal "Mon, 21 Feb 2005 14:30:00 +0000", datetime.to_s(:rfc822)
  11. assert_equal "February 21st, 2005 14:30", datetime.to_s(:long_ordinal)
  12. assert_match(/^2005-02-21T14:30:00(Z|\+00:00)$/, datetime.to_s)
  13. end
  14. def test_readable_inspect
  15. datetime = DateTime.new(2005, 2, 21, 14, 30, 0)
  16. assert_equal "Mon, 21 Feb 2005 14:30:00 +0000", datetime.readable_inspect
  17. assert_equal datetime.readable_inspect, datetime.inspect
  18. end
  19. def test_custom_date_format
  20. Time::DATE_FORMATS[:custom] = '%Y%m%d%H%M%S'
  21. assert_equal '20050221143000', DateTime.new(2005, 2, 21, 14, 30, 0).to_s(:custom)
  22. Time::DATE_FORMATS.delete(:custom)
  23. end
  24. def test_to_date
  25. assert_equal Date.new(2005, 2, 21), DateTime.new(2005, 2, 21, 14, 30, 0).to_date
  26. end
  27. def test_to_datetime
  28. assert_equal DateTime.new(2005, 2, 21, 14, 30, 0), DateTime.new(2005, 2, 21, 14, 30, 0).to_datetime
  29. end
  30. def test_to_time
  31. assert_equal Time.utc(2005, 2, 21, 10, 11, 12), DateTime.new(2005, 2, 21, 10, 11, 12, 0).to_time
  32. assert_equal Time.utc_time(2039, 2, 21, 10, 11, 12), DateTime.new(2039, 2, 21, 10, 11, 12, 0).to_time
  33. # DateTimes with offsets other than 0 are returned unaltered
  34. assert_equal DateTime.new(2005, 2, 21, 10, 11, 12, Rational(-5, 24)), DateTime.new(2005, 2, 21, 10, 11, 12, Rational(-5, 24)).to_time
  35. # Fractional seconds are preserved
  36. assert_equal Time.utc(2005, 2, 21, 10, 11, 12, 256), DateTime.new(2005, 2, 21, 10, 11, 12 + Rational(256, 1000000), 0).to_time
  37. end
  38. def test_civil_from_format
  39. assert_equal DateTime.civil(2010, 5, 4, 0, 0, 0, DateTime.local_offset), DateTime.civil_from_format(:local, 2010, 5, 4)
  40. assert_equal DateTime.civil(2010, 5, 4, 0, 0, 0, 0), DateTime.civil_from_format(:utc, 2010, 5, 4)
  41. end
  42. def test_seconds_since_midnight
  43. assert_equal 1,DateTime.civil(2005,1,1,0,0,1).seconds_since_midnight
  44. assert_equal 60,DateTime.civil(2005,1,1,0,1,0).seconds_since_midnight
  45. assert_equal 3660,DateTime.civil(2005,1,1,1,1,0).seconds_since_midnight
  46. assert_equal 86399,DateTime.civil(2005,1,1,23,59,59).seconds_since_midnight
  47. end
  48. def test_days_to_week_start
  49. assert_equal 0, Time.local(2011,11,01,0,0,0).days_to_week_start(:tuesday)
  50. assert_equal 1, Time.local(2011,11,02,0,0,0).days_to_week_start(:tuesday)
  51. assert_equal 2, Time.local(2011,11,03,0,0,0).days_to_week_start(:tuesday)
  52. assert_equal 3, Time.local(2011,11,04,0,0,0).days_to_week_start(:tuesday)
  53. assert_equal 4, Time.local(2011,11,05,0,0,0).days_to_week_start(:tuesday)
  54. assert_equal 5, Time.local(2011,11,06,0,0,0).days_to_week_start(:tuesday)
  55. assert_equal 6, Time.local(2011,11,07,0,0,0).days_to_week_start(:tuesday)
  56. assert_equal 3, Time.local(2011,11,03,0,0,0).days_to_week_start(:monday)
  57. assert_equal 3, Time.local(2011,11,04,0,0,0).days_to_week_start(:tuesday)
  58. assert_equal 3, Time.local(2011,11,05,0,0,0).days_to_week_start(:wednesday)
  59. assert_equal 3, Time.local(2011,11,06,0,0,0).days_to_week_start(:thursday)
  60. assert_equal 3, Time.local(2011,11,07,0,0,0).days_to_week_start(:friday)
  61. assert_equal 3, Time.local(2011,11,8,0,0,0).days_to_week_start(:saturday)
  62. assert_equal 3, Time.local(2011,11,9,0,0,0).days_to_week_start(:sunday)
  63. end
  64. def test_beginning_of_week
  65. assert_equal DateTime.civil(2005,1,31), DateTime.civil(2005,2,4,10,10,10).beginning_of_week
  66. assert_equal DateTime.civil(2005,11,28), DateTime.civil(2005,11,28,0,0,0).beginning_of_week #monday
  67. assert_equal DateTime.civil(2005,11,28), DateTime.civil(2005,11,29,0,0,0).beginning_of_week #tuesday
  68. assert_equal DateTime.civil(2005,11,28), DateTime.civil(2005,11,30,0,0,0).beginning_of_week #wednesday
  69. assert_equal DateTime.civil(2005,11,28), DateTime.civil(2005,12,01,0,0,0).beginning_of_week #thursday
  70. assert_equal DateTime.civil(2005,11,28), DateTime.civil(2005,12,02,0,0,0).beginning_of_week #friday
  71. assert_equal DateTime.civil(2005,11,28), DateTime.civil(2005,12,03,0,0,0).beginning_of_week #saturday
  72. assert_equal DateTime.civil(2005,11,28), DateTime.civil(2005,12,04,0,0,0).beginning_of_week #sunday
  73. end
  74. def test_beginning_of_day
  75. assert_equal DateTime.civil(2005,2,4,0,0,0), DateTime.civil(2005,2,4,10,10,10).beginning_of_day
  76. end
  77. def test_end_of_day
  78. assert_equal DateTime.civil(2005,2,4,23,59,59), DateTime.civil(2005,2,4,10,10,10).end_of_day
  79. end
  80. def test_beginning_of_month
  81. assert_equal DateTime.civil(2005,2,1,0,0,0), DateTime.civil(2005,2,22,10,10,10).beginning_of_month
  82. end
  83. def test_beginning_of_quarter
  84. assert_equal DateTime.civil(2005,1,1,0,0,0), DateTime.civil(2005,2,15,10,10,10).beginning_of_quarter
  85. assert_equal DateTime.civil(2005,1,1,0,0,0), DateTime.civil(2005,1,1,0,0,0).beginning_of_quarter
  86. assert_equal DateTime.civil(2005,10,1,0,0,0), DateTime.civil(2005,12,31,10,10,10).beginning_of_quarter
  87. assert_equal DateTime.civil(2005,4,1,0,0,0), DateTime.civil(2005,6,30,23,59,59).beginning_of_quarter
  88. end
  89. def test_end_of_month
  90. assert_equal DateTime.civil(2005,3,31,23,59,59), DateTime.civil(2005,3,20,10,10,10).end_of_month
  91. assert_equal DateTime.civil(2005,2,28,23,59,59), DateTime.civil(2005,2,20,10,10,10).end_of_month
  92. assert_equal DateTime.civil(2005,4,30,23,59,59), DateTime.civil(2005,4,20,10,10,10).end_of_month
  93. end
  94. def test_beginning_of_year
  95. assert_equal DateTime.civil(2005,1,1,0,0,0), DateTime.civil(2005,2,22,10,10,10).beginning_of_year
  96. end
  97. def test_weeks_ago
  98. assert_equal DateTime.civil(2005,5,29,10), DateTime.civil(2005,6,5,10,0,0).weeks_ago(1)
  99. assert_equal DateTime.civil(2005,5,1,10), DateTime.civil(2005,6,5,10,0,0).weeks_ago(5)
  100. assert_equal DateTime.civil(2005,4,24,10), DateTime.civil(2005,6,5,10,0,0).weeks_ago(6)
  101. assert_equal DateTime.civil(2005,2,27,10), DateTime.civil(2005,6,5,10,0,0).weeks_ago(14)
  102. assert_equal DateTime.civil(2004,12,25,10), DateTime.civil(2005,1,1,10,0,0).weeks_ago(1)
  103. end
  104. def test_months_ago
  105. assert_equal DateTime.civil(2005,5,5,10), DateTime.civil(2005,6,5,10,0,0).months_ago(1)
  106. assert_equal DateTime.civil(2004,11,5,10), DateTime.civil(2005,6,5,10,0,0).months_ago(7)
  107. assert_equal DateTime.civil(2004,12,5,10), DateTime.civil(2005,6,5,10,0,0).months_ago(6)
  108. assert_equal DateTime.civil(2004,6,5,10), DateTime.civil(2005,6,5,10,0,0).months_ago(12)
  109. assert_equal DateTime.civil(2003,6,5,10), DateTime.civil(2005,6,5,10,0,0).months_ago(24)
  110. end
  111. def test_months_since
  112. assert_equal DateTime.civil(2005,7,5,10), DateTime.civil(2005,6,5,10,0,0).months_since(1)
  113. assert_equal DateTime.civil(2006,1,5,10), DateTime.civil(2005,12,5,10,0,0).months_since(1)
  114. assert_equal DateTime.civil(2005,12,5,10), DateTime.civil(2005,6,5,10,0,0).months_since(6)
  115. assert_equal DateTime.civil(2006,6,5,10), DateTime.civil(2005,12,5,10,0,0).months_since(6)
  116. assert_equal DateTime.civil(2006,1,5,10), DateTime.civil(2005,6,5,10,0,0).months_since(7)
  117. assert_equal DateTime.civil(2006,6,5,10), DateTime.civil(2005,6,5,10,0,0).months_since(12)
  118. assert_equal DateTime.civil(2007,6,5,10), DateTime.civil(2005,6,5,10,0,0).months_since(24)
  119. assert_equal DateTime.civil(2005,4,30,10), DateTime.civil(2005,3,31,10,0,0).months_since(1)
  120. assert_equal DateTime.civil(2005,2,28,10), DateTime.civil(2005,1,29,10,0,0).months_since(1)
  121. assert_equal DateTime.civil(2005,2,28,10), DateTime.civil(2005,1,30,10,0,0).months_since(1)
  122. assert_equal DateTime.civil(2005,2,28,10), DateTime.civil(2005,1,31,10,0,0).months_since(1)
  123. end
  124. def test_years_ago
  125. assert_equal DateTime.civil(2004,6,5,10), DateTime.civil(2005,6,5,10,0,0).years_ago(1)
  126. assert_equal DateTime.civil(1998,6,5,10), DateTime.civil(2005,6,5,10,0,0).years_ago(7)
  127. assert_equal DateTime.civil(2003,2,28,10), DateTime.civil(2004,2,29,10,0,0).years_ago(1) # 1 year ago from leap day
  128. end
  129. def test_years_since
  130. assert_equal DateTime.civil(2006,6,5,10), DateTime.civil(2005,6,5,10,0,0).years_since(1)
  131. assert_equal DateTime.civil(2012,6,5,10), DateTime.civil(2005,6,5,10,0,0).years_since(7)
  132. assert_equal DateTime.civil(2182,6,5,10), DateTime.civil(2005,6,5,10,0,0).years_since(177)
  133. assert_equal DateTime.civil(2005,2,28,10), DateTime.civil(2004,2,29,10,0,0).years_since(1) # 1 year since leap day
  134. end
  135. def test_prev_year
  136. assert_equal DateTime.civil(2004,6,5,10), DateTime.civil(2005,6,5,10,0,0).prev_year
  137. end
  138. def test_next_year
  139. assert_equal DateTime.civil(2006,6,5,10), DateTime.civil(2005,6,5,10,0,0).next_year
  140. end
  141. def test_ago
  142. assert_equal DateTime.civil(2005,2,22,10,10,9), DateTime.civil(2005,2,22,10,10,10).ago(1)
  143. assert_equal DateTime.civil(2005,2,22,9,10,10), DateTime.civil(2005,2,22,10,10,10).ago(3600)
  144. assert_equal DateTime.civil(2005,2,20,10,10,10), DateTime.civil(2005,2,22,10,10,10).ago(86400*2)
  145. assert_equal DateTime.civil(2005,2,20,9,9,45), DateTime.civil(2005,2,22,10,10,10).ago(86400*2 + 3600 + 25)
  146. end
  147. def test_since
  148. assert_equal DateTime.civil(2005,2,22,10,10,11), DateTime.civil(2005,2,22,10,10,10).since(1)
  149. assert_equal DateTime.civil(2005,2,22,11,10,10), DateTime.civil(2005,2,22,10,10,10).since(3600)
  150. assert_equal DateTime.civil(2005,2,24,10,10,10), DateTime.civil(2005,2,22,10,10,10).since(86400*2)
  151. assert_equal DateTime.civil(2005,2,24,11,10,35), DateTime.civil(2005,2,22,10,10,10).since(86400*2 + 3600 + 25)
  152. assert_equal DateTime.civil(2005,2,22,10,10,11), DateTime.civil(2005,2,22,10,10,10).since(1.333)
  153. assert_equal DateTime.civil(2005,2,22,10,10,12), DateTime.civil(2005,2,22,10,10,10).since(1.667)
  154. end
  155. def test_yesterday
  156. assert_equal DateTime.civil(2005,2,21,10,10,10), DateTime.civil(2005,2,22,10,10,10).yesterday
  157. assert_equal DateTime.civil(2005,2,28,10,10,10), DateTime.civil(2005,3,2,10,10,10).yesterday.yesterday
  158. end
  159. def test_tomorrow
  160. assert_equal DateTime.civil(2005,2,23,10,10,10), DateTime.civil(2005,2,22,10,10,10).tomorrow
  161. assert_equal DateTime.civil(2005,3,2,10,10,10), DateTime.civil(2005,2,28,10,10,10).tomorrow.tomorrow
  162. end
  163. def test_change
  164. assert_equal DateTime.civil(2006,2,22,15,15,10), DateTime.civil(2005,2,22,15,15,10).change(:year => 2006)
  165. assert_equal DateTime.civil(2005,6,22,15,15,10), DateTime.civil(2005,2,22,15,15,10).change(:month => 6)
  166. assert_equal DateTime.civil(2012,9,22,15,15,10), DateTime.civil(2005,2,22,15,15,10).change(:year => 2012, :month => 9)
  167. assert_equal DateTime.civil(2005,2,22,16), DateTime.civil(2005,2,22,15,15,10).change(:hour => 16)
  168. assert_equal DateTime.civil(2005,2,22,16,45), DateTime.civil(2005,2,22,15,15,10).change(:hour => 16, :min => 45)
  169. assert_equal DateTime.civil(2005,2,22,15,45), DateTime.civil(2005,2,22,15,15,10).change(:min => 45)
  170. end
  171. def test_advance
  172. assert_equal DateTime.civil(2006,2,28,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:years => 1)
  173. assert_equal DateTime.civil(2005,6,28,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:months => 4)
  174. assert_equal DateTime.civil(2005,3,21,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:weeks => 3)
  175. assert_equal DateTime.civil(2005,3,5,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:days => 5)
  176. assert_equal DateTime.civil(2012,9,28,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:years => 7, :months => 7)
  177. assert_equal DateTime.civil(2013,10,3,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :days => 5)
  178. assert_equal DateTime.civil(2013,10,17,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :weeks => 2, :days => 5)
  179. assert_equal DateTime.civil(2001,12,27,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:years => -3, :months => -2, :days => -1)
  180. assert_equal DateTime.civil(2005,2,28,15,15,10), DateTime.civil(2004,2,29,15,15,10).advance(:years => 1) #leap day plus one year
  181. assert_equal DateTime.civil(2005,2,28,20,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:hours => 5)
  182. assert_equal DateTime.civil(2005,2,28,15,22,10), DateTime.civil(2005,2,28,15,15,10).advance(:minutes => 7)
  183. assert_equal DateTime.civil(2005,2,28,15,15,19), DateTime.civil(2005,2,28,15,15,10).advance(:seconds => 9)
  184. assert_equal DateTime.civil(2005,2,28,20,22,19), DateTime.civil(2005,2,28,15,15,10).advance(:hours => 5, :minutes => 7, :seconds => 9)
  185. assert_equal DateTime.civil(2005,2,28,10,8,1), DateTime.civil(2005,2,28,15,15,10).advance(:hours => -5, :minutes => -7, :seconds => -9)
  186. assert_equal DateTime.civil(2013,10,17,20,22,19), DateTime.civil(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :weeks => 2, :days => 5, :hours => 5, :minutes => 7, :seconds => 9)
  187. end
  188. def test_advanced_processes_first_the_date_deltas_and_then_the_time_deltas
  189. # If the time deltas were processed first, the following datetimes would be advanced to 2010/04/01 instead.
  190. assert_equal DateTime.civil(2010, 3, 29), DateTime.civil(2010, 2, 28, 23, 59, 59).advance(:months => 1, :seconds => 1)
  191. assert_equal DateTime.civil(2010, 3, 29), DateTime.civil(2010, 2, 28, 23, 59).advance(:months => 1, :minutes => 1)
  192. assert_equal DateTime.civil(2010, 3, 29), DateTime.civil(2010, 2, 28, 23).advance(:months => 1, :hours => 1)
  193. assert_equal DateTime.civil(2010, 3, 29), DateTime.civil(2010, 2, 28, 22, 58, 59).advance(:months => 1, :hours => 1, :minutes => 1, :seconds => 1)
  194. end
  195. def test_prev_week
  196. assert_equal DateTime.civil(2005,2,21), DateTime.civil(2005,3,1,15,15,10).prev_week
  197. assert_equal DateTime.civil(2005,2,22), DateTime.civil(2005,3,1,15,15,10).prev_week(:tuesday)
  198. assert_equal DateTime.civil(2005,2,25), DateTime.civil(2005,3,1,15,15,10).prev_week(:friday)
  199. assert_equal DateTime.civil(2006,10,30), DateTime.civil(2006,11,6,0,0,0).prev_week
  200. assert_equal DateTime.civil(2006,11,15), DateTime.civil(2006,11,23,0,0,0).prev_week(:wednesday)
  201. end
  202. def test_next_week
  203. assert_equal DateTime.civil(2005,2,28), DateTime.civil(2005,2,22,15,15,10).next_week
  204. assert_equal DateTime.civil(2005,3,4), DateTime.civil(2005,2,22,15,15,10).next_week(:friday)
  205. assert_equal DateTime.civil(2006,10,30), DateTime.civil(2006,10,23,0,0,0).next_week
  206. assert_equal DateTime.civil(2006,11,1), DateTime.civil(2006,10,23,0,0,0).next_week(:wednesday)
  207. end
  208. def test_next_month_on_31st
  209. assert_equal DateTime.civil(2005, 9, 30), DateTime.civil(2005, 8, 31).next_month
  210. end
  211. def test_prev_month_on_31st
  212. assert_equal DateTime.civil(2004, 2, 29), DateTime.civil(2004, 3, 31).prev_month
  213. end
  214. def test_xmlschema
  215. assert_match(/^1880-02-28T15:15:10\+00:?00$/, DateTime.civil(1880, 2, 28, 15, 15, 10).xmlschema)
  216. assert_match(/^1980-02-28T15:15:10\+00:?00$/, DateTime.civil(1980, 2, 28, 15, 15, 10).xmlschema)
  217. assert_match(/^2080-02-28T15:15:10\+00:?00$/, DateTime.civil(2080, 2, 28, 15, 15, 10).xmlschema)
  218. assert_match(/^1880-02-28T15:15:10-06:?00$/, DateTime.civil(1880, 2, 28, 15, 15, 10, -0.25).xmlschema)
  219. assert_match(/^1980-02-28T15:15:10-06:?00$/, DateTime.civil(1980, 2, 28, 15, 15, 10, -0.25).xmlschema)
  220. assert_match(/^2080-02-28T15:15:10-06:?00$/, DateTime.civil(2080, 2, 28, 15, 15, 10, -0.25).xmlschema)
  221. end
  222. def test_today_with_offset
  223. Date.stubs(:current).returns(Date.new(2000, 1, 1))
  224. assert_equal false, DateTime.civil(1999,12,31,23,59,59, Rational(-18000, 86400)).today?
  225. assert_equal true, DateTime.civil(2000,1,1,0,0,0, Rational(-18000, 86400)).today?
  226. assert_equal true, DateTime.civil(2000,1,1,23,59,59, Rational(-18000, 86400)).today?
  227. assert_equal false, DateTime.civil(2000,1,2,0,0,0, Rational(-18000, 86400)).today?
  228. end
  229. def test_today_without_offset
  230. Date.stubs(:current).returns(Date.new(2000, 1, 1))
  231. assert_equal false, DateTime.civil(1999,12,31,23,59,59).today?
  232. assert_equal true, DateTime.civil(2000,1,1,0).today?
  233. assert_equal true, DateTime.civil(2000,1,1,23,59,59).today?
  234. assert_equal false, DateTime.civil(2000,1,2,0).today?
  235. end
  236. def test_past_with_offset
  237. DateTime.stubs(:current).returns(DateTime.civil(2005,2,10,15,30,45, Rational(-18000, 86400)))
  238. assert_equal true, DateTime.civil(2005,2,10,15,30,44, Rational(-18000, 86400)).past?
  239. assert_equal false, DateTime.civil(2005,2,10,15,30,45, Rational(-18000, 86400)).past?
  240. assert_equal false, DateTime.civil(2005,2,10,15,30,46, Rational(-18000, 86400)).past?
  241. end
  242. def test_past_without_offset
  243. DateTime.stubs(:current).returns(DateTime.civil(2005,2,10,15,30,45, Rational(-18000, 86400)))
  244. assert_equal true, DateTime.civil(2005,2,10,20,30,44).past?
  245. assert_equal false, DateTime.civil(2005,2,10,20,30,45).past?
  246. assert_equal false, DateTime.civil(2005,2,10,20,30,46).past?
  247. end
  248. def test_future_with_offset
  249. DateTime.stubs(:current).returns(DateTime.civil(2005,2,10,15,30,45, Rational(-18000, 86400)))
  250. assert_equal false, DateTime.civil(2005,2,10,15,30,44, Rational(-18000, 86400)).future?
  251. assert_equal false, DateTime.civil(2005,2,10,15,30,45, Rational(-18000, 86400)).future?
  252. assert_equal true, DateTime.civil(2005,2,10,15,30,46, Rational(-18000, 86400)).future?
  253. end
  254. def test_future_without_offset
  255. DateTime.stubs(:current).returns(DateTime.civil(2005,2,10,15,30,45, Rational(-18000, 86400)))
  256. assert_equal false, DateTime.civil(2005,2,10,20,30,44).future?
  257. assert_equal false, DateTime.civil(2005,2,10,20,30,45).future?
  258. assert_equal true, DateTime.civil(2005,2,10,20,30,46).future?
  259. end
  260. def test_current_returns_date_today_when_zone_is_not_set
  261. with_env_tz 'US/Eastern' do
  262. Time.stubs(:now).returns Time.local(1999, 12, 31, 23, 59, 59)
  263. assert_equal DateTime.new(1999, 12, 31, 23, 59, 59, Rational(-18000, 86400)), DateTime.current
  264. end
  265. end
  266. def test_current_returns_time_zone_today_when_zone_is_set
  267. Time.zone = ActiveSupport::TimeZone['Eastern Time (US & Canada)']
  268. with_env_tz 'US/Eastern' do
  269. Time.stubs(:now).returns Time.local(1999, 12, 31, 23, 59, 59)
  270. assert_equal DateTime.new(1999, 12, 31, 23, 59, 59, Rational(-18000, 86400)), DateTime.current
  271. end
  272. ensure
  273. Time.zone = nil
  274. end
  275. def test_current_without_time_zone
  276. assert_kind_of DateTime, DateTime.current
  277. end
  278. def test_current_with_time_zone
  279. with_env_tz 'US/Eastern' do
  280. assert_kind_of DateTime, DateTime.current
  281. end
  282. end
  283. def test_acts_like_time
  284. assert DateTime.new.acts_like_time?
  285. end
  286. def test_local_offset
  287. with_env_tz 'US/Eastern' do
  288. assert_equal Rational(-5, 24), DateTime.local_offset
  289. end
  290. with_env_tz 'US/Central' do
  291. assert_equal Rational(-6, 24), DateTime.local_offset
  292. end
  293. end
  294. def test_utc?
  295. assert_equal true, DateTime.civil(2005, 2, 21, 10, 11, 12).utc?
  296. assert_equal true, DateTime.civil(2005, 2, 21, 10, 11, 12, 0).utc?
  297. assert_equal false, DateTime.civil(2005, 2, 21, 10, 11, 12, 0.25).utc?
  298. assert_equal false, DateTime.civil(2005, 2, 21, 10, 11, 12, -0.25).utc?
  299. end
  300. def test_utc_offset
  301. assert_equal 0, DateTime.civil(2005, 2, 21, 10, 11, 12).utc_offset
  302. assert_equal 0, DateTime.civil(2005, 2, 21, 10, 11, 12, 0).utc_offset
  303. assert_equal 21600, DateTime.civil(2005, 2, 21, 10, 11, 12, 0.25).utc_offset
  304. assert_equal( -21600, DateTime.civil(2005, 2, 21, 10, 11, 12, -0.25).utc_offset )
  305. assert_equal( -18000, DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-5, 24)).utc_offset )
  306. end
  307. def test_utc
  308. assert_equal DateTime.civil(2005, 2, 21, 16, 11, 12, 0), DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24)).utc
  309. assert_equal DateTime.civil(2005, 2, 21, 15, 11, 12, 0), DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-5, 24)).utc
  310. assert_equal DateTime.civil(2005, 2, 21, 10, 11, 12, 0), DateTime.civil(2005, 2, 21, 10, 11, 12, 0).utc
  311. assert_equal DateTime.civil(2005, 2, 21, 9, 11, 12, 0), DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(1, 24)).utc
  312. assert_equal DateTime.civil(2005, 2, 21, 9, 11, 12, 0), DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(1, 24)).getutc
  313. end
  314. def test_formatted_offset_with_utc
  315. assert_equal '+00:00', DateTime.civil(2000).formatted_offset
  316. assert_equal '+0000', DateTime.civil(2000).formatted_offset(false)
  317. assert_equal 'UTC', DateTime.civil(2000).formatted_offset(true, 'UTC')
  318. end
  319. def test_formatted_offset_with_local
  320. dt = DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-5, 24))
  321. assert_equal '-05:00', dt.formatted_offset
  322. assert_equal '-0500', dt.formatted_offset(false)
  323. end
  324. def test_compare_with_time
  325. assert_equal 1, DateTime.civil(2000) <=> Time.utc(1999, 12, 31, 23, 59, 59)
  326. assert_equal 0, DateTime.civil(2000) <=> Time.utc(2000, 1, 1, 0, 0, 0)
  327. assert_equal(-1, DateTime.civil(2000) <=> Time.utc(2000, 1, 1, 0, 0, 1))
  328. end
  329. def test_compare_with_datetime
  330. assert_equal 1, DateTime.civil(2000) <=> DateTime.civil(1999, 12, 31, 23, 59, 59)
  331. assert_equal 0, DateTime.civil(2000) <=> DateTime.civil(2000, 1, 1, 0, 0, 0)
  332. assert_equal(-1, DateTime.civil(2000) <=> DateTime.civil(2000, 1, 1, 0, 0, 1))
  333. end
  334. def test_compare_with_time_with_zone
  335. assert_equal 1, DateTime.civil(2000) <=> ActiveSupport::TimeWithZone.new( Time.utc(1999, 12, 31, 23, 59, 59), ActiveSupport::TimeZone['UTC'] )
  336. assert_equal 0, DateTime.civil(2000) <=> ActiveSupport::TimeWithZone.new( Time.utc(2000, 1, 1, 0, 0, 0), ActiveSupport::TimeZone['UTC'] )
  337. assert_equal(-1, DateTime.civil(2000) <=> ActiveSupport::TimeWithZone.new( Time.utc(2000, 1, 1, 0, 0, 1), ActiveSupport::TimeZone['UTC'] ))
  338. end
  339. def test_to_f
  340. assert_equal 946684800.0, DateTime.civil(2000).to_f
  341. assert_equal 946684800.0, DateTime.civil(1999,12,31,19,0,0,Rational(-5,24)).to_f
  342. end
  343. def test_to_i
  344. assert_equal 946684800, DateTime.civil(2000).to_i
  345. end
  346. protected
  347. def with_env_tz(new_tz = 'US/Eastern')
  348. old_tz, ENV['TZ'] = ENV['TZ'], new_tz
  349. yield
  350. ensure
  351. old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ')
  352. end
  353. end