ffaker 2.20.0 → 2.25.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 (137) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +163 -17
  3. data/Gemfile +15 -0
  4. data/README.md +19 -7
  5. data/REFERENCE.md +1479 -1395
  6. data/Rakefile +16 -47
  7. data/bin/console +9 -0
  8. data/ffaker.gemspec +9 -23
  9. data/lib/ffaker/address.rb +5 -5
  10. data/lib/ffaker/address_br.rb +14 -2
  11. data/lib/ffaker/address_fr.rb +3 -5
  12. data/lib/ffaker/address_it.rb +1 -5
  13. data/lib/ffaker/address_ua.rb +1 -1
  14. data/lib/ffaker/animal_br.rb +12 -0
  15. data/lib/ffaker/avatar.rb +11 -3
  16. data/lib/ffaker/bank.rb +13 -1
  17. data/lib/ffaker/bank_us.rb +37 -0
  18. data/lib/ffaker/book.rb +15 -7
  19. data/lib/ffaker/boolean.rb +4 -0
  20. data/lib/ffaker/cheesy_lingo.rb +2 -2
  21. data/lib/ffaker/code.rb +1 -1
  22. data/lib/ffaker/company.rb +5 -8
  23. data/lib/ffaker/company_fr.rb +2 -2
  24. data/lib/ffaker/crypto.rb +14 -0
  25. data/lib/ffaker/data/address_br/complement +3 -0
  26. data/lib/ffaker/data/address_br/neighborhood_prefixes +3 -0
  27. data/lib/ffaker/data/address_de/state +1 -0
  28. data/lib/ffaker/data/animal_br/common_names +423 -0
  29. data/lib/ffaker/data/jo_jo/first_names +356 -0
  30. data/lib/ffaker/data/jo_jo/full_names +225 -0
  31. data/lib/ffaker/data/jo_jo/last_names +153 -0
  32. data/lib/ffaker/data/jo_jo/stands +149 -0
  33. data/lib/ffaker/data/job_tw/job_nouns +201 -0
  34. data/lib/ffaker/data/lorem_tw/words +789 -0
  35. data/lib/ffaker/date.rb +40 -0
  36. data/lib/ffaker/filesystem.rb +12 -2
  37. data/lib/ffaker/geolocation.rb +2 -2
  38. data/lib/ffaker/guid.rb +7 -1
  39. data/lib/ffaker/html_ipsum.rb +7 -1
  40. data/lib/ffaker/identification_br.rb +3 -12
  41. data/lib/ffaker/identification_ec.rb +39 -0
  42. data/lib/ffaker/identification_es_cl.rb +2 -2
  43. data/lib/ffaker/identification_es_co.rb +1 -1
  44. data/lib/ffaker/identification_fi.rb +73 -0
  45. data/lib/ffaker/identification_kr.rb +11 -4
  46. data/lib/ffaker/identification_mx.rb +1 -1
  47. data/lib/ffaker/identification_pl.rb +6 -6
  48. data/lib/ffaker/identification_tw.rb +4 -3
  49. data/lib/ffaker/image.rb +28 -4
  50. data/lib/ffaker/jo_jo.rb +24 -0
  51. data/lib/ffaker/job_tw.rb +12 -0
  52. data/lib/ffaker/lorem_ja.rb +1 -1
  53. data/lib/ffaker/lorem_ru.rb +1 -1
  54. data/lib/ffaker/lorem_tw.rb +40 -0
  55. data/lib/ffaker/movie.rb +1 -1
  56. data/lib/ffaker/name_fr.rb +4 -3
  57. data/lib/ffaker/name_pl.rb +3 -3
  58. data/lib/ffaker/number.rb +6 -2
  59. data/lib/ffaker/phone_number_de.rb +3 -3
  60. data/lib/ffaker/skill.rb +1 -1
  61. data/lib/ffaker/ssn.rb +4 -2
  62. data/lib/ffaker/ssn_se.rb +2 -2
  63. data/lib/ffaker/string.rb +7 -7
  64. data/lib/ffaker/time.rb +4 -4
  65. data/lib/ffaker/tweet.rb +1 -1
  66. data/lib/ffaker/utils/module_utils.rb +10 -20
  67. data/lib/ffaker/utils/unique_utils.rb +34 -21
  68. data/lib/ffaker/uuid.rb +175 -0
  69. data/lib/ffaker/vehicle.rb +63 -1
  70. data/lib/{version.rb → ffaker/version.rb} +1 -1
  71. data/lib/ffaker.rb +64 -190
  72. data/scripts/reference.rb +21 -21
  73. data/test/helper.rb +7 -9
  74. data/test/test_address_br.rb +15 -2
  75. data/test/test_address_da.rb +3 -3
  76. data/test/test_address_fi.rb +2 -2
  77. data/test/test_address_se.rb +2 -2
  78. data/test/test_address_ua.rb +1 -1
  79. data/test/test_animal_br.rb +17 -0
  80. data/test/test_array_utils.rb +1 -1
  81. data/test/test_avatar.rb +30 -7
  82. data/test/test_bank.rb +15 -1
  83. data/test/test_bank_us.rb +37 -0
  84. data/test/test_book.rb +29 -0
  85. data/test/test_boolean.rb +32 -1
  86. data/test/test_cheesy_lingo.rb +1 -1
  87. data/test/test_color.rb +3 -3
  88. data/test/test_crypto.rb +15 -0
  89. data/test/test_date.rb +47 -0
  90. data/test/test_filesystem.rb +30 -4
  91. data/test/test_freedom_ipsum.rb +1 -1
  92. data/test/test_gender_it.rb +1 -1
  93. data/test/test_gender_ja.rb +1 -1
  94. data/test/test_gender_jp.rb +1 -1
  95. data/test/test_gender_pl.rb +1 -1
  96. data/test/test_guid.rb +1 -1
  97. data/test/test_healthcare_ru.rb +1 -1
  98. data/test/test_hipster_ipsum.rb +1 -1
  99. data/test/test_html_ipsum.rb +6 -0
  100. data/test/test_identification.rb +12 -2
  101. data/test/test_identification_ec.rb +33 -0
  102. data/test/test_identification_es_mx.rb +3 -1
  103. data/test/test_identification_fi.rb +39 -0
  104. data/test/test_identification_it.rb +12 -1
  105. data/test/test_identification_kr.rb +3 -3
  106. data/test/test_image.rb +51 -5
  107. data/test/test_internet.rb +3 -1
  108. data/test/test_internet_se.rb +5 -2
  109. data/test/test_jo_jo.rb +29 -0
  110. data/test/test_job_tw.rb +21 -0
  111. data/test/test_lorem_br.rb +3 -3
  112. data/test/test_lorem_cn.rb +3 -3
  113. data/test/test_lorem_fr.rb +3 -3
  114. data/test/test_lorem_ie.rb +2 -2
  115. data/test/test_lorem_kr.rb +3 -3
  116. data/test/test_lorem_pl.rb +2 -2
  117. data/test/test_lorem_ru.rb +3 -3
  118. data/test/test_lorem_tw.rb +54 -0
  119. data/test/test_lorem_ua.rb +3 -3
  120. data/test/test_module_utils.rb +42 -0
  121. data/test/test_music.rb +4 -4
  122. data/test/test_name_da.rb +1 -1
  123. data/test/test_name_ph.rb +1 -1
  124. data/test/test_name_ru.rb +2 -2
  125. data/test/test_name_ua.rb +2 -2
  126. data/test/test_number.rb +14 -2
  127. data/test/test_phone_number_nl.rb +1 -1
  128. data/test/test_phone_number_se.rb +1 -1
  129. data/test/test_phone_number_sg.rb +8 -8
  130. data/test/test_ssn_se.rb +1 -1
  131. data/test/test_unique_utils.rb +29 -5
  132. data/test/test_units.rb +6 -6
  133. data/test/test_units_english.rb +15 -15
  134. data/test/test_units_metric.rb +15 -15
  135. data/test/test_uuid.rb +73 -0
  136. data/test/test_vehicle.rb +27 -1
  137. metadata +41 -245
@@ -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,
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper'
4
+
5
+ class TestLoremTW < Test::Unit::TestCase
6
+ include DeterministicHelper
7
+
8
+ assert_methods_are_deterministic(
9
+ FFaker::LoremTW,
10
+ :paragraph, :paragraphs, :sentence, :sentences, :word, :words
11
+ )
12
+
13
+ def test_paragraph
14
+ assert_greater_than_or_equal_to FFaker::LoremTW.paragraph.length, 3 * 4 * 2
15
+ end
16
+
17
+ def test_sentence
18
+ assert_greater_than_or_equal_to FFaker::LoremTW.sentence.length, 4 * 2
19
+ end
20
+
21
+ def test_paragraphs
22
+ assert_greater_than_or_equal_to FFaker::LoremTW.paragraphs.length, 2
23
+ end
24
+
25
+ def test_paragraphs_is_not_a_string_representation_of_an_array
26
+ assert !/[\[\]]+/.match([FFaker::LoremTW.paragraphs].flatten.join(' '))
27
+ end
28
+
29
+ def test_paragraphs_is_an_array
30
+ assert FFaker::LoremTW.paragraphs.instance_of?(Array)
31
+ end
32
+
33
+ def test_sentences
34
+ assert_greater_than_or_equal_to FFaker::LoremTW.sentences.length, 2
35
+ end
36
+
37
+ def test_sentences_is_an_array
38
+ assert FFaker::LoremTW.sentences.instance_of?(Array)
39
+ end
40
+
41
+ def test_sentences_via_to_s_produces_string_terminated_with_period
42
+ string = FFaker::LoremTW.sentences.to_s
43
+ assert string.instance_of?(String)
44
+ assert string =~ /。$/
45
+ end
46
+
47
+ def test_words
48
+ assert_greater_than_or_equal_to FFaker::LoremTW.words.length, 2
49
+ end
50
+
51
+ def test_word
52
+ assert_greater_than_or_equal_to FFaker::LoremTW.word.length, 1
53
+ end
54
+ end
@@ -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,46 @@ 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
47
+
48
+ def test_luhn_check
49
+ obj = Object.new
50
+ obj.extend FFaker::ModuleUtils
51
+ assert obj.luhn_check('97248708') == '6'
52
+ assert obj.luhn_check('1789372997') == '4'
53
+ assert obj.luhn_check('8899982700037') == '1'
54
+ assert obj.luhn_check('1234567820001') == '0'
55
+ end
14
56
  end
data/test/test_music.rb CHANGED
@@ -11,18 +11,18 @@ class TestMusic < Test::Unit::TestCase
11
11
  )
12
12
 
13
13
  def test_genre
14
- assert_match(%r{[A-z]|\W|&/+}, FFaker::Music.genre)
14
+ assert_match(%r{[A-Za-z]|\W|&/+}, FFaker::Music.genre)
15
15
  end
16
16
 
17
17
  def test_album
18
- assert_match(/\s|[A-z]|\W|\d|'|\?+/, FFaker::Music.album)
18
+ assert_match(/\s|[A-Za-z]|\W|\d|'|\?+/, FFaker::Music.album)
19
19
  end
20
20
 
21
21
  def test_artist
22
- assert_match(/\s|[A-z]|\W|\d|'|\?|&|\+|\.|-+/, FFaker::Music.artist)
22
+ assert_match(/\s|[A-Za-z]|\W|\d|'|\?|&|\+|\.|-+/, FFaker::Music.artist)
23
23
  end
24
24
 
25
25
  def test_song
26
- assert_match(/\s|[A-z]|\W|\d|'|\?|&|\+|\.|-+/, FFaker::Music.song)
26
+ assert_match(/\s|[A-Za-z]|\W|\d|'|\?|&|\+|\.|-+/, FFaker::Music.song)
27
27
  end
28
28
  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
data/test/test_name_ph.rb CHANGED
@@ -5,7 +5,7 @@ require_relative 'helper'
5
5
  class TestFakerNamePH < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- PH_REGEXP = /\A([\wñÑú-]+\.? ?){2,5}\z/.freeze
8
+ PH_REGEXP = /\A([\wñÑú-]+\.? ?){2,5}\z/
9
9
 
10
10
  assert_methods_are_deterministic(
11
11
  FFaker::NamePH,
data/test/test_name_ru.rb CHANGED
@@ -5,8 +5,8 @@ require_relative 'helper'
5
5
  class TestNameRU < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- RU_REGEX = /\A[а-яА-Я]{2,}\z/.freeze
9
- RU_REGEX_MULTIPLE_WORDS = /\A[а-яА-Я\s]+\z/.freeze
8
+ RU_REGEX = /\A[а-яА-Я]{2,}\z/
9
+ RU_REGEX_MULTIPLE_WORDS = /\A[а-яА-Я\s]+\z/
10
10
 
11
11
  assert_methods_are_deterministic(
12
12
  FFaker::NameRU,
data/test/test_name_ua.rb CHANGED
@@ -15,8 +15,8 @@ class TestNameUA < Test::Unit::TestCase
15
15
  def setup
16
16
  @tester = FFaker::NameUA
17
17
 
18
- @single_word_name_regexp = /\A[а-яА-ЯіїєґІЇЄҐ’\-]+\z/.freeze
19
- @multiple_words_name_regexp = /\A[а-яА-ЯіїєґІЇЄҐ’\-\s]+\z/.freeze
18
+ @single_word_name_regexp = /\A[а-яА-ЯіїєґІЇЄҐ’-]+\z/
19
+ @multiple_words_name_regexp = /\A[а-яА-ЯіїєґІЇЄҐ’\-\s]+\z/
20
20
  end
21
21
 
22
22
  def test_first_name_male
data/test/test_number.rb CHANGED
@@ -5,7 +5,7 @@ require_relative 'helper'
5
5
  class TestNumber < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- assert_methods_are_deterministic(FFaker::Number, :number, :decimal)
8
+ assert_methods_are_deterministic(FFaker::Number, :number, :decimal, :between)
9
9
 
10
10
  def setup
11
11
  @tester = FFaker::Number
@@ -13,7 +13,7 @@ class TestNumber < Test::Unit::TestCase
13
13
 
14
14
  def test_number
15
15
  assert @tester.number.is_a?(Integer)
16
- assert @tester.number.digits.count == 1
16
+ assert @tester.number.digits.one?
17
17
  assert @tester.number(digits: 3).digits.count == 3
18
18
  assert_match(/\d/, @tester.number.to_s)
19
19
  assert_match(/\d{3}/, @tester.number(digits: 3).to_s)
@@ -42,4 +42,16 @@ class TestNumber < Test::Unit::TestCase
42
42
  @tester.decimal(fractional_digits: 0)
43
43
  end
44
44
  end
45
+
46
+ def test_between
47
+ from = -50
48
+ to = 50
49
+ assert_random_between(from..to) { @tester.between(from: from, to: to) }
50
+ assert_instance_of Integer, @tester.between(from: from, to: to)
51
+
52
+ from = -50.0
53
+ to = 50.0
54
+ assert_random_between(from..to) { @tester.between(from: from, to: to) }
55
+ assert_instance_of Float, @tester.between(from: from, to: to)
56
+ end
45
57
  end
@@ -24,7 +24,7 @@ class TestPhoneNumberNL < Test::Unit::TestCase
24
24
 
25
25
  def test_phone_number
26
26
  10.times do
27
- assert_match(/^0([\s\-]*\d){9}$/, @tester.phone_number)
27
+ assert_match(/^0([\s-]*\d){9}$/, @tester.phone_number)
28
28
  end
29
29
  end
30
30
 
@@ -16,7 +16,7 @@ class TestPhoneNumberSE < Test::Unit::TestCase
16
16
  @tester = FFaker::PhoneNumberSE
17
17
  end
18
18
 
19
- ALLOWED_CHARS = /[()\d +-]/.freeze
19
+ ALLOWED_CHARS = /[()\d +-]/
20
20
 
21
21
  def test_mobile_phone_prefix
22
22
  assert FFaker::PhoneNumberSE::MOBILE_PHONE_PREFIX.include?(@tester.mobile_prefix)
@@ -17,36 +17,36 @@ class TestPhoneNumberSG < Test::Unit::TestCase
17
17
  end
18
18
 
19
19
  def test_voip_number
20
- assert_match(/3\d{3}\s\d{4}/, @tester.voip_number)
20
+ assert_match(/\A3\d{3}\s\d{4}\z/, @tester.voip_number)
21
21
  end
22
22
 
23
23
  def test_fixed_line_number
24
- assert_match(/6\d{3}\s\d{4}/, @tester.fixed_line_number)
24
+ assert_match(/\A6\d{3}\s\d{4}\z/, @tester.fixed_line_number)
25
25
  end
26
26
 
27
27
  def test_mobile_number
28
- assert_match(/8\d{3}\s\d{4}/, @tester.mobile_number)
28
+ assert_match(/\A8\d{3}\s\d{4}\z/, @tester.mobile_number)
29
29
  end
30
30
 
31
31
  def test_mobile_or_pager_number
32
- assert_match(/9\d{3}\s\d{4}/, @tester.mobile_or_pager_number)
32
+ assert_match(/\A9\d{3}\s\d{4}\z/, @tester.mobile_or_pager_number)
33
33
  end
34
34
 
35
35
  def test_international_toll_free_number
36
- assert_match(/800\s\d{3}\s\d{4}/, @tester.international_toll_free_number)
36
+ assert_match(/\A800\s\d{3}\s\d{4}\z/, @tester.international_toll_free_number)
37
37
  end
38
38
 
39
39
  def test_toll_free_number
40
- assert_match(/1800\s\d{3}\s\d{4}/, @tester.toll_free_number)
40
+ assert_match(/\A1800\s\d{3}\s\d{4}\z/, @tester.toll_free_number)
41
41
  end
42
42
 
43
43
  def test_premium_service_number
44
- assert_match(/1900\s\d{3}\s\d{4}/, @tester.premium_service_number)
44
+ assert_match(/\A1900\s\d{3}\s\d{4}\z/, @tester.premium_service_number)
45
45
  end
46
46
 
47
47
  def test_phone_number
48
48
  10.times do
49
- assert_match(/[6,8,9]\d{3}\s\d{4}/, @tester.phone_number)
49
+ assert_match(/\A[689]\d{3}\s\d{4}\z/, @tester.phone_number)
50
50
  end
51
51
  end
52
52
  end
data/test/test_ssn_se.rb CHANGED
@@ -24,7 +24,7 @@ class TestSSNSE < Test::Unit::TestCase
24
24
  assert equal?(ssn_female[10].to_i)
25
25
 
26
26
  assert_raise ArgumentError do
27
- FFaker::SSNSE.ssn(gender: :unkown)
27
+ FFaker::SSNSE.ssn(gender: :unknown)
28
28
  end
29
29
  end
30
30
 
@@ -39,16 +39,40 @@ class TestUniqueUtils < Test::Unit::TestCase
39
39
  unique_object.test
40
40
  end
41
41
 
42
- FFaker::UniqueUtils.clear
42
+ unique_object.clear
43
43
 
44
44
  assert_equal(1, unique_object.test)
45
+ end
45
46
 
46
- assert_raises FFaker::UniqueUtils::RetryLimitExceeded do
47
- unique_object.test
47
+ def test_clears_all_unique_values
48
+ stubbed_generator = Object.new
49
+ def stubbed_generator.test
50
+ 1
51
+ end
52
+ other_stubbed_generator = Object.new
53
+ def other_stubbed_generator.test
54
+ 1
48
55
  end
49
56
 
50
- unique_object.clear
57
+ unique_object = FFaker::UniqueUtils.add_instance(stubbed_generator, 3)
58
+ other_unique_object = FFaker::UniqueUtils.add_instance(other_stubbed_generator, 3)
51
59
 
52
- assert_equal(1, unique_object.test)
60
+ [unique_object, other_unique_object].each do |tested_unique_object|
61
+ assert_equal(1, tested_unique_object.test)
62
+
63
+ assert_raises FFaker::UniqueUtils::RetryLimitExceeded do
64
+ tested_unique_object.test
65
+ end
66
+ end
67
+
68
+ FFaker::UniqueUtils.clear
69
+
70
+ [unique_object, other_unique_object].each do |tested_unique_object|
71
+ assert_equal(1, tested_unique_object.test)
72
+ end
73
+ end
74
+
75
+ def test_generates_unique_numbers
76
+ assert_nothing_raised { FFaker::Number.unique.number(digits: 1) }
53
77
  end
54
78
  end
data/test/test_units.rb CHANGED
@@ -13,25 +13,25 @@ class TestUnits < Test::Unit::TestCase
13
13
 
14
14
  def setup
15
15
  @tester = FFaker::Unit
16
- @time_units = @tester::TIME_UNITS.map { |u| OpenStruct.new u }
17
- @temperature_units = @tester::TEMPERATURE_UNITS.map { |u| OpenStruct.new u }
16
+ @time_units = @tester::TIME_UNITS
17
+ @temperature_units = @tester::TEMPERATURE_UNITS
18
18
  end
19
19
 
20
20
  def test_time_name
21
- assert_include @time_units.map(&:name), @tester.time_name
21
+ assert_include @time_units.map { |unit| unit[:name] }, @tester.time_name
22
22
  end
23
23
 
24
24
  def test_time_abbr
25
- assert_include @time_units.map(&:abbreviation), @tester.time_abbr
25
+ assert_include @time_units.map { |unit| unit[:abbreviation] }, @tester.time_abbr
26
26
  end
27
27
 
28
28
  def test_temperature_name
29
- assert_include @temperature_units.map(&:name), @tester.temperature_name
29
+ assert_include @temperature_units.map { |unit| unit[:name] }, @tester.temperature_name
30
30
  end
31
31
 
32
32
  def test_temperature_abbr
33
33
  assert_include \
34
- @temperature_units.map(&:abbreviation),
34
+ @temperature_units.map { |unit| unit[:abbreviation] },
35
35
  @tester.temperature_abbr
36
36
  end
37
37
  end
@@ -14,50 +14,50 @@ class TestUnitsEnglish < Test::Unit::TestCase
14
14
 
15
15
  def setup
16
16
  @tester = FFaker::UnitEnglish
17
- @length_units = @tester::LENGTH_UNITS.map { |u| OpenStruct.new u }
18
- @mass_units = @tester::MASS_UNITS.map { |u| OpenStruct.new u }
19
- @liquid_units = @tester::LIQUID_UNITS.map { |u| OpenStruct.new u }
20
- @volume_units = @tester::VOLUME_UNITS.map { |u| OpenStruct.new u }
21
- @area_units = @tester::AREA_UNITS.map { |u| OpenStruct.new u }
17
+ @length_units = @tester::LENGTH_UNITS
18
+ @mass_units = @tester::MASS_UNITS
19
+ @liquid_units = @tester::LIQUID_UNITS
20
+ @volume_units = @tester::VOLUME_UNITS
21
+ @area_units = @tester::AREA_UNITS
22
22
  end
23
23
 
24
24
  def test_length_name
25
- assert_include @length_units.map(&:name), @tester.length_name
25
+ assert_include @length_units.map { |unit| unit[:name] }, @tester.length_name
26
26
  end
27
27
 
28
28
  def test_length_abbrev
29
- assert_include @length_units.map(&:abbreviation), @tester.length_abbr
29
+ assert_include @length_units.map { |unit| unit[:abbreviation] }, @tester.length_abbr
30
30
  end
31
31
 
32
32
  def test_mass_name
33
- assert_include @mass_units.map(&:name), @tester.mass_name
33
+ assert_include @mass_units.map { |unit| unit[:name] }, @tester.mass_name
34
34
  end
35
35
 
36
36
  def test_mass_abbr
37
- assert_include @mass_units.map(&:abbreviation), @tester.mass_abbr
37
+ assert_include @mass_units.map { |unit| unit[:abbreviation] }, @tester.mass_abbr
38
38
  end
39
39
 
40
40
  def test_liquid_name
41
- assert_include @liquid_units.map(&:name), @tester.liquid_name
41
+ assert_include @liquid_units.map { |unit| unit[:name] }, @tester.liquid_name
42
42
  end
43
43
 
44
44
  def test_liquid_abbr
45
- assert_include @liquid_units.map(&:abbreviation), @tester.liquid_abbr
45
+ assert_include @liquid_units.map { |unit| unit[:abbreviation] }, @tester.liquid_abbr
46
46
  end
47
47
 
48
48
  def test_volume_name
49
- assert_include @volume_units.map(&:name), @tester.volume_name
49
+ assert_include @volume_units.map { |unit| unit[:name] }, @tester.volume_name
50
50
  end
51
51
 
52
52
  def test_volume_abbr
53
- assert_include @volume_units.map(&:abbreviation), @tester.volume_abbr
53
+ assert_include @volume_units.map { |unit| unit[:abbreviation] }, @tester.volume_abbr
54
54
  end
55
55
 
56
56
  def test_area_name
57
- assert_include @area_units.map(&:name), @tester.area_name
57
+ assert_include @area_units.map { |unit| unit[:name] }, @tester.area_name
58
58
  end
59
59
 
60
60
  def test_area_abbr
61
- assert_include @area_units.map(&:abbreviation), @tester.area_abbr
61
+ assert_include @area_units.map { |unit| unit[:abbreviation] }, @tester.area_abbr
62
62
  end
63
63
  end
@@ -14,50 +14,50 @@ class TestUnitsMetric < Test::Unit::TestCase
14
14
 
15
15
  def setup
16
16
  @tester = FFaker::UnitMetric
17
- @length_units = @tester::LENGTH_UNITS.map { |u| OpenStruct.new u }
18
- @mass_units = @tester::MASS_UNITS.map { |u| OpenStruct.new u }
19
- @liquid_units = @tester::LIQUID_UNITS.map { |u| OpenStruct.new u }
20
- @volume_units = @tester::VOLUME_UNITS.map { |u| OpenStruct.new u }
21
- @area_units = @tester::AREA_UNITS.map { |u| OpenStruct.new u }
17
+ @length_units = @tester::LENGTH_UNITS
18
+ @mass_units = @tester::MASS_UNITS
19
+ @liquid_units = @tester::LIQUID_UNITS
20
+ @volume_units = @tester::VOLUME_UNITS
21
+ @area_units = @tester::AREA_UNITS
22
22
  end
23
23
 
24
24
  def test_length_name
25
- assert_include @length_units.map(&:name), @tester.length_name
25
+ assert_include @length_units.map { |unit| unit[:name] }, @tester.length_name
26
26
  end
27
27
 
28
28
  def test_length_abbrev
29
- assert_include @length_units.map(&:abbreviation), @tester.length_abbr
29
+ assert_include @length_units.map { |unit| unit[:abbreviation] }, @tester.length_abbr
30
30
  end
31
31
 
32
32
  def test_mass_name
33
- assert_include @mass_units.map(&:name), @tester.mass_name
33
+ assert_include @mass_units.map { |unit| unit[:name] }, @tester.mass_name
34
34
  end
35
35
 
36
36
  def test_mass_abbr
37
- assert_include @mass_units.map(&:abbreviation), @tester.mass_abbr
37
+ assert_include @mass_units.map { |unit| unit[:abbreviation] }, @tester.mass_abbr
38
38
  end
39
39
 
40
40
  def test_liquid_name
41
- assert_include @liquid_units.map(&:name), @tester.liquid_name
41
+ assert_include @liquid_units.map { |unit| unit[:name] }, @tester.liquid_name
42
42
  end
43
43
 
44
44
  def test_liquid_abbr
45
- assert_include @liquid_units.map(&:abbreviation), @tester.liquid_abbr
45
+ assert_include @liquid_units.map { |unit| unit[:abbreviation] }, @tester.liquid_abbr
46
46
  end
47
47
 
48
48
  def test_volume_name
49
- assert_include @volume_units.map(&:name), @tester.volume_name
49
+ assert_include @volume_units.map { |unit| unit[:name] }, @tester.volume_name
50
50
  end
51
51
 
52
52
  def test_volume_abbr
53
- assert_include @volume_units.map(&:abbreviation), @tester.volume_abbr
53
+ assert_include @volume_units.map { |unit| unit[:abbreviation] }, @tester.volume_abbr
54
54
  end
55
55
 
56
56
  def test_area_name
57
- assert_include @area_units.map(&:name), @tester.area_name
57
+ assert_include @area_units.map { |unit| unit[:name] }, @tester.area_name
58
58
  end
59
59
 
60
60
  def test_area_abbr
61
- assert_include @area_units.map(&:abbreviation), @tester.area_abbr
61
+ assert_include @area_units.map { |unit| unit[:abbreviation] }, @tester.area_abbr
62
62
  end
63
63
  end
data/test/test_uuid.rb ADDED
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper'
4
+
5
+ class TestUUID < Test::Unit::TestCase
6
+ include DeterministicHelper
7
+
8
+ assert_methods_are_deterministic(
9
+ FFaker::UUID,
10
+ :uuidv4, :uuidv6, :uuidv7, :uuidv8
11
+ )
12
+
13
+ def setup
14
+ @tester = FFaker::UUID
15
+ end
16
+
17
+ # @see https://stackoverflow.com/a/38191104
18
+ def test_uuidv4
19
+ raw_uuid = @tester.uuidv4
20
+ assert_format(raw_uuid)
21
+
22
+ uuid = uuid_to_integer(raw_uuid)
23
+ assert_version(uuid, 0b0100)
24
+ assert_variant(uuid, 0b10)
25
+ end
26
+
27
+ def test_uuidv6
28
+ raw_uuid = @tester.uuidv6
29
+ assert_format(raw_uuid)
30
+
31
+ uuid = uuid_to_integer(raw_uuid)
32
+ assert_version(uuid, 0b0110)
33
+ assert_variant(uuid, 0b10)
34
+ end
35
+
36
+ def test_uuidv7
37
+ raw_uuid = @tester.uuidv7
38
+ assert_format(raw_uuid)
39
+
40
+ uuid = uuid_to_integer(raw_uuid)
41
+ assert_version(uuid, 0b0111)
42
+ assert_variant(uuid, 0b10)
43
+ end
44
+
45
+ def test_uuidv8
46
+ raw_uuid = @tester.uuidv8
47
+ assert_format(raw_uuid)
48
+
49
+ uuid = uuid_to_integer(raw_uuid)
50
+ assert_version(uuid, 0b1000)
51
+ assert_variant(uuid, 0b10)
52
+ end
53
+
54
+ private
55
+
56
+ # Matches structure of all UUID versions.
57
+ def assert_format(uuid)
58
+ assert_match(/\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\z/,
59
+ uuid)
60
+ end
61
+
62
+ def assert_version(uuid, version)
63
+ assert_equal(version, (uuid >> 76) & 0b1111)
64
+ end
65
+
66
+ def assert_variant(uuid, variant)
67
+ assert_equal(variant, (uuid >> 62) & 0b11)
68
+ end
69
+
70
+ def uuid_to_integer(uuid)
71
+ uuid.delete('-').to_i(16)
72
+ end
73
+ end