ffaker 2.12.0 → 2.17.0

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