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.
- checksums.yaml +4 -4
- data/Changelog.md +21 -0
- data/README.md +15 -4
- data/REFERENCE.md +1423 -1396
- data/Rakefile +9 -40
- data/bin/console +9 -0
- data/ffaker.gemspec +9 -19
- data/lib/ffaker/address_br.rb +14 -2
- data/lib/ffaker/address_it.rb +0 -1
- data/lib/ffaker/address_ua.rb +1 -1
- data/lib/ffaker/animal_br.rb +12 -0
- data/lib/ffaker/book.rb +5 -5
- data/lib/ffaker/code.rb +1 -1
- data/lib/ffaker/company.rb +4 -7
- data/lib/ffaker/company_fr.rb +1 -1
- data/lib/ffaker/data/address_br/complement +3 -0
- data/lib/ffaker/data/address_br/neighborhood_prefixes +3 -0
- data/lib/ffaker/data/address_de/state +1 -0
- data/lib/ffaker/data/animal_br/common_names +423 -0
- data/lib/ffaker/data/jo_jo/first_names +356 -0
- data/lib/ffaker/data/jo_jo/full_names +225 -0
- data/lib/ffaker/data/jo_jo/last_names +153 -0
- data/lib/ffaker/data/jo_jo/stands +149 -0
- data/lib/ffaker/date.rb +31 -0
- data/lib/ffaker/geolocation.rb +2 -2
- data/lib/ffaker/html_ipsum.rb +7 -1
- data/lib/ffaker/identification_br.rb +1 -1
- data/lib/ffaker/identification_ec.rb +39 -0
- data/lib/ffaker/identification_es_cl.rb +2 -2
- data/lib/ffaker/identification_es_co.rb +1 -1
- data/lib/ffaker/identification_kr.rb +3 -3
- data/lib/ffaker/identification_pl.rb +4 -4
- data/lib/ffaker/identification_tw.rb +4 -3
- data/lib/ffaker/jo_jo.rb +24 -0
- data/lib/ffaker/name_pl.rb +1 -1
- data/lib/ffaker/number.rb +2 -2
- data/lib/ffaker/ssn_se.rb +2 -2
- data/lib/ffaker/string.rb +7 -7
- data/lib/ffaker/time.rb +4 -4
- data/lib/ffaker/utils/module_utils.rb +4 -5
- data/lib/ffaker/utils/unique_utils.rb +30 -21
- data/lib/ffaker/vehicle.rb +63 -1
- data/lib/{version.rb → ffaker/version.rb} +1 -1
- data/lib/ffaker.rb +8 -4
- data/scripts/reference.rb +15 -13
- data/test/helper.rb +2 -4
- data/test/test_address_br.rb +15 -2
- data/test/test_address_da.rb +3 -3
- data/test/test_address_fi.rb +2 -2
- data/test/test_address_se.rb +2 -2
- data/test/test_animal_br.rb +17 -0
- data/test/test_cheesy_lingo.rb +1 -1
- data/test/test_color.rb +3 -3
- data/test/test_date.rb +37 -0
- data/test/test_filesystem.rb +3 -3
- data/test/test_freedom_ipsum.rb +1 -1
- data/test/test_gender_it.rb +1 -1
- data/test/test_gender_ja.rb +1 -1
- data/test/test_gender_jp.rb +1 -1
- data/test/test_gender_pl.rb +1 -1
- data/test/test_healthcare_ru.rb +1 -1
- data/test/test_hipster_ipsum.rb +1 -1
- data/test/test_html_ipsum.rb +6 -0
- data/test/test_identification_ec.rb +33 -0
- data/test/test_identification_es_mx.rb +1 -1
- data/test/test_internet_se.rb +2 -1
- data/test/test_jo_jo.rb +29 -0
- data/test/test_lorem_br.rb +1 -1
- data/test/test_lorem_cn.rb +3 -3
- data/test/test_lorem_fr.rb +3 -3
- data/test/test_lorem_ie.rb +2 -2
- data/test/test_lorem_kr.rb +3 -3
- data/test/test_lorem_pl.rb +2 -2
- data/test/test_lorem_ru.rb +3 -3
- data/test/test_lorem_ua.rb +3 -3
- data/test/test_module_utils.rb +33 -0
- data/test/test_name_da.rb +1 -1
- data/test/test_name_ph.rb +1 -1
- data/test/test_name_ru.rb +2 -2
- data/test/test_name_ua.rb +2 -2
- data/test/test_phone_number_se.rb +1 -1
- data/test/test_phone_number_sg.rb +8 -8
- data/test/test_unique_utils.rb +25 -5
- data/test/test_vehicle.rb +28 -1
- metadata +24 -197
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(
|
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(
|
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(
|
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
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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)
|
24
|
-
yield
|
25
|
-
end
|
23
|
+
Array.new(5, &block)
|
26
24
|
end
|
27
25
|
|
28
26
|
assert(returns.uniq.length == 1, options[:message])
|
data/test/test_address_br.rb
CHANGED
@@ -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(
|
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
|
data/test/test_address_da.rb
CHANGED
@@ -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
|
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
|
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
|
35
|
+
assert_match(/\A[- ÆØÅæøåla-z]+\z/i, FFaker::AddressDA.city)
|
36
36
|
end
|
37
37
|
|
38
38
|
def test_street_name
|
data/test/test_address_fi.rb
CHANGED
@@ -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}
|
9
|
-
DIGIT = /\d{1}
|
8
|
+
ALPHA = /\A\p{Alpha}+/
|
9
|
+
DIGIT = /\d{1}/
|
10
10
|
|
11
11
|
assert_methods_are_deterministic(
|
12
12
|
FFaker::AddressFI,
|
data/test/test_address_se.rb
CHANGED
@@ -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}
|
9
|
-
DIGIT = /\d{1}
|
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
|
data/test/test_cheesy_lingo.rb
CHANGED
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
|
9
|
-
VALID_OPACITY_REGEX = /^([0-9].[0-9]{1,2})
|
10
|
-
VALID_PERCENTAGE_REGEX = /^([0-9]{1,3}%)
|
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
|
data/test/test_filesystem.rb
CHANGED
@@ -15,10 +15,10 @@ class TestFakerFilesystem < Test::Unit::TestCase
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_extension
|
18
|
-
assert_match
|
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
|
-
|
34
|
+
@tester.file_name
|
35
35
|
end
|
36
36
|
end
|
data/test/test_freedom_ipsum.rb
CHANGED
data/test/test_gender_it.rb
CHANGED
data/test/test_gender_ja.rb
CHANGED
data/test/test_gender_jp.rb
CHANGED
data/test/test_gender_pl.rb
CHANGED
@@ -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
|
8
|
+
GENDER_REGEX = /\A(kobieta|mężczyzna)\z/
|
9
9
|
|
10
10
|
assert_methods_are_deterministic(FFaker::GenderPL, :random)
|
11
11
|
|
data/test/test_healthcare_ru.rb
CHANGED
@@ -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
|
8
|
+
SPECIALIZATION_REGEX = /\A[А-Яа-я\ ()\-]+\z/
|
9
9
|
|
10
10
|
assert_methods_are_deterministic(FFaker::HealthcareRU, :doctor_specialization)
|
11
11
|
|
data/test/test_hipster_ipsum.rb
CHANGED
@@ -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
|
13
|
+
TEST_REGEX = /\+1|[ a-z]+/i
|
14
14
|
|
15
15
|
def test_paragraph
|
16
16
|
assert_match(TEST_REGEX, FFaker::HipsterIpsum.paragraph)
|
data/test/test_html_ipsum.rb
CHANGED
@@ -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})[
|
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
|
data/test/test_internet_se.rb
CHANGED
@@ -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)/),
|
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
|
data/test/test_jo_jo.rb
ADDED
@@ -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
|
data/test/test_lorem_br.rb
CHANGED
@@ -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
|
|
data/test/test_lorem_cn.rb
CHANGED
@@ -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.
|
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.
|
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.
|
43
|
+
assert string.instance_of?(String)
|
44
44
|
assert string =~ /。$/
|
45
45
|
end
|
46
46
|
|
data/test/test_lorem_fr.rb
CHANGED
@@ -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
|
14
|
-
REGEX_WORD = /\A[-ÀÂÉÈÊÎÔÚÛàâéèêîôùûa-z]+\z/i
|
15
|
-
REGEX_WORDS = /\A[ -ÀÂÉÈÊÎÔÚÛàâéèêîôùûa-z]+\z/i
|
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)
|
data/test/test_lorem_ie.rb
CHANGED
@@ -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
|
15
|
-
WORD_REGEX = /\A[áéíóúa-z]+\z/i
|
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)
|
data/test/test_lorem_kr.rb
CHANGED
@@ -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
|
9
|
-
KOREAN_WORDS_MATCHER = /\A[ 가-힣]+\z
|
10
|
-
KOREAN_WORD_MATCHER = /\A[가-힣]+\z
|
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,
|
data/test/test_lorem_pl.rb
CHANGED
@@ -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
|
9
|
-
POLISH_SENTENCE_MATCHER = /\A[A-Ża-ż\s.!?,]+\z
|
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,
|
data/test/test_lorem_ru.rb
CHANGED
@@ -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
|
9
|
-
WORDS_MATCHER = /\A[А-Яа-яёЁ\-\s]+\z
|
10
|
-
WORD_MATCHER = /\A[А-Яа-яёЁ\-]+\z
|
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,
|
data/test/test_lorem_ua.rb
CHANGED
@@ -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
|
9
|
-
WORDS_MATCHER = /\A[а-яА-ЯіїєґІЇЄҐ’\-\s]+\z
|
10
|
-
WORD_MATCHER = /\A[а-яА-ЯіїєґІЇЄҐ’\-]+\z
|
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,
|
data/test/test_module_utils.rb
CHANGED
@@ -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
|