ffaker 2.12.0 → 2.17.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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +28 -0
  3. data/README.md +8 -1
  4. data/REFERENCE.md +1365 -1234
  5. data/Rakefile +0 -6
  6. data/ffaker.gemspec +14 -5
  7. data/lib/ffaker.rb +12 -6
  8. data/lib/ffaker/address_fr.rb +5 -1
  9. data/lib/ffaker/address_nl.rb +1 -3
  10. data/lib/ffaker/address_us.rb +22 -2
  11. data/lib/ffaker/{animals.rb → animal.rb} +0 -0
  12. data/lib/ffaker/{animals_cn.rb → animal_cn.rb} +0 -0
  13. data/lib/ffaker/animal_es.rb +12 -0
  14. data/lib/ffaker/{animals_us.rb → animal_us.rb} +0 -0
  15. data/lib/ffaker/bank.rb +15 -3
  16. data/lib/ffaker/code.rb +17 -0
  17. data/lib/ffaker/color_pl.rb +14 -0
  18. data/lib/ffaker/company_ja.rb +24 -0
  19. data/lib/ffaker/data/address_fr/region +27 -0
  20. data/lib/ffaker/data/address_ja/city +0 -23
  21. data/lib/ffaker/data/address_us/state_abbr +0 -1
  22. data/lib/ffaker/data/animal_es/common_names +135 -0
  23. data/lib/ffaker/data/bank/card_types +12 -0
  24. data/lib/ffaker/data/book/nouns +2 -2
  25. data/lib/ffaker/data/color_pl/names_list +122 -0
  26. data/lib/ffaker/data/filesystem/extension +31 -31
  27. data/lib/ffaker/data/movie/nouns +2 -2
  28. data/lib/ffaker/data/name/first_names_female +0 -230
  29. data/lib/ffaker/data/name/first_names_male +0 -37
  30. data/lib/ffaker/data/sport_pl/summer +53 -0
  31. data/lib/ffaker/data/sport_pl/winter +14 -0
  32. data/lib/ffaker/data/vehicle/color_prefixes +25 -0
  33. data/lib/ffaker/education.rb +4 -8
  34. data/lib/ffaker/education_cn.rb +3 -6
  35. data/lib/ffaker/filesystem.rb +7 -7
  36. data/lib/ffaker/identification_in.rb +15 -0
  37. data/lib/ffaker/identification_kr.rb +2 -2
  38. data/lib/ffaker/identification_mx.rb +1 -1
  39. data/lib/ffaker/identification_pl.rb +77 -0
  40. data/lib/ffaker/identification_tw.rb +23 -0
  41. data/lib/ffaker/internet.rb +4 -6
  42. data/lib/ffaker/internet_se.rb +1 -1
  43. data/lib/ffaker/name_mx.rb +2 -2
  44. data/lib/ffaker/phone_number_br.rb +2 -2
  45. data/lib/ffaker/product.rb +1 -1
  46. data/lib/ffaker/sport_pl.rb +25 -0
  47. data/lib/ffaker/ssn.rb +1 -3
  48. data/lib/ffaker/string.rb +5 -5
  49. data/lib/ffaker/unit.rb +9 -10
  50. data/lib/ffaker/unit_english.rb +18 -19
  51. data/lib/ffaker/unit_metric.rb +15 -16
  52. data/lib/ffaker/utils/random_utils.rb +2 -0
  53. data/lib/ffaker/utils/unique_utils.rb +0 -2
  54. data/lib/ffaker/vehicle.rb +1 -6
  55. data/lib/version.rb +5 -0
  56. data/scripts/benchmark.rb +10 -11
  57. data/test/helper.rb +35 -0
  58. data/test/test_address_au.rb +2 -2
  59. data/test/test_address_br.rb +1 -1
  60. data/test/test_address_fi.rb +2 -2
  61. data/test/test_address_fr.rb +1 -1
  62. data/test/test_address_id.rb +1 -1
  63. data/test/test_address_ja.rb +1 -1
  64. data/test/test_address_nl.rb +1 -1
  65. data/test/test_address_se.rb +2 -2
  66. data/test/test_address_us.rb +9 -0
  67. data/test/test_animal_es.rb +17 -0
  68. data/test/test_array_utils.rb +0 -1
  69. data/test/test_aws.rb +1 -1
  70. data/test/test_bank.rb +41 -5
  71. data/test/test_book.rb +4 -4
  72. data/test/test_code.rb +22 -1
  73. data/test/test_color_pl.rb +13 -0
  74. data/test/test_company_ja.rb +28 -0
  75. data/test/{test_faker.rb → test_ffaker.rb} +5 -1
  76. data/test/test_filesystem.rb +11 -3
  77. data/test/test_geolocation.rb +2 -2
  78. data/test/test_healthcare_ru.rb +1 -1
  79. data/test/test_html_ipsum.rb +1 -1
  80. data/test/test_identification_co.rb +2 -2
  81. data/test/test_identification_es_cl.rb +1 -1
  82. data/test/test_identification_in.rb +20 -0
  83. data/test/test_identification_pl.rb +28 -0
  84. data/test/test_identification_tw.rb +17 -0
  85. data/test/test_image.rb +3 -3
  86. data/test/test_internet.rb +9 -9
  87. data/test/test_internet_se.rb +1 -1
  88. data/test/test_job_cn.rb +1 -1
  89. data/test/test_job_ja.rb +1 -1
  90. data/test/test_job_kr.rb +1 -1
  91. data/test/test_job_vn.rb +1 -1
  92. data/test/test_lorem_cn.rb +6 -6
  93. data/test/test_lorem_ja.rb +3 -3
  94. data/test/test_lorem_pl.rb +1 -1
  95. data/test/test_lorem_ru.rb +1 -1
  96. data/test/test_lorem_ua.rb +1 -1
  97. data/test/test_music.rb +4 -4
  98. data/test/test_name_da.rb +3 -3
  99. data/test/test_phone_number_se.rb +2 -2
  100. data/test/test_sport_pl.rb +30 -0
  101. data/test/test_ssn_se.rb +6 -8
  102. data/test/test_string.rb +3 -3
  103. data/test/test_time.rb +13 -6
  104. data/test/test_tweet.rb +9 -9
  105. data/test/test_vehicle.rb +2 -2
  106. metadata +201 -162
  107. data/lib/ffaker/data/address_jp/city +0 -127
  108. data/lib/ffaker/data/address_jp/designated_city +0 -20
  109. data/lib/ffaker/data/address_jp/street +0 -37
  110. data/lib/ffaker/data/address_jp/tokyo_ward +0 -23
  111. data/lib/ffaker/data/address_jp/village +0 -183
  112. data/lib/ffaker/data/address_jp/ward +0 -188
@@ -6,12 +6,7 @@ module FFaker
6
6
  extend self
7
7
 
8
8
  DRIVETRAINS = %w[4WD 4X4 AWD FWD RWD].freeze
9
- YEARS = [*'1900'..(Date.today.year + 1).to_s].freeze
10
- COLOR_PREFIXES = k(%w[
11
- beautiful bright calm dangerous dark dull fast magnetic magnificent
12
- majestic melodic metallic mundane mute mysterious new pleasant pretty
13
- resonant royal slate soft tranquil vibrant weak
14
- ])
9
+ YEARS = Array('1900'..(::Time.now.year + 1).to_s).freeze
15
10
  TRANSMISSIONS_ABBR = %w[AT MT AM CVT].freeze
16
11
  CYLINDERS = %w[2 5 6 8].freeze
17
12
 
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FFaker
4
+ VERSION = '2.17.0'
5
+ end
@@ -1,22 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rubygems'
4
3
  require 'benchmark'
5
4
 
6
- N = 10_000
5
+ NAMES_COUNT = 10_000
7
6
 
8
7
  def run(name)
9
- require name
10
8
  Benchmark.bm do |rep|
11
- rep.report("generating #{N} names (#{name} #{FFaker::VERSION})") do
12
- N.times do
13
- FFaker::Name.name
14
- end
9
+ rep.report("generating #{NAMES_COUNT} names (#{name})") do
10
+ mod = name == 'ffaker' ? FFaker : Faker
11
+ NAMES_COUNT.times { mod::Name.name }
15
12
  end
16
13
  end
17
- $stdout.flush
18
- exit(0)
19
14
  end
20
15
 
21
- fork { run('faker') }; Process.wait
22
- fork { run('ffaker') }; Process.wait
16
+ %w[faker ffaker].each do |gem_name|
17
+ require gem_name
18
+
19
+ fork { run(gem_name) }
20
+ Process.wait
21
+ end
@@ -28,6 +28,41 @@ module DeterministicHelper
28
28
  assert(returns.uniq.length == 1, options[:message])
29
29
  end
30
30
 
31
+ %w[< > <= >=].each do |operator|
32
+ operator_name =
33
+ case operator[0]
34
+ when '<' then 'less_than'
35
+ when '>' then 'greater_than'
36
+ else raise 'Unexpected operator'
37
+ end
38
+ operator_name += '_or_equal_to' if operator[1] == '='
39
+
40
+ define_method "assert_#{operator_name}" do |got, expected|
41
+ assert(
42
+ got.public_send(operator, expected),
43
+ "Expected #{operator} \"#{expected}\", but got #{got}"
44
+ )
45
+ end
46
+ end
47
+
48
+ def assert_between(got, from, to, exclude_end: false)
49
+ assert_greater_than_or_equal_to got, from
50
+ public_send "assert_less_than#{'_or_equal_to' unless exclude_end}", got, to
51
+ end
52
+
53
+ def assert_random(original_block, *args)
54
+ 100.times do
55
+ yield(*args)
56
+ assert_deterministic(&original_block)
57
+ end
58
+ end
59
+
60
+ %w[less_than_or_equal_to between].each do |method_name|
61
+ define_method "assert_random_#{method_name}" do |*args, &block|
62
+ assert_random(block) { send "assert_#{method_name}", block.call, *args }
63
+ end
64
+ end
65
+
31
66
  # Methods to be called outside of individual examples.
32
67
  module ClassMethods
33
68
  # Shorthand method to quickly test the determinability of multiple methods.
@@ -33,7 +33,7 @@ class TestAddressAU < Test::Unit::TestCase
33
33
  end
34
34
 
35
35
  def test_full_address
36
- assert_match(/[\, a-z]/, FFaker::AddressAU.full_address)
36
+ assert_match(/[, a-z]/, FFaker::AddressAU.full_address)
37
37
  end
38
38
 
39
39
  def test_au_suburb_with_states
@@ -60,7 +60,7 @@ class TestAddressAU < Test::Unit::TestCase
60
60
 
61
61
  def test_full_address_with_states
62
62
  FFaker::AddressAU::STATE_ABBR.each do |st_abbr|
63
- assert_match(/[\, a-z]/, FFaker::AddressAU.full_address(st_abbr))
63
+ assert_match(/[, a-z]/, FFaker::AddressAU.full_address(st_abbr))
64
64
  assert_deterministic { FFaker::AddressAU.full_address(st_abbr) }
65
65
  end
66
66
  end
@@ -32,6 +32,6 @@ 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(/(#{prefixes.join('|')})( \p{Alpha}+){1,2}/, FFaker::AddressBR.street)
36
36
  end
37
37
  end
@@ -5,7 +5,7 @@ require 'helper'
5
5
  class TestAddressFI < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- ALPHA = /\A[\p{Alpha}]+/.freeze
8
+ ALPHA = /\A\p{Alpha}+/.freeze
9
9
  DIGIT = /\d{1}/.freeze
10
10
 
11
11
  assert_methods_are_deterministic(
@@ -30,7 +30,7 @@ class TestAddressFI < Test::Unit::TestCase
30
30
  assert_match(ALPHA, address)
31
31
  assert_match(DIGIT, address)
32
32
  assert_match(/SUOMI/, address)
33
- assert_match(/[\, a-z]/, address)
33
+ assert_match(/[, a-z]/, address)
34
34
  end
35
35
 
36
36
  def test_fi_zip_code_frozen
@@ -7,6 +7,6 @@ class TestAddressFR < Test::Unit::TestCase
7
7
 
8
8
  assert_methods_are_deterministic(
9
9
  FFaker::AddressFR,
10
- :city, :full_address, :street_name, :postal_code
10
+ :city, :full_address, :street_name, :postal_code, :region
11
11
  )
12
12
  end
@@ -33,7 +33,7 @@ class TestAddressID < Test::Unit::TestCase
33
33
  def test_street
34
34
  prefixes = FFaker::AddressID::STREET_PREFIX
35
35
  common_street_names = FFaker::AddressID::COMMON_STREET_NAMES
36
- regex = /\A(#{prefixes.join('|')})\.(\s(#{common_street_names.join('|')}))\,\sNo\.\s\d+\z/
36
+ regex = /\A(#{prefixes.join('|')})\.(\s(#{common_street_names.join('|')})),\sNo\.\s\d+\z/
37
37
  assert_match(regex, FFaker::AddressID.street)
38
38
  end
39
39
  end
@@ -13,7 +13,7 @@ class TestAddressJA < Test::Unit::TestCase
13
13
  )
14
14
 
15
15
  def test_postal_code
16
- assert_match(/^\d{3}\-\d{4}$/, FFaker::AddressJA.postal_code)
16
+ assert_match(/^\d{3}-\d{4}$/, FFaker::AddressJA.postal_code)
17
17
  end
18
18
 
19
19
  def test_land_number
@@ -23,7 +23,7 @@ class TestAddressNL < Test::Unit::TestCase
23
23
  end
24
24
 
25
25
  def test_zip_code
26
- assert_match(/^\d{4}\s\w{2}$/, @tester.zip_code)
26
+ assert_match(/\A[1-9]\d{3} [A-RT-Z][A-Z]\z/, @tester.zip_code)
27
27
  end
28
28
 
29
29
  def test_street_name
@@ -5,7 +5,7 @@ require 'helper'
5
5
  class TestAddressSE < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- ALPHA = /\A[\p{Alpha}]+/.freeze
8
+ ALPHA = /\A\p{Alpha}+/.freeze
9
9
  DIGIT = /\d{1}/.freeze
10
10
 
11
11
  assert_methods_are_deterministic(
@@ -30,7 +30,7 @@ class TestAddressSE < Test::Unit::TestCase
30
30
  assert_match(ALPHA, address)
31
31
  assert_match(DIGIT, address)
32
32
  assert_match(/SVERIGE/, address)
33
- assert_match(/[\, a-z]/, address)
33
+ assert_match(/[, a-z]/, address)
34
34
  end
35
35
 
36
36
  def test_se_zip_code_frozen
@@ -18,6 +18,15 @@ class TestAddressUSUS < Test::Unit::TestCase
18
18
 
19
19
  def test_us_state_abbr
20
20
  assert_match(/[A-Z]/, FFaker::AddressUS.state_abbr)
21
+ %w[California california CALIFORNIA].each do |state|
22
+ assert_match('CA', FFaker::AddressUS.state_abbr(state))
23
+ end
24
+ ['South Carolina', 'south carolina'].each do |state|
25
+ assert_match('SC', FFaker::AddressUS.state_abbr(state))
26
+ end
27
+ assert_raise ArgumentError, "Unexpected state: 'unknown'" do
28
+ FFaker::AddressUS.state_abbr('unknown')
29
+ end
21
30
  end
22
31
 
23
32
  def test_us_state_and_territories_abbr
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'helper'
4
+
5
+ class TestAnimalsES < Test::Unit::TestCase
6
+ include DeterministicHelper
7
+
8
+ assert_methods_are_deterministic(FFaker::AnimalES, :common_name)
9
+
10
+ def setup
11
+ @tester = FFaker::AnimalES
12
+ end
13
+
14
+ def test_name
15
+ assert_include @tester::COMMON_NAMES, @tester.common_name
16
+ end
17
+ end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'helper'
4
- require 'set'
5
4
 
6
5
  class TestArrayUtils < Test::Unit::TestCase
7
6
  include DeterministicHelper
@@ -20,6 +20,6 @@ class TestAWS < Test::Unit::TestCase
20
20
  end
21
21
 
22
22
  def test_product_description
23
- assert_match(%r{\A[ \/a-zA-Z\(\)]+\z}i, FFaker::AWS.product_description)
23
+ assert_match(%r{\A[ /a-zA-Z()]+\z}i, FFaker::AWS.product_description)
24
24
  end
25
25
  end
@@ -5,14 +5,50 @@ require 'helper'
5
5
  class TestBank < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- assert_methods_are_deterministic(FFaker::Bank, :iban)
8
+ assert_methods_are_deterministic(
9
+ FFaker::Bank,
10
+ :iban, :card_number, :card_expiry_date, :card_type
11
+ )
12
+
13
+ def setup
14
+ @tester = FFaker::Bank
15
+ end
9
16
 
10
17
  def test_iban
11
- assert_match(/[A-Z]{2}\d+([A-Z]+)?\d+/, FFaker::Bank.iban)
12
- assert_match(/[A-Z]{2}\d+([A-Z]+)?\d+/, FFaker::Bank.iban(country_code: 'by'))
13
- assert_match(/[A-Z]{2}\d+([A-Z]+)?\d+/, FFaker::Bank.iban(country_code: 'BY'))
18
+ assert_match(/[A-Z]{2}\d+([A-Z]+)?\d+/, @tester.iban)
19
+ assert_match(/[A-Z]{2}\d+([A-Z]+)?\d+/, @tester.iban(country_code: 'by'))
20
+ assert_match(/[A-Z]{2}\d+([A-Z]+)?\d+/, @tester.iban(country_code: 'BY'))
14
21
  assert_raise ArgumentError, "Unexpected country code: 'unknown'" do
15
- FFaker::Bank.iban(country_code: 'unknown')
22
+ @tester.iban(country_code: 'unknown')
16
23
  end
17
24
  end
25
+
26
+ def test_card_number
27
+ assert_match(/\A(\d{4} ){3}\d{4}\z/, @tester.card_number)
28
+ end
29
+
30
+ def test_card_expiry_date
31
+ assert_instance_of String, @tester.card_expiry_date
32
+
33
+ date_today = ::DateTime.now
34
+
35
+ assert_random_between(
36
+ date_today.strftime('%y'), date_today.next_year(5).strftime('%y')
37
+ ) do
38
+ @tester.card_expiry_date.split('/').pop
39
+ end
40
+
41
+ year_range = 4
42
+ year_latest = 8
43
+ assert_random_between(
44
+ date_today.prev_year(year_latest + year_range).strftime('%y'),
45
+ date_today.prev_year(year_latest).strftime('%y')
46
+ ) do
47
+ @tester.card_expiry_date(year_range: year_range, year_latest: year_latest).split('/').pop
48
+ end
49
+ end
50
+
51
+ def test_card_type
52
+ assert_include @tester::CARD_TYPES, @tester.card_type
53
+ end
18
54
  end
@@ -19,7 +19,7 @@ class TestBook < Test::Unit::TestCase
19
19
  end
20
20
 
21
21
  def test_genre
22
- assert_match(%r{[\w\s'\/]+}, @tester.genre)
22
+ assert_match(%r{[\w\s'/]+}, @tester.genre)
23
23
  end
24
24
 
25
25
  def test_author
@@ -27,7 +27,7 @@ class TestBook < Test::Unit::TestCase
27
27
  end
28
28
 
29
29
  def test_isbn
30
- assert_match(/[\d]+/, @tester.isbn)
30
+ assert_match(/\d+/, @tester.isbn)
31
31
  end
32
32
 
33
33
  def test_description
@@ -35,12 +35,12 @@ class TestBook < Test::Unit::TestCase
35
35
  end
36
36
 
37
37
  def test_cover
38
- assert_match(%r{\Ahttps:\/\/robohash\.org\/.+\.png\?size=300x300\z},
38
+ assert_match(%r{\Ahttps://robohash\.org/.+\.png\?size=300x300\z},
39
39
  @tester.cover)
40
40
  end
41
41
 
42
42
  def test_orly_cover
43
- assert_match(%r{\Ahttps:\/\/orly-appstore\.herokuapp\.com\/generate},
43
+ assert_match(%r{\Ahttps://orly-appstore\.herokuapp\.com/generate},
44
44
  @tester.orly_cover)
45
45
  end
46
46
  end
@@ -5,7 +5,28 @@ require 'helper'
5
5
  class TestCode < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- assert_methods_are_deterministic(FFaker::Code, :ean)
8
+ assert_methods_are_deterministic(FFaker::Code, :ean, :npi)
9
+
10
+ def test_npi_legacy_regexp
11
+ assert FFaker::Code.npi(legacy: true).match(/\A(1|2)[0-9]{9}\z/)
12
+ end
13
+
14
+ def test_npi
15
+ FFaker::Random.seed = 523_456_789
16
+ assert FFaker::Code.npi == '7411850515'
17
+ end
18
+
19
+ def test_deterministic_npi
20
+ FFaker::Random.seed = 42
21
+ v = FFaker::Code.npi
22
+ FFaker::Random.reset!
23
+ assert v == FFaker::Code.npi
24
+ end
25
+
26
+ def test_valid_npi
27
+ FFaker::Random.seed = 123_456_789
28
+ assert FFaker::Code.npi == '2410167607'
29
+ end
9
30
 
10
31
  def test_ean
11
32
  assert FFaker::Code.ean.match(/^\d{13}$/)
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'helper'
4
+
5
+ class TestColorPL < Test::Unit::TestCase
6
+ include DeterministicHelper
7
+
8
+ assert_methods_are_deterministic(FFaker::ColorPL, :name)
9
+
10
+ def test_name
11
+ assert_match(/\A[a-ząćęłńóśźżé]+\z/, FFaker::ColorPL.name)
12
+ end
13
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'helper'
4
+
5
+ class TestCompanyJA < Test::Unit::TestCase
6
+ include DeterministicHelper
7
+
8
+ assert_methods_are_deterministic(
9
+ FFaker::CompanyJA,
10
+ :name, :position
11
+ )
12
+
13
+ def setup
14
+ @tester = FFaker::CompanyJA
15
+ end
16
+
17
+ def test_name
18
+ assert_match(japanese_regex(''), @tester.name)
19
+ end
20
+
21
+ def test_position
22
+ assert_match(japanese_regex(''), @tester.position)
23
+ end
24
+
25
+ def japanese_regex(word)
26
+ /\A(?:\p{Hiragana}|\p{Katakana}|[ー-]|[一-龠々])+#{word}\z/
27
+ end
28
+ end
@@ -2,9 +2,13 @@
2
2
 
3
3
  require 'helper'
4
4
 
5
- class TestFaker < Test::Unit::TestCase
5
+ class TestFFaker < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
+ def test_version
9
+ assert FFaker::VERSION.is_a?(String)
10
+ end
11
+
8
12
  def test_numerify
9
13
  assert FFaker.numerify('###').match(/\d{3}/)
10
14
  assert_deterministic { FFaker.numerify('###') }
@@ -15,14 +15,22 @@ class TestFakerFilesystem < Test::Unit::TestCase
15
15
  end
16
16
 
17
17
  def test_extension
18
- assert @tester.extension.match(/(flac|mp3|wav|bmp|gif|jpeg|jpg|png|tiff|css|csv|html|js|json|txt|mp4|avi|mov|webm|doc|docx|xls|xlsx|ppt|pptx|odt|ods|odp|pages|numbers|key|pdf)/)
18
+ assert_match /\A(?:flac|mp3|wav|bmp|gif|jpeg|jpg|png|tiff|css|csv|html|js|
19
+ json|txt|mp4|avi|mov|webm|doc|docx|xls|xlsx|ppt|pptx|odt|
20
+ ods|odp|pages|numbers|key|pdf)\z/x,
21
+ @tester.extension
19
22
  end
20
23
 
21
24
  def test_mime_type_format
22
- assert @tester.mime_type.match(%r{(.*)/(.*)+})
25
+ assert_match %r{\A\w+/.+\z}, @tester.mime_type
26
+ end
27
+
28
+ def test_directory
29
+ assert_match %r{\A(?:[a-z_-]+[\\/])+[a-z_-]+\z}, @tester.directory
23
30
  end
24
31
 
25
32
  def test_file_name
26
- assert @tester.file_name.match(%r{([a-z\-_]+)(\\|/)([a-z\-_]+)\.([a-z]+)})
33
+ assert_match %r{\A(?:[a-z_-]+[\\/])+[a-z_-]+\.\w{2,4}\z},
34
+ @tester.file_name
27
35
  end
28
36
  end