holidays 5.4.0 → 5.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|