PageRenderTime 45ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/test/app/vendor/gems/chronic-0.2.2/test/test_parsing.rb

http://github.com/KirinDave/fuzed
Ruby | 595 lines | 369 code | 190 blank | 36 comment | 0 complexity | 8ed02c099e14c69a6b8e42d7911c02d6 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. require 'chronic'
  2. require 'test/unit'
  3. class TestParsing < Test::Unit::TestCase
  4. # Wed Aug 16 14:00:00 UTC 2006
  5. TIME_2006_08_16_14_00_00 = Time.local(2006, 8, 16, 14, 0, 0, 0)
  6. def setup
  7. @time_2006_08_16_14_00_00 = TIME_2006_08_16_14_00_00
  8. end
  9. def test_parse_guess_dates
  10. # rm_sd
  11. time = parse_now("may 27")
  12. assert_equal Time.local(2007, 5, 27, 12), time
  13. time = parse_now("may 28", :context => :past)
  14. assert_equal Time.local(2006, 5, 28, 12), time
  15. time = parse_now("may 28 5pm", :context => :past)
  16. assert_equal Time.local(2006, 5, 28, 17), time
  17. time = parse_now("may 28 at 5pm", :context => :past)
  18. assert_equal Time.local(2006, 5, 28, 17), time
  19. time = parse_now("may 28 at 5:32.19pm", :context => :past)
  20. assert_equal Time.local(2006, 5, 28, 17, 32, 19), time
  21. # rm_od
  22. time = parse_now("may 27th")
  23. assert_equal Time.local(2007, 5, 27, 12), time
  24. time = parse_now("may 27th", :context => :past)
  25. assert_equal Time.local(2006, 5, 27, 12), time
  26. time = parse_now("may 27th 5:00 pm", :context => :past)
  27. assert_equal Time.local(2006, 5, 27, 17), time
  28. time = parse_now("may 27th at 5pm", :context => :past)
  29. assert_equal Time.local(2006, 5, 27, 17), time
  30. time = parse_now("may 27th at 5", :ambiguous_time_range => :none)
  31. assert_equal Time.local(2007, 5, 27, 5), time
  32. # rm_sy
  33. time = parse_now("June 1979")
  34. assert_equal Time.local(1979, 6, 16, 0), time
  35. time = parse_now("dec 79")
  36. assert_equal Time.local(1979, 12, 16, 12), time
  37. # rm_sd_sy
  38. time = parse_now("jan 3 2010")
  39. assert_equal Time.local(2010, 1, 3, 12), time
  40. time = parse_now("jan 3 2010 midnight")
  41. assert_equal Time.local(2010, 1, 4, 0), time
  42. time = parse_now("jan 3 2010 at midnight")
  43. assert_equal Time.local(2010, 1, 4, 0), time
  44. time = parse_now("jan 3 2010 at 4", :ambiguous_time_range => :none)
  45. assert_equal Time.local(2010, 1, 3, 4), time
  46. #time = parse_now("January 12, '00")
  47. #assert_equal Time.local(2000, 1, 12, 12), time
  48. time = parse_now("may 27 79")
  49. assert_equal Time.local(1979, 5, 27, 12), time
  50. time = parse_now("may 27 79 4:30")
  51. assert_equal Time.local(1979, 5, 27, 16, 30), time
  52. time = parse_now("may 27 79 at 4:30", :ambiguous_time_range => :none)
  53. assert_equal Time.local(1979, 5, 27, 4, 30), time
  54. # sd_rm_sy
  55. time = parse_now("3 jan 2010")
  56. assert_equal Time.local(2010, 1, 3, 12), time
  57. time = parse_now("3 jan 2010 4pm")
  58. assert_equal Time.local(2010, 1, 3, 16), time
  59. # sm_sd_sy
  60. time = parse_now("5/27/1979")
  61. assert_equal Time.local(1979, 5, 27, 12), time
  62. time = parse_now("5/27/1979 4am")
  63. assert_equal Time.local(1979, 5, 27, 4), time
  64. # sd_sm_sy
  65. time = parse_now("27/5/1979")
  66. assert_equal Time.local(1979, 5, 27, 12), time
  67. time = parse_now("27/5/1979 @ 0700")
  68. assert_equal Time.local(1979, 5, 27, 7), time
  69. # sm_sy
  70. time = parse_now("05/06")
  71. assert_equal Time.local(2006, 5, 16, 12), time
  72. time = parse_now("12/06")
  73. assert_equal Time.local(2006, 12, 16, 12), time
  74. time = parse_now("13/06")
  75. assert_equal nil, time
  76. # sy_sm_sd
  77. time = parse_now("2000-1-1")
  78. assert_equal Time.local(2000, 1, 1, 12), time
  79. time = parse_now("2006-08-20")
  80. assert_equal Time.local(2006, 8, 20, 12), time
  81. time = parse_now("2006-08-20 7pm")
  82. assert_equal Time.local(2006, 8, 20, 19), time
  83. time = parse_now("2006-08-20 03:00")
  84. assert_equal Time.local(2006, 8, 20, 3), time
  85. time = parse_now("2006-08-20 03:30:30")
  86. assert_equal Time.local(2006, 8, 20, 3, 30, 30), time
  87. time = parse_now("2006-08-20 15:30:30")
  88. assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
  89. time = parse_now("2006-08-20 15:30.30")
  90. assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
  91. # rdn_rm_rd_rt_rtz_ry
  92. time = parse_now("Mon Apr 02 17:00:00 PDT 2007")
  93. assert_equal Time.local(2007, 4, 2, 17), time
  94. now = Time.now
  95. time = parse_now(now.to_s)
  96. assert_equal now.to_s, time.to_s
  97. # rm_sd_rt
  98. #time = parse_now("jan 5 13:00")
  99. #assert_equal Time.local(2007, 1, 5, 13), time
  100. # due to limitations of the Time class, these don't work
  101. time = parse_now("may 40")
  102. assert_equal nil, time
  103. time = parse_now("may 27 40")
  104. assert_equal nil, time
  105. time = parse_now("1800-08-20")
  106. assert_equal nil, time
  107. end
  108. def test_foo
  109. Chronic.parse('two months ago this friday')
  110. end
  111. def test_parse_guess_r
  112. time = parse_now("friday")
  113. assert_equal Time.local(2006, 8, 18, 12), time
  114. time = parse_now("tue")
  115. assert_equal Time.local(2006, 8, 22, 12), time
  116. time = parse_now("5")
  117. assert_equal Time.local(2006, 8, 16, 17), time
  118. time = Chronic.parse("5", :now => Time.local(2006, 8, 16, 3, 0, 0, 0), :ambiguous_time_range => :none)
  119. assert_equal Time.local(2006, 8, 16, 5), time
  120. time = parse_now("13:00")
  121. assert_equal Time.local(2006, 8, 17, 13), time
  122. time = parse_now("13:45")
  123. assert_equal Time.local(2006, 8, 17, 13, 45), time
  124. time = parse_now("november")
  125. assert_equal Time.local(2006, 11, 16), time
  126. end
  127. def test_parse_guess_rr
  128. time = parse_now("friday 13:00")
  129. assert_equal Time.local(2006, 8, 18, 13), time
  130. time = parse_now("monday 4:00")
  131. assert_equal Time.local(2006, 8, 21, 16), time
  132. time = parse_now("sat 4:00", :ambiguous_time_range => :none)
  133. assert_equal Time.local(2006, 8, 19, 4), time
  134. time = parse_now("sunday 4:20", :ambiguous_time_range => :none)
  135. assert_equal Time.local(2006, 8, 20, 4, 20), time
  136. time = parse_now("4 pm")
  137. assert_equal Time.local(2006, 8, 16, 16), time
  138. time = parse_now("4 am", :ambiguous_time_range => :none)
  139. assert_equal Time.local(2006, 8, 16, 4), time
  140. time = parse_now("4:00 in the morning")
  141. assert_equal Time.local(2006, 8, 16, 4), time
  142. time = parse_now("november 4")
  143. assert_equal Time.local(2006, 11, 4, 12), time
  144. time = parse_now("aug 24")
  145. assert_equal Time.local(2006, 8, 24, 12), time
  146. end
  147. def test_parse_guess_rrr
  148. time = parse_now("friday 1 pm")
  149. assert_equal Time.local(2006, 8, 18, 13), time
  150. time = parse_now("friday 11 at night")
  151. assert_equal Time.local(2006, 8, 18, 23), time
  152. time = parse_now("friday 11 in the evening")
  153. assert_equal Time.local(2006, 8, 18, 23), time
  154. time = parse_now("sunday 6am")
  155. assert_equal Time.local(2006, 8, 20, 6), time
  156. time = parse_now("friday evening at 7")
  157. assert_equal Time.local(2006, 8, 18, 19), time
  158. end
  159. def test_parse_guess_gr
  160. # year
  161. time = parse_now("this year")
  162. assert_equal Time.local(2006, 10, 24, 12, 30), time
  163. time = parse_now("this year", :context => :past)
  164. assert_equal Time.local(2006, 4, 24, 12, 30), time
  165. # month
  166. time = parse_now("this month")
  167. assert_equal Time.local(2006, 8, 24, 12), time
  168. time = parse_now("this month", :context => :past)
  169. assert_equal Time.local(2006, 8, 8, 12), time
  170. time = Chronic.parse("next month", :now => Time.local(2006, 11, 15))
  171. assert_equal Time.local(2006, 12, 16, 12), time
  172. # month name
  173. time = parse_now("last november")
  174. assert_equal Time.local(2005, 11, 16), time
  175. # fortnight
  176. time = parse_now("this fortnight")
  177. assert_equal Time.local(2006, 8, 21, 19, 30), time
  178. time = parse_now("this fortnight", :context => :past)
  179. assert_equal Time.local(2006, 8, 14, 19), time
  180. # week
  181. time = parse_now("this week")
  182. assert_equal Time.local(2006, 8, 18, 7, 30), time
  183. time = parse_now("this week", :context => :past)
  184. assert_equal Time.local(2006, 8, 14, 19), time
  185. # weekend
  186. time = parse_now("this weekend")
  187. assert_equal Time.local(2006, 8, 20), time
  188. time = parse_now("this weekend", :context => :past)
  189. assert_equal Time.local(2006, 8, 13), time
  190. time = parse_now("last weekend")
  191. assert_equal Time.local(2006, 8, 13), time
  192. # day
  193. time = parse_now("this day")
  194. assert_equal Time.local(2006, 8, 16, 19, 30), time
  195. time = parse_now("this day", :context => :past)
  196. assert_equal Time.local(2006, 8, 16, 7), time
  197. time = parse_now("today")
  198. assert_equal Time.local(2006, 8, 16, 19, 30), time
  199. time = parse_now("yesterday")
  200. assert_equal Time.local(2006, 8, 15, 12), time
  201. time = parse_now("tomorrow")
  202. assert_equal Time.local(2006, 8, 17, 12), time
  203. # day name
  204. time = parse_now("this tuesday")
  205. assert_equal Time.local(2006, 8, 22, 12), time
  206. time = parse_now("next tuesday")
  207. assert_equal Time.local(2006, 8, 22, 12), time
  208. time = parse_now("last tuesday")
  209. assert_equal Time.local(2006, 8, 15, 12), time
  210. time = parse_now("this wed")
  211. assert_equal Time.local(2006, 8, 23, 12), time
  212. time = parse_now("next wed")
  213. assert_equal Time.local(2006, 8, 23, 12), time
  214. time = parse_now("last wed")
  215. assert_equal Time.local(2006, 8, 9, 12), time
  216. # day portion
  217. time = parse_now("this morning")
  218. assert_equal Time.local(2006, 8, 16, 9), time
  219. time = parse_now("tonight")
  220. assert_equal Time.local(2006, 8, 16, 22), time
  221. # minute
  222. time = parse_now("next minute")
  223. assert_equal Time.local(2006, 8, 16, 14, 1, 30), time
  224. # second
  225. time = parse_now("this second")
  226. assert_equal Time.local(2006, 8, 16, 14), time
  227. time = parse_now("this second", :context => :past)
  228. assert_equal Time.local(2006, 8, 16, 14), time
  229. time = parse_now("next second")
  230. assert_equal Time.local(2006, 8, 16, 14, 0, 1), time
  231. time = parse_now("last second")
  232. assert_equal Time.local(2006, 8, 16, 13, 59, 59), time
  233. end
  234. def test_parse_guess_grr
  235. time = parse_now("yesterday at 4:00")
  236. assert_equal Time.local(2006, 8, 15, 16), time
  237. time = parse_now("today at 9:00")
  238. assert_equal Time.local(2006, 8, 16, 9), time
  239. time = parse_now("today at 2100")
  240. assert_equal Time.local(2006, 8, 16, 21), time
  241. time = parse_now("this day at 0900")
  242. assert_equal Time.local(2006, 8, 16, 9), time
  243. time = parse_now("tomorrow at 0900")
  244. assert_equal Time.local(2006, 8, 17, 9), time
  245. time = parse_now("yesterday at 4:00", :ambiguous_time_range => :none)
  246. assert_equal Time.local(2006, 8, 15, 4), time
  247. time = parse_now("last friday at 4:00")
  248. assert_equal Time.local(2006, 8, 11, 16), time
  249. time = parse_now("next wed 4:00")
  250. assert_equal Time.local(2006, 8, 23, 16), time
  251. time = parse_now("yesterday afternoon")
  252. assert_equal Time.local(2006, 8, 15, 15), time
  253. time = parse_now("last week tuesday")
  254. assert_equal Time.local(2006, 8, 8, 12), time
  255. time = parse_now("tonight at 7")
  256. assert_equal Time.local(2006, 8, 16, 19), time
  257. time = parse_now("tonight 7")
  258. assert_equal Time.local(2006, 8, 16, 19), time
  259. time = parse_now("7 tonight")
  260. assert_equal Time.local(2006, 8, 16, 19), time
  261. end
  262. def test_parse_guess_grrr
  263. time = parse_now("today at 6:00pm")
  264. assert_equal Time.local(2006, 8, 16, 18), time
  265. time = parse_now("today at 6:00am")
  266. assert_equal Time.local(2006, 8, 16, 6), time
  267. time = parse_now("this day 1800")
  268. assert_equal Time.local(2006, 8, 16, 18), time
  269. time = parse_now("yesterday at 4:00pm")
  270. assert_equal Time.local(2006, 8, 15, 16), time
  271. time = parse_now("tomorrow evening at 7")
  272. assert_equal Time.local(2006, 8, 17, 19), time
  273. time = parse_now("tomorrow morning at 5:30")
  274. assert_equal Time.local(2006, 8, 17, 5, 30), time
  275. end
  276. def test_parse_guess_rgr
  277. time = parse_now("afternoon yesterday")
  278. assert_equal Time.local(2006, 8, 15, 15), time
  279. time = parse_now("tuesday last week")
  280. assert_equal Time.local(2006, 8, 8, 12), time
  281. end
  282. def test_parse_guess_s_r_p
  283. # past
  284. time = parse_now("3 years ago")
  285. assert_equal Time.local(2003, 8, 16, 14), time
  286. time = parse_now("1 month ago")
  287. assert_equal Time.local(2006, 7, 16, 14), time
  288. time = parse_now("1 fortnight ago")
  289. assert_equal Time.local(2006, 8, 2, 14), time
  290. time = parse_now("2 fortnights ago")
  291. assert_equal Time.local(2006, 7, 19, 14), time
  292. time = parse_now("3 weeks ago")
  293. assert_equal Time.local(2006, 7, 26, 14), time
  294. time = parse_now("2 weekends ago")
  295. assert_equal Time.local(2006, 8, 5), time
  296. time = parse_now("3 days ago")
  297. assert_equal Time.local(2006, 8, 13, 14), time
  298. #time = parse_now("1 monday ago")
  299. #assert_equal Time.local(2006, 8, 14, 12), time
  300. time = parse_now("5 mornings ago")
  301. assert_equal Time.local(2006, 8, 12, 9), time
  302. time = parse_now("7 hours ago")
  303. assert_equal Time.local(2006, 8, 16, 7), time
  304. time = parse_now("3 minutes ago")
  305. assert_equal Time.local(2006, 8, 16, 13, 57), time
  306. time = parse_now("20 seconds before now")
  307. assert_equal Time.local(2006, 8, 16, 13, 59, 40), time
  308. # future
  309. time = parse_now("3 years from now")
  310. assert_equal Time.local(2009, 8, 16, 14, 0, 0), time
  311. time = parse_now("6 months hence")
  312. assert_equal Time.local(2007, 2, 16, 14), time
  313. time = parse_now("3 fortnights hence")
  314. assert_equal Time.local(2006, 9, 27, 14), time
  315. time = parse_now("1 week from now")
  316. assert_equal Time.local(2006, 8, 23, 14, 0, 0), time
  317. time = parse_now("1 weekend from now")
  318. assert_equal Time.local(2006, 8, 19), time
  319. time = parse_now("2 weekends from now")
  320. assert_equal Time.local(2006, 8, 26), time
  321. time = parse_now("1 day hence")
  322. assert_equal Time.local(2006, 8, 17, 14), time
  323. time = parse_now("5 mornings hence")
  324. assert_equal Time.local(2006, 8, 21, 9), time
  325. time = parse_now("1 hour from now")
  326. assert_equal Time.local(2006, 8, 16, 15), time
  327. time = parse_now("20 minutes hence")
  328. assert_equal Time.local(2006, 8, 16, 14, 20), time
  329. time = parse_now("20 seconds from now")
  330. assert_equal Time.local(2006, 8, 16, 14, 0, 20), time
  331. time = Chronic.parse("2 months ago", :now => Time.parse("2007-03-07 23:30"))
  332. assert_equal Time.local(2007, 1, 7, 23, 30), time
  333. end
  334. def test_parse_guess_p_s_r
  335. time = parse_now("in 3 hours")
  336. assert_equal Time.local(2006, 8, 16, 17), time
  337. end
  338. def test_parse_guess_s_r_p_a
  339. # past
  340. time = parse_now("3 years ago tomorrow")
  341. assert_equal Time.local(2003, 8, 17, 12), time
  342. time = parse_now("3 years ago this friday")
  343. assert_equal Time.local(2003, 8, 18, 12), time
  344. time = parse_now("3 months ago saturday at 5:00 pm")
  345. assert_equal Time.local(2006, 5, 19, 17), time
  346. time = parse_now("2 days from this second")
  347. assert_equal Time.local(2006, 8, 18, 14), time
  348. time = parse_now("7 hours before tomorrow at midnight")
  349. assert_equal Time.local(2006, 8, 17, 17), time
  350. # future
  351. end
  352. def test_parse_guess_o_r_s_r
  353. time = parse_now("3rd wednesday in november")
  354. assert_equal Time.local(2006, 11, 15, 12), time
  355. time = parse_now("10th wednesday in november")
  356. assert_equal nil, time
  357. # time = parse_now("3rd wednesday in 2007")
  358. # assert_equal Time.local(2007, 1, 20, 12), time
  359. end
  360. def test_parse_guess_o_r_g_r
  361. time = parse_now("3rd month next year")
  362. assert_equal Time.local(2007, 3, 16, 12, 30), time
  363. time = parse_now("3rd thursday this september")
  364. assert_equal Time.local(2006, 9, 21, 12), time
  365. time = parse_now("4th day last week")
  366. assert_equal Time.local(2006, 8, 9, 12), time
  367. end
  368. def test_parse_guess_nonsense
  369. time = parse_now("some stupid nonsense")
  370. assert_equal nil, time
  371. end
  372. def test_parse_span
  373. span = parse_now("friday", :guess => false)
  374. assert_equal Time.local(2006, 8, 18), span.begin
  375. assert_equal Time.local(2006, 8, 19), span.end
  376. span = parse_now("november", :guess => false)
  377. assert_equal Time.local(2006, 11), span.begin
  378. assert_equal Time.local(2006, 12), span.end
  379. span = Chronic.parse("weekend" , :now => @time_2006_08_16_14_00_00, :guess => false)
  380. assert_equal Time.local(2006, 8, 19), span.begin
  381. assert_equal Time.local(2006, 8, 21), span.end
  382. end
  383. def test_parse_words
  384. assert_equal parse_now("33 days from now"), parse_now("thirty-three days from now")
  385. assert_equal parse_now("2867532 seconds from now"), parse_now("two million eight hundred and sixty seven thousand five hundred and thirty two seconds from now")
  386. assert_equal parse_now("may 10th"), parse_now("may tenth")
  387. end
  388. def test_parse_only_complete_pointers
  389. assert_equal parse_now("eat pasty buns today at 2pm"), @time_2006_08_16_14_00_00
  390. assert_equal parse_now("futuristically speaking today at 2pm"), @time_2006_08_16_14_00_00
  391. assert_equal parse_now("meeting today at 2pm"), @time_2006_08_16_14_00_00
  392. end
  393. def test_argument_validation
  394. assert_raise(Chronic::InvalidArgumentException) do
  395. time = Chronic.parse("may 27", :foo => :bar)
  396. end
  397. assert_raise(Chronic::InvalidArgumentException) do
  398. time = Chronic.parse("may 27", :context => :bar)
  399. end
  400. end
  401. private
  402. def parse_now(string, options={})
  403. Chronic.parse(string, {:now => TIME_2006_08_16_14_00_00 }.merge(options))
  404. end
  405. end