ffaker 2.20.0 → 2.22.0

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