[ruby/rubygems] Re-use assert_headers_equal from Gem::Package::TarTestCase

https://github.com/ruby/rubygems/commit/0cf49e22af
This commit is contained in:
Hiroshi SHIBATA 2025-11-13 07:09:20 +09:00 committed by git
parent be86e7c50e
commit 9f7ef20de1
2 changed files with 27 additions and 64 deletions

View File

@ -6,23 +6,7 @@ require "rubygems/package"
##
# A test case for Gem::Package::Tar* classes
class Gem::Package::TarTestCase < Gem::TestCase
def ASCIIZ(str, length)
str + "\0" * (length - str.length)
end
def SP(s)
s + " "
end
def SP_Z(s)
s + " \0"
end
def Z(s)
s + "\0"
end
module Gem::Package::TarTestMethods
def assert_headers_equal(expected, actual)
expected = expected.to_s unless String === expected
actual = actual.to_s unless String === actual
@ -66,6 +50,26 @@ class Gem::Package::TarTestCase < Gem::TestCase
assert_equal expected[chksum_off, 8], actual[chksum_off, 8]
end
end
class Gem::Package::TarTestCase < Gem::TestCase
include Gem::Package::TarTestMethods
def ASCIIZ(str, length)
str + "\0" * (length - str.length)
end
def SP(s)
s + " "
end
def SP_Z(s)
s + " \0"
end
def Z(s)
s + "\0"
end
def calc_checksum(header)
sum = header.sum(0)

View File

@ -8,51 +8,6 @@ unless Gem::Package::TarTestCase.instance_methods.include?(:assert_ractor)
end
class TestGemPackageTarHeaderRactor < Gem::Package::TarTestCase
ASSERT_HEADERS_EQUAL = <<~RUBY
def assert_headers_equal(expected, actual)
expected = expected.to_s unless String === expected
actual = actual.to_s unless String === actual
fields = %w[
name 100
mode 8
uid 8
gid 8
size 12
mtime 12
checksum 8
typeflag 1
linkname 100
magic 6
version 2
uname 32
gname 32
devmajor 8
devminor 8
prefix 155
]
offset = 0
until fields.empty? do
name = fields.shift
length = fields.shift.to_i
if name == "checksum"
chksum_off = offset
offset += length
next
end
assert_equal expected[offset, length], actual[offset, length]
offset += length
end
assert_equal expected[chksum_off, 8], actual[chksum_off, 8]
end
RUBY
SETUP = <<~RUBY
header = {
name: "x",
@ -78,7 +33,9 @@ class TestGemPackageTarHeaderRactor < Gem::Package::TarTestCase
RUBY
def test_decode_in_ractor
assert_ractor(ASSERT_HEADERS_EQUAL + SETUP + <<~RUBY, require: "rubygems/package")
assert_ractor(SETUP + <<~RUBY, require: "rubygems/package", require_relative: "package/tar_test_case")
include Gem::Package::TarTestMethods
new_header = Ractor.new(tar_header.to_s) do |str|
Gem::Package::TarHeader.from StringIO.new str
end.value
@ -88,7 +45,9 @@ class TestGemPackageTarHeaderRactor < Gem::Package::TarTestCase
end
def test_encode_in_ractor
assert_ractor(ASSERT_HEADERS_EQUAL + SETUP + <<~RUBY, require: "rubygems/package")
assert_ractor(SETUP + <<~RUBY, require: "rubygems/package", require_relative: "package/tar_test_case")
include Gem::Package::TarTestMethods
header_bytes = tar_header.to_s
new_header_bytes = Ractor.new(header_bytes) do |str|