ffaker 2.20.0 → 2.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +21 -0
  3. data/README.md +15 -4
  4. data/REFERENCE.md +1423 -1396
  5. data/Rakefile +9 -40
  6. data/bin/console +9 -0
  7. data/ffaker.gemspec +9 -19
  8. data/lib/ffaker/address_br.rb +14 -2
  9. data/lib/ffaker/address_it.rb +0 -1
  10. data/lib/ffaker/address_ua.rb +1 -1
  11. data/lib/ffaker/animal_br.rb +12 -0
  12. data/lib/ffaker/book.rb +5 -5
  13. data/lib/ffaker/code.rb +1 -1
  14. data/lib/ffaker/company.rb +4 -7
  15. data/lib/ffaker/company_fr.rb +1 -1
  16. data/lib/ffaker/data/address_br/complement +3 -0
  17. data/lib/ffaker/data/address_br/neighborhood_prefixes +3 -0
  18. data/lib/ffaker/data/address_de/state +1 -0
  19. data/lib/ffaker/data/animal_br/common_names +423 -0
  20. data/lib/ffaker/data/jo_jo/first_names +356 -0
  21. data/lib/ffaker/data/jo_jo/full_names +225 -0
  22. data/lib/ffaker/data/jo_jo/last_names +153 -0
  23. data/lib/ffaker/data/jo_jo/stands +149 -0
  24. data/lib/ffaker/date.rb +31 -0
  25. data/lib/ffaker/geolocation.rb +2 -2
  26. data/lib/ffaker/html_ipsum.rb +7 -1
  27. data/lib/ffaker/identification_br.rb +1 -1
  28. data/lib/ffaker/identification_ec.rb +39 -0
  29. data/lib/ffaker/identification_es_cl.rb +2 -2
  30. data/lib/ffaker/identification_es_co.rb +1 -1
  31. data/lib/ffaker/identification_kr.rb +3 -3
  32. data/lib/ffaker/identification_pl.rb +4 -4
  33. data/lib/ffaker/identification_tw.rb +4 -3
  34. data/lib/ffaker/jo_jo.rb +24 -0
  35. data/lib/ffaker/name_pl.rb +1 -1
  36. data/lib/ffaker/number.rb +2 -2
  37. data/lib/ffaker/ssn_se.rb +2 -2
  38. data/lib/ffaker/string.rb +7 -7
  39. data/lib/ffaker/time.rb +4 -4
  40. data/lib/ffaker/utils/module_utils.rb +4 -5
  41. data/lib/ffaker/utils/unique_utils.rb +30 -21
  42. data/lib/ffaker/vehicle.rb +63 -1
  43. data/lib/{version.rb → ffaker/version.rb} +1 -1
  44. data/lib/ffaker.rb +8 -4
  45. data/scripts/reference.rb +15 -13
  46. data/test/helper.rb +2 -4
  47. data/test/test_address_br.rb +15 -2
  48. data/test/test_address_da.rb +3 -3
  49. data/test/test_address_fi.rb +2 -2
  50. data/test/test_address_se.rb +2 -2
  51. data/test/test_animal_br.rb +17 -0
  52. data/test/test_cheesy_lingo.rb +1 -1
  53. data/test/test_color.rb +3 -3
  54. data/test/test_date.rb +37 -0
  55. data/test/test_filesystem.rb +3 -3
  56. data/test/test_freedom_ipsum.rb +1 -1
  57. data/test/test_gender_it.rb +1 -1
  58. data/test/test_gender_ja.rb +1 -1
  59. data/test/test_gender_jp.rb +1 -1
  60. data/test/test_gender_pl.rb +1 -1
  61. data/test/test_healthcare_ru.rb +1 -1
  62. data/test/test_hipster_ipsum.rb +1 -1
  63. data/test/test_html_ipsum.rb +6 -0
  64. data/test/test_identification_ec.rb +33 -0
  65. data/test/test_identification_es_mx.rb +1 -1
  66. data/test/test_internet_se.rb +2 -1
  67. data/test/test_jo_jo.rb +29 -0
  68. data/test/test_lorem_br.rb +1 -1
  69. data/test/test_lorem_cn.rb +3 -3
  70. data/test/test_lorem_fr.rb +3 -3
  71. data/test/test_lorem_ie.rb +2 -2
  72. data/test/test_lorem_kr.rb +3 -3
  73. data/test/test_lorem_pl.rb +2 -2
  74. data/test/test_lorem_ru.rb +3 -3
  75. data/test/test_lorem_ua.rb +3 -3
  76. data/test/test_module_utils.rb +33 -0
  77. data/test/test_name_da.rb +1 -1
  78. data/test/test_name_ph.rb +1 -1
  79. data/test/test_name_ru.rb +2 -2
  80. data/test/test_name_ua.rb +2 -2
  81. data/test/test_phone_number_se.rb +1 -1
  82. data/test/test_phone_number_sg.rb +8 -8
  83. data/test/test_unique_utils.rb +25 -5
  84. data/test/test_vehicle.rb +28 -1
  85. metadata +24 -197
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FFaker
4
- VERSION = '2.20.0'
4
+ VERSION = '2.22.0'
5
5
  end
data/lib/ffaker.rb CHANGED
@@ -13,15 +13,15 @@ module FFaker
13
13
  HEX = %w[0 1 2 3 4 5 6 7 8 9 A B C D E F].freeze
14
14
 
15
15
  def self.hexify(*masks)
16
- fetch_sample(masks.flatten).gsub(/#/) { fetch_sample(HEX) }
16
+ fetch_sample(masks.flatten).gsub('#') { fetch_sample(HEX) }
17
17
  end
18
18
 
19
19
  def self.numerify(*masks)
20
- fetch_sample(masks.flatten).gsub(/#/) { rand(0..9).to_s }
20
+ fetch_sample(masks.flatten).gsub('#') { rand(0..9).to_s }
21
21
  end
22
22
 
23
23
  def self.letterify(*masks)
24
- fetch_sample(masks.flatten).gsub(/\?/) { fetch_sample(LETTERS) }
24
+ fetch_sample(masks.flatten).gsub('?') { fetch_sample(LETTERS) }
25
25
  end
26
26
 
27
27
  def self.bothify(masks)
@@ -57,6 +57,7 @@ module FFaker
57
57
  autoload :AddressUS, 'ffaker/address_us'
58
58
  autoload :Airline, 'ffaker/airline'
59
59
  autoload :Animal, 'ffaker/animal'
60
+ autoload :AnimalBR, 'ffaker/animal_br'
60
61
  autoload :AnimalCN, 'ffaker/animal_cn'
61
62
  autoload :AnimalES, 'ffaker/animal_es'
62
63
  autoload :AnimalPL, 'ffaker/animal_pl'
@@ -81,6 +82,7 @@ module FFaker
81
82
  autoload :Conference, 'ffaker/conference'
82
83
  autoload :CoursesFR, 'ffaker/courses_fr'
83
84
  autoload :Currency, 'ffaker/currency'
85
+ autoload :Date, 'ffaker/date'
84
86
  autoload :DizzleIpsum, 'ffaker/dizzle_ipsum'
85
87
  autoload :Education, 'ffaker/education'
86
88
  autoload :EducationCN, 'ffaker/education_cn'
@@ -116,6 +118,7 @@ module FFaker
116
118
  autoload :IdentificationMX, 'ffaker/identification_mx'
117
119
  autoload :IdentificationPL, 'ffaker/identification_pl'
118
120
  autoload :IdentificationTW, 'ffaker/identification_tw'
121
+ autoload :IdentificationEC, 'ffaker/identification_ec'
119
122
  autoload :Image, 'ffaker/image'
120
123
  autoload :Internet, 'ffaker/internet'
121
124
  autoload :InternetSE, 'ffaker/internet_se'
@@ -127,6 +130,7 @@ module FFaker
127
130
  autoload :JobJA, 'ffaker/job_ja'
128
131
  autoload :JobKR, 'ffaker/job_kr'
129
132
  autoload :JobVN, 'ffaker/job_vn'
133
+ autoload :JoJo, 'ffaker/jo_jo'
130
134
  autoload :Locale, 'ffaker/locale'
131
135
  autoload :Lorem, 'ffaker/lorem'
132
136
  autoload :LoremAR, 'ffaker/lorem_ar'
@@ -211,7 +215,7 @@ module FFaker
211
215
  autoload :Unit, 'ffaker/unit'
212
216
  autoload :UnitEnglish, 'ffaker/unit_english'
213
217
  autoload :UnitMetric, 'ffaker/unit_metric'
214
- autoload :VERSION, 'version'
218
+ autoload :VERSION, 'ffaker/version'
215
219
  autoload :Vehicle, 'ffaker/vehicle'
216
220
  autoload :Venue, 'ffaker/venue'
217
221
  autoload :Youtube, 'ffaker/youtube'
data/scripts/reference.rb CHANGED
@@ -1,30 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../lib/ffaker'
4
+ require 'set'
5
+
6
+ # always use the same seed for consistency
7
+ FFaker::Random.seed = 1337
4
8
 
5
9
  ICONS = {
6
10
  error: '‼️',
7
11
  warning: '❗'
8
12
  }.freeze
9
13
 
14
+ UTILS_MODULES = %i[ArrayUtils ModuleUtils RandomUtils Random]
15
+ UTILS_METHODS = %i[k underscore fetch_sample rand shuffle unique luhn_check]
16
+
10
17
  # Get a list of sections
11
18
  def faker_modules
12
- FFaker.constants.sort.map do |const|
13
- mod = FFaker.const_get(const)
14
- next unless mod.is_a?(Module)
15
- next if mod == FFaker::ArrayUtils
16
- next if mod == FFaker::ModuleUtils
17
- next if mod == FFaker::RandomUtils
18
- next if mod == FFaker::Random
19
-
20
- mod
21
- end.compact
19
+ FFaker
20
+ .constants
21
+ .reject { |const| UTILS_MODULES.include?(const) }
22
+ .select { |const| FFaker.const_get(const).instance_of?(Module) }
23
+ .sort
24
+ .map { |const| FFaker.const_get(const) }
22
25
  end
23
26
 
24
27
  # Returns faker methods for a given module
25
28
  def faker_methods(mod)
26
- methods = mod.methods - Module.methods -
27
- %i[k underscore fetch_sample rand shuffle unique luhn_check]
29
+ methods = mod.methods - Module.methods - UTILS_METHODS
28
30
 
29
31
  # For Company.name (et al), don't discard :name if it was reimplemented
30
32
  methods << :name if mod.send(:name) != mod.to_s
@@ -66,7 +68,7 @@ sections = faker_modules.map do |mod|
66
68
  else
67
69
  begin
68
70
  examples, warnings = catch_warnings do
69
- Array.new(3) { mod.send meth }
71
+ Array.new(3) { mod.unique.send meth }
70
72
  end
71
73
  right = if warnings.any?
72
74
  "#{ICONS[:warning]} *#{warnings.first}*"
data/test/helper.rb CHANGED
@@ -13,16 +13,14 @@ module DeterministicHelper
13
13
  # Accepts a block. Executes the block multiple times after resetting
14
14
  # the internal Random Number Generator state and compared the results of
15
15
  # each execution to make sure they are the same.
16
- def assert_deterministic(options = {})
16
+ def assert_deterministic(options = {}, &block)
17
17
  raise ArgumentError, 'Must pass a block' unless block_given?
18
18
 
19
19
  options = { message: 'Results are not repeatable' }.merge(options)
20
20
 
21
21
  returns = Array.new(2) do
22
22
  FFaker::Random.reset!
23
- Array.new(5) do
24
- yield
25
- end
23
+ Array.new(5, &block)
26
24
  end
27
25
 
28
26
  assert(returns.uniq.length == 1, options[:message])
@@ -7,7 +7,7 @@ class TestAddressBR < Test::Unit::TestCase
7
7
 
8
8
  assert_methods_are_deterministic(
9
9
  FFaker::AddressBR,
10
- :zip_code, :state, :state_abbr, :city, :street_prefix, :street, :full_address
10
+ :zip_code, :state, :state_abbr, :city, :street_prefix, :street, :complement, :neighborhood, :full_address
11
11
  )
12
12
 
13
13
  def test_zip_code
@@ -32,6 +32,19 @@ class TestAddressBR < Test::Unit::TestCase
32
32
 
33
33
  def test_street
34
34
  prefixes = FFaker::AddressBR::STREET_PREFIX
35
- assert_match(/(#{prefixes.join('|')})( \p{Alpha}+){1,2}/, FFaker::AddressBR.street)
35
+ assert_match(/\A(#{prefixes.join('|')})(?: [\p{Alpha}-]+)+\z/, FFaker::AddressBR.street)
36
+ end
37
+
38
+ def test_complement
39
+ assert_match(/\A(?:Apartamento \d{3}|Casa Térrea|Fundos)\z/, FFaker::AddressBR.complement)
40
+ end
41
+
42
+ def test_neighborhood
43
+ neighborhood_prefix = FFaker::AddressBR.neighborhood.split(' ').first
44
+ assert FFaker::AddressBR::NEIGHBORHOOD_PREFIXES.include?(neighborhood_prefix)
45
+ end
46
+
47
+ def test_full_address
48
+ assert_match(/\A[\p{Alpha}\d, -]+\z/, FFaker::AddressBR.full_address)
36
49
  end
37
50
  end
@@ -20,11 +20,11 @@ class TestAddressDA < Test::Unit::TestCase
20
20
  end
21
21
 
22
22
  def test_state
23
- assert_match(/\A[-ÆØÅæøåa-z-]+\z/i, FFaker::AddressDA.state)
23
+ assert_match(/\A[-ÆØÅæøåa-z]+\z/i, FFaker::AddressDA.state)
24
24
  end
25
25
 
26
26
  def test_kommune
27
- assert_match(/\A[-ÆØÅæøåa-z-]+\z/i, FFaker::AddressDA.kommune)
27
+ assert_match(/\A[-ÆØÅæøåa-z]+\z/i, FFaker::AddressDA.kommune)
28
28
  end
29
29
 
30
30
  def test_region
@@ -32,7 +32,7 @@ class TestAddressDA < Test::Unit::TestCase
32
32
  end
33
33
 
34
34
  def test_city
35
- assert_match(/\A[- ÆØÅæøåla-z-]+\z/i, FFaker::AddressDA.city)
35
+ assert_match(/\A[- ÆØÅæøåla-z]+\z/i, FFaker::AddressDA.city)
36
36
  end
37
37
 
38
38
  def test_street_name
@@ -5,8 +5,8 @@ require_relative 'helper'
5
5
  class TestAddressFI < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- ALPHA = /\A\p{Alpha}+/.freeze
9
- DIGIT = /\d{1}/.freeze
8
+ ALPHA = /\A\p{Alpha}+/
9
+ DIGIT = /\d{1}/
10
10
 
11
11
  assert_methods_are_deterministic(
12
12
  FFaker::AddressFI,
@@ -5,8 +5,8 @@ require_relative 'helper'
5
5
  class TestAddressSE < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- ALPHA = /\A\p{Alpha}+/.freeze
9
- DIGIT = /\d{1}/.freeze
8
+ ALPHA = /\A\p{Alpha}+/
9
+ DIGIT = /\d{1}/
10
10
 
11
11
  assert_methods_are_deterministic(
12
12
  FFaker::AddressSE,
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper'
4
+
5
+ class TestAnimalsBR < Test::Unit::TestCase
6
+ include DeterministicHelper
7
+
8
+ assert_methods_are_deterministic(FFaker::AnimalBR, :common_name)
9
+
10
+ def setup
11
+ @tester = FFaker::AnimalBR
12
+ end
13
+
14
+ def test_name
15
+ assert_include @tester::COMMON_NAMES, @tester.common_name
16
+ end
17
+ end
@@ -5,7 +5,7 @@ require_relative 'helper'
5
5
  class TestCheesyLingo < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- TEST_REGEX = /\+1|[a-z]+/i.freeze
8
+ TEST_REGEX = /\+1|[a-z]+/i
9
9
 
10
10
  assert_methods_are_deterministic(
11
11
  FFaker::CheesyLingo,
data/test/test_color.rb CHANGED
@@ -5,9 +5,9 @@ require_relative 'helper'
5
5
  class TestColor < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- VALID_RGB_REGEX = /\A([0-9]{1,3})\z/.freeze
9
- VALID_OPACITY_REGEX = /^([0-9].[0-9]{1,2})$/.freeze
10
- VALID_PERCENTAGE_REGEX = /^([0-9]{1,3}%)$/.freeze
8
+ VALID_RGB_REGEX = /\A([0-9]{1,3})\z/
9
+ VALID_OPACITY_REGEX = /^([0-9].[0-9]{1,2})$/
10
+ VALID_PERCENTAGE_REGEX = /^([0-9]{1,3}%)$/
11
11
 
12
12
  assert_methods_are_deterministic(
13
13
  FFaker::Color,
data/test/test_date.rb ADDED
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper'
4
+
5
+ class TestFakerDate < Test::Unit::TestCase
6
+ include DeterministicHelper
7
+
8
+ def setup
9
+ @tester = FFaker::Date
10
+ end
11
+
12
+ assert_methods_are_deterministic(FFaker::Date, :backward, :forward)
13
+
14
+ def test_between
15
+ from = Date.new(2015, 1, 1)
16
+ to = Date.new(2016, 12, 31)
17
+
18
+ assert_random_between(from..to) { @tester.between(from, to) }
19
+ assert_instance_of Date, @tester.between(from, to)
20
+ end
21
+
22
+ def test_backward
23
+ today = Date.today
24
+
25
+ assert_random_between(today - 365..today - 1) { @tester.backward }
26
+ assert_random_between(today - 30..today - 1) { @tester.backward(30) }
27
+ assert_instance_of Date, @tester.backward
28
+ end
29
+
30
+ def test_forward
31
+ today = Date.today
32
+
33
+ assert_random_between(today + 1..today + 365) { @tester.forward }
34
+ assert_random_between(today + 1..today + 30) { @tester.forward(30) }
35
+ assert_instance_of Date, @tester.forward
36
+ end
37
+ end
@@ -15,10 +15,10 @@ class TestFakerFilesystem < Test::Unit::TestCase
15
15
  end
16
16
 
17
17
  def test_extension
18
- assert_match /\A(?:flac|mp3|wav|bmp|gif|jpeg|jpg|png|tiff|css|csv|html|js|
18
+ assert_match(/\A(?:flac|mp3|wav|bmp|gif|jpeg|jpg|png|tiff|css|csv|html|js|
19
19
  json|txt|mp4|avi|mov|webm|doc|docx|xls|xlsx|ppt|pptx|odt|
20
20
  ods|odp|pages|numbers|key|pdf)\z/x,
21
- @tester.extension
21
+ @tester.extension)
22
22
  end
23
23
 
24
24
  def test_mime_type_format
@@ -31,6 +31,6 @@ class TestFakerFilesystem < Test::Unit::TestCase
31
31
 
32
32
  def test_file_name
33
33
  assert_match %r{\A(?:[a-z_-]+[\\/])+[a-z_-]+\.\w{2,4}\z},
34
- @tester.file_name
34
+ @tester.file_name
35
35
  end
36
36
  end
@@ -9,7 +9,7 @@ class TestFreedomIpsum < Test::Unit::TestCase
9
9
  :word, :words
10
10
  )
11
11
 
12
- TEST_REGEX = /[a-z0-9 -]+/i.freeze
12
+ TEST_REGEX = /[a-z0-9 -]+/i
13
13
 
14
14
  def test_words
15
15
  assert_match(TEST_REGEX, FFaker::FreedomIpsum.words.join(' '))
@@ -5,7 +5,7 @@ require_relative 'helper'
5
5
  class TestFakerGenderIT < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- GENDER_REGEX = /\A(maschio|femmina)\z/.freeze
8
+ GENDER_REGEX = /\A(maschio|femmina)\z/
9
9
 
10
10
  assert_methods_are_deterministic(FFaker::GenderIT, :random)
11
11
 
@@ -5,7 +5,7 @@ require_relative 'helper'
5
5
  class TestFakerGenderJA < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- GENDER_REGEX = /\A[女男]\z/.freeze
8
+ GENDER_REGEX = /\A[女男]\z/
9
9
 
10
10
  assert_methods_are_deterministic(FFaker::GenderJP, :random)
11
11
 
@@ -5,7 +5,7 @@ require_relative 'helper'
5
5
  class TestFakerGenderJP < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- GENDER_REGEX = /\A[女男]\z/.freeze
8
+ GENDER_REGEX = /\A[女男]\z/
9
9
 
10
10
  assert_methods_are_deterministic(FFaker::GenderJP, :random)
11
11
 
@@ -5,7 +5,7 @@ require_relative 'helper'
5
5
  class TestFakerGenderPL < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- GENDER_REGEX = /\A(kobieta|mężczyzna)\z/.freeze
8
+ GENDER_REGEX = /\A(kobieta|mężczyzna)\z/
9
9
 
10
10
  assert_methods_are_deterministic(FFaker::GenderPL, :random)
11
11
 
@@ -5,7 +5,7 @@ require_relative 'helper'
5
5
  class TestHealthcareRU < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- SPECIALIZATION_REGEX = /\A[А-Яа-я\ ()\-]+\z/.freeze
8
+ SPECIALIZATION_REGEX = /\A[А-Яа-я\ ()\-]+\z/
9
9
 
10
10
  assert_methods_are_deterministic(FFaker::HealthcareRU, :doctor_specialization)
11
11
 
@@ -10,7 +10,7 @@ class TestHipsterIpsum < Test::Unit::TestCase
10
10
  :paragraph, :paragraphs, :sentence, :sentences, :word, :words
11
11
  )
12
12
 
13
- TEST_REGEX = /\+1|[ a-z]+/i.freeze
13
+ TEST_REGEX = /\+1|[ a-z]+/i
14
14
 
15
15
  def test_paragraph
16
16
  assert_match(TEST_REGEX, FFaker::HipsterIpsum.paragraph)
@@ -90,6 +90,12 @@ class TestHTMLIpsum < Test::Unit::TestCase
90
90
  assert FFaker::HTMLIpsum.fancy_string.length > 1, 'the string is longer than one char'
91
91
  end
92
92
 
93
+ def test_fancy_string_tags
94
+ # It returns a string with at least one HTML tag
95
+ assert_match(%r{(<.*>[\w\s]+</\w+>){1}}i, FFaker::HTMLIpsum.fancy_string(1))
96
+ assert_match(%r{(<.*>[\w\s]+</\w+>){1}}i, FFaker::HTMLIpsum.fancy_string(3))
97
+ end
98
+
93
99
  def test_fancy_string_breaks
94
100
  # We can't reliably predict what's going to end up inside, so just ensure
95
101
  # that we have a complete string.
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper'
4
+
5
+ class TestIdentificationEC < Test::Unit::TestCase
6
+ include DeterministicHelper
7
+
8
+ assert_methods_are_deterministic(FFaker::IdentificationEC, :ci)
9
+
10
+ def setup
11
+ @tester = FFaker::IdentificationEC
12
+ end
13
+
14
+ def test_ci
15
+ assert_match(/^[0-9]{10}$/, @tester.ci)
16
+ end
17
+
18
+ def test_last_digit
19
+ ci = @tester.ci
20
+ sum = 0
21
+ ci[0..8].chars.each_with_index do |char, index|
22
+ if index.even?
23
+ multiple = char.to_i * 2
24
+ sum += multiple > 9 ? multiple - 9 : multiple
25
+ else
26
+ sum += char.to_i
27
+ end
28
+ end
29
+ mod = sum % 10
30
+ mod = 10 - mod if mod > 0
31
+ assert(ci[9].to_i == mod)
32
+ end
33
+ end
@@ -22,7 +22,7 @@ class TestIdentificationMX < Test::Unit::TestCase
22
22
 
23
23
  def test_curp
24
24
  or_curp_states_abbr = FFaker::IdentificationMX::ESTADOS_CURP.join('|')
25
- re = /\A[a-z][aeioux][a-z]{2}\d{2}[0-1]\d[0-3]\d[hm](?:#{or_curp_states_abbr})[bcdfghjklmnñpqrstvwxyz]{3}[0-9a-z]\d\z/ui
25
+ re = /\A[a-z][aeioux][a-z]{2}\d{2}[0-1]\d[0-3]\d[hm](?:#{or_curp_states_abbr})[bcdfghjklmñpqrstvwxyz]{3}[0-9a-z]\d\z/ui
26
26
  assert_match(re, FFaker::IdentificationMX.curp)
27
27
  end
28
28
  end
@@ -30,7 +30,8 @@ class TestFakerInternetSE < Test::Unit::TestCase
30
30
 
31
31
  def test_free_email
32
32
  email = @tester.free_email
33
- assert email.match(/.+@(gmail\.com|hotmail\.com|yahoo\.com|spray\.se|passagen\.se)/), "mail: #{email} does not match"
33
+ assert email.match(/.+@(gmail\.com|hotmail\.com|yahoo\.com|spray\.se|passagen\.se)/),
34
+ "mail: #{email} does not match"
34
35
  end
35
36
 
36
37
  def test_login_user_name
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper'
4
+
5
+ class TestJoJo < Test::Unit::TestCase
6
+ include DeterministicHelper
7
+
8
+ assert_methods_are_deterministic(FFaker::JoJo, :full_name, :first_name, :last_name, :stand)
9
+
10
+ def setup
11
+ @tester = FFaker::JoJo
12
+ end
13
+
14
+ def test_full_name
15
+ assert_include @tester::FULL_NAMES, @tester.full_name
16
+ end
17
+
18
+ def test_first_name
19
+ assert_include @tester::FIRST_NAMES, @tester.first_name
20
+ end
21
+
22
+ def test_last_name
23
+ assert_include @tester::LAST_NAMES, @tester.last_name
24
+ end
25
+
26
+ def test_stand
27
+ assert_include @tester::STANDS, @tester.stand
28
+ end
29
+ end
@@ -10,7 +10,7 @@ class TestLoremBR < Test::Unit::TestCase
10
10
  :paragraph, :sentence, :phrase, :paragraphs, :sentences, :phrases, :words, :word, :characters
11
11
  )
12
12
 
13
- CHARACTERS = /\A[A-zÀ-ü0-9]+\z/i
13
+ CHARACTERS = /\A[A-zÀ-ü0-9]+\z/i
14
14
  WORD = /\A[A-zÀ-ü-]+\z/i
15
15
  WORDS = /[ A-zÀ-ü-.]+/i
16
16
 
@@ -27,7 +27,7 @@ class TestLoremCN < Test::Unit::TestCase
27
27
  end
28
28
 
29
29
  def test_paragraphs_is_an_array
30
- assert FFaker::LoremCN.paragraphs.class == Array
30
+ assert FFaker::LoremCN.paragraphs.instance_of?(Array)
31
31
  end
32
32
 
33
33
  def test_sentences
@@ -35,12 +35,12 @@ class TestLoremCN < Test::Unit::TestCase
35
35
  end
36
36
 
37
37
  def test_sentences_is_an_array
38
- assert FFaker::LoremCN.sentences.class == Array
38
+ assert FFaker::LoremCN.sentences.instance_of?(Array)
39
39
  end
40
40
 
41
41
  def test_sentences_via_to_s_produces_string_terminated_with_period
42
42
  string = FFaker::LoremCN.sentences.to_s
43
- assert string.class == String
43
+ assert string.instance_of?(String)
44
44
  assert string =~ /。$/
45
45
  end
46
46
 
@@ -10,9 +10,9 @@ class TestLoremFR < Test::Unit::TestCase
10
10
  :paragraph, :paragraphs, :sentence, :sentences, :phrase, :phrases, :word, :words
11
11
  )
12
12
 
13
- REGEX = /\A[ -.ÀÂÉÈÊÎÔÚÛàâéèêîôùûa-z]+\z/i.freeze
14
- REGEX_WORD = /\A[-ÀÂÉÈÊÎÔÚÛàâéèêîôùûa-z]+\z/i.freeze
15
- REGEX_WORDS = /\A[ -ÀÂÉÈÊÎÔÚÛàâéèêîôùûa-z]+\z/i.freeze
13
+ REGEX = /\A[ -.ÀÂÉÈÊÎÔÚÛàâéèêîôùûa-z]+\z/i
14
+ REGEX_WORD = /\A[-ÀÂÉÈÊÎÔÚÛàâéèêîôùûa-z]+\z/i
15
+ REGEX_WORDS = /\A[ -ÀÂÉÈÊÎÔÚÛàâéèêîôùûa-z]+\z/i
16
16
 
17
17
  def test_paragraph
18
18
  assert_match(REGEX, FFaker::LoremFR.paragraph)
@@ -11,8 +11,8 @@ class TestLoremIE < Test::Unit::TestCase
11
11
  :phrase, :phrases, :word, :words, :question
12
12
  )
13
13
 
14
- WORDS_REGEX = /\A[\w\W]+\z/i.freeze # spaces, alphanumeric & perioids, etc.
15
- WORD_REGEX = /\A[áéíóúa-z]+\z/i.freeze
14
+ WORDS_REGEX = /\A[\w\W]+\z/i # spaces, alphanumeric & perioids, etc.
15
+ WORD_REGEX = /\A[áéíóúa-z]+\z/i
16
16
 
17
17
  def test_paragraph
18
18
  assert_match(WORDS_REGEX, FFaker::LoremIE.paragraph)
@@ -5,9 +5,9 @@ require_relative 'helper'
5
5
  class TestLoremKR < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- KOREAN_SENTENCE_MATCHER = /\A[ .가-힣]+\z/.freeze
9
- KOREAN_WORDS_MATCHER = /\A[ 가-힣]+\z/.freeze
10
- KOREAN_WORD_MATCHER = /\A[가-힣]+\z/.freeze
8
+ KOREAN_SENTENCE_MATCHER = /\A[ .가-힣]+\z/
9
+ KOREAN_WORDS_MATCHER = /\A[ 가-힣]+\z/
10
+ KOREAN_WORD_MATCHER = /\A[가-힣]+\z/
11
11
 
12
12
  assert_methods_are_deterministic(
13
13
  FFaker::LoremKR,
@@ -5,8 +5,8 @@ require_relative 'helper'
5
5
  class TestFakerLoremPL < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- POLISH_WORD_MATCHER = /\A[A-Ża-ż\s]+\z/.freeze
9
- POLISH_SENTENCE_MATCHER = /\A[A-Ża-ż\s.!?,]+\z/.freeze
8
+ POLISH_WORD_MATCHER = /\A[A-Ża-ż\s]+\z/
9
+ POLISH_SENTENCE_MATCHER = /\A[A-Ża-ż\s.!?,]+\z/
10
10
 
11
11
  assert_methods_are_deterministic(
12
12
  FFaker::LoremPL,
@@ -5,9 +5,9 @@ require_relative 'helper'
5
5
  class TestLoremRU < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- SENTENCE_MATCHER = /\A[а-яА-ЯёЁ\-\s.!?,]+\z/.freeze
9
- WORDS_MATCHER = /\A[А-Яа-яёЁ\-\s]+\z/.freeze
10
- WORD_MATCHER = /\A[А-Яа-яёЁ\-]+\z/.freeze
8
+ SENTENCE_MATCHER = /\A[а-яА-ЯёЁ\-\s.!?,]+\z/
9
+ WORDS_MATCHER = /\A[А-Яа-яёЁ\-\s]+\z/
10
+ WORD_MATCHER = /\A[А-Яа-яёЁ\-]+\z/
11
11
 
12
12
  assert_methods_are_deterministic(
13
13
  FFaker::LoremRU,
@@ -5,9 +5,9 @@ require_relative 'helper'
5
5
  class TestLoremUA < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- SENTENCE_MATCHER = /\A[а-яА-ЯіїєґІЇЄҐ’\-\s.!?,]+\z/.freeze
9
- WORDS_MATCHER = /\A[а-яА-ЯіїєґІЇЄҐ’\-\s]+\z/.freeze
10
- WORD_MATCHER = /\A[а-яА-ЯіїєґІЇЄҐ’\-]+\z/.freeze
8
+ SENTENCE_MATCHER = /\A[а-яА-ЯіїєґІЇЄҐ’\-\s.!?,]+\z/
9
+ WORDS_MATCHER = /\A[а-яА-ЯіїєґІЇЄҐ’\-\s]+\z/
10
+ WORD_MATCHER = /\A[а-яА-ЯіїєґІЇЄҐ’\-]+\z/
11
11
 
12
12
  assert_methods_are_deterministic(
13
13
  FFaker::LoremUA,
@@ -11,4 +11,37 @@ class TestModuleUtils < Test::Unit::TestCase
11
11
  assert result.frozen?
12
12
  result.each { |e| assert e.frozen? }
13
13
  end
14
+
15
+ def test_unique
16
+ generator = Object.new
17
+ generator.extend FFaker::ModuleUtils
18
+ # returns [1 1 2 2 1 1 2 2 ..][call_index]
19
+ def generator.test
20
+ index = Thread.current[:test_unique] ||= 0
21
+ Thread.current[:test_unique] = (index > 2 ? 0 : index + 1)
22
+ (index / 2) + 1
23
+ end
24
+
25
+ assert_equal(1, generator.unique.test)
26
+ assert_equal(2, generator.unique.test)
27
+
28
+ Thread.new do
29
+ assert_equal(1, generator.unique.test)
30
+ assert_equal(2, generator.unique.test)
31
+
32
+ assert_raises FFaker::UniqueUtils::RetryLimitExceeded do
33
+ generator.unique.test
34
+ end
35
+
36
+ generator.unique.clear
37
+ generator.unique.test
38
+ end.join
39
+
40
+ assert_raises FFaker::UniqueUtils::RetryLimitExceeded do
41
+ generator.unique.test
42
+ end
43
+
44
+ FFaker::UniqueUtils.clear
45
+ generator.unique.test
46
+ end
14
47
  end
data/test/test_name_da.rb CHANGED
@@ -10,7 +10,7 @@ class TestFakerNameDA < Test::Unit::TestCase
10
10
  :any_name, :male_name, :female_name, :last_name, :prefix
11
11
  )
12
12
 
13
- RU_REGEX = /[А-Я][а-я]+/.freeze
13
+ RU_REGEX = /[А-Я][а-я]+/
14
14
 
15
15
  def setup
16
16
  @tester = FFaker::NameDA