holidays 5.4.0 → 5.5.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 +4 -4
- data/CHANGELOG.md +15 -0
- data/Makefile +1 -1
- data/README.md +6 -6
- data/Rakefile +7 -8
- data/lib/generated_definitions/REGIONS.rb +3 -1
- data/lib/generated_definitions/ar.rb +0 -6
- data/lib/generated_definitions/at.rb +0 -6
- data/lib/generated_definitions/au.rb +6 -9
- data/lib/generated_definitions/be_fr.rb +0 -6
- data/lib/generated_definitions/be_nl.rb +0 -6
- data/lib/generated_definitions/bg.rb +0 -6
- data/lib/generated_definitions/br.rb +0 -6
- data/lib/generated_definitions/ca.rb +0 -6
- data/lib/generated_definitions/ch.rb +0 -6
- data/lib/generated_definitions/cl.rb +0 -6
- data/lib/generated_definitions/cr.rb +0 -6
- data/lib/generated_definitions/cz.rb +0 -6
- data/lib/generated_definitions/de.rb +0 -6
- data/lib/generated_definitions/dk.rb +0 -6
- data/lib/generated_definitions/ecb_target.rb +0 -6
- data/lib/generated_definitions/el.rb +0 -6
- data/lib/generated_definitions/es.rb +0 -6
- data/lib/generated_definitions/europe.rb +0 -6
- data/lib/generated_definitions/federal_reserve.rb +0 -6
- data/lib/generated_definitions/fedex.rb +0 -6
- data/lib/generated_definitions/fi.rb +0 -6
- data/lib/generated_definitions/fr.rb +0 -6
- data/lib/generated_definitions/gb.rb +0 -6
- data/lib/generated_definitions/hk.rb +0 -6
- data/lib/generated_definitions/hr.rb +0 -6
- data/lib/generated_definitions/hu.rb +0 -6
- data/lib/generated_definitions/ie.rb +0 -6
- data/lib/generated_definitions/is.rb +0 -6
- data/lib/generated_definitions/it.rb +0 -6
- data/lib/generated_definitions/jp.rb +0 -6
- data/lib/generated_definitions/kr.rb +15 -225
- data/lib/generated_definitions/li.rb +0 -6
- data/lib/generated_definitions/lt.rb +0 -6
- data/lib/generated_definitions/lu.rb +0 -6
- data/lib/generated_definitions/ma.rb +0 -6
- data/lib/generated_definitions/mx.rb +0 -6
- data/lib/generated_definitions/my.rb +0 -6
- data/lib/generated_definitions/nerc.rb +0 -6
- data/lib/generated_definitions/nl.rb +0 -6
- data/lib/generated_definitions/no.rb +0 -6
- data/lib/generated_definitions/north_america.rb +0 -6
- data/lib/generated_definitions/nyse.rb +1 -7
- data/lib/generated_definitions/nz.rb +0 -6
- data/lib/generated_definitions/pe.rb +0 -6
- data/lib/generated_definitions/ph.rb +0 -6
- data/lib/generated_definitions/pl.rb +0 -6
- data/lib/generated_definitions/pt.rb +0 -6
- data/lib/generated_definitions/ro.rb +0 -6
- data/lib/generated_definitions/scandinavia.rb +0 -6
- data/lib/generated_definitions/se.rb +0 -6
- data/lib/generated_definitions/sg.rb +0 -6
- data/lib/generated_definitions/si.rb +0 -6
- data/lib/generated_definitions/sk.rb +0 -6
- data/lib/generated_definitions/tn.rb +0 -6
- data/lib/generated_definitions/united_nations.rb +0 -6
- data/lib/generated_definitions/ups.rb +0 -6
- data/lib/generated_definitions/us.rb +0 -6
- data/lib/generated_definitions/ve.rb +0 -6
- data/lib/generated_definitions/vi.rb +5 -10
- data/lib/generated_definitions/za.rb +0 -6
- data/lib/holidays.rb +0 -1
- data/lib/holidays/date_calculator/lunar_date.rb +371 -0
- data/lib/holidays/definition/context/function_processor.rb +20 -15
- data/lib/holidays/definition/context/generator.rb +0 -6
- data/lib/holidays/definition/context/load.rb +29 -0
- data/lib/holidays/definition/context/merger.rb +0 -4
- data/lib/holidays/definition/generator/regions.rb +50 -0
- data/lib/holidays/definition/repository/cache.rb +20 -7
- data/lib/holidays/definition/repository/proc_result_cache.rb +1 -1
- data/lib/holidays/definition/repository/regions.rb +23 -13
- data/lib/holidays/definition/validator/custom_method.rb +1 -1
- data/lib/holidays/definition/validator/region.rb +2 -9
- data/lib/holidays/factory/date_calculator.rb +5 -0
- data/lib/holidays/factory/definition.rb +17 -1
- data/lib/holidays/factory/finder.rb +1 -1
- data/lib/holidays/finder/context/between.rb +3 -0
- data/lib/holidays/finder/context/parse_options.rb +53 -52
- data/lib/holidays/finder/context/search.rb +23 -6
- data/lib/holidays/finder/rules/in_region.rb +1 -1
- data/lib/holidays/load_all_definitions.rb +9 -0
- data/lib/holidays/version.rb +1 -1
- data/test/data/test_invalid_region.rb +15 -0
- data/test/data/test_region.rb +15 -0
- data/test/defs/test_defs_au.rb +11 -1
- data/test/defs/test_defs_kr.rb +15 -12
- data/test/defs/test_defs_nyse.rb +5 -0
- data/test/defs/test_defs_vi.rb +6 -4
- data/test/holidays/date_calculator/test_lunar_date.rb +89 -0
- data/test/holidays/definition/context/test_function_processor.rb +47 -23
- data/test/holidays/definition/context/test_generator.rb +3 -3
- data/test/holidays/definition/context/test_load.rb +37 -0
- data/test/holidays/definition/generator/test_regions.rb +97 -0
- data/test/holidays/definition/repository/test_cache.rb +47 -6
- data/test/holidays/definition/repository/test_proc_result_cache.rb +7 -0
- data/test/holidays/definition/repository/test_regions.rb +31 -13
- data/test/holidays/definition/validator/test_custom_method.rb +5 -0
- data/test/holidays/definition/validator/test_region.rb +7 -12
- data/test/holidays/factory/test_date_calculator.rb +5 -0
- data/test/holidays/factory/test_definition.rb +9 -0
- data/test/holidays/finder/context/test_parse_options.rb +102 -33
- data/test/holidays/finder/context/test_search.rb +45 -16
- data/test/integration/test_available_regions.rb +1 -1
- data/test/integration/test_custom_year_range_holidays.rb +0 -1
- data/test/integration/test_holidays.rb +3 -3
- data/test/integration/test_multiple_regions.rb +0 -1
- metadata +16 -3
|
@@ -24,30 +24,36 @@ module Holidays
|
|
|
24
24
|
next unless @rules[:year_range].call(year, h[:year_ranges])
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
+
current_month = month
|
|
28
|
+
current_day = h[:mday]
|
|
29
|
+
|
|
27
30
|
if h[:function]
|
|
28
31
|
result = @custom_method_processor.call(
|
|
29
|
-
year,
|
|
32
|
+
build_custom_method_input(year, current_month, current_day, h[:regions]),
|
|
30
33
|
h[:function], h[:function_arguments], h[:function_modifier],
|
|
31
34
|
)
|
|
32
35
|
|
|
33
36
|
#FIXME The result should always be present, see https://github.com/holidays/holidays/issues/204 for more information
|
|
34
37
|
if result
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
current_month = result.month
|
|
39
|
+
current_day = result.mday
|
|
40
|
+
else
|
|
41
|
+
current_month = nil
|
|
42
|
+
current_day = nil
|
|
37
43
|
end
|
|
38
44
|
else
|
|
39
|
-
|
|
45
|
+
current_day = h[:mday] || @day_of_month_calculator.call(year, current_month, h[:week], h[:wday])
|
|
40
46
|
end
|
|
41
47
|
|
|
42
48
|
# Silently skip bad mdays
|
|
43
49
|
#TODO Should we be doing something different here? We have no concept of logging right now. Maybe we should add it?
|
|
44
50
|
begin
|
|
45
|
-
date = Date.civil(year,
|
|
51
|
+
date = Date.civil(year, current_month, current_day)
|
|
46
52
|
rescue; next; end
|
|
47
53
|
|
|
48
54
|
if observed_set?(options) && h[:observed]
|
|
49
55
|
date = @custom_method_processor.call(
|
|
50
|
-
date.year, date.month, date.day,
|
|
56
|
+
build_custom_method_input(date.year, date.month, date.day, regions),
|
|
51
57
|
h[:observed],
|
|
52
58
|
[:date],
|
|
53
59
|
)
|
|
@@ -64,6 +70,8 @@ module Holidays
|
|
|
64
70
|
private
|
|
65
71
|
|
|
66
72
|
def validate!(dates_driver)
|
|
73
|
+
#FIXME This should give some kind of error message that indicates the
|
|
74
|
+
# problem.
|
|
67
75
|
raise ArgumentError if dates_driver.nil? || dates_driver.empty?
|
|
68
76
|
|
|
69
77
|
dates_driver.each do |year, months|
|
|
@@ -80,6 +88,15 @@ module Holidays
|
|
|
80
88
|
def observed_set?(options)
|
|
81
89
|
options && options.include?(:observed) == true
|
|
82
90
|
end
|
|
91
|
+
|
|
92
|
+
def build_custom_method_input(year, month, day, regions)
|
|
93
|
+
{
|
|
94
|
+
year: year,
|
|
95
|
+
month: month,
|
|
96
|
+
day: day,
|
|
97
|
+
region: regions.first, #FIXME This isn't ideal but will work for our current use case...
|
|
98
|
+
}
|
|
99
|
+
end
|
|
83
100
|
end
|
|
84
101
|
end
|
|
85
102
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
module Holidays
|
|
2
|
+
#TODO This file should be renamed. It's no longer about definitions, really.
|
|
2
3
|
class LoadAllDefinitions
|
|
3
4
|
class << self
|
|
4
5
|
def call
|
|
@@ -20,9 +21,13 @@ module Holidays
|
|
|
20
21
|
"calculate_day_of_month(year, month, day, wday)" => day_of_month_calculator.method(:call).to_proc,
|
|
21
22
|
"to_weekday_if_boxing_weekend_from_year_or_to_tuesday_if_monday(year)" => weekend_modifier.method(:to_weekday_if_boxing_weekend_from_year_or_to_tuesday_if_monday).to_proc,
|
|
22
23
|
"to_tuesday_if_sunday_or_monday_if_saturday(date)" => weekend_modifier.method(:to_tuesday_if_sunday_or_monday_if_saturday).to_proc,
|
|
24
|
+
"lunar_to_solar(year, month, day, region)" => lunar_date.method(:to_solar).to_proc,
|
|
23
25
|
}
|
|
24
26
|
|
|
25
27
|
Factory::Definition.custom_methods_repository.add(global_methods)
|
|
28
|
+
|
|
29
|
+
static_regions_definition = "#{Holidays::DEFINITIONS_PATH}/REGIONS.rb"
|
|
30
|
+
require static_regions_definition
|
|
26
31
|
end
|
|
27
32
|
|
|
28
33
|
private
|
|
@@ -42,6 +47,10 @@ module Holidays
|
|
|
42
47
|
def day_of_month_calculator
|
|
43
48
|
Factory::DateCalculator.day_of_month_calculator
|
|
44
49
|
end
|
|
50
|
+
|
|
51
|
+
def lunar_date
|
|
52
|
+
Factory::DateCalculator.lunar_date
|
|
53
|
+
end
|
|
45
54
|
end
|
|
46
55
|
end
|
|
47
56
|
end
|
data/lib/holidays/version.rb
CHANGED
data/test/defs/test_defs_au.rb
CHANGED
|
@@ -139,10 +139,20 @@ assert_equal "Christmas Day", Date.civil(2016, 12, 27).holidays(:au_vic, :observ
|
|
|
139
139
|
assert_equal "Christmas Day", Date.civil(2016, 12, 27).holidays(:au_nt, :observed)[0][:name]
|
|
140
140
|
|
|
141
141
|
# NEW YEAR'S DAY - observed on both 1st and 2nd of Jan for 2017
|
|
142
|
-
regions = [:au_qld, :au_nsw, :au_act, :au_vic, :
|
|
142
|
+
regions = [:au, :au_qld, :au_nsw, :au_act, :au_vic, :au_sa, :au_wa, :au_nt]
|
|
143
143
|
regions.each do |r|
|
|
144
144
|
assert_equal "New Year's Day", Date.civil(2017, 1, 1).holidays(r)[0][:name]
|
|
145
145
|
assert_equal "New Year's Day", Date.civil(2017, 1, 2).holidays(r, :observed)[0][:name]
|
|
146
146
|
end
|
|
147
|
+
|
|
148
|
+
# Tasmania is different
|
|
149
|
+
#FIXME This commented test is valid but the current code in the ruby repo won't allow it
|
|
150
|
+
# to work. We need to discuss potential solutions but in the meantime I'm taking it out.
|
|
151
|
+
#assert_equal [], Date.civil(2017,1,1).holidays(:au_tas)
|
|
152
|
+
assert_equal "New Year's Day", Date.civil(2017, 1, 2).holidays(:au_tas)[0][:name]
|
|
153
|
+
|
|
154
|
+
#QLD now celebrates Easter Sunday
|
|
155
|
+
assert_equal "Easter Sunday", Date.civil(2017, 4, 16).holidays(:au_qld)[0][:name]
|
|
156
|
+
|
|
147
157
|
end
|
|
148
158
|
end
|
data/test/defs/test_defs_kr.rb
CHANGED
|
@@ -7,18 +7,21 @@ require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
|
|
|
7
7
|
class KrDefinitionTests < Test::Unit::TestCase # :nodoc:
|
|
8
8
|
|
|
9
9
|
def test_kr
|
|
10
|
-
{Date.civil(2016,2,8) => "
|
|
11
|
-
Date.civil(
|
|
12
|
-
Date.civil(2016,
|
|
13
|
-
Date.civil(2016,
|
|
14
|
-
Date.civil(2016,
|
|
15
|
-
Date.civil(2016,
|
|
16
|
-
Date.civil(2016,
|
|
17
|
-
Date.civil(2016,
|
|
18
|
-
Date.civil(2016,
|
|
19
|
-
Date.civil(2016,
|
|
20
|
-
Date.civil(2016,10,
|
|
21
|
-
Date.civil(2016,
|
|
10
|
+
{Date.civil(2016,2,8) => "설날",
|
|
11
|
+
Date.civil(2017,1,29) => "설날 연휴",
|
|
12
|
+
Date.civil(2016,5,14) => "석가탄신일",
|
|
13
|
+
Date.civil(2016,9,15) => "추석",
|
|
14
|
+
Date.civil(2016,1,1) => "신정",
|
|
15
|
+
Date.civil(2016,3,1) => "3·1절",
|
|
16
|
+
Date.civil(2016,5,5) => "어린이날",
|
|
17
|
+
Date.civil(2016,6,6) => "현충일",
|
|
18
|
+
Date.civil(2016,7,17) => "제헌절",
|
|
19
|
+
Date.civil(2016,8,15) => "광복절",
|
|
20
|
+
Date.civil(2016,10,3) => "개천절",
|
|
21
|
+
Date.civil(2016,10,9) => "한글날",
|
|
22
|
+
Date.civil(2016,12,25) => "크리스마스",
|
|
23
|
+
Date.civil(2017,1,28) => "설날"
|
|
24
|
+
}.each do |date, name|
|
|
22
25
|
assert_equal name, (Holidays.on(date, :kr, :informal)[0] || {})[:name]
|
|
23
26
|
end
|
|
24
27
|
|
data/test/defs/test_defs_nyse.rb
CHANGED
|
@@ -19,5 +19,10 @@ class NyseDefinitionTests < Test::Unit::TestCase # :nodoc:
|
|
|
19
19
|
assert_equal name, (Holidays.on(date, :nyse)[0] || {})[:name]
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
# Test observed New Year
|
|
23
|
+
[Date.civil(2017,1,2), Date.civil(2012,1,2), Date.civil(2011,1,1), Date.civil(2006,1,2)].each do |date|
|
|
24
|
+
assert_equal 'New Year\'s Day', (Holidays.on(date, :nyse, :observed)[0] || {})[:name]
|
|
25
|
+
end
|
|
26
|
+
|
|
22
27
|
end
|
|
23
28
|
end
|
data/test/defs/test_defs_vi.rb
CHANGED
|
@@ -7,10 +7,12 @@ require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
|
|
|
7
7
|
class ViDefinitionTests < Test::Unit::TestCase # :nodoc:
|
|
8
8
|
|
|
9
9
|
def test_vi
|
|
10
|
-
{Date.civil(2014,1,1) => '
|
|
11
|
-
Date.civil(2014,4,30) => '
|
|
12
|
-
Date.civil(2014,5,1) => "
|
|
13
|
-
Date.civil(2014,9,2) => '
|
|
10
|
+
{Date.civil(2014,1,1) => 'Tết dương lịch',
|
|
11
|
+
Date.civil(2014,4,30) => 'Ngày Giải phóng miền Nam, thống nhất đất nước',
|
|
12
|
+
Date.civil(2014,5,1) => "Ngày Quốc tế Lao động",
|
|
13
|
+
Date.civil(2014,9,2) => 'Quốc khánh',
|
|
14
|
+
Date.civil(2017,4,6) => "Giỗ tổ Hùng Vương",
|
|
15
|
+
Date.civil(2018,3,27) => "Giỗ tổ Hùng Vương"}.each do |date, name|
|
|
14
16
|
assert_equal name, (Holidays.on(date, :vi)[0] || {})[:name]
|
|
15
17
|
end
|
|
16
18
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + '/../../test_helper'
|
|
2
|
+
|
|
3
|
+
require 'holidays/date_calculator/lunar_date.rb'
|
|
4
|
+
|
|
5
|
+
class LunarHolidaysCalculatorTests < Test::Unit::TestCase
|
|
6
|
+
def setup
|
|
7
|
+
@subject = Holidays::DateCalculator::LunarDate.new
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_korean_new_year_returns_expected_results
|
|
11
|
+
assert_equal '1994-02-10', @subject.to_solar(1994,1,1, :kr).to_s
|
|
12
|
+
assert_equal '1995-01-31', @subject.to_solar(1995,1,1, :kr).to_s
|
|
13
|
+
assert_equal '1999-02-16', @subject.to_solar(1999,1,1, :kr).to_s
|
|
14
|
+
assert_equal '2000-02-05', @subject.to_solar(2000,1,1, :kr).to_s
|
|
15
|
+
assert_equal '2001-01-24', @subject.to_solar(2001,1,1, :kr).to_s
|
|
16
|
+
assert_equal '2002-02-12', @subject.to_solar(2002,1,1, :kr).to_s
|
|
17
|
+
assert_equal '2008-02-07', @subject.to_solar(2008,1,1, :kr).to_s
|
|
18
|
+
assert_equal '2009-01-26', @subject.to_solar(2009,1,1, :kr).to_s
|
|
19
|
+
assert_equal '2010-02-14', @subject.to_solar(2010,1,1, :kr).to_s
|
|
20
|
+
assert_equal '2011-02-03', @subject.to_solar(2011,1,1, :kr).to_s
|
|
21
|
+
assert_equal '2012-01-23', @subject.to_solar(2012,1,1, :kr).to_s
|
|
22
|
+
assert_equal '2013-02-10', @subject.to_solar(2013,1,1, :kr).to_s
|
|
23
|
+
assert_equal '2014-01-31', @subject.to_solar(2014,1,1, :kr).to_s
|
|
24
|
+
assert_equal '2015-02-19', @subject.to_solar(2015,1,1, :kr).to_s
|
|
25
|
+
assert_equal '2016-02-08', @subject.to_solar(2016,1,1, :kr).to_s
|
|
26
|
+
assert_equal '2017-01-28', @subject.to_solar(2017,1,1, :kr).to_s
|
|
27
|
+
assert_equal '2018-02-16', @subject.to_solar(2018,1,1, :kr).to_s
|
|
28
|
+
assert_equal '2019-02-05', @subject.to_solar(2019,1,1, :kr).to_s
|
|
29
|
+
assert_equal '2020-01-25', @subject.to_solar(2020,1,1, :kr).to_s
|
|
30
|
+
assert_equal '2022-02-01', @subject.to_solar(2022,1,1, :kr).to_s
|
|
31
|
+
assert_equal '2025-01-29', @subject.to_solar(2025,1,1, :kr).to_s
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_buddahs_birthday_returns_expected_results
|
|
35
|
+
assert_equal '1994-05-18', @subject.to_solar(1994,4,8, :kr).to_s
|
|
36
|
+
assert_equal '1995-05-07', @subject.to_solar(1995,4,8, :kr).to_s
|
|
37
|
+
assert_equal '1999-05-22', @subject.to_solar(1999,4,8, :kr).to_s
|
|
38
|
+
assert_equal '2000-05-11', @subject.to_solar(2000,4,8, :kr).to_s
|
|
39
|
+
assert_equal '2001-05-01', @subject.to_solar(2001,4,8, :kr).to_s
|
|
40
|
+
assert_equal '2002-05-19', @subject.to_solar(2002,4,8, :kr).to_s
|
|
41
|
+
assert_equal '2008-05-12', @subject.to_solar(2008,4,8, :kr).to_s
|
|
42
|
+
assert_equal '2009-05-02', @subject.to_solar(2009,4,8, :kr).to_s
|
|
43
|
+
assert_equal '2010-05-21', @subject.to_solar(2010,4,8, :kr).to_s
|
|
44
|
+
assert_equal '2011-05-10', @subject.to_solar(2011,4,8, :kr).to_s
|
|
45
|
+
assert_equal '2012-05-28', @subject.to_solar(2012,4,8, :kr).to_s
|
|
46
|
+
assert_equal '2013-05-17', @subject.to_solar(2013,4,8, :kr).to_s
|
|
47
|
+
assert_equal '2014-05-06', @subject.to_solar(2014,4,8, :kr).to_s
|
|
48
|
+
assert_equal '2015-05-25', @subject.to_solar(2015,4,8, :kr).to_s
|
|
49
|
+
assert_equal '2016-05-14', @subject.to_solar(2016,4,8, :kr).to_s
|
|
50
|
+
assert_equal '2017-05-03', @subject.to_solar(2017,4,8, :kr).to_s
|
|
51
|
+
assert_equal '2018-05-22', @subject.to_solar(2018,4,8, :kr).to_s
|
|
52
|
+
assert_equal '2019-05-12', @subject.to_solar(2019,4,8, :kr).to_s
|
|
53
|
+
assert_equal '2020-04-30', @subject.to_solar(2020,4,8, :kr).to_s
|
|
54
|
+
assert_equal '2022-05-08', @subject.to_solar(2022,4,8, :kr).to_s
|
|
55
|
+
assert_equal '2025-05-05', @subject.to_solar(2025,4,8, :kr).to_s
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_korean_thanksgiving_returns_expected_results
|
|
59
|
+
assert_equal '1994-09-20', @subject.to_solar(1994,8,15, :kr).to_s
|
|
60
|
+
assert_equal '1995-09-09', @subject.to_solar(1995,8,15, :kr).to_s
|
|
61
|
+
assert_equal '1999-09-24', @subject.to_solar(1999,8,15, :kr).to_s
|
|
62
|
+
assert_equal '2000-09-12', @subject.to_solar(2000,8,15, :kr).to_s
|
|
63
|
+
assert_equal '2001-10-01', @subject.to_solar(2001,8,15, :kr).to_s
|
|
64
|
+
assert_equal '2002-09-21', @subject.to_solar(2002,8,15, :kr).to_s
|
|
65
|
+
assert_equal '2008-09-14', @subject.to_solar(2008,8,15, :kr).to_s
|
|
66
|
+
assert_equal '2009-10-03', @subject.to_solar(2009,8,15, :kr).to_s
|
|
67
|
+
assert_equal '2010-09-22', @subject.to_solar(2010,8,15, :kr).to_s
|
|
68
|
+
assert_equal '2011-09-12', @subject.to_solar(2011,8,15, :kr).to_s
|
|
69
|
+
assert_equal '2012-09-30', @subject.to_solar(2012,8,15, :kr).to_s
|
|
70
|
+
assert_equal '2013-09-19', @subject.to_solar(2013,8,15, :kr).to_s
|
|
71
|
+
assert_equal '2014-09-08', @subject.to_solar(2014,8,15, :kr).to_s
|
|
72
|
+
assert_equal '2015-09-27', @subject.to_solar(2015,8,15, :kr).to_s
|
|
73
|
+
assert_equal '2016-09-15', @subject.to_solar(2016,8,15, :kr).to_s
|
|
74
|
+
assert_equal '2017-10-04', @subject.to_solar(2017,8,15, :kr).to_s
|
|
75
|
+
assert_equal '2018-09-24', @subject.to_solar(2018,8,15, :kr).to_s
|
|
76
|
+
assert_equal '2019-09-13', @subject.to_solar(2019,8,15, :kr).to_s
|
|
77
|
+
assert_equal '2020-10-01', @subject.to_solar(2020,8,15, :kr).to_s
|
|
78
|
+
assert_equal '2022-09-10', @subject.to_solar(2022,8,15, :kr).to_s
|
|
79
|
+
assert_equal '2025-10-06', @subject.to_solar(2025,8,15, :kr).to_s
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_hung_kings_festival_returns_expected_results
|
|
83
|
+
assert_equal '2014-04-09', @subject.to_solar(2014,3,10, :vi).to_s
|
|
84
|
+
assert_equal '2015-04-28', @subject.to_solar(2015,3,10, :vi).to_s
|
|
85
|
+
assert_equal '2016-04-16', @subject.to_solar(2016,3,10, :vi).to_s
|
|
86
|
+
assert_equal '2017-04-06', @subject.to_solar(2017,3,10, :vi).to_s
|
|
87
|
+
assert_equal '2018-03-27', @subject.to_solar(2018,3,10, :vi).to_s
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -7,6 +7,9 @@ class FunctionProcessorTests < Test::Unit::TestCase
|
|
|
7
7
|
@year = 2016
|
|
8
8
|
@month = 1
|
|
9
9
|
@day = 15
|
|
10
|
+
@region = :test
|
|
11
|
+
@input = { year: @year, month: @month, day: @day, region: @region }
|
|
12
|
+
|
|
10
13
|
@func_id = "custom_function_id"
|
|
11
14
|
@func_args = [:year]
|
|
12
15
|
@func_modifier = 1
|
|
@@ -27,17 +30,17 @@ class FunctionProcessorTests < Test::Unit::TestCase
|
|
|
27
30
|
|
|
28
31
|
def test_no_function_arguments_returns_error
|
|
29
32
|
assert_raises ArgumentError do
|
|
30
|
-
@subject.call(@
|
|
33
|
+
@subject.call(@input, @func_id, nil, @func_modifier)
|
|
31
34
|
end
|
|
32
35
|
|
|
33
36
|
assert_raises ArgumentError do
|
|
34
|
-
@subject.call(@
|
|
37
|
+
@subject.call(@input, @func_id, [], @func_modifier)
|
|
35
38
|
end
|
|
36
39
|
end
|
|
37
40
|
|
|
38
41
|
def test_unknown_function_argument_returns_error
|
|
39
42
|
assert_raises ArgumentError do
|
|
40
|
-
@subject.call(@
|
|
43
|
+
@subject.call(@input, @func_id, [:something], @func_modifier)
|
|
41
44
|
end
|
|
42
45
|
end
|
|
43
46
|
|
|
@@ -46,7 +49,7 @@ class FunctionProcessorTests < Test::Unit::TestCase
|
|
|
46
49
|
@custom_methods_repo.expects(:find).at_most_once.with(bad_id).returns(nil)
|
|
47
50
|
|
|
48
51
|
assert_raises Holidays::FunctionNotFound do
|
|
49
|
-
@subject.call(@
|
|
52
|
+
@subject.call(@input, bad_id, @func_args, @func_modifier)
|
|
50
53
|
end
|
|
51
54
|
end
|
|
52
55
|
|
|
@@ -54,21 +57,21 @@ class FunctionProcessorTests < Test::Unit::TestCase
|
|
|
54
57
|
@func_args = [:year]
|
|
55
58
|
@proc_result_cache_repo.expects(:lookup).at_most_once.with(@custom_func, @year).returns(Date.civil(2016, 1, 15))
|
|
56
59
|
|
|
57
|
-
@subject.call(@
|
|
60
|
+
@subject.call(@input, @func_id, @func_args, @func_modifier)
|
|
58
61
|
end
|
|
59
62
|
|
|
60
63
|
def test_month_arg_passed_to_func_call
|
|
61
64
|
@func_args = [:month]
|
|
62
65
|
@proc_result_cache_repo.expects(:lookup).at_most_once.with(@custom_func, @month).returns(Date.civil(2016, 1, 15))
|
|
63
66
|
|
|
64
|
-
@subject.call(@
|
|
67
|
+
@subject.call(@input, @func_id, @func_args, @func_modifier)
|
|
65
68
|
end
|
|
66
69
|
|
|
67
70
|
def test_day_arg_passed_to_func_call
|
|
68
71
|
@func_args = [:day]
|
|
69
72
|
@proc_result_cache_repo.expects(:lookup).at_most_once.with(@custom_func, @day).returns(Date.civil(2016, 1, 15))
|
|
70
73
|
|
|
71
|
-
@subject.call(@
|
|
74
|
+
@subject.call(@input, @func_id, @func_args, @func_modifier)
|
|
72
75
|
end
|
|
73
76
|
|
|
74
77
|
def test_date_arg_passed_to_func_call
|
|
@@ -76,28 +79,35 @@ class FunctionProcessorTests < Test::Unit::TestCase
|
|
|
76
79
|
date = Date.civil(@year, @month, @day)
|
|
77
80
|
@proc_result_cache_repo.expects(:lookup).at_most_once.with(@custom_func, date).returns(date)
|
|
78
81
|
|
|
79
|
-
@subject.call(@
|
|
82
|
+
@subject.call(@input, @func_id, @func_args, @func_modifier)
|
|
80
83
|
end
|
|
81
84
|
|
|
82
85
|
def test_multiple_args_passed_to_func_call
|
|
83
86
|
@func_args = [:month, :day]
|
|
84
87
|
@proc_result_cache_repo.expects(:lookup).at_most_once.with(@custom_func, @month, @day).returns(Date.civil(2016, 1, 15))
|
|
85
88
|
|
|
86
|
-
@subject.call(@
|
|
89
|
+
@subject.call(@input, @func_id, @func_args, @func_modifier)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def test_multiple_args_with_region_passed_to_func_call
|
|
93
|
+
@func_args = [:month, :day, :region]
|
|
94
|
+
@proc_result_cache_repo.expects(:lookup).at_most_once.with(@custom_func, @month, @day, @region).returns(Date.civil(2016, 1, 15))
|
|
95
|
+
|
|
96
|
+
@subject.call(@input, @func_id, @func_args, @func_modifier)
|
|
87
97
|
end
|
|
88
98
|
|
|
89
99
|
def test_call_returns_error_if_target_function_returns_unknown_value
|
|
90
100
|
@proc_result_cache_repo.expects(:lookup).at_most_once.with(@custom_func, @year).returns("bad-response")
|
|
91
101
|
|
|
92
102
|
assert_raises Holidays::InvalidFunctionResponse do
|
|
93
|
-
@subject.call(@
|
|
103
|
+
@subject.call(@input, @func_id, @func_args, @func_modifier)
|
|
94
104
|
end
|
|
95
105
|
end
|
|
96
106
|
|
|
97
107
|
def test_call_returns_date_with_modifier
|
|
98
108
|
@proc_result_cache_repo.expects(:lookup).at_most_once.with(@custom_func, @year).returns(Date.civil(2016, 3, 10))
|
|
99
109
|
|
|
100
|
-
result = @subject.call(@
|
|
110
|
+
result = @subject.call(@input, @func_id, @func_args, @func_modifier)
|
|
101
111
|
|
|
102
112
|
assert_equal(Date.civil(2016, 3, 10) + @func_modifier, result)
|
|
103
113
|
end
|
|
@@ -105,7 +115,7 @@ class FunctionProcessorTests < Test::Unit::TestCase
|
|
|
105
115
|
def test_call_returns_date_no_modifier
|
|
106
116
|
@proc_result_cache_repo.expects(:lookup).at_most_once.with(@custom_func, @year).returns(Date.civil(2016, 3, 10))
|
|
107
117
|
|
|
108
|
-
result = @subject.call(@
|
|
118
|
+
result = @subject.call(@input, @func_id, @func_args, nil)
|
|
109
119
|
|
|
110
120
|
assert_equal(Date.civil(2016, 3, 10), result)
|
|
111
121
|
end
|
|
@@ -114,7 +124,7 @@ class FunctionProcessorTests < Test::Unit::TestCase
|
|
|
114
124
|
@proc_result_cache_repo.expects(:lookup).at_most_once.with(@custom_func, @year).returns("bad")
|
|
115
125
|
|
|
116
126
|
assert_raises Holidays::InvalidFunctionResponse do
|
|
117
|
-
@subject.call(@
|
|
127
|
+
@subject.call(@input, @func_id, @func_args, nil)
|
|
118
128
|
end
|
|
119
129
|
end
|
|
120
130
|
|
|
@@ -122,54 +132,68 @@ class FunctionProcessorTests < Test::Unit::TestCase
|
|
|
122
132
|
@proc_result_cache_repo.expects(:lookup).at_most_once.with(@custom_func, @year).returns(32)
|
|
123
133
|
|
|
124
134
|
assert_raises Holidays::InvalidFunctionResponse do
|
|
125
|
-
@subject.call(@
|
|
135
|
+
@subject.call(@input, @func_id, @func_args, nil)
|
|
126
136
|
end
|
|
127
137
|
end
|
|
128
138
|
|
|
129
139
|
def test_call_returns_integer_returns_modified_date
|
|
130
140
|
@proc_result_cache_repo.expects(:lookup).at_most_once.with(@custom_func, @year).returns(7)
|
|
131
141
|
|
|
132
|
-
result = @subject.call(@
|
|
142
|
+
result = @subject.call(@input, @func_id, @func_args, nil)
|
|
133
143
|
|
|
134
144
|
assert_equal(Date.civil(2016, 1, 7), result)
|
|
135
145
|
end
|
|
136
146
|
|
|
137
147
|
def test_func_modifier_not_required
|
|
138
|
-
result = @subject.call(@
|
|
148
|
+
result = @subject.call(@input, @func_id, @func_args)
|
|
139
149
|
assert_equal(Date.civil(2016, 1, 15), result)
|
|
140
150
|
end
|
|
141
151
|
|
|
142
152
|
def test_validate_returns_error_if_year_not_a_number
|
|
153
|
+
@input[:year] = 'bad-year'
|
|
143
154
|
assert_raises ArgumentError do
|
|
144
|
-
@subject.call(
|
|
155
|
+
@subject.call(@input, @func_id, @func_args)
|
|
145
156
|
end
|
|
146
157
|
end
|
|
147
158
|
|
|
148
159
|
def test_validate_returns_error_if_month_not_valid
|
|
160
|
+
@input[:month] = 'bad-month'
|
|
149
161
|
assert_raises ArgumentError do
|
|
150
|
-
@subject.call(@
|
|
162
|
+
@subject.call(@input, @func_id, [:month])
|
|
151
163
|
end
|
|
152
164
|
|
|
165
|
+
@input[:month] = -1
|
|
153
166
|
assert_raises ArgumentError do
|
|
154
|
-
@subject.call(@
|
|
167
|
+
@subject.call(@input, @func_id, [:month])
|
|
155
168
|
end
|
|
156
169
|
|
|
170
|
+
@input[:month] = 13
|
|
157
171
|
assert_raises ArgumentError do
|
|
158
|
-
@subject.call(@
|
|
172
|
+
@subject.call(@input, @func_id, [:month])
|
|
159
173
|
end
|
|
160
174
|
end
|
|
161
175
|
|
|
162
176
|
def test_validate_returns_error_if_day_is_not_valid
|
|
177
|
+
@input[:day] = 0
|
|
163
178
|
assert_raises ArgumentError do
|
|
164
|
-
@subject.call(@
|
|
179
|
+
@subject.call(@input, @func_id, [:day])
|
|
165
180
|
end
|
|
166
181
|
|
|
182
|
+
@input[:day] = 32
|
|
167
183
|
assert_raises ArgumentError do
|
|
168
|
-
@subject.call(@
|
|
184
|
+
@subject.call(@input, @func_id, [:day])
|
|
169
185
|
end
|
|
170
186
|
|
|
187
|
+
@input[:day] = 'bad-day'
|
|
188
|
+
assert_raises ArgumentError do
|
|
189
|
+
@subject.call(@input, @func_id, [:day])
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def test_validate_returns_error_if_region_not_a_symbol
|
|
194
|
+
@input[:region] = 'blah'
|
|
171
195
|
assert_raises ArgumentError do
|
|
172
|
-
@subject.call(@
|
|
196
|
+
@subject.call(@input, @func_id, [:region])
|
|
173
197
|
end
|
|
174
198
|
end
|
|
175
199
|
end
|