revised_holidays 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ruby.yml +25 -0
  3. data/CHANGELOG.md +446 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE +21 -0
  7. data/Makefile +45 -0
  8. data/README.md +337 -0
  9. data/Rakefile +109 -0
  10. data/bin/console +7 -0
  11. data/bin/setup +6 -0
  12. data/definitions/.github/workflows/ruby.yml +25 -0
  13. data/definitions/.gitignore +5 -0
  14. data/definitions/CHANGELOG.md +352 -0
  15. data/definitions/Gemfile +6 -0
  16. data/definitions/LICENSE +21 -0
  17. data/definitions/METHODS.yml +26 -0
  18. data/definitions/Makefile +9 -0
  19. data/definitions/README.md +22 -0
  20. data/definitions/ar.yaml +268 -0
  21. data/definitions/at.yaml +116 -0
  22. data/definitions/au.yaml +907 -0
  23. data/definitions/be_fr.yaml +153 -0
  24. data/definitions/be_nl.yaml +153 -0
  25. data/definitions/bg.yaml +186 -0
  26. data/definitions/br.yaml +178 -0
  27. data/definitions/ca.yaml +969 -0
  28. data/definitions/ch.yaml +277 -0
  29. data/definitions/cl.yaml +294 -0
  30. data/definitions/co.yaml +437 -0
  31. data/definitions/cr.yaml +100 -0
  32. data/definitions/cz.yaml +137 -0
  33. data/definitions/de.yaml +401 -0
  34. data/definitions/dk.yaml +220 -0
  35. data/definitions/doc/CONTRIBUTING.md +44 -0
  36. data/definitions/doc/MAINTAINERS.md +39 -0
  37. data/definitions/doc/SYNTAX.md +435 -0
  38. data/definitions/doc/architecture/README.md +15 -0
  39. data/definitions/doc/architecture/adr-001.md +86 -0
  40. data/definitions/doc/architecture/adr-002.md +64 -0
  41. data/definitions/ecbtarget.yaml +74 -0
  42. data/definitions/ee.yaml +123 -0
  43. data/definitions/es.yaml +495 -0
  44. data/definitions/federalreserve.yaml +389 -0
  45. data/definitions/federalreservebanks.yaml +821 -0
  46. data/definitions/fedex.yaml +102 -0
  47. data/definitions/fi.yaml +234 -0
  48. data/definitions/fr.yaml +157 -0
  49. data/definitions/gb.yaml +565 -0
  50. data/definitions/ge.yaml +158 -0
  51. data/definitions/gr.yaml +158 -0
  52. data/definitions/hk.yaml +287 -0
  53. data/definitions/hr.yaml +171 -0
  54. data/definitions/hu.yaml +156 -0
  55. data/definitions/ie.yaml +172 -0
  56. data/definitions/index.yaml +80 -0
  57. data/definitions/is.yaml +247 -0
  58. data/definitions/it.yaml +246 -0
  59. data/definitions/jp.yaml +761 -0
  60. data/definitions/ke.yaml +107 -0
  61. data/definitions/kr.yaml +166 -0
  62. data/definitions/kz.yaml +128 -0
  63. data/definitions/li.yaml +154 -0
  64. data/definitions/lib/validation/custom_method_validator.rb +38 -0
  65. data/definitions/lib/validation/definition_validator.rb +35 -0
  66. data/definitions/lib/validation/error.rb +11 -0
  67. data/definitions/lib/validation/month_validator.rb +58 -0
  68. data/definitions/lib/validation/run.rb +66 -0
  69. data/definitions/lib/validation/test_validator.rb +83 -0
  70. data/definitions/lt.yaml +198 -0
  71. data/definitions/lu.yaml +123 -0
  72. data/definitions/lv.yaml +229 -0
  73. data/definitions/ma.yaml +96 -0
  74. data/definitions/mt_en.yaml +131 -0
  75. data/definitions/mt_mt.yaml +131 -0
  76. data/definitions/mx.yaml +160 -0
  77. data/definitions/my.yaml +79 -0
  78. data/definitions/nerc.yaml +94 -0
  79. data/definitions/ng.yaml +97 -0
  80. data/definitions/nl.yaml +127 -0
  81. data/definitions/no.yaml +169 -0
  82. data/definitions/northamericainformal.yaml +105 -0
  83. data/definitions/nyse.yaml +137 -0
  84. data/definitions/nz.yaml +346 -0
  85. data/definitions/pe.yaml +208 -0
  86. data/definitions/ph.yaml +130 -0
  87. data/definitions/pl.yaml +796 -0
  88. data/definitions/pt.yaml +187 -0
  89. data/definitions/ro.yaml +240 -0
  90. data/definitions/rs_cyrl.yaml +129 -0
  91. data/definitions/rs_la.yaml +129 -0
  92. data/definitions/ru.yaml +108 -0
  93. data/definitions/se.yaml +238 -0
  94. data/definitions/sg.yaml +89 -0
  95. data/definitions/si.yaml +162 -0
  96. data/definitions/sk.yaml +154 -0
  97. data/definitions/spec/coverage_report.rb +7 -0
  98. data/definitions/spec/data/invalid/months/malformed/bad.yaml +15 -0
  99. data/definitions/spec/data/invalid/months/missing/no_months.yaml +9 -0
  100. data/definitions/spec/data/valid/simple.yaml +15 -0
  101. data/definitions/spec/spec_helper.rb +7 -0
  102. data/definitions/spec/validation/custom_method_validator_spec.rb +60 -0
  103. data/definitions/spec/validation/definition_validator_spec.rb +43 -0
  104. data/definitions/spec/validation/month_validator_spec.rb +175 -0
  105. data/definitions/spec/validation/test_validator_spec.rb +169 -0
  106. data/definitions/th.yaml +111 -0
  107. data/definitions/tn.yaml +83 -0
  108. data/definitions/tr.yaml +174 -0
  109. data/definitions/ua.yaml +161 -0
  110. data/definitions/unitednations.yaml +189 -0
  111. data/definitions/ups.yaml +102 -0
  112. data/definitions/us.yaml +965 -0
  113. data/definitions/ve.yaml +118 -0
  114. data/definitions/vi.yaml +54 -0
  115. data/definitions/za.yaml +139 -0
  116. data/doc/CONTRIBUTING.md +72 -0
  117. data/doc/MAINTAINERS.md +81 -0
  118. data/doc/REFERENCES +19 -0
  119. data/lib/generated_definitions/MANIFEST +83 -0
  120. data/lib/generated_definitions/REGIONS.rb +6 -0
  121. data/lib/generated_definitions/ar.rb +60 -0
  122. data/lib/generated_definitions/at.rb +37 -0
  123. data/lib/generated_definitions/au.rb +177 -0
  124. data/lib/generated_definitions/be.rb +42 -0
  125. data/lib/generated_definitions/be_fr.rb +36 -0
  126. data/lib/generated_definitions/be_nl.rb +36 -0
  127. data/lib/generated_definitions/bg.rb +53 -0
  128. data/lib/generated_definitions/br.rb +37 -0
  129. data/lib/generated_definitions/ca.rb +88 -0
  130. data/lib/generated_definitions/ch.rb +95 -0
  131. data/lib/generated_definitions/cl.rb +71 -0
  132. data/lib/generated_definitions/co.rb +121 -0
  133. data/lib/generated_definitions/cr.rb +35 -0
  134. data/lib/generated_definitions/cz.rb +37 -0
  135. data/lib/generated_definitions/de.rb +65 -0
  136. data/lib/generated_definitions/dk.rb +48 -0
  137. data/lib/generated_definitions/ecbtarget.rb +30 -0
  138. data/lib/generated_definitions/ee.rb +36 -0
  139. data/lib/generated_definitions/el.rb +38 -0
  140. data/lib/generated_definitions/es.rb +56 -0
  141. data/lib/generated_definitions/europe.rb +638 -0
  142. data/lib/generated_definitions/federalreserve.rb +35 -0
  143. data/lib/generated_definitions/federalreservebanks.rb +35 -0
  144. data/lib/generated_definitions/fedex.rb +36 -0
  145. data/lib/generated_definitions/fi.rb +61 -0
  146. data/lib/generated_definitions/fr.rb +39 -0
  147. data/lib/generated_definitions/gb.rb +51 -0
  148. data/lib/generated_definitions/ge.rb +41 -0
  149. data/lib/generated_definitions/gr.rb +38 -0
  150. data/lib/generated_definitions/hk.rb +106 -0
  151. data/lib/generated_definitions/hr.rb +40 -0
  152. data/lib/generated_definitions/hu.rb +35 -0
  153. data/lib/generated_definitions/ie.rb +33 -0
  154. data/lib/generated_definitions/is.rb +60 -0
  155. data/lib/generated_definitions/it.rb +45 -0
  156. data/lib/generated_definitions/jp.rb +166 -0
  157. data/lib/generated_definitions/ke.rb +34 -0
  158. data/lib/generated_definitions/kr.rb +40 -0
  159. data/lib/generated_definitions/kz.rb +38 -0
  160. data/lib/generated_definitions/li.rb +44 -0
  161. data/lib/generated_definitions/lt.rb +38 -0
  162. data/lib/generated_definitions/lu.rb +35 -0
  163. data/lib/generated_definitions/lv.rb +56 -0
  164. data/lib/generated_definitions/ma.rb +33 -0
  165. data/lib/generated_definitions/mt_en.rb +38 -0
  166. data/lib/generated_definitions/mt_mt.rb +38 -0
  167. data/lib/generated_definitions/mx.rb +54 -0
  168. data/lib/generated_definitions/my.rb +30 -0
  169. data/lib/generated_definitions/nerc.rb +30 -0
  170. data/lib/generated_definitions/ng.rb +33 -0
  171. data/lib/generated_definitions/nl.rb +37 -0
  172. data/lib/generated_definitions/no.rb +40 -0
  173. data/lib/generated_definitions/northamerica.rb +229 -0
  174. data/lib/generated_definitions/nyse.rb +34 -0
  175. data/lib/generated_definitions/nz.rb +105 -0
  176. data/lib/generated_definitions/pe.rb +43 -0
  177. data/lib/generated_definitions/ph.rb +50 -0
  178. data/lib/generated_definitions/pl.rb +73 -0
  179. data/lib/generated_definitions/pt.rb +40 -0
  180. data/lib/generated_definitions/ro.rb +39 -0
  181. data/lib/generated_definitions/rs_cyrl.rb +39 -0
  182. data/lib/generated_definitions/rs_la.rb +39 -0
  183. data/lib/generated_definitions/ru.rb +37 -0
  184. data/lib/generated_definitions/scandinavia.rb +166 -0
  185. data/lib/generated_definitions/se.rb +53 -0
  186. data/lib/generated_definitions/sg.rb +31 -0
  187. data/lib/generated_definitions/si.rb +39 -0
  188. data/lib/generated_definitions/sk.rb +39 -0
  189. data/lib/generated_definitions/southamerica.rb +248 -0
  190. data/lib/generated_definitions/th.rb +36 -0
  191. data/lib/generated_definitions/tn.rb +32 -0
  192. data/lib/generated_definitions/tr.rb +64 -0
  193. data/lib/generated_definitions/ua.rb +37 -0
  194. data/lib/generated_definitions/unitednations.rb +81 -0
  195. data/lib/generated_definitions/ups.rb +36 -0
  196. data/lib/generated_definitions/us.rb +153 -0
  197. data/lib/generated_definitions/ve.rb +36 -0
  198. data/lib/generated_definitions/vi.rb +29 -0
  199. data/lib/generated_definitions/za.rb +36 -0
  200. data/lib/holidays/core_extensions/date.rb +57 -0
  201. data/lib/holidays/core_extensions/time.rb +23 -0
  202. data/lib/holidays/date_calculator/day_of_month.rb +68 -0
  203. data/lib/holidays/date_calculator/easter.rb +91 -0
  204. data/lib/holidays/date_calculator/lunar_date.rb +371 -0
  205. data/lib/holidays/date_calculator/weekend_modifier.rb +80 -0
  206. data/lib/holidays/definition/context/function_processor.rb +91 -0
  207. data/lib/holidays/definition/context/generator.rb +209 -0
  208. data/lib/holidays/definition/context/load.rb +29 -0
  209. data/lib/holidays/definition/context/merger.rb +22 -0
  210. data/lib/holidays/definition/decorator/custom_method_proc.rb +28 -0
  211. data/lib/holidays/definition/decorator/custom_method_source.rb +30 -0
  212. data/lib/holidays/definition/decorator/test.rb +37 -0
  213. data/lib/holidays/definition/entity/custom_method.rb +11 -0
  214. data/lib/holidays/definition/entity/test.rb +11 -0
  215. data/lib/holidays/definition/generator/module.rb +54 -0
  216. data/lib/holidays/definition/generator/regions.rb +55 -0
  217. data/lib/holidays/definition/generator/test.rb +51 -0
  218. data/lib/holidays/definition/parser/custom_method.rb +67 -0
  219. data/lib/holidays/definition/parser/test.rb +86 -0
  220. data/lib/holidays/definition/repository/cache.rb +47 -0
  221. data/lib/holidays/definition/repository/custom_methods.rb +27 -0
  222. data/lib/holidays/definition/repository/holidays_by_month.rb +57 -0
  223. data/lib/holidays/definition/repository/proc_result_cache.rb +51 -0
  224. data/lib/holidays/definition/repository/regions.rb +46 -0
  225. data/lib/holidays/definition/validator/custom_method.rb +31 -0
  226. data/lib/holidays/definition/validator/region.rb +36 -0
  227. data/lib/holidays/definition/validator/test.rb +71 -0
  228. data/lib/holidays/errors.rb +11 -0
  229. data/lib/holidays/factory/date_calculator.rb +42 -0
  230. data/lib/holidays/factory/definition.rb +143 -0
  231. data/lib/holidays/factory/finder.rb +70 -0
  232. data/lib/holidays/finder/context/between.rb +45 -0
  233. data/lib/holidays/finder/context/dates_driver_builder.rb +64 -0
  234. data/lib/holidays/finder/context/next_holiday.rb +57 -0
  235. data/lib/holidays/finder/context/parse_options.rb +104 -0
  236. data/lib/holidays/finder/context/search.rb +111 -0
  237. data/lib/holidays/finder/context/year_holiday.rb +57 -0
  238. data/lib/holidays/finder/rules/in_region.rb +31 -0
  239. data/lib/holidays/finder/rules/year_range.rb +58 -0
  240. data/lib/holidays/load_all_definitions.rb +56 -0
  241. data/lib/holidays/version.rb +3 -0
  242. data/lib/holidays.rb +130 -0
  243. data/lib/revised_holidays.rb +1 -0
  244. data/revised_holidays.gemspec +31 -0
  245. data/test/coverage_report.rb +26 -0
  246. data/test/data/test_custom_govt_holiday_defs.yaml +5 -0
  247. data/test/data/test_custom_informal_holidays_defs.yaml +11 -0
  248. data/test/data/test_custom_year_range_holiday_defs.yaml +31 -0
  249. data/test/data/test_invalid_region.rb +15 -0
  250. data/test/data/test_multiple_custom_holiday_defs.yaml +12 -0
  251. data/test/data/test_multiple_regions_with_conflicts_region_1.yaml +38 -0
  252. data/test/data/test_multiple_regions_with_conflicts_region_2.yaml +38 -0
  253. data/test/data/test_region.rb +15 -0
  254. data/test/data/test_single_custom_holiday_defs.yaml +12 -0
  255. data/test/data/test_single_custom_holiday_with_custom_procs.yaml +28 -0
  256. data/test/defs/test_defs_ar.rb +69 -0
  257. data/test/defs/test_defs_at.rb +31 -0
  258. data/test/defs/test_defs_au.rb +233 -0
  259. data/test/defs/test_defs_be_fr.rb +45 -0
  260. data/test/defs/test_defs_be_nl.rb +45 -0
  261. data/test/defs/test_defs_bg.rb +41 -0
  262. data/test/defs/test_defs_br.rb +49 -0
  263. data/test/defs/test_defs_ca.rb +289 -0
  264. data/test/defs/test_defs_ch.rb +51 -0
  265. data/test/defs/test_defs_cl.rb +69 -0
  266. data/test/defs/test_defs_co.rb +113 -0
  267. data/test/defs/test_defs_cr.rb +29 -0
  268. data/test/defs/test_defs_cz.rb +37 -0
  269. data/test/defs/test_defs_de.rb +89 -0
  270. data/test/defs/test_defs_dk.rb +47 -0
  271. data/test/defs/test_defs_ecbtarget.rb +27 -0
  272. data/test/defs/test_defs_ee.rb +41 -0
  273. data/test/defs/test_defs_es.rb +137 -0
  274. data/test/defs/test_defs_europe.rb +1522 -0
  275. data/test/defs/test_defs_fed_ex.rb +24 -0
  276. data/test/defs/test_defs_federalreserve.rb +119 -0
  277. data/test/defs/test_defs_federalreservebanks.rb +251 -0
  278. data/test/defs/test_defs_fedex.rb +31 -0
  279. data/test/defs/test_defs_fi.rb +59 -0
  280. data/test/defs/test_defs_fr.rb +43 -0
  281. data/test/defs/test_defs_gb.rb +159 -0
  282. data/test/defs/test_defs_ge.rb +53 -0
  283. data/test/defs/test_defs_gr.rb +41 -0
  284. data/test/defs/test_defs_hk.rb +59 -0
  285. data/test/defs/test_defs_hr.rb +45 -0
  286. data/test/defs/test_defs_hu.rb +47 -0
  287. data/test/defs/test_defs_ie.rb +53 -0
  288. data/test/defs/test_defs_is.rb +51 -0
  289. data/test/defs/test_defs_it.rb +55 -0
  290. data/test/defs/test_defs_jp.rb +159 -0
  291. data/test/defs/test_defs_ke.rb +31 -0
  292. data/test/defs/test_defs_kr.rb +37 -0
  293. data/test/defs/test_defs_kz.rb +39 -0
  294. data/test/defs/test_defs_li.rb +35 -0
  295. data/test/defs/test_defs_lt.rb +65 -0
  296. data/test/defs/test_defs_lu.rb +35 -0
  297. data/test/defs/test_defs_lv.rb +98 -0
  298. data/test/defs/test_defs_ma.rb +29 -0
  299. data/test/defs/test_defs_mt_en.rb +41 -0
  300. data/test/defs/test_defs_mt_mt.rb +41 -0
  301. data/test/defs/test_defs_mx.rb +49 -0
  302. data/test/defs/test_defs_my.rb +23 -0
  303. data/test/defs/test_defs_nerc.rb +29 -0
  304. data/test/defs/test_defs_ng.rb +29 -0
  305. data/test/defs/test_defs_nl.rb +33 -0
  306. data/test/defs/test_defs_no.rb +43 -0
  307. data/test/defs/test_defs_northamerica.rb +667 -0
  308. data/test/defs/test_defs_nyse.rb +46 -0
  309. data/test/defs/test_defs_nz.rb +67 -0
  310. data/test/defs/test_defs_pe.rb +47 -0
  311. data/test/defs/test_defs_ph.rb +29 -0
  312. data/test/defs/test_defs_pl.rb +229 -0
  313. data/test/defs/test_defs_pt.rb +47 -0
  314. data/test/defs/test_defs_ro.rb +65 -0
  315. data/test/defs/test_defs_rs_cyrl.rb +46 -0
  316. data/test/defs/test_defs_rs_la.rb +46 -0
  317. data/test/defs/test_defs_ru.rb +34 -0
  318. data/test/defs/test_defs_scandinavia.rb +215 -0
  319. data/test/defs/test_defs_se.rb +59 -0
  320. data/test/defs/test_defs_sg.rb +25 -0
  321. data/test/defs/test_defs_si.rb +105 -0
  322. data/test/defs/test_defs_sk.rb +41 -0
  323. data/test/defs/test_defs_southamerica.rb +327 -0
  324. data/test/defs/test_defs_th.rb +33 -0
  325. data/test/defs/test_defs_tn.rb +27 -0
  326. data/test/defs/test_defs_tr.rb +60 -0
  327. data/test/defs/test_defs_ua.rb +41 -0
  328. data/test/defs/test_defs_unitednations.rb +11 -0
  329. data/test/defs/test_defs_ups.rb +31 -0
  330. data/test/defs/test_defs_us.rb +387 -0
  331. data/test/defs/test_defs_ve.rb +35 -0
  332. data/test/defs/test_defs_vi.rb +22 -0
  333. data/test/defs/test_defs_za.rb +35 -0
  334. data/test/holidays/core_extensions/test_date.rb +122 -0
  335. data/test/holidays/core_extensions/test_date_time.rb +60 -0
  336. data/test/holidays/date_calculator/test_day_of_month.rb +27 -0
  337. data/test/holidays/date_calculator/test_easter_gregorian.rb +30 -0
  338. data/test/holidays/date_calculator/test_easter_julian.rb +36 -0
  339. data/test/holidays/date_calculator/test_lunar_date.rb +89 -0
  340. data/test/holidays/date_calculator/test_weekend_modifier.rb +54 -0
  341. data/test/holidays/definition/context/test_function_processor.rb +199 -0
  342. data/test/holidays/definition/context/test_generator.rb +226 -0
  343. data/test/holidays/definition/context/test_load.rb +37 -0
  344. data/test/holidays/definition/context/test_merger.rb +25 -0
  345. data/test/holidays/definition/decorator/test_custom_method_proc.rb +113 -0
  346. data/test/holidays/definition/decorator/test_custom_method_source.rb +96 -0
  347. data/test/holidays/definition/decorator/test_test.rb +123 -0
  348. data/test/holidays/definition/generator/test_module.rb +268 -0
  349. data/test/holidays/definition/generator/test_regions.rb +97 -0
  350. data/test/holidays/definition/generator/test_test.rb +113 -0
  351. data/test/holidays/definition/parser/test_custom_method.rb +79 -0
  352. data/test/holidays/definition/parser/test_test.rb +142 -0
  353. data/test/holidays/definition/repository/test_cache.rb +123 -0
  354. data/test/holidays/definition/repository/test_custom_methods.rb +43 -0
  355. data/test/holidays/definition/repository/test_holidays_by_month.rb +275 -0
  356. data/test/holidays/definition/repository/test_proc_result_cache.rb +91 -0
  357. data/test/holidays/definition/repository/test_regions.rb +104 -0
  358. data/test/holidays/definition/validator/test_custom_method.rb +94 -0
  359. data/test/holidays/definition/validator/test_region.rb +54 -0
  360. data/test/holidays/definition/validator/test_test.rb +60 -0
  361. data/test/holidays/finder/context/test_between.rb +172 -0
  362. data/test/holidays/finder/context/test_dates_driver_builder.rb +91 -0
  363. data/test/holidays/finder/context/test_next_holiday.rb +156 -0
  364. data/test/holidays/finder/context/test_parse_options.rb +141 -0
  365. data/test/holidays/finder/context/test_search.rb +232 -0
  366. data/test/holidays/finder/context/test_year_holiday.rb +202 -0
  367. data/test/holidays/finder/rules/test_in_region.rb +42 -0
  368. data/test/holidays/finder/rules/test_year_range.rb +166 -0
  369. data/test/integration/README.md +9 -0
  370. data/test/integration/test_all_regions.rb +49 -0
  371. data/test/integration/test_any_holidays_during_work_week.rb +90 -0
  372. data/test/integration/test_available_regions.rb +23 -0
  373. data/test/integration/test_custom_holidays.rb +41 -0
  374. data/test/integration/test_custom_informal_holidays.rb +15 -0
  375. data/test/integration/test_custom_year_range_holidays.rb +35 -0
  376. data/test/integration/test_holidays.rb +243 -0
  377. data/test/integration/test_holidays_between.rb +87 -0
  378. data/test/integration/test_multiple_regions.rb +71 -0
  379. data/test/integration/test_multiple_regions_with_conflict.rb +29 -0
  380. data/test/integration/test_nonstandard_regions.rb +25 -0
  381. data/test/test_helper.rb +37 -0
  382. metadata +649 -0
@@ -0,0 +1,166 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/../../../test_helper'
2
+
3
+ require 'holidays/finder/rules/year_range'
4
+
5
+ class FinderRulesYearRangeTests < Test::Unit::TestCase
6
+ def setup
7
+ @year = 2015
8
+ @year_ranges = {between: 1996..2002}
9
+ @subject = Holidays::Finder::Rules::YearRange
10
+ end
11
+
12
+ def test_returns_error_if_target_year_is_missing
13
+ assert_raises ArgumentError do
14
+ @subject.call(nil, @year_ranges)
15
+ end
16
+ end
17
+
18
+ def test_returns_error_if_target_year_is_not_a_number
19
+ assert_raises ArgumentError do
20
+ @subject.call("test", @year_ranges)
21
+ end
22
+ end
23
+
24
+ def test_returns_error_if_year_ranges_if_nil
25
+ @year_ranges = []
26
+ assert_raises ArgumentError do
27
+ @subject.call(@year, nil)
28
+ end
29
+ end
30
+
31
+ def test_returns_error_if_year_ranges_contains_only_non_hash
32
+ @year_ranges = :test
33
+ assert_raises ArgumentError do
34
+ @subject.call(@year, @year_ranges)
35
+ end
36
+ end
37
+
38
+ def test_returns_error_if_year_ranges_is_empty
39
+ @year_ranges = [{}, {}]
40
+ assert_raises ArgumentError do
41
+ @subject.call(@year, @year_ranges)
42
+ end
43
+ end
44
+
45
+ def test_returns_error_if_year_range_contains_a_hash_with_multiple_entries
46
+ @year_ranges = {:between => 1996..2002, :after => 2002}
47
+ assert_raises ArgumentError do
48
+ @subject.call(@year, @year_ranges)
49
+ end
50
+ end
51
+
52
+ def test_returns_error_if_year_range_contains_unrecognized_operator
53
+ @year_ranges = {:what => 2002}
54
+ assert_raises ArgumentError do
55
+ @subject.call(@year, @year_ranges)
56
+ end
57
+ end
58
+
59
+ def test_returns_error_if_until_operator_and_value_is_not_a_number
60
+ @year_ranges = {until: "bad"}
61
+ assert_raises ArgumentError do
62
+ @subject.call(@year, @year_ranges)
63
+ end
64
+ end
65
+
66
+ def test_returns_true_if_until_operator_and_target_is_until
67
+ @year_ranges = {until: 2000}
68
+ assert_equal(true, @subject.call(1999, @year_ranges))
69
+ end
70
+
71
+ def test_returns_true_if_until_operator_and_target_is_equal
72
+ @year_ranges = {until: 2000}
73
+ assert_equal(true, @subject.call(2000, @year_ranges))
74
+ end
75
+
76
+ def test_returns_false_if_until_operator_and_target_is_after
77
+ @year_ranges = {until: 2000}
78
+ assert_equal(false, @subject.call(2001, @year_ranges))
79
+ end
80
+
81
+ def test_returns_error_if_from_operator_with_bad_value
82
+ @year_ranges = {from: "bad"}
83
+ assert_raises ArgumentError do
84
+ @subject.call(@year, @year_ranges)
85
+ end
86
+ end
87
+
88
+ def test_returns_false_if_from_operator_and_target_is_before
89
+ @year_ranges = {from: 2000}
90
+ assert_equal(false, @subject.call(1999, @year_ranges))
91
+ end
92
+
93
+ def test_returns_true_if_from_operator_and_target_is_equal
94
+ @year_ranges = {from: 2000}
95
+ assert_equal(true, @subject.call(2000, @year_ranges))
96
+ end
97
+
98
+ def test_returns_true_if_from_operator_and_target_is_after
99
+ @year_ranges = {from: 2000}
100
+ assert_equal(true, @subject.call(2001, @year_ranges))
101
+ end
102
+
103
+ def test_returns_error_if_limited_operator_and_bad_value
104
+ @year_ranges = {limited: "bad"}
105
+ assert_raises ArgumentError do
106
+ @subject.call(@year, @year_ranges)
107
+ end
108
+ end
109
+
110
+ def test_returns_error_if_limited_operator_with_empty_array
111
+ @year_ranges = {limited: []}
112
+ assert_raises ArgumentError do
113
+ @subject.call(@year, @year_ranges)
114
+ end
115
+ end
116
+
117
+ def test_returns_error_if_limited_operator_with_array_containing_non_integer_value
118
+ @year_ranges = {limited: ["bad"]}
119
+ assert_raises ArgumentError do
120
+ @subject.call(@year, @year_ranges)
121
+ end
122
+ end
123
+
124
+ def test_returns_true_if_limited_operator_and_value_is_number_that_matches_target
125
+ @year_ranges = {limited: [2002]}
126
+ assert_equal(true, @subject.call(2002, @year_ranges))
127
+ end
128
+
129
+ def test_returns_false_if_limited_operator_and_target_is_not_included
130
+ @year_ranges = {limited: [1998,2000]}
131
+ assert_equal(false, @subject.call(1997, @year_ranges))
132
+ assert_equal(false, @subject.call(1999, @year_ranges))
133
+ assert_equal(false, @subject.call(2002, @year_ranges))
134
+ end
135
+
136
+ def test_returns_true_if_limited_operator_and_target_is_included
137
+ @year_ranges = {limited: [1998, 2000, 2002]}
138
+ assert_equal(true, @subject.call(1998, @year_ranges))
139
+ assert_equal(true, @subject.call(2000, @year_ranges))
140
+ assert_equal(true, @subject.call(2002, @year_ranges))
141
+ end
142
+
143
+ def test_returns_error_if_between_operator_and_value_not_a_range
144
+ @year_ranges = {between: 2000}
145
+ assert_raises ArgumentError do
146
+ @subject.call(2003, @year_ranges)
147
+ end
148
+ end
149
+
150
+ def test_returns_false_if_between_operator_and_target_is_before
151
+ @year_ranges = {between: 1998..2002}
152
+ assert_equal(false, @subject.call(1997, @year_ranges))
153
+ end
154
+
155
+ def test_returns_true_if_between_operator_and_target_is_covered
156
+ @year_ranges = {between: 1998..2002}
157
+ assert_equal(true, @subject.call(1998, @year_ranges))
158
+ assert_equal(true, @subject.call(2000, @year_ranges))
159
+ assert_equal(true, @subject.call(2002, @year_ranges))
160
+ end
161
+
162
+ def test_returns_false_if_between_operator_and_target_is_after
163
+ @year_ranges = {between: 1998..2002}
164
+ assert_equal(false, @subject.call(2003, @year_ranges))
165
+ end
166
+ end
@@ -0,0 +1,9 @@
1
+ # Integration tests
2
+
3
+ These tests are dependent on the files in /definitions (and, by proxy, /lib/generated_definitions).
4
+ It is possible that these tests will break because of 'unrelated' definition changes. The code
5
+ behind these changes could still be good but since the definitions changed we could see failures.
6
+
7
+ These are not unit tests. This is not testing whether specific internal code is working. These are
8
+ tests from the consumer perspective. You must recognize that this could fail because of code
9
+ changes unrelated to definition changes.
@@ -0,0 +1,49 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
2
+
3
+ class AllRegionsTests < Test::Unit::TestCase
4
+ def setup
5
+ Holidays::LoadAllDefinitions.call
6
+ end
7
+
8
+ def test_definition_dir
9
+ assert File.directory?(Holidays::FULL_DEFINITIONS_PATH)
10
+ end
11
+
12
+ def test_show_available_regions
13
+ regions = Holidays.available_regions
14
+
15
+ assert_equal regions.size, Holidays::REGIONS.size
16
+ assert_equal regions, Holidays::REGIONS
17
+ end
18
+
19
+ def test_load_subregion
20
+ holidays = Holidays.on(Date.civil(2014, 1, 1), :de_bb)
21
+ assert holidays.any? { |h| h[:name] == 'Neujahrstag' }
22
+
23
+ holidays = Holidays.on(Date.civil(2020, 1, 1), :de_bb)
24
+ assert holidays.any? { |h| h[:name] == 'Neujahrstag' }
25
+
26
+ holidays = Holidays.on(Date.civil(2027, 1, 1), :de_bb)
27
+ assert holidays.any? { |h| h[:name] == 'Neujahrstag' }
28
+ end
29
+
30
+ def test_unknown_region_raises_exception
31
+ assert_raise Holidays::InvalidRegion do
32
+ Holidays.on(Date.civil(2014, 1, 1), :something_we_do_not_recognize)
33
+ end
34
+
35
+ assert_raise Holidays::InvalidRegion do
36
+ Holidays.on(Date.civil(2020, 1, 1), :something_we_do_not_recognize)
37
+ end
38
+
39
+ assert_raise Holidays::InvalidRegion do
40
+ Holidays.on(Date.civil(2030, 1, 1), :something_we_do_not_recognize)
41
+ end
42
+ end
43
+
44
+ def test_malicious_load_attempt_raises_exception
45
+ assert_raise Holidays::InvalidRegion do
46
+ Holidays.between(Date.civil(2014, 1, 1), Date.civil(2016, 1, 1), '../../../../../../../../../../../../tmp/profile_pic.jpg')
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,90 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
2
+
3
+ class AnyHolidaysDuringWorkWeekTests < Test::Unit::TestCase
4
+ def subject
5
+ Holidays.method(:any_holidays_during_work_week?)
6
+ end
7
+
8
+ def test_returns_true_when_single_holiday_exists_during_week
9
+ assert subject.call(Date.new(2018, 1, 1), :us)
10
+ end
11
+
12
+ def test_returns_true_when_multiple_holidays_exist_during_week
13
+ assert subject.call(Date.new(2018, 12, 26), :gb)
14
+ end
15
+
16
+ def test_returns_true_if_informal_flag_set_and_informal_holiday_exists_during_week
17
+ assert subject.call(Date.new(2018, 10, 31), :us, :informal)
18
+ end
19
+
20
+ def test_returns_true_when_no_region_specified_and_single_holiday_exists_during_week
21
+ assert subject.call(Date.new(2018, 1, 1))
22
+ end
23
+
24
+ def test_returns_true_if_both_informal_and_observed_flags_set_and_informal_holiday_observed_during_week
25
+ assert subject.call(Date.new(2008, 11, 30), :gb_sct, :informal, :observed)
26
+ end
27
+
28
+ def test_returns_true_when_observed_flag_set_and_holiday_is_observed_during_week
29
+ assert subject.call(Date.new(2012,9,5), :us, :observed)
30
+ end
31
+
32
+ def test_returns_true_when_observed_flag_set_and_holiday_is_observed_on_monday
33
+ assert subject.call(Date.new(2018,11,12), :us, :observed)
34
+ end
35
+
36
+ def test_returns_true_with_multiple_regions_and_holiday_occurs_during_week
37
+ assert subject.call(Date.new(2018,1,1), [:us, :gb])
38
+ end
39
+
40
+ def test_returns_true_when_observed_flag_set_and_holiday_on_saturday_but_observed_on_friday
41
+ assert subject.call(Date.new(2018,7,3), [:us], :observed)
42
+ end
43
+
44
+ def test_returns_false_when_no_holiday_exists_during_week
45
+ assert_equal false, subject.call(Date.new(2018,7,30), :us)
46
+ end
47
+
48
+ def test_returns_false_when_holiday_on_sunday
49
+ assert_equal false, subject.call(Date.new(2018,11,11), :us)
50
+ end
51
+
52
+ def test_returns_false_when_holiday_on_saturday
53
+ assert_equal false, subject.call(Date.new(2017,11,11), :us)
54
+ end
55
+
56
+ def test_returns_false_when_observed_flag_not_set_and_holiday_occurs_on_sunday_but_observed_on_monday
57
+ assert_equal false, subject.call(Date.new(2017,1,1), :us)
58
+ end
59
+
60
+ def test_returns_false_if_informal_and_observed_flags_both_set_and_no_holiday_exists_during_week
61
+ assert_equal false, subject.call(Date.new(2018,7,30), :us, :informal, :observed)
62
+ end
63
+
64
+ def test_returns_false_when_informal_flag_set_and_informal_holiday_occurs_on_weekend
65
+ assert_equal false, subject.call(Date.new(2018,4,14), :us, :informal)
66
+ end
67
+
68
+ def test_returns_false_when_informal_flag_set_but_observed_is_not_and_informal_holiday_is_observed_on_monday
69
+ assert_equal false, subject.call(Date.new(2008, 11, 30), :gb_sct, :informal)
70
+ end
71
+
72
+ def test_verify_count_of_weeks_without_any_holidays_for_2012
73
+ weeks_in_2012 = Date.commercial(2013, -1).cweek
74
+ holidays_in_2012 = weeks_in_2012.times.count { |week| subject.call(Date.commercial(2012,week+1), :us) == false }
75
+ assert_equal 45, holidays_in_2012
76
+ end
77
+
78
+ def test_returns_true_for_new_years_in_any_region
79
+ assert subject.call(Date.civil(2016, 1, 1))
80
+ end
81
+
82
+ # These are in response to https://github.com/holidays/holidays/issues/264, just to be completely sure it's fixed.
83
+ def returns_true_for_various_holidays_in_poland
84
+ assert subject.call(Date.civil(2018, 1, 1), :pl)
85
+ assert subject.call(Date.civil(2018, 1, 2), :pl)
86
+ assert subject.call(Date.civil(2018, 5, 2), :pl)
87
+ assert subject.call(Date.civil(2018, 5, 3), :pl)
88
+ assert subject.call(Date.today, Date.today + 365*2, :pl, :observed)
89
+ end
90
+ end
@@ -0,0 +1,23 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
2
+
3
+ class AvailableRegionsTests < Test::Unit::TestCase
4
+ def setup
5
+ @date = Date.civil(2008,1,1)
6
+ end
7
+
8
+ def test_available_regions_returns_array
9
+ assert Holidays.available_regions.is_a?(Array)
10
+ end
11
+
12
+ def test_available_regions_returns_array_of_symbols
13
+ Holidays.available_regions.each do |r|
14
+ assert r.is_a?(Symbol)
15
+ end
16
+ end
17
+
18
+ # This test might fail if we add new regions. Since this is an integration test
19
+ # I am fine with that!
20
+ def test_available_regions_returns_correct_number_of_regions
21
+ assert_equal 259, Holidays.available_regions.count
22
+ end
23
+ end
@@ -0,0 +1,41 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
2
+
3
+ class CustomHolidaysTest < Test::Unit::TestCase
4
+
5
+ def test_custom_region_present_after_single_file_parsing
6
+ assert_raises Holidays::InvalidRegion do
7
+ Holidays.on(Date.civil(2013,6,20), :custom_single_file)
8
+ end
9
+
10
+ Holidays.load_custom('test/data/test_single_custom_holiday_defs.yaml')
11
+
12
+ assert_not_equal [], Holidays.on(Date.civil(2013,6,20), :custom_single_file)
13
+ end
14
+
15
+ def test_load_custom_returns_loaded_holidays
16
+ expected_loaded_holidays = {6=>[{:mday=>20, :name=>"Company Founding", :regions=>[:custom_single_file]}]}
17
+
18
+ assert_equal expected_loaded_holidays, Holidays.load_custom('test/data/test_single_custom_holiday_defs.yaml')
19
+ end
20
+
21
+ def test_custom_holidays_present_after_multiple_file_parsing
22
+ assert_raises Holidays::InvalidRegion do
23
+ Holidays.on(Date.civil(2013, 10,5), :custom_multiple_files)
24
+ end
25
+
26
+ assert_raises Holidays::InvalidRegion do
27
+ Holidays.on(Date.civil(2013,3,1), :custom_multiple_files)
28
+ end
29
+
30
+ assert_raises Holidays::InvalidRegion do
31
+ Holidays.on(Date.civil(2013,3,1), :custom_multiple_files_govt)
32
+ end
33
+
34
+ Holidays.load_custom('test/data/test_multiple_custom_holiday_defs.yaml', 'test/data/test_custom_govt_holiday_defs.yaml')
35
+
36
+ assert_not_equal [], Holidays.on(Date.civil(2013,10,5), :custom_multiple_files)
37
+ assert_not_equal [], Holidays.on(Date.civil(2013,3,1), :custom_multiple_files)
38
+ assert_not_equal [], Holidays.on(Date.civil(2013,3,1), :custom_multiple_files_govt)
39
+ end
40
+
41
+ end
@@ -0,0 +1,15 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
2
+
3
+ class CustomHolidaysTest < Test::Unit::TestCase
4
+
5
+ def test_custom_region_informal_day_parsing
6
+ Holidays.load_custom('test/data/test_custom_informal_holidays_defs.yaml')
7
+
8
+ assert_not_equal [], Holidays.on(Date.new(2018,1,1), :custom_informal, :informal)
9
+ assert_equal [], Holidays.on(Date.new(2018,1,1), :custom_informal, :observed)
10
+
11
+ assert_not_equal [], Holidays.on(Date.new(2018,1,5), :custom_informal, :informal)
12
+ assert_equal [], Holidays.on(Date.new(2018,1,5), :custom_informal, :observed)
13
+ end
14
+
15
+ end
@@ -0,0 +1,35 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
2
+
3
+ class CustomYearRangeHolidaysTest < Test::Unit::TestCase
4
+
5
+ def test_after_year_feature
6
+ Holidays.load_custom('test/data/test_custom_year_range_holiday_defs.yaml')
7
+ assert_equal [], Holidays.on(Date.civil(2015,6,1), :custom_year_range_file)
8
+ assert_not_equal [], Holidays.on(Date.civil(2016,6,1), :custom_year_range_file)
9
+ end
10
+
11
+ def test_before_year_feature
12
+ Holidays.load_custom('test/data/test_custom_year_range_holiday_defs.yaml')
13
+ assert_not_equal [], Holidays.on(Date.civil(2017,6,2), :custom_year_range_file)
14
+ assert_equal [], Holidays.on(Date.civil(2018,6,2), :custom_year_range_file)
15
+ end
16
+
17
+ def test_between_year_feature
18
+ Holidays.load_custom('test/data/test_custom_year_range_holiday_defs.yaml')
19
+ assert_equal [], Holidays.on(Date.civil(2015,6,3), :custom_year_range_file)
20
+ assert_not_equal [], Holidays.on(Date.civil(2016,6,3), :custom_year_range_file)
21
+ assert_not_equal [], Holidays.on(Date.civil(2017,6,3), :custom_year_range_file)
22
+ assert_not_equal [], Holidays.on(Date.civil(2018,6,3), :custom_year_range_file)
23
+ assert_equal [], Holidays.on(Date.civil(2019,6,3), :custom_year_range_file)
24
+ end
25
+
26
+ def test_limited_year_feature
27
+ Holidays.load_custom('test/data/test_custom_year_range_holiday_defs.yaml')
28
+ assert_equal [], Holidays.on(Date.civil(2015,6,4), :custom_year_range_file)
29
+ assert_not_equal [], Holidays.on(Date.civil(2016,6,4), :custom_year_range_file)
30
+ assert_equal [], Holidays.on(Date.civil(2017,6,4), :custom_year_range_file)
31
+ assert_not_equal [], Holidays.on(Date.civil(2018,6,4), :custom_year_range_file)
32
+ assert_not_equal [], Holidays.on(Date.civil(2019,6,4), :custom_year_range_file)
33
+ assert_equal [], Holidays.on(Date.civil(2020,6,4), :custom_year_range_file)
34
+ end
35
+ end
@@ -0,0 +1,243 @@
1
+ # encoding: utf-8
2
+ require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
3
+
4
+ class HolidaysTests < Test::Unit::TestCase
5
+ def setup
6
+ @date = Date.civil(2008,1,1)
7
+ end
8
+
9
+ def test_on
10
+ h = Holidays.on(Date.civil(2008,9,1), :ca)
11
+ assert_equal 'Labour Day', h[0][:name]
12
+
13
+ holidays = Holidays.on(Date.civil(2008,7,4), :ca)
14
+ assert_equal 0, holidays.length
15
+ end
16
+
17
+ def test_requires_valid_regions
18
+ assert_raises Holidays::InvalidRegion do
19
+ Holidays.on(Date.civil(2008,1,1), :xx)
20
+ end
21
+
22
+ assert_raises Holidays::InvalidRegion do
23
+ Holidays.on(Date.civil(2008,1,1), [:ca,:xx])
24
+ end
25
+
26
+ assert_raises Holidays::InvalidRegion do
27
+ Holidays.between(Date.civil(2008,1,1), Date.civil(2008,12,31), [:ca,:xx])
28
+ end
29
+ end
30
+
31
+ def test_requires_valid_regions_holiday_next
32
+ assert_raises Holidays::InvalidRegion do
33
+ Holidays.next_holidays(1, [:xx], Date.civil(2008,1,1))
34
+ end
35
+
36
+ assert_raises Holidays::InvalidRegion do
37
+ Holidays.next_holidays(1, [:ca,:xx], Date.civil(2008,1,1))
38
+ Holidays.on(Date.civil(2008,1,1), [:ca,:xx])
39
+ end
40
+
41
+ assert_raises Holidays::InvalidRegion do
42
+ Holidays.next_holidays(1, [:ca,:xx])
43
+ end
44
+ end
45
+
46
+ def test_region_params
47
+ holidays = Holidays.on(@date, :ca)
48
+ assert_equal 1, holidays.length
49
+
50
+ holidays = Holidays.on(@date, [:ca_bc,:ca])
51
+ assert_equal 1, holidays.length
52
+ end
53
+
54
+ def test_observed_dates
55
+ # Should fall on Tuesday the 1st
56
+ assert_equal 1, Holidays.on(Date.civil(2008,7,1), :ca, :observed).length
57
+
58
+ # Should fall on Monday the 2nd
59
+ assert_equal 1, Holidays.on(Date.civil(2007,7,2), :ca, :observed).length
60
+ end
61
+
62
+ def test_any_region
63
+ # Should return nothing(Victoria Day is not celebrated :ca wide anymore)
64
+ holidays = Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31), :ca)
65
+ assert_equal 0, holidays.length
66
+
67
+ # Should return Victoria Day and National Patriotes Day.
68
+ #
69
+ # Should be 2 in the CA region but other regional files are loaded during the
70
+ # unit tests add to the :any count.
71
+ holidays = Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31), [:any])
72
+ assert holidays.length >= 2
73
+
74
+ # Test blank region
75
+ holidays = Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31))
76
+ assert holidays.length >= 3
77
+ end
78
+
79
+ def test_any_region_holiday_next
80
+ # Should return Victoria Day.
81
+ holidays = Holidays.next_holidays(1, [:ca], Date.civil(2008,5,1))
82
+ assert_equal 1, holidays.length
83
+ assert_equal ['2008-07-01','Canada Day'] , [holidays.first[:date].to_s, holidays.first[:name].to_s]
84
+
85
+ # Should return 2 holidays.
86
+ holidays = Holidays.next_holidays(2, [:ca], Date.civil(2008,5,1))
87
+ assert_equal 2, holidays.length
88
+
89
+ # Should return 1 holiday in July
90
+ holidays = Holidays.next_holidays(1, [:jp], Date.civil(2016, 5, 22))
91
+ assert_equal ['2016-07-18','海の日'] , [holidays.first[:date].to_s, holidays.first[:name].to_s]
92
+
93
+ # Must Region.If there is not region, raise ArgumentError.
94
+ assert_raises ArgumentError do
95
+ Holidays.next_holidays(2, '', Date.civil(2008,5,1))
96
+ end
97
+ # Options should be present.If they are empty, raise ArgumentError.
98
+ assert_raises ArgumentError do
99
+ Holidays.next_holidays(2, [], Date.civil(2008,5,1))
100
+ end
101
+ # Options should be Array.If they are not Array, raise ArgumentError.
102
+ assert_raises ArgumentError do
103
+ Holidays.next_holidays(2, :ca, Date.civil(2008,5,1))
104
+ end
105
+ end
106
+
107
+ def test_year_holidays
108
+ # Should return 7 holidays from February 23 to December 31
109
+ holidays = Holidays.year_holidays([:ca_on], Date.civil(2016, 2, 23))
110
+ assert_equal 7, holidays.length
111
+
112
+ # Must have options (Regions)
113
+ assert_raises ArgumentError do
114
+ Holidays.year_holidays([], Date.civil(2016, 2, 23))
115
+ end
116
+
117
+ # Options must be in the form of an array.
118
+ assert_raises ArgumentError do
119
+ Holidays.year_holidays(:ca_on, Date.civil(2016, 2, 23))
120
+ end
121
+ end
122
+
123
+ def test_year_holidays_with_specified_year
124
+ # Should return all 11 holidays for 2016 in Ontario, Canada
125
+ holidays = Holidays.year_holidays([:ca_on], Date.civil(2016, 1, 1))
126
+ assert_equal 9, holidays.length
127
+
128
+ # Should return all 5 holidays for 2016 in Australia
129
+ holidays = Holidays.year_holidays([:au], Date.civil(2016, 1, 1))
130
+ assert_equal 5, holidays.length
131
+ end
132
+
133
+ def test_year_holidays_empty
134
+ # if remain holidays is nothing , method will return empty.
135
+ holidays = Holidays.year_holidays([:ca_on], Date.civil(2016, 12, 27))
136
+ assert_empty holidays
137
+ end
138
+
139
+ def test_year_holidays_random_years
140
+ # Should be 1 less holiday, as Family day didn't exist in Ontario in 1990
141
+ holidays = Holidays.year_holidays([:ca_on], Date.civil(1990, 1, 1))
142
+ assert_equal 8, holidays.length
143
+
144
+ # Family day still didn't exist in 2000
145
+ holidays = Holidays.year_holidays([:ca_on], Date.civil(2000, 1, 1))
146
+ assert_equal 8, holidays.length
147
+
148
+ holidays = Holidays.year_holidays([:ca_on], Date.civil(2020, 1, 1))
149
+ assert_equal 11, holidays.length
150
+
151
+ holidays = Holidays.year_holidays([:ca_on], Date.civil(2050, 1, 1))
152
+ assert_equal 9, holidays.length
153
+
154
+ holidays = Holidays.year_holidays([:jp], Date.civil(2070, 1, 1))
155
+ assert_equal 19, holidays.length
156
+ end
157
+
158
+ def test_sub_regions
159
+ # Should return nothing (Victoria Day is no longer :ca wide)
160
+ holidays = Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31), :ca)
161
+ assert_equal 0, holidays.length
162
+
163
+ ## Should return National Patriotes Day.
164
+ holidays = Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31), :ca_qc)
165
+ assert_equal 1, holidays.length
166
+
167
+ # Should return Victoria Day and National Patriotes Day.
168
+ holidays = Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31), :ca_)
169
+ assert_equal 3, holidays.length
170
+ end
171
+
172
+ def test_sub_regions_holiday_next
173
+ # Should return Victoria Day.
174
+ holidays = Holidays.next_holidays(2, [:ca_bc], Date.civil(2008,5,1))
175
+ assert_equal 2, holidays.length
176
+ assert_equal ['2008-05-19','Victoria Day'] , [holidays.first[:date].to_s, holidays.first[:name].to_s]
177
+
178
+ # Should return Victoria Da and National Patriotes Day.
179
+ holidays = Holidays.next_holidays(2, [:ca_qc], Date.civil(2008,5,1))
180
+ assert_equal 2, holidays.length
181
+ assert_equal ['2008-06-24','Fête Nationale'] , [holidays.last[:date].to_s, holidays.last[:name].to_s]
182
+
183
+ # Should return Victoria Day and National Patriotes Day.
184
+ holidays = Holidays.next_holidays(2, [:ca_], Date.civil(2008,5,1))
185
+ assert_equal 2, holidays.length
186
+
187
+ # Aparently something in jruby doesn't sort the same way as other rubies so....we'll just do it ourselves so
188
+ # we don't flap.
189
+ sorted_holidays = holidays.sort_by { |h| h[:name] }
190
+ assert_equal ['2008-05-19','National Patriotes Day'] , [sorted_holidays.first[:date].to_s, sorted_holidays.first[:name].to_s]
191
+ assert_equal ['2008-05-19','Victoria Day'] , [sorted_holidays.last[:date].to_s, sorted_holidays.last[:name].to_s]
192
+ end
193
+
194
+ def test_easter_lambda
195
+ [Date.civil(1800,4,11), Date.civil(1899,3,31), Date.civil(1900,4,13),
196
+ Date.civil(2008,3,21), Date.civil(2035,3,23)].each do |date|
197
+ assert_equal 'Good Friday', Holidays.on(date, :ca)[0][:name]
198
+ end
199
+
200
+ [Date.civil(1800,4,14), Date.civil(1899,4,3), Date.civil(1900,4,16),
201
+ Date.civil(2008,3,24), Date.civil(2035,3,26)].each do |date|
202
+ assert_equal 'Easter Monday', Holidays.on(date, :ca_qc, :informal)[0][:name]
203
+ end
204
+ end
205
+
206
+ def test_sorting
207
+ (1..10).each{|year|
208
+ (1..12).each{|month|
209
+ holidays = Holidays.between(Date.civil(year, month, 1), Date.civil(year, month, 28), :gb_)
210
+ holidays.each_with_index{|holiday, index|
211
+ assert holiday[:date] >= holidays[index - 1][:date] if index > 0
212
+ }
213
+ }
214
+ }
215
+ end
216
+
217
+ def test_caching
218
+ good_friday = Date.civil(2008, 3, 21)
219
+ easter_monday = Date.civil(2008, 3, 24)
220
+ cache_end_date = Date.civil(2008, 3, 25)
221
+
222
+ Holidays.cache_between(good_friday, cache_end_date, :ca, :informal)
223
+
224
+ # Test that correct results are returned outside the
225
+ # cache range, and with no caching
226
+ assert_equal 1, Holidays.on(Date.civil(2035, 1, 1), :ca, :informal).length
227
+ assert_equal 1, Holidays.on(Date.civil(2035, 1, 1), :us).length
228
+
229
+ # Make sure cache is hit for all successive calls
230
+ Holidays::Factory::Finder.expects(:between).never
231
+
232
+ # Test that cache has been set and it returns the same as before
233
+ assert_equal 1, Holidays.on(good_friday, :ca, :informal).length
234
+ assert_equal 1, Holidays.on(easter_monday, :ca, :informal).length
235
+ assert_equal 1, easter_monday.holidays(:ca, :informal).length
236
+ assert_equal true, easter_monday.holiday?(:ca, :informal)
237
+ end
238
+
239
+ def test_load_all
240
+ Holidays.load_all
241
+ assert_equal 259, Holidays.available_regions.count
242
+ end
243
+ end