Skip to content

Commit aa49558

Browse files
committed
[GR-20446] Fix Digest::Base#{update, <<}
PullRequest: truffleruby/1991
2 parents 4883714 + 7303461 commit aa49558

16 files changed

+45
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Compatibility:
3232
* Verify that gem paths are correct before loading RubyGems (#2075).
3333
* Implement `rb_ivar_count`.
3434
* Implemented `rb_yield_values2`.
35+
* Implemented `Digest::Base#{update, <<}` (#2100).
3536

3637
Performance:
3738

lib/truffle/digest.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def new
7979
end
8080

8181
def update(message)
82-
Truffle::Digest.update @digest, message
82+
raise RuntimeError, "#{self.class.name} does not implement update()"
8383
end
8484
alias_method :<<, :update
8585

@@ -154,6 +154,12 @@ def self.hexdigest(str, *args)
154154
end
155155

156156
class Base < ::Digest::Class
157+
def update(str)
158+
str = StringValue(str)
159+
Truffle::Digest.update(@digest, str)
160+
self
161+
end
162+
alias_method :<<, :update
157163
end
158164

159165
class MD5 < Base
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
require_relative '../../../spec_helper'
2+
require 'digest'
3+
require_relative 'shared/update'
4+
5+
describe "Digest::Instance#<<" do
6+
it_behaves_like :digest_instance_update, :<<
7+
end
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
describe :digest_instance_update, shared: true do
2+
it "raises a RuntimeError if called" do
3+
c = Class.new do
4+
include Digest::Instance
5+
end
6+
-> { c.new.update("test") }.should raise_error(RuntimeError)
7+
end
8+
end
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
require_relative '../../../spec_helper'
2+
require 'digest'
3+
require_relative 'shared/update'
4+
5+
describe "Digest::Instance#update" do
6+
it_behaves_like :digest_instance_update, :update
7+
end

spec/tags/truffle/methods_tags.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,8 @@ fails:Public methods on TracePoint should include instruction_sequence
9797
fails:Public methods on TracePoint should include parameters
9898
fails:Public methods on TracePoint should include raised_exception
9999
fails:Public methods on TracePoint should include return_value
100+
fails:Public methods on Digest::Base should include block_length
101+
fails:Public methods on Digest::Base should include digest_length
102+
fails:Public methods on Digest::Base should include reset
103+
fails:Public methods on Digest::MD5 should not include block_length
104+
fails:Public methods on Digest::SHA1 should not include block_length

spec/truffle/methods/Digest.txt

Whitespace-only changes.

spec/truffle/methods/Digest::Base.singleton_class.txt

Whitespace-only changes.

spec/truffle/methods/Digest::Base.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<<
2+
block_length
3+
digest_length
4+
reset
5+
update

spec/truffle/methods/Digest::Class.txt

Whitespace-only changes.

0 commit comments

Comments
 (0)