holidays 5.4.0 → 5.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/Makefile +1 -1
  4. data/README.md +6 -6
  5. data/Rakefile +7 -8
  6. data/lib/generated_definitions/REGIONS.rb +3 -1
  7. data/lib/generated_definitions/ar.rb +0 -6
  8. data/lib/generated_definitions/at.rb +0 -6
  9. data/lib/generated_definitions/au.rb +6 -9
  10. data/lib/generated_definitions/be_fr.rb +0 -6
  11. data/lib/generated_definitions/be_nl.rb +0 -6
  12. data/lib/generated_definitions/bg.rb +0 -6
  13. data/lib/generated_definitions/br.rb +0 -6
  14. data/lib/generated_definitions/ca.rb +0 -6
  15. data/lib/generated_definitions/ch.rb +0 -6
  16. data/lib/generated_definitions/cl.rb +0 -6
  17. data/lib/generated_definitions/cr.rb +0 -6
  18. data/lib/generated_definitions/cz.rb +0 -6
  19. data/lib/generated_definitions/de.rb +0 -6
  20. data/lib/generated_definitions/dk.rb +0 -6
  21. data/lib/generated_definitions/ecb_target.rb +0 -6
  22. data/lib/generated_definitions/el.rb +0 -6
  23. data/lib/generated_definitions/es.rb +0 -6
  24. data/lib/generated_definitions/europe.rb +0 -6
  25. data/lib/generated_definitions/federal_reserve.rb +0 -6
  26. data/lib/generated_definitions/fedex.rb +0 -6
  27. data/lib/generated_definitions/fi.rb +0 -6
  28. data/lib/generated_definitions/fr.rb +0 -6
  29. data/lib/generated_definitions/gb.rb +0 -6
  30. data/lib/generated_definitions/hk.rb +0 -6
  31. data/lib/generated_definitions/hr.rb +0 -6
  32. data/lib/generated_definitions/hu.rb +0 -6
  33. data/lib/generated_definitions/ie.rb +0 -6
  34. data/lib/generated_definitions/is.rb +0 -6
  35. data/lib/generated_definitions/it.rb +0 -6
  36. data/lib/generated_definitions/jp.rb +0 -6
  37. data/lib/generated_definitions/kr.rb +15 -225
  38. data/lib/generated_definitions/li.rb +0 -6
  39. data/lib/generated_definitions/lt.rb +0 -6
  40. data/lib/generated_definitions/lu.rb +0 -6
  41. data/lib/generated_definitions/ma.rb +0 -6
  42. data/lib/generated_definitions/mx.rb +0 -6
  43. data/lib/generated_definitions/my.rb +0 -6
  44. data/lib/generated_definitions/nerc.rb +0 -6
  45. data/lib/generated_definitions/nl.rb +0 -6
  46. data/lib/generated_definitions/no.rb +0 -6
  47. data/lib/generated_definitions/north_america.rb +0 -6
  48. data/lib/generated_definitions/nyse.rb +1 -7
  49. data/lib/generated_definitions/nz.rb +0 -6
  50. data/lib/generated_definitions/pe.rb +0 -6
  51. data/lib/generated_definitions/ph.rb +0 -6
  52. data/lib/generated_definitions/pl.rb +0 -6
  53. data/lib/generated_definitions/pt.rb +0 -6
  54. data/lib/generated_definitions/ro.rb +0 -6
  55. data/lib/generated_definitions/scandinavia.rb +0 -6
  56. data/lib/generated_definitions/se.rb +0 -6
  57. data/lib/generated_definitions/sg.rb +0 -6
  58. data/lib/generated_definitions/si.rb +0 -6
  59. data/lib/generated_definitions/sk.rb +0 -6
  60. data/lib/generated_definitions/tn.rb +0 -6
  61. data/lib/generated_definitions/united_nations.rb +0 -6
  62. data/lib/generated_definitions/ups.rb +0 -6
  63. data/lib/generated_definitions/us.rb +0 -6
  64. data/lib/generated_definitions/ve.rb +0 -6
  65. data/lib/generated_definitions/vi.rb +5 -10
  66. data/lib/generated_definitions/za.rb +0 -6
  67. data/lib/holidays.rb +0 -1
  68. data/lib/holidays/date_calculator/lunar_date.rb +371 -0
  69. data/lib/holidays/definition/context/function_processor.rb +20 -15
  70. data/lib/holidays/definition/context/generator.rb +0 -6
  71. data/lib/holidays/definition/context/load.rb +29 -0
  72. data/lib/holidays/definition/context/merger.rb +0 -4
  73. data/lib/holidays/definition/generator/regions.rb +50 -0
  74. data/lib/holidays/definition/repository/cache.rb +20 -7
  75. data/lib/holidays/definition/repository/proc_result_cache.rb +1 -1
  76. data/lib/holidays/definition/repository/regions.rb +23 -13
  77. data/lib/holidays/definition/validator/custom_method.rb +1 -1
  78. data/lib/holidays/definition/validator/region.rb +2 -9
  79. data/lib/holidays/factory/date_calculator.rb +5 -0
  80. data/lib/holidays/factory/definition.rb +17 -1
  81. data/lib/holidays/factory/finder.rb +1 -1
  82. data/lib/holidays/finder/context/between.rb +3 -0
  83. data/lib/holidays/finder/context/parse_options.rb +53 -52
  84. data/lib/holidays/finder/context/search.rb +23 -6
  85. data/lib/holidays/finder/rules/in_region.rb +1 -1
  86. data/lib/holidays/load_all_definitions.rb +9 -0
  87. data/lib/holidays/version.rb +1 -1
  88. data/test/data/test_invalid_region.rb +15 -0
  89. data/test/data/test_region.rb +15 -0
  90. data/test/defs/test_defs_au.rb +11 -1
  91. data/test/defs/test_defs_kr.rb +15 -12
  92. data/test/defs/test_defs_nyse.rb +5 -0
  93. data/test/defs/test_defs_vi.rb +6 -4
  94. data/test/holidays/date_calculator/test_lunar_date.rb +89 -0
  95. data/test/holidays/definition/context/test_function_processor.rb +47 -23
  96. data/test/holidays/definition/context/test_generator.rb +3 -3
  97. data/test/holidays/definition/context/test_load.rb +37 -0
  98. data/test/holidays/definition/generator/test_regions.rb +97 -0
  99. data/test/holidays/definition/repository/test_cache.rb +47 -6
  100. data/test/holidays/definition/repository/test_proc_result_cache.rb +7 -0
  101. data/test/holidays/definition/repository/test_regions.rb +31 -13
  102. data/test/holidays/definition/validator/test_custom_method.rb +5 -0
  103. data/test/holidays/definition/validator/test_region.rb +7 -12
  104. data/test/holidays/factory/test_date_calculator.rb +5 -0
  105. data/test/holidays/factory/test_definition.rb +9 -0
  106. data/test/holidays/finder/context/test_parse_options.rb +102 -33
  107. data/test/holidays/finder/context/test_search.rb +45 -16
  108. data/test/integration/test_available_regions.rb +1 -1
  109. data/test/integration/test_custom_year_range_holidays.rb +0 -1
  110. data/test/integration/test_holidays.rb +3 -3
  111. data/test/integration/test_multiple_regions.rb +0 -1
  112. metadata +16 -3
@@ -91,7 +91,7 @@ class GeneratorTests < Test::Unit::TestCase
91
91
  regions, rules_by_month, custom_methods, tests = @generator.parse_definition_files(files)
92
92
  module_src = @generator.generate_definition_source("test", files, regions, rules_by_month, custom_methods, tests)[0]
93
93
 
94
- expected_module_src = "# encoding: utf-8\nmodule Holidays\n # This file is generated by the Ruby Holidays gem.\n #\n # Definitions loaded: test/data/test_single_custom_holiday_defs.yaml\n #\n # To use the definitions in this file, load it right after you load the\n # Holiday gem:\n #\n # require 'holidays'\n # require 'generated_definitions/test'\n #\n # All the definitions are available at https://github.com/holidays/holidays\n module TEST # :nodoc:\n def self.defined_regions\n [:custom_single_file]\n end\n\n def self.holidays_by_month\n {\n 6 => [{:mday => 20, :name => \"Company Founding\", :regions => [:custom_single_file]}]\n }\n end\n\n def self.custom_methods\n {\n \n }\n end\n end\nend\n"
94
+ expected_module_src = "# encoding: utf-8\nmodule Holidays\n # This file is generated by the Ruby Holidays gem.\n #\n # Definitions loaded: test/data/test_single_custom_holiday_defs.yaml\n #\n # All the definitions are available at https://github.com/holidays/holidays\n module TEST # :nodoc:\n def self.defined_regions\n [:custom_single_file]\n end\n\n def self.holidays_by_month\n {\n 6 => [{:mday => 20, :name => \"Company Founding\", :regions => [:custom_single_file]}]\n }\n end\n\n def self.custom_methods\n {\n \n }\n end\n end\nend\n"
95
95
 
96
96
  assert_equal expected_module_src, module_src
97
97
  end
@@ -158,7 +158,7 @@ class GeneratorTests < Test::Unit::TestCase
158
158
 
159
159
  regions, rules_by_month, custom_methods, tests = @generator.parse_definition_files(files)
160
160
  module_src = @generator.generate_definition_source("test", files, regions, rules_by_month, custom_methods, tests)[0]
161
- expected_module_src = "# encoding: utf-8\nmodule Holidays\n # This file is generated by the Ruby Holidays gem.\n #\n # Definitions loaded: test/data/test_custom_year_range_holiday_defs.yaml\n #\n # To use the definitions in this file, load it right after you load the\n # Holiday gem:\n #\n # require 'holidays'\n # require 'generated_definitions/test'\n #\n # All the definitions are available at https://github.com/holidays/holidays\n module TEST # :nodoc:\n def self.defined_regions\n [:custom_year_range_file]\n end\n\n def self.holidays_by_month\n {\n 6 => [{:mday => 1, :year_ranges => [{:after => 2016}],:name => \"after_year\", :regions => [:custom_year_range_file]},\n {:mday => 2, :year_ranges => [{:before => 2017}],:name => \"before_year\", :regions => [:custom_year_range_file]},\n {:mday => 3, :year_ranges => [{:between => 2016..2018}],:name => \"between_year\", :regions => [:custom_year_range_file]},\n {:mday => 4, :year_ranges => [{:limited => [2016, 2018, 2019]}],:name => \"limited_year\", :regions => [:custom_year_range_file]},\n {:mday => 5, :year_ranges => [{:before => 2015},{:after => 2017}],:name => \"multiple_conditions\", :regions => [:custom_year_range_file]}]\n }\n end\n\n def self.custom_methods\n {\n \n }\n end\n end\nend\n"
161
+ expected_module_src = "# encoding: utf-8\nmodule Holidays\n # This file is generated by the Ruby Holidays gem.\n #\n # Definitions loaded: test/data/test_custom_year_range_holiday_defs.yaml\n #\n # All the definitions are available at https://github.com/holidays/holidays\n module TEST # :nodoc:\n def self.defined_regions\n [:custom_year_range_file]\n end\n\n def self.holidays_by_month\n {\n 6 => [{:mday => 1, :year_ranges => [{:after => 2016}],:name => \"after_year\", :regions => [:custom_year_range_file]},\n {:mday => 2, :year_ranges => [{:before => 2017}],:name => \"before_year\", :regions => [:custom_year_range_file]},\n {:mday => 3, :year_ranges => [{:between => 2016..2018}],:name => \"between_year\", :regions => [:custom_year_range_file]},\n {:mday => 4, :year_ranges => [{:limited => [2016, 2018, 2019]}],:name => \"limited_year\", :regions => [:custom_year_range_file]},\n {:mday => 5, :year_ranges => [{:before => 2015},{:after => 2017}],:name => \"multiple_conditions\", :regions => [:custom_year_range_file]}]\n }\n end\n\n def self.custom_methods\n {\n \n }\n end\n end\nend\n"
162
162
 
163
163
  assert_equal expected_module_src, module_src
164
164
  end
@@ -173,7 +173,7 @@ class GeneratorTests < Test::Unit::TestCase
173
173
  regions, rules_by_month, custom_methods, tests = @generator.parse_definition_files(files)
174
174
  module_src = @generator.generate_definition_source("test", files, regions, rules_by_month, custom_methods, tests)[0]
175
175
 
176
- expected_module_src = "# encoding: utf-8\nmodule Holidays\n # This file is generated by the Ruby Holidays gem.\n #\n # Definitions loaded: test/data/test_single_custom_holiday_with_custom_procs.yaml\n #\n # To use the definitions in this file, load it right after you load the\n # Holiday gem:\n #\n # require 'holidays'\n # require 'generated_definitions/test'\n #\n # All the definitions are available at https://github.com/holidays/holidays\n module TEST # :nodoc:\n def self.defined_regions\n [:custom_single_file]\n end\n\n def self.holidays_by_month\n {\n 0 => [{:function => \"custom_method(year, month)\", :function_arguments => [:year, :month], :function_modifier => 5, :name => \"Custom Holiday\", :regions => [:custom_single_file]}],\n 6 => [{:mday => 20, :name => \"Company Founding\", :regions => [:custom_single_file]}]\n }\n end\n\n def self.custom_methods\n {\n \"custom_method(year, month)\" => Proc.new { |year, month|\nsource_stuff\n},\n\n\n }\n end\n end\nend\n"
176
+ expected_module_src = "# encoding: utf-8\nmodule Holidays\n # This file is generated by the Ruby Holidays gem.\n #\n # Definitions loaded: test/data/test_single_custom_holiday_with_custom_procs.yaml\n #\n # All the definitions are available at https://github.com/holidays/holidays\n module TEST # :nodoc:\n def self.defined_regions\n [:custom_single_file]\n end\n\n def self.holidays_by_month\n {\n 0 => [{:function => \"custom_method(year, month)\", :function_arguments => [:year, :month], :function_modifier => 5, :name => \"Custom Holiday\", :regions => [:custom_single_file]}],\n 6 => [{:mday => 20, :name => \"Company Founding\", :regions => [:custom_single_file]}]\n }\n end\n\n def self.custom_methods\n {\n \"custom_method(year, month)\" => Proc.new { |year, month|\nsource_stuff\n},\n\n\n }\n end\n end\nend\n"
177
177
 
178
178
  assert_equal expected_module_src, module_src
179
179
  end
@@ -0,0 +1,37 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/../../../test_helper'
2
+
3
+ require 'holidays/definition/context/load'
4
+
5
+ class LoadTests < Test::Unit::TestCase
6
+ def setup
7
+ @definition_merger = mock()
8
+ full_definitions_path = File.expand_path(File.dirname(__FILE__)) + '/../../../data'
9
+
10
+ @subject = Holidays::Definition::Context::Load.new(
11
+ @definition_merger,
12
+ full_definitions_path,
13
+ )
14
+ end
15
+
16
+ def test_region_is_found_and_loaded_and_merged
17
+ @definition_merger.expects(:call).with([:test_region, :test_region2], {}, {})
18
+ @subject.call(:test_region)
19
+ end
20
+
21
+ def test_region_file_not_found
22
+ assert_raises Holidays::UnknownRegionError do
23
+ @subject.call(:unknown)
24
+ end
25
+ end
26
+
27
+ def test_region_can_be_loaded_but_file_is_invalid
28
+ assert_raises Holidays::UnknownRegionError do
29
+ @subject.call(:test_invalid_region)
30
+ end
31
+ end
32
+
33
+ def test_returns_list_of_loaded_regions
34
+ @definition_merger.expects(:call).with([:test_region, :test_region2], {}, {})
35
+ assert_equal([:test_region, :test_region2], @subject.call(:test_region))
36
+ end
37
+ end
@@ -0,0 +1,97 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/../../../test_helper'
2
+
3
+ require 'holidays/definition/generator/regions'
4
+
5
+ class GeneratorRegionsTests < Test::Unit::TestCase
6
+ def setup
7
+ @generator = Holidays::Definition::Generator::Regions.new
8
+ end
9
+
10
+ def test_generates_regions_single_region_multiple_subregions
11
+ regions = {:region1 => [:test, :test2]}
12
+ expected = <<-EOE
13
+ # encoding: utf-8
14
+ module Holidays
15
+ REGIONS = [:test, :test2]
16
+
17
+ PARENT_REGION_LOOKUP = {:test=>:region1, :test2=>:region1}
18
+ end
19
+ EOE
20
+
21
+ assert_equal expected, @generator.call(regions)
22
+ end
23
+
24
+ def test_generates_regions_multiple_regions_single_unique_subregions
25
+ regions = {:region1 => [:test], :region2 => [:test2]}
26
+ expected = <<-EOE
27
+ # encoding: utf-8
28
+ module Holidays
29
+ REGIONS = [:test, :test2]
30
+
31
+ PARENT_REGION_LOOKUP = {:test=>:region1, :test2=>:region2}
32
+ end
33
+ EOE
34
+
35
+ assert_equal expected, @generator.call(regions)
36
+ end
37
+
38
+ def test_generates_regions_multiple_regions_multiple_overlapping_subregions
39
+ regions = {:region1 => [:test], :region2 => [:test, :test2], :region3 => [:test3, :test]}
40
+ expected = <<-EOE
41
+ # encoding: utf-8
42
+ module Holidays
43
+ REGIONS = [:test, :test2, :test3]
44
+
45
+ PARENT_REGION_LOOKUP = {:test=>:region1, :test2=>:region2, :test3=>:region3}
46
+ end
47
+ EOE
48
+
49
+ assert_equal expected, @generator.call(regions)
50
+ end
51
+
52
+ def test_generates_regions_multiple_regions_multiple_overlapping_subregions_complex
53
+ regions = {
54
+ :region1 => [:test],
55
+ :region2 => [:test, :test2],
56
+ :region3 => [:test3, :test],
57
+ :region4 => [:test4, :test2],
58
+ :region5 => [:test4, :test5, :test3],
59
+ :region6 => [:test4, :test6, :test],
60
+ }
61
+
62
+ expected = <<-EOE
63
+ # encoding: utf-8
64
+ module Holidays
65
+ REGIONS = [:test, :test2, :test3, :test4, :test5, :test6]
66
+
67
+ PARENT_REGION_LOOKUP = {:test=>:region1, :test2=>:region2, :test3=>:region3, :test4=>:region4, :test5=>:region5, :test6=>:region6}
68
+ end
69
+ EOE
70
+
71
+ assert_equal expected, @generator.call(regions)
72
+ end
73
+
74
+ def test_returns_error_if_regions_is_empty
75
+ regions = {}
76
+
77
+ assert_raises ArgumentError do
78
+ @generator.call(regions)
79
+ end
80
+ end
81
+
82
+ def test_returns_error_if_regions_is_not_a_hash
83
+ regions = "invalid"
84
+
85
+ assert_raises ArgumentError do
86
+ @generator.call(regions)
87
+ end
88
+ end
89
+
90
+ def test_returns_error_if_regions_is_nil
91
+ regions = nil
92
+
93
+ assert_raises ArgumentError do
94
+ @generator.call(regions)
95
+ end
96
+ end
97
+ end
@@ -7,30 +7,71 @@ class CacheRepoTests < Test::Unit::TestCase
7
7
  @subject = Holidays::Definition::Repository::Cache.new
8
8
  end
9
9
 
10
+ def test_find_supports_overlapping_holidays
11
+ start_date = Date.civil(2015, 1, 1)
12
+ end_date = Date.civil(2015, 7, 1)
13
+ cache_data = [
14
+ {:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day A", :regions=>[:us]},
15
+ {:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day B", :regions=>[:us]}
16
+ ]
17
+ options = :us
18
+
19
+ @subject.cache_between(start_date, end_date, cache_data, options)
20
+
21
+ assert_equal(cache_data, @subject.find(start_date, start_date, options))
22
+ assert_equal(cache_data, @subject.find(start_date, end_date, options))
23
+ end
24
+
25
+ def test_cache_returns_empty_array_no_holidays_are_found
26
+ start_date = Date.civil(2015, 1, 1)
27
+ end_date = Date.civil(2015, 7, 1)
28
+ cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
29
+ options = :us
30
+
31
+ @subject.cache_between(start_date, end_date, cache_data, options)
32
+
33
+ assert_empty(@subject.find(Date.civil(2015, 1, 2), Date.civil(2015, 1, 2), options))
34
+ assert_empty(@subject.find(Date.civil(2015, 1, 2), Date.civil(2015, 1, 3), options))
35
+ end
36
+
37
+ def test_cache_returns_empty_array_when_cache_is_empty
38
+ start_date = Date.civil(2015, 1, 1)
39
+ end_date = Date.civil(2015, 7, 1)
40
+ cache_data = []
41
+ options = :us
42
+
43
+ @subject.cache_between(start_date, end_date, cache_data, options)
44
+
45
+ assert_empty(@subject.find(Date.civil(2015, 1, 2), Date.civil(2015, 1, 2), options))
46
+ assert_empty(@subject.find(Date.civil(2015, 1, 2), Date.civil(2015, 1, 3), options))
47
+ end
48
+
10
49
  def test_find_returns_correct_cache_data
11
50
  start_date = Date.civil(2015, 1, 1)
12
- end_date = Date.civil(2015, 1, 1)
13
- cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
51
+ end_date = Date.civil(2015, 7, 1)
52
+ cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
14
53
  options = :us
15
54
  @subject.cache_between(start_date, end_date, cache_data, options)
16
55
 
56
+ assert_equal(cache_data, @subject.find(start_date, start_date, options))
17
57
  assert_equal(cache_data, @subject.find(start_date, end_date, options))
18
58
  end
19
59
 
20
60
  def test_find_returns_nil_if_no_match_is_found
21
61
  start_date = Date.civil(2015, 1, 1)
22
62
  end_date = Date.civil(2015, 1, 1)
23
- cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
63
+ cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
24
64
  options = :us
25
65
  @subject.cache_between(start_date, end_date, cache_data, options)
26
66
 
27
67
  assert_nil(@subject.find(Date.civil(2015, 7, 1), Date.civil(2015, 12, 1), options))
68
+ assert_nil(@subject.find(Date.civil(2015, 7, 1), Date.civil(2015, 12, 1), options))
28
69
  end
29
70
 
30
71
  def test_cache_between_returns_error_if_dates_are_missing
31
72
  start_date = Date.civil(2015, 1, 1)
32
73
  end_date = Date.civil(2015, 1, 1)
33
- cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
74
+ cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
34
75
  options = :us
35
76
 
36
77
  assert_raise ArgumentError do
@@ -45,7 +86,7 @@ class CacheRepoTests < Test::Unit::TestCase
45
86
  def test_cache_between_returns_error_if_dates_are_invalid
46
87
  start_date = Date.civil(2015, 1, 1)
47
88
  end_date = Date.civil(2015, 1, 1)
48
- cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
89
+ cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
49
90
  options = :us
50
91
 
51
92
  assert_raise ArgumentError do
@@ -70,7 +111,7 @@ class CacheRepoTests < Test::Unit::TestCase
70
111
  def test_reset_clears_cache
71
112
  start_date = Date.civil(2015, 1, 1)
72
113
  end_date = Date.civil(2015, 1, 1)
73
- cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
114
+ cache_data = [{:date=>Date.civil(2015, 1, 1), :name=>"New Year's Day", :regions=>[:us]}]
74
115
  options = :us
75
116
  @subject.cache_between(start_date, end_date, cache_data, options)
76
117
 
@@ -40,6 +40,13 @@ class ProcResultCacheRepoTests < Test::Unit::TestCase
40
40
  assert_equal(Date.civil(2015, 1, 31), @subject.lookup(function, function_argument))
41
41
  end
42
42
 
43
+ def test_lookup_accepts_symbol_as_function_argument
44
+ function = lambda { |symbol| symbol }
45
+ function_argument = :test
46
+
47
+ assert_equal(:test, @subject.lookup(function, function_argument))
48
+ end
49
+
43
50
  def test_accepts_multiple_arguments_for_functions
44
51
  function = lambda { |year, month, day| Date.civil(year, month, day) + 1 }
45
52
  year = 2016
@@ -4,16 +4,22 @@ require 'holidays/definition/repository/regions'
4
4
 
5
5
  class RegionsRepoTests < Test::Unit::TestCase
6
6
  def setup
7
- @subject = Holidays::Definition::Repository::Regions.new
7
+ @all_generated_regions = [:parent, :subregion, :subregion_with_underscores, :region1, :region2]
8
+ @parent_region_lookup = {
9
+ :subregion => :parent,
10
+ :subregion_with_underscores => :parent,
11
+ }
12
+
13
+ @subject = Holidays::Definition::Repository::Regions.new(@all_generated_regions, @parent_region_lookup)
8
14
  end
9
15
 
10
- def test_all_returns_an_empty_array_if_just_initialize
11
- assert_equal([], @subject.all)
16
+ def test_all_loaded_returns_an_empty_array_if_just_initialize
17
+ assert_equal([], @subject.all_loaded)
12
18
  end
13
19
 
14
20
  def test_add_successfully_adds_a_region
15
21
  @subject.add(:test)
16
- assert_equal([:test], @subject.all)
22
+ assert_equal([:test], @subject.all_loaded)
17
23
  end
18
24
 
19
25
  def test_add_raises_error_if_symbol_not_provided
@@ -37,50 +43,62 @@ class RegionsRepoTests < Test::Unit::TestCase
37
43
  def test_add_does_not_add_if_the_region_already_exists
38
44
  @subject.add(:test)
39
45
  @subject.add(:test)
40
- assert_equal([:test], @subject.all)
46
+ assert_equal([:test], @subject.all_loaded)
41
47
  end
42
48
 
43
49
  def test_add_accepts_array_of_regions
44
50
  @subject.add([:test, :test2])
45
- assert_equal([:test, :test2], @subject.all)
51
+ assert_equal([:test, :test2], @subject.all_loaded)
46
52
  end
47
53
 
48
54
  def test_exists_returns_true_if_region_is_present
49
55
  @subject.add(:test)
50
- assert @subject.exists?(:test)
56
+ assert @subject.loaded?(:test)
51
57
  end
52
58
 
53
59
  def tests_exists_returns_false_if_region_is_not_present
54
- assert_equal(false, @subject.exists?(:something))
60
+ assert_equal(false, @subject.loaded?(:something))
55
61
  end
56
62
 
57
63
  def test_exists_raises_error_if_invalid_argument
58
64
  assert_raises ArgumentError do
59
- @subject.exists?(nil)
65
+ @subject.loaded?(nil)
60
66
  end
61
67
  end
62
68
 
63
69
  def test_search_returns_empty_array_if_no_matches_found
64
- assert_equal([], @subject.search("something"))
70
+ assert_equal([], @subject.search(:something))
65
71
  end
66
72
 
67
73
  def test_search_returns_matches_on_prefix
68
74
  @subject.add([:another_region, :test_region])
69
- assert_equal([:test_region], @subject.search("test_"))
75
+ assert_equal([:test_region], @subject.search(:test_))
70
76
  end
71
77
 
72
78
  def test_search_returns_multiple_matches_on_prefix
73
79
  @subject.add([:another_region, :test_region, :test_region2])
74
- assert_equal([:test_region, :test_region2], @subject.search("test_"))
80
+ assert_equal([:test_region, :test_region2], @subject.search(:test_))
75
81
  end
76
82
 
77
83
  def test_search_raises_error_if_prefix_is_not_a_string
78
84
  assert_raises ArgumentError do
79
- @subject.search(:sym)
85
+ @subject.search("string")
80
86
  end
81
87
 
82
88
  assert_raises ArgumentError do
83
89
  @subject.search(nil)
84
90
  end
85
91
  end
92
+
93
+ def test_all_generated_returns_value_from_initializer
94
+ assert_equal(@all_generated_regions, @subject.all_generated)
95
+ end
96
+
97
+ def test_parent_region_lookup_returns_region_if_it_exists
98
+ assert_equal(@parent_region_lookup[:subregion], @subject.parent_region_lookup(:subregion))
99
+ end
100
+
101
+ def test_parent_region_lookup_returns_nil_if_does_not_exist_in_lookup
102
+ assert_nil(@subject.parent_region_lookup(:parent))
103
+ end
86
104
  end
@@ -37,6 +37,11 @@ class CustomMethodValidatorTests < Test::Unit::TestCase
37
37
  assert @subject.valid?(m)
38
38
  end
39
39
 
40
+ def test_valid_returns_true_with_region_argument
41
+ m = {:name => "good_method", :arguments => "region", :source => "source"}
42
+ assert @subject.valid?(m)
43
+ end
44
+
40
45
  def test_valid_returns_true_multiple_arguments_with_whitespace
41
46
  m = {:name => "good_method", :arguments => "year , month", :source => "source"}
42
47
  assert @subject.valid?(m)
@@ -5,26 +5,24 @@ require 'holidays/definition/validator/region'
5
5
  class RegionValidatorTests < Test::Unit::TestCase
6
6
  def setup
7
7
  @regions_repo = mock()
8
- @regions_repo.stubs(:exists?).returns(false)
8
+ @regions_repo.stubs(:loaded?).returns(false)
9
+ @regions_repo.stubs(:all_generated).returns([])
9
10
 
10
11
  @subject = Holidays::Definition::Validator::Region.new(@regions_repo)
11
12
  end
12
13
 
13
- def test_returns_true_if_region_exists_in_generated_files
14
+ def test_returns_true_if_region_loaded_in_generated_files
15
+ @regions_repo.expects(:all_generated).returns([:us])
14
16
  assert(@subject.valid?(:us))
15
- assert(@subject.valid?(:federal_reserve))
16
- assert(@subject.valid?(:ecb_target))
17
- assert(@subject.valid?(:gb))
18
- assert(@subject.valid?(:jp))
19
17
  end
20
18
 
21
19
  def test_returns_true_if_region_is_in_regions_repository
22
- @regions_repo.expects(:exists?).with(:custom).returns(true)
20
+ @regions_repo.expects(:loaded?).with(:custom).returns(true)
23
21
  assert(@subject.valid?(:custom))
24
22
  end
25
23
 
26
24
  def test_returns_false_if_region_does_not_exist_in_generated_files_or_regions_repo
27
- @regions_repo.expects(:exists?).with(:unknown_region).returns(false)
25
+ @regions_repo.expects(:loaded?).with(:unknown_region).returns(false)
28
26
  assert_equal(false, @subject.valid?(:unknown_region))
29
27
  end
30
28
 
@@ -32,15 +30,12 @@ class RegionValidatorTests < Test::Unit::TestCase
32
30
  assert_equal(false, @subject.valid?('not-a-symbol'))
33
31
  end
34
32
 
35
- def test_returns_true_if_subregion
36
- assert(@subject.valid?(:ca_qc))
37
- end
38
-
39
33
  def test_returns_true_if_region_is_any
40
34
  assert(@subject.valid?(:any))
41
35
  end
42
36
 
43
37
  def test_returns_true_if_wildcard_region_is_valid
38
+ @regions_repo.expects(:all_generated).returns([:gb])
44
39
  assert(@subject.valid?(:gb_))
45
40
  end
46
41
 
@@ -24,4 +24,9 @@ class DateCalculatorFactoryTests < Test::Unit::TestCase
24
24
  @subject = @subject::Easter::Julian
25
25
  assert @subject.easter_calculator.is_a?(Holidays::DateCalculator::Easter::Julian)
26
26
  end
27
+
28
+ def test_lunar_date
29
+ assert @subject.lunar_date.is_a?(Holidays::DateCalculator::LunarDate)
30
+ assert @subject.lunar_date.respond_to?('to_solar')
31
+ end
27
32
  end
@@ -50,4 +50,13 @@ class DefinitionFactoryTests < Test::Unit::TestCase
50
50
  def test_function_processor
51
51
  assert Holidays::Factory::Definition.function_processor.is_a?(Holidays::Definition::Context::FunctionProcessor)
52
52
  end
53
+
54
+ def test_regions_generator
55
+ assert Holidays::Factory::Definition.regions_generator.is_a?(Holidays::Definition::Generator::Regions)
56
+ end
57
+
58
+ def test_definitions_loader
59
+ assert Holidays::Factory::Definition.loader.is_a?(Holidays::Definition::Context::Load)
60
+ end
61
+
53
62
  end