1require 'rubygems/package/tar_test_case' 2require 'rubygems/package' 3 4class TestGemPackageTarReader < Gem::Package::TarTestCase 5 6 def test_each_entry 7 tar = tar_dir_header "foo", "bar", 0 8 tar << tar_file_header("bar", "baz", 0, 0) 9 10 io = TempIO.new tar 11 12 entries = 0 13 14 Gem::Package::TarReader.new io do |tar_reader| 15 tar_reader.each_entry do |entry| 16 assert_kind_of Gem::Package::TarReader::Entry, entry 17 18 entries += 1 19 end 20 end 21 22 assert_equal 2, entries 23 end 24 25 def test_rewind 26 content = ('a'..'z').to_a.join(" ") 27 28 str = tar_file_header("lib/foo", "", 010644, content.size) + content + 29 "\0" * (512 - content.size) 30 str << "\0" * 1024 31 32 Gem::Package::TarReader.new(TempIO.new(str)) do |tar_reader| 33 3.times do 34 tar_reader.rewind 35 i = 0 36 tar_reader.each_entry do |entry| 37 assert_equal(content, entry.read) 38 i += 1 39 end 40 assert_equal(1, i) 41 end 42 end 43 end 44 45 def test_seek 46 tar = tar_dir_header "foo", "bar", 0 47 tar << tar_file_header("bar", "baz", 0, 0) 48 49 io = TempIO.new tar 50 51 Gem::Package::TarReader.new io do |tar_reader| 52 tar_reader.seek 'baz/bar' do |entry| 53 assert_kind_of Gem::Package::TarReader::Entry, entry 54 55 assert_equal 'baz/bar', entry.full_name 56 end 57 58 assert_equal 0, io.pos 59 end 60 end 61 62 def test_seek_missing 63 tar = tar_dir_header "foo", "bar", 0 64 tar << tar_file_header("bar", "baz", 0, 0) 65 66 io = TempIO.new tar 67 68 Gem::Package::TarReader.new io do |tar_reader| 69 tar_reader.seek 'nonexistent' do |entry| 70 flunk 'entry missing but entry-found block was run' 71 end 72 73 assert_equal 0, io.pos 74 end 75 end 76 77end 78 79