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