summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorheadius <headius@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-04-21 18:44:10 +0000
committerheadius <headius@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-04-21 18:44:10 +0000
commit2d1f3ed151aeb4aab8f762ad50ec143260df8aaa (patch)
treee8b8cffb4a118b3ee88a16530095027e2e202319
parent4bd7276247c92caa3fd7e381533e7d1edd9e472f (diff)
* test/ruby/test_m17n_comb.rb: test_str_crypt split into strict
and non-strict versions to allow masking out non-strict when glibc version cannot be determined (#11045). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50366 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--test/ruby/test_m17n_comb.rb49
1 files changed, 32 insertions, 17 deletions
diff --git a/test/ruby/test_m17n_comb.rb b/test/ruby/test_m17n_comb.rb
index c35be701c6..3a37ed4a23 100644
--- a/test/ruby/test_m17n_comb.rb
+++ b/test/ruby/test_m17n_comb.rb
@@ -743,28 +743,43 @@ class TestM17NComb < Test::Unit::TestCase
}
end
- def test_str_crypt
- strict_crypt = nil
- # glibc 2.16 or later denies salt contained other than [0-9A-Za-z./] #7312
- if defined? Etc::CS_GNU_LIBC_VERSION
- glibcver = Etc.confstr(Etc::CS_GNU_LIBC_VERSION).scan(/\d+/).map(&:to_i)
- strict_crypt = (glibcver <=> [2, 16]) >= 0
- end
+ # glibc 2.16 or later denies salt contained other than [0-9A-Za-z./] #7312
+ # we use this check to test strict and non-strict behavior separately #11045
+ strict_crypt = if defined? Etc::CS_GNU_LIBC_VERSION
+ glibcver = Etc.confstr(Etc::CS_GNU_LIBC_VERSION).scan(/\d+/).map(&:to_i)
+ (glibcver <=> [2, 16]) >= 0
+ end
+ def test_str_crypt
combination(STRINGS, STRINGS) {|str, salt|
- if strict_crypt
- next unless salt.ascii_only? && /\A[0-9a-zA-Z.\/]+\z/ =~ salt
- end
- if b(salt).length < 2
- assert_raise(ArgumentError) { str.crypt(salt) }
- next
- end
- t = str.crypt(salt)
- assert_equal(b(str).crypt(b(salt)), t, "#{encdump(str)}.crypt(#{encdump(salt)})")
- assert_encoding('ASCII-8BIT', t.encoding)
+ # skip input other than [0-9A-Za-z./] to confirm strict behavior
+ next unless salt.ascii_only? && /\A[0-9a-zA-Z.\/]+\z/ =~ salt
+
+ confirm_crypt_result(str, salt)
}
end
+ if !strict_crypt
+ def test_str_crypt_nonstrict
+ combination(STRINGS, STRINGS) {|str, salt|
+ # only test input other than [0-9A-Za-z./] to confirm non-strict behavior
+ next if salt.ascii_only? && /\A[0-9a-zA-Z.\/]+\z/ =~ salt
+
+ confirm_crypt_result(str, salt)
+ }
+ end
+ end
+
+ private def confirm_crypt_result(str, salt)
+ if b(salt).length < 2
+ assert_raise(ArgumentError) { str.crypt(salt) }
+ return
+ end
+ t = str.crypt(salt)
+ assert_equal(b(str).crypt(b(salt)), t, "#{encdump(str)}.crypt(#{encdump(salt)})")
+ assert_encoding('ASCII-8BIT', t.encoding)
+ end
+
def test_str_delete
combination(STRINGS, STRINGS) {|s1, s2|
if s1.empty?