diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/ruby/test_pack.rb | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/test/ruby/test_pack.rb b/test/ruby/test_pack.rb index c5af6f2152..415dc78e60 100644 --- a/test/ruby/test_pack.rb +++ b/test/ruby/test_pack.rb @@ -812,4 +812,38 @@ EXPECTED assert_raise_with_message(ArgumentError, /too few/) {ary.pack("AA")} end; end + + def test_pack_with_buffer + buf = String.new(capacity: 100) + + assert_raise_with_message(ArgumentError, /without buffer/) { + [0xDEAD_BEEF].pack('N', offset: 10) + } + assert_raise_with_message(ArgumentError, /too small/) { + [0xDEAD_BEEF].pack('N', buffer: buf, offset: 200) + } + assert_raise_with_message(RuntimeError, /frozen/) { + [0xDEAD_BEEF].pack('N', buffer: 'foo'.freeze) + } + assert_raise_with_message(TypeError, /into Integer/) { + [0xDEAD_BEEF].pack('N', buffer: buf, offset: '10') + } + assert_raise_with_message(TypeError, /must be String/) { + [0xDEAD_BEEF].pack('N', buffer: Object.new) + } + + addr = [buf].pack('p') + + [0xDEAD_BEEF].pack('N', buffer: buf) + assert_equal "\xDE\xAD\xBE\xEF", buf + + [0xBABE_F00D].pack('N', buffer: buf, offset: 4) + assert_equal "\xDE\xAD\xBE\xEF\xBA\xBE\xF0\x0D", buf + assert_equal addr, [buf].pack('p') + + [0xBAAD_FACE].pack('N', buffer: buf, offset: 10) + assert_equal "\xDE\xAD\xBE\xEF\xBA\xBE\xF0\x0D\0\0\xBA\xAD\xFA\xCE", buf + + assert_equal addr, [buf].pack('p') + end end |