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.
- checksums.yaml +7 -0
- data/.github/workflows/ruby.yml +25 -0
- data/CHANGELOG.md +446 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +3 -0
- data/LICENSE +21 -0
- data/Makefile +45 -0
- data/README.md +337 -0
- data/Rakefile +109 -0
- data/bin/console +7 -0
- data/bin/setup +6 -0
- data/definitions/.github/workflows/ruby.yml +25 -0
- data/definitions/.gitignore +5 -0
- data/definitions/CHANGELOG.md +352 -0
- data/definitions/Gemfile +6 -0
- data/definitions/LICENSE +21 -0
- data/definitions/METHODS.yml +26 -0
- data/definitions/Makefile +9 -0
- data/definitions/README.md +22 -0
- data/definitions/ar.yaml +268 -0
- data/definitions/at.yaml +116 -0
- data/definitions/au.yaml +907 -0
- data/definitions/be_fr.yaml +153 -0
- data/definitions/be_nl.yaml +153 -0
- data/definitions/bg.yaml +186 -0
- data/definitions/br.yaml +178 -0
- data/definitions/ca.yaml +969 -0
- data/definitions/ch.yaml +277 -0
- data/definitions/cl.yaml +294 -0
- data/definitions/co.yaml +437 -0
- data/definitions/cr.yaml +100 -0
- data/definitions/cz.yaml +137 -0
- data/definitions/de.yaml +401 -0
- data/definitions/dk.yaml +220 -0
- data/definitions/doc/CONTRIBUTING.md +44 -0
- data/definitions/doc/MAINTAINERS.md +39 -0
- data/definitions/doc/SYNTAX.md +435 -0
- data/definitions/doc/architecture/README.md +15 -0
- data/definitions/doc/architecture/adr-001.md +86 -0
- data/definitions/doc/architecture/adr-002.md +64 -0
- data/definitions/ecbtarget.yaml +74 -0
- data/definitions/ee.yaml +123 -0
- data/definitions/es.yaml +495 -0
- data/definitions/federalreserve.yaml +389 -0
- data/definitions/federalreservebanks.yaml +821 -0
- data/definitions/fedex.yaml +102 -0
- data/definitions/fi.yaml +234 -0
- data/definitions/fr.yaml +157 -0
- data/definitions/gb.yaml +565 -0
- data/definitions/ge.yaml +158 -0
- data/definitions/gr.yaml +158 -0
- data/definitions/hk.yaml +287 -0
- data/definitions/hr.yaml +171 -0
- data/definitions/hu.yaml +156 -0
- data/definitions/ie.yaml +172 -0
- data/definitions/index.yaml +80 -0
- data/definitions/is.yaml +247 -0
- data/definitions/it.yaml +246 -0
- data/definitions/jp.yaml +761 -0
- data/definitions/ke.yaml +107 -0
- data/definitions/kr.yaml +166 -0
- data/definitions/kz.yaml +128 -0
- data/definitions/li.yaml +154 -0
- data/definitions/lib/validation/custom_method_validator.rb +38 -0
- data/definitions/lib/validation/definition_validator.rb +35 -0
- data/definitions/lib/validation/error.rb +11 -0
- data/definitions/lib/validation/month_validator.rb +58 -0
- data/definitions/lib/validation/run.rb +66 -0
- data/definitions/lib/validation/test_validator.rb +83 -0
- data/definitions/lt.yaml +198 -0
- data/definitions/lu.yaml +123 -0
- data/definitions/lv.yaml +229 -0
- data/definitions/ma.yaml +96 -0
- data/definitions/mt_en.yaml +131 -0
- data/definitions/mt_mt.yaml +131 -0
- data/definitions/mx.yaml +160 -0
- data/definitions/my.yaml +79 -0
- data/definitions/nerc.yaml +94 -0
- data/definitions/ng.yaml +97 -0
- data/definitions/nl.yaml +127 -0
- data/definitions/no.yaml +169 -0
- data/definitions/northamericainformal.yaml +105 -0
- data/definitions/nyse.yaml +137 -0
- data/definitions/nz.yaml +346 -0
- data/definitions/pe.yaml +208 -0
- data/definitions/ph.yaml +130 -0
- data/definitions/pl.yaml +796 -0
- data/definitions/pt.yaml +187 -0
- data/definitions/ro.yaml +240 -0
- data/definitions/rs_cyrl.yaml +129 -0
- data/definitions/rs_la.yaml +129 -0
- data/definitions/ru.yaml +108 -0
- data/definitions/se.yaml +238 -0
- data/definitions/sg.yaml +89 -0
- data/definitions/si.yaml +162 -0
- data/definitions/sk.yaml +154 -0
- data/definitions/spec/coverage_report.rb +7 -0
- data/definitions/spec/data/invalid/months/malformed/bad.yaml +15 -0
- data/definitions/spec/data/invalid/months/missing/no_months.yaml +9 -0
- data/definitions/spec/data/valid/simple.yaml +15 -0
- data/definitions/spec/spec_helper.rb +7 -0
- data/definitions/spec/validation/custom_method_validator_spec.rb +60 -0
- data/definitions/spec/validation/definition_validator_spec.rb +43 -0
- data/definitions/spec/validation/month_validator_spec.rb +175 -0
- data/definitions/spec/validation/test_validator_spec.rb +169 -0
- data/definitions/th.yaml +111 -0
- data/definitions/tn.yaml +83 -0
- data/definitions/tr.yaml +174 -0
- data/definitions/ua.yaml +161 -0
- data/definitions/unitednations.yaml +189 -0
- data/definitions/ups.yaml +102 -0
- data/definitions/us.yaml +965 -0
- data/definitions/ve.yaml +118 -0
- data/definitions/vi.yaml +54 -0
- data/definitions/za.yaml +139 -0
- data/doc/CONTRIBUTING.md +72 -0
- data/doc/MAINTAINERS.md +81 -0
- data/doc/REFERENCES +19 -0
- data/lib/generated_definitions/MANIFEST +83 -0
- data/lib/generated_definitions/REGIONS.rb +6 -0
- data/lib/generated_definitions/ar.rb +60 -0
- data/lib/generated_definitions/at.rb +37 -0
- data/lib/generated_definitions/au.rb +177 -0
- data/lib/generated_definitions/be.rb +42 -0
- data/lib/generated_definitions/be_fr.rb +36 -0
- data/lib/generated_definitions/be_nl.rb +36 -0
- data/lib/generated_definitions/bg.rb +53 -0
- data/lib/generated_definitions/br.rb +37 -0
- data/lib/generated_definitions/ca.rb +88 -0
- data/lib/generated_definitions/ch.rb +95 -0
- data/lib/generated_definitions/cl.rb +71 -0
- data/lib/generated_definitions/co.rb +121 -0
- data/lib/generated_definitions/cr.rb +35 -0
- data/lib/generated_definitions/cz.rb +37 -0
- data/lib/generated_definitions/de.rb +65 -0
- data/lib/generated_definitions/dk.rb +48 -0
- data/lib/generated_definitions/ecbtarget.rb +30 -0
- data/lib/generated_definitions/ee.rb +36 -0
- data/lib/generated_definitions/el.rb +38 -0
- data/lib/generated_definitions/es.rb +56 -0
- data/lib/generated_definitions/europe.rb +638 -0
- data/lib/generated_definitions/federalreserve.rb +35 -0
- data/lib/generated_definitions/federalreservebanks.rb +35 -0
- data/lib/generated_definitions/fedex.rb +36 -0
- data/lib/generated_definitions/fi.rb +61 -0
- data/lib/generated_definitions/fr.rb +39 -0
- data/lib/generated_definitions/gb.rb +51 -0
- data/lib/generated_definitions/ge.rb +41 -0
- data/lib/generated_definitions/gr.rb +38 -0
- data/lib/generated_definitions/hk.rb +106 -0
- data/lib/generated_definitions/hr.rb +40 -0
- data/lib/generated_definitions/hu.rb +35 -0
- data/lib/generated_definitions/ie.rb +33 -0
- data/lib/generated_definitions/is.rb +60 -0
- data/lib/generated_definitions/it.rb +45 -0
- data/lib/generated_definitions/jp.rb +166 -0
- data/lib/generated_definitions/ke.rb +34 -0
- data/lib/generated_definitions/kr.rb +40 -0
- data/lib/generated_definitions/kz.rb +38 -0
- data/lib/generated_definitions/li.rb +44 -0
- data/lib/generated_definitions/lt.rb +38 -0
- data/lib/generated_definitions/lu.rb +35 -0
- data/lib/generated_definitions/lv.rb +56 -0
- data/lib/generated_definitions/ma.rb +33 -0
- data/lib/generated_definitions/mt_en.rb +38 -0
- data/lib/generated_definitions/mt_mt.rb +38 -0
- data/lib/generated_definitions/mx.rb +54 -0
- data/lib/generated_definitions/my.rb +30 -0
- data/lib/generated_definitions/nerc.rb +30 -0
- data/lib/generated_definitions/ng.rb +33 -0
- data/lib/generated_definitions/nl.rb +37 -0
- data/lib/generated_definitions/no.rb +40 -0
- data/lib/generated_definitions/northamerica.rb +229 -0
- data/lib/generated_definitions/nyse.rb +34 -0
- data/lib/generated_definitions/nz.rb +105 -0
- data/lib/generated_definitions/pe.rb +43 -0
- data/lib/generated_definitions/ph.rb +50 -0
- data/lib/generated_definitions/pl.rb +73 -0
- data/lib/generated_definitions/pt.rb +40 -0
- data/lib/generated_definitions/ro.rb +39 -0
- data/lib/generated_definitions/rs_cyrl.rb +39 -0
- data/lib/generated_definitions/rs_la.rb +39 -0
- data/lib/generated_definitions/ru.rb +37 -0
- data/lib/generated_definitions/scandinavia.rb +166 -0
- data/lib/generated_definitions/se.rb +53 -0
- data/lib/generated_definitions/sg.rb +31 -0
- data/lib/generated_definitions/si.rb +39 -0
- data/lib/generated_definitions/sk.rb +39 -0
- data/lib/generated_definitions/southamerica.rb +248 -0
- data/lib/generated_definitions/th.rb +36 -0
- data/lib/generated_definitions/tn.rb +32 -0
- data/lib/generated_definitions/tr.rb +64 -0
- data/lib/generated_definitions/ua.rb +37 -0
- data/lib/generated_definitions/unitednations.rb +81 -0
- data/lib/generated_definitions/ups.rb +36 -0
- data/lib/generated_definitions/us.rb +153 -0
- data/lib/generated_definitions/ve.rb +36 -0
- data/lib/generated_definitions/vi.rb +29 -0
- data/lib/generated_definitions/za.rb +36 -0
- data/lib/holidays/core_extensions/date.rb +57 -0
- data/lib/holidays/core_extensions/time.rb +23 -0
- data/lib/holidays/date_calculator/day_of_month.rb +68 -0
- data/lib/holidays/date_calculator/easter.rb +91 -0
- data/lib/holidays/date_calculator/lunar_date.rb +371 -0
- data/lib/holidays/date_calculator/weekend_modifier.rb +80 -0
- data/lib/holidays/definition/context/function_processor.rb +91 -0
- data/lib/holidays/definition/context/generator.rb +209 -0
- data/lib/holidays/definition/context/load.rb +29 -0
- data/lib/holidays/definition/context/merger.rb +22 -0
- data/lib/holidays/definition/decorator/custom_method_proc.rb +28 -0
- data/lib/holidays/definition/decorator/custom_method_source.rb +30 -0
- data/lib/holidays/definition/decorator/test.rb +37 -0
- data/lib/holidays/definition/entity/custom_method.rb +11 -0
- data/lib/holidays/definition/entity/test.rb +11 -0
- data/lib/holidays/definition/generator/module.rb +54 -0
- data/lib/holidays/definition/generator/regions.rb +55 -0
- data/lib/holidays/definition/generator/test.rb +51 -0
- data/lib/holidays/definition/parser/custom_method.rb +67 -0
- data/lib/holidays/definition/parser/test.rb +86 -0
- data/lib/holidays/definition/repository/cache.rb +47 -0
- data/lib/holidays/definition/repository/custom_methods.rb +27 -0
- data/lib/holidays/definition/repository/holidays_by_month.rb +57 -0
- data/lib/holidays/definition/repository/proc_result_cache.rb +51 -0
- data/lib/holidays/definition/repository/regions.rb +46 -0
- data/lib/holidays/definition/validator/custom_method.rb +31 -0
- data/lib/holidays/definition/validator/region.rb +36 -0
- data/lib/holidays/definition/validator/test.rb +71 -0
- data/lib/holidays/errors.rb +11 -0
- data/lib/holidays/factory/date_calculator.rb +42 -0
- data/lib/holidays/factory/definition.rb +143 -0
- data/lib/holidays/factory/finder.rb +70 -0
- data/lib/holidays/finder/context/between.rb +45 -0
- data/lib/holidays/finder/context/dates_driver_builder.rb +64 -0
- data/lib/holidays/finder/context/next_holiday.rb +57 -0
- data/lib/holidays/finder/context/parse_options.rb +104 -0
- data/lib/holidays/finder/context/search.rb +111 -0
- data/lib/holidays/finder/context/year_holiday.rb +57 -0
- data/lib/holidays/finder/rules/in_region.rb +31 -0
- data/lib/holidays/finder/rules/year_range.rb +58 -0
- data/lib/holidays/load_all_definitions.rb +56 -0
- data/lib/holidays/version.rb +3 -0
- data/lib/holidays.rb +130 -0
- data/lib/revised_holidays.rb +1 -0
- data/revised_holidays.gemspec +31 -0
- data/test/coverage_report.rb +26 -0
- data/test/data/test_custom_govt_holiday_defs.yaml +5 -0
- data/test/data/test_custom_informal_holidays_defs.yaml +11 -0
- data/test/data/test_custom_year_range_holiday_defs.yaml +31 -0
- data/test/data/test_invalid_region.rb +15 -0
- data/test/data/test_multiple_custom_holiday_defs.yaml +12 -0
- data/test/data/test_multiple_regions_with_conflicts_region_1.yaml +38 -0
- data/test/data/test_multiple_regions_with_conflicts_region_2.yaml +38 -0
- data/test/data/test_region.rb +15 -0
- data/test/data/test_single_custom_holiday_defs.yaml +12 -0
- data/test/data/test_single_custom_holiday_with_custom_procs.yaml +28 -0
- data/test/defs/test_defs_ar.rb +69 -0
- data/test/defs/test_defs_at.rb +31 -0
- data/test/defs/test_defs_au.rb +233 -0
- data/test/defs/test_defs_be_fr.rb +45 -0
- data/test/defs/test_defs_be_nl.rb +45 -0
- data/test/defs/test_defs_bg.rb +41 -0
- data/test/defs/test_defs_br.rb +49 -0
- data/test/defs/test_defs_ca.rb +289 -0
- data/test/defs/test_defs_ch.rb +51 -0
- data/test/defs/test_defs_cl.rb +69 -0
- data/test/defs/test_defs_co.rb +113 -0
- data/test/defs/test_defs_cr.rb +29 -0
- data/test/defs/test_defs_cz.rb +37 -0
- data/test/defs/test_defs_de.rb +89 -0
- data/test/defs/test_defs_dk.rb +47 -0
- data/test/defs/test_defs_ecbtarget.rb +27 -0
- data/test/defs/test_defs_ee.rb +41 -0
- data/test/defs/test_defs_es.rb +137 -0
- data/test/defs/test_defs_europe.rb +1522 -0
- data/test/defs/test_defs_fed_ex.rb +24 -0
- data/test/defs/test_defs_federalreserve.rb +119 -0
- data/test/defs/test_defs_federalreservebanks.rb +251 -0
- data/test/defs/test_defs_fedex.rb +31 -0
- data/test/defs/test_defs_fi.rb +59 -0
- data/test/defs/test_defs_fr.rb +43 -0
- data/test/defs/test_defs_gb.rb +159 -0
- data/test/defs/test_defs_ge.rb +53 -0
- data/test/defs/test_defs_gr.rb +41 -0
- data/test/defs/test_defs_hk.rb +59 -0
- data/test/defs/test_defs_hr.rb +45 -0
- data/test/defs/test_defs_hu.rb +47 -0
- data/test/defs/test_defs_ie.rb +53 -0
- data/test/defs/test_defs_is.rb +51 -0
- data/test/defs/test_defs_it.rb +55 -0
- data/test/defs/test_defs_jp.rb +159 -0
- data/test/defs/test_defs_ke.rb +31 -0
- data/test/defs/test_defs_kr.rb +37 -0
- data/test/defs/test_defs_kz.rb +39 -0
- data/test/defs/test_defs_li.rb +35 -0
- data/test/defs/test_defs_lt.rb +65 -0
- data/test/defs/test_defs_lu.rb +35 -0
- data/test/defs/test_defs_lv.rb +98 -0
- data/test/defs/test_defs_ma.rb +29 -0
- data/test/defs/test_defs_mt_en.rb +41 -0
- data/test/defs/test_defs_mt_mt.rb +41 -0
- data/test/defs/test_defs_mx.rb +49 -0
- data/test/defs/test_defs_my.rb +23 -0
- data/test/defs/test_defs_nerc.rb +29 -0
- data/test/defs/test_defs_ng.rb +29 -0
- data/test/defs/test_defs_nl.rb +33 -0
- data/test/defs/test_defs_no.rb +43 -0
- data/test/defs/test_defs_northamerica.rb +667 -0
- data/test/defs/test_defs_nyse.rb +46 -0
- data/test/defs/test_defs_nz.rb +67 -0
- data/test/defs/test_defs_pe.rb +47 -0
- data/test/defs/test_defs_ph.rb +29 -0
- data/test/defs/test_defs_pl.rb +229 -0
- data/test/defs/test_defs_pt.rb +47 -0
- data/test/defs/test_defs_ro.rb +65 -0
- data/test/defs/test_defs_rs_cyrl.rb +46 -0
- data/test/defs/test_defs_rs_la.rb +46 -0
- data/test/defs/test_defs_ru.rb +34 -0
- data/test/defs/test_defs_scandinavia.rb +215 -0
- data/test/defs/test_defs_se.rb +59 -0
- data/test/defs/test_defs_sg.rb +25 -0
- data/test/defs/test_defs_si.rb +105 -0
- data/test/defs/test_defs_sk.rb +41 -0
- data/test/defs/test_defs_southamerica.rb +327 -0
- data/test/defs/test_defs_th.rb +33 -0
- data/test/defs/test_defs_tn.rb +27 -0
- data/test/defs/test_defs_tr.rb +60 -0
- data/test/defs/test_defs_ua.rb +41 -0
- data/test/defs/test_defs_unitednations.rb +11 -0
- data/test/defs/test_defs_ups.rb +31 -0
- data/test/defs/test_defs_us.rb +387 -0
- data/test/defs/test_defs_ve.rb +35 -0
- data/test/defs/test_defs_vi.rb +22 -0
- data/test/defs/test_defs_za.rb +35 -0
- data/test/holidays/core_extensions/test_date.rb +122 -0
- data/test/holidays/core_extensions/test_date_time.rb +60 -0
- data/test/holidays/date_calculator/test_day_of_month.rb +27 -0
- data/test/holidays/date_calculator/test_easter_gregorian.rb +30 -0
- data/test/holidays/date_calculator/test_easter_julian.rb +36 -0
- data/test/holidays/date_calculator/test_lunar_date.rb +89 -0
- data/test/holidays/date_calculator/test_weekend_modifier.rb +54 -0
- data/test/holidays/definition/context/test_function_processor.rb +199 -0
- data/test/holidays/definition/context/test_generator.rb +226 -0
- data/test/holidays/definition/context/test_load.rb +37 -0
- data/test/holidays/definition/context/test_merger.rb +25 -0
- data/test/holidays/definition/decorator/test_custom_method_proc.rb +113 -0
- data/test/holidays/definition/decorator/test_custom_method_source.rb +96 -0
- data/test/holidays/definition/decorator/test_test.rb +123 -0
- data/test/holidays/definition/generator/test_module.rb +268 -0
- data/test/holidays/definition/generator/test_regions.rb +97 -0
- data/test/holidays/definition/generator/test_test.rb +113 -0
- data/test/holidays/definition/parser/test_custom_method.rb +79 -0
- data/test/holidays/definition/parser/test_test.rb +142 -0
- data/test/holidays/definition/repository/test_cache.rb +123 -0
- data/test/holidays/definition/repository/test_custom_methods.rb +43 -0
- data/test/holidays/definition/repository/test_holidays_by_month.rb +275 -0
- data/test/holidays/definition/repository/test_proc_result_cache.rb +91 -0
- data/test/holidays/definition/repository/test_regions.rb +104 -0
- data/test/holidays/definition/validator/test_custom_method.rb +94 -0
- data/test/holidays/definition/validator/test_region.rb +54 -0
- data/test/holidays/definition/validator/test_test.rb +60 -0
- data/test/holidays/finder/context/test_between.rb +172 -0
- data/test/holidays/finder/context/test_dates_driver_builder.rb +91 -0
- data/test/holidays/finder/context/test_next_holiday.rb +156 -0
- data/test/holidays/finder/context/test_parse_options.rb +141 -0
- data/test/holidays/finder/context/test_search.rb +232 -0
- data/test/holidays/finder/context/test_year_holiday.rb +202 -0
- data/test/holidays/finder/rules/test_in_region.rb +42 -0
- data/test/holidays/finder/rules/test_year_range.rb +166 -0
- data/test/integration/README.md +9 -0
- data/test/integration/test_all_regions.rb +49 -0
- data/test/integration/test_any_holidays_during_work_week.rb +90 -0
- data/test/integration/test_available_regions.rb +23 -0
- data/test/integration/test_custom_holidays.rb +41 -0
- data/test/integration/test_custom_informal_holidays.rb +15 -0
- data/test/integration/test_custom_year_range_holidays.rb +35 -0
- data/test/integration/test_holidays.rb +243 -0
- data/test/integration/test_holidays_between.rb +87 -0
- data/test/integration/test_multiple_regions.rb +71 -0
- data/test/integration/test_multiple_regions_with_conflict.rb +29 -0
- data/test/integration/test_nonstandard_regions.rb +25 -0
- data/test/test_helper.rb +37 -0
- 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
|