From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/test/digest/test_digest_extend.rb | 158 +++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 jni/ruby/test/digest/test_digest_extend.rb (limited to 'jni/ruby/test/digest/test_digest_extend.rb') diff --git a/jni/ruby/test/digest/test_digest_extend.rb b/jni/ruby/test/digest/test_digest_extend.rb new file mode 100644 index 0000000..adc5613 --- /dev/null +++ b/jni/ruby/test/digest/test_digest_extend.rb @@ -0,0 +1,158 @@ +require 'test/unit' +require 'digest' +require_relative '../lib/with_different_ofs.rb' + +class TestDigestExtend < Test::Unit::TestCase + extend DifferentOFS + + class MyDigest < Digest::Class + def initialize(*arg) + super + @buf = [] + end + + def initialize_copy(org) + @buf = org.buf.dup + end + + def update(arg) + @buf << arg + self + end + + alias << update + + def finish + (@buf.join('').length % 256).chr + end + + def reset + @buf.clear + self + end + + protected + + def buf + @buf + end + end + + def setup + @MyDigest = Class.new(MyDigest) + end + + def test_digest_s_hexencode + assert_equal('', Digest.hexencode('')) + assert_equal('0102', Digest.hexencode("\1\2")) + assert_equal( + (0..0xff).to_a.map { |c| sprintf("%02x", c ) }.join(''), + Digest.hexencode((0..0xff).to_a.map { |c| c.chr }.join('')) + ) + assert_equal(Encoding::US_ASCII, Digest.hexencode("\1\2").encoding) + end + + def test_class_reset + a = Digest::SHA1.new + base = a.to_s + assert_equal(base, a.reset.to_s) + b = a.new + assert_equal(base, b.to_s) + b.update('1') + assert_not_equal(base, b.to_s) + assert_equal(base, b.reset.to_s) + end + + def test_digest + assert_equal("\3", MyDigest.digest("foo")) + end + + def test_hexdigest + assert_equal("03", @MyDigest.hexdigest("foo")) + end + + def test_context + digester = @MyDigest.new + digester.update("foo") + assert_equal("\3", digester.digest) + digester.update("foobar") + assert_equal("\t", digester.digest) + digester.update("foo") + assert_equal("\f", digester.digest) + end + + def test_new + a = Digest::SHA1.new + b = a.new + obj = a.to_s + assert_equal(obj, a.to_s) + assert_equal(obj, b.to_s) + a.update('1') + assert_not_equal(obj, a.to_s) + assert_equal(obj, b.to_s) + end + + def test_digest_hexdigest + [:digest, :hexdigest].each do |m| + exp_1st = "\3"; exp_1st = Digest.hexencode(exp_1st) if m == :hexdigest + exp_2nd = "\6"; exp_2nd = Digest.hexencode(exp_2nd) if m == :hexdigest + digester = @MyDigest.new + digester.update("foo") + obj = digester.send(m) + # digest w/o param does not reset the org digester. + assert_equal(exp_1st, obj) + digester.update("bar") + obj = digester.send(m) + assert_equal(exp_2nd, obj) + obj = digester.send(m, "baz") + # digest with param resets the org digester. + assert_equal(exp_1st, obj) + end + end + + def test_digest_hexdigest_bang + [:digest!, :hexdigest!].each do |m| + exp_1st = "\3"; exp_1st = Digest.hexencode(exp_1st) if m == :hexdigest! + digester = @MyDigest.new + digester.update("foo") + obj = digester.send(m) # digest! always resets the org digester. + assert_equal(exp_1st, obj) + digester.update("bar") + obj = digester.send(m) + assert_equal(exp_1st, obj) + end + end + + def test_to_s + digester = @MyDigest.new + digester.update("foo") + assert_equal("03", digester.to_s) + end + + def test_length + @MyDigest.class_eval do + def digest_length + 2 + end + end + digester = @MyDigest.new + assert_equal(2, digester.length) + assert_equal(2, digester.size) + end + + def test_digest_length # breaks @MyDigest#digest_length + assert_equal(1, @MyDigest.new.digest_length) + @MyDigest.class_eval do + def digest_length + 2 + end + end + assert_equal(2, @MyDigest.new.digest_length) + end + + def test_block_length + assert_raises(RuntimeError) do + @MyDigest.new.block_length + end + end +end -- cgit v1.2.3