@@ -81,6 +81,42 @@ def test_eq
8181 assert_equal ( md1 , md2 , self . class ::ALGO )
8282 end
8383
84+ def test_frozen
85+ md = self . class ::ALGO . new
86+ md << "a"
87+ md . freeze
88+
89+ assert_raise ( FrozenError ) { md . update ( "b" ) }
90+ assert_raise ( FrozenError ) { md << "b" }
91+ assert_raise ( FrozenError ) { md . reset }
92+ assert_raise ( FrozenError ) { md . digest! }
93+ assert_raise ( FrozenError ) { md . hexdigest! }
94+ assert_raise ( FrozenError ) { md . base64digest! }
95+ assert_raise ( FrozenError ) { md . digest ( "b" ) }
96+ assert_raise ( FrozenError ) { md . hexdigest ( "b" ) }
97+
98+ assert_equal ( self . class ::ALGO . hexdigest ( "a" ) , md . hexdigest )
99+ end
100+
101+ def test_new_keeps_singleton
102+ md = self . class ::ALGO . new
103+ md . extend ( Module . new { def extended_marker ; end } )
104+ def md . singleton_marker ; end
105+
106+ assert_respond_to ( md . new , :extended_marker )
107+ assert_respond_to ( md . new , :singleton_marker )
108+ end
109+
110+ def test_frozen_copy
111+ md = self . class ::ALGO . new
112+ md << "a"
113+ md . freeze
114+
115+ assert_equal ( self . class ::ALGO . hexdigest ( "a" ) , md . clone . hexdigest )
116+ assert_equal ( self . class ::ALGO . hexdigest ( "a" ) , md . dup . hexdigest )
117+ assert_raise ( FrozenError ) { md . new }
118+ end
119+
84120 def test_s_file
85121 Tempfile . create ( "test_digest_file" , mode : File ::BINARY ) { |tmpfile |
86122 str = "hello, world.\r \n "
@@ -174,6 +210,32 @@ class TestSHA512 < Test::Unit::TestCase
174210
175211 class TestSHA2 < Test ::Unit ::TestCase
176212
213+ def test_frozen
214+ md = Digest ::SHA2 . new
215+ md << "a"
216+ md . freeze
217+
218+ assert_raise ( FrozenError ) { md . update ( "b" ) }
219+ assert_raise ( FrozenError ) { md . reset }
220+ assert_raise ( FrozenError ) { md . digest! }
221+ assert_raise ( FrozenError ) { md . hexdigest! }
222+ assert_raise ( FrozenError ) { md . base64digest! }
223+ assert_raise ( FrozenError ) { md . digest ( "b" ) }
224+ assert_raise ( FrozenError ) { md . hexdigest ( "b" ) }
225+
226+ assert_equal ( Digest ::SHA256 . hexdigest ( "a" ) , md . hexdigest )
227+ end
228+
229+ def test_frozen_copy
230+ md = Digest ::SHA2 . new
231+ md << "a"
232+ md . freeze
233+
234+ assert_equal ( Digest ::SHA256 . hexdigest ( "a" ) , md . clone . hexdigest )
235+ assert_equal ( Digest ::SHA256 . hexdigest ( "a" ) , md . dup . hexdigest )
236+ assert_raise ( FrozenError ) { md . new }
237+ end
238+
177239 def test_s_file
178240 Tempfile . create ( "test_digest_file" ) { |tmpfile |
179241 str = Data1
0 commit comments