1require 'rubygems/package/tar_test_case' 2require 'rubygems/package' 3 4class TestGemPackageTarReaderEntry < Gem::Package::TarTestCase 5 6 def setup 7 super 8 9 @contents = ('a'..'z').to_a.join * 100 10 11 @tar = '' 12 @tar << tar_file_header("lib/foo", "", 0, @contents.size) 13 @tar << @contents 14 @tar << "\0" * (512 - (@tar.size % 512)) 15 16 @entry = util_entry @tar 17 end 18 19 def test_bytes_read 20 assert_equal 0, @entry.bytes_read 21 22 @entry.getc 23 24 assert_equal 1, @entry.bytes_read 25 end 26 27 def test_close 28 @entry.close 29 30 assert @entry.bytes_read 31 32 e = assert_raises IOError do @entry.eof? end 33 assert_equal 'closed Gem::Package::TarReader::Entry', e.message 34 35 e = assert_raises IOError do @entry.getc end 36 assert_equal 'closed Gem::Package::TarReader::Entry', e.message 37 38 e = assert_raises IOError do @entry.pos end 39 assert_equal 'closed Gem::Package::TarReader::Entry', e.message 40 41 e = assert_raises IOError do @entry.read end 42 assert_equal 'closed Gem::Package::TarReader::Entry', e.message 43 44 e = assert_raises IOError do @entry.rewind end 45 assert_equal 'closed Gem::Package::TarReader::Entry', e.message 46 end 47 48 def test_closed_eh 49 @entry.close 50 51 assert @entry.closed? 52 end 53 54 def test_eof_eh 55 @entry.read 56 57 assert @entry.eof? 58 end 59 60 def test_full_name 61 assert_equal 'lib/foo', @entry.full_name 62 end 63 64 def test_full_name_null 65 @entry.header.prefix << "\000" 66 67 e = assert_raises Gem::Package::TarInvalidError do 68 @entry.full_name 69 end 70 71 assert_equal 'tar is corrupt, name contains null byte', e.message 72 end 73 74 def test_getc 75 assert_equal ?a, @entry.getc 76 end 77 78 def test_directory_eh 79 assert_equal false, @entry.directory? 80 assert_equal true, util_dir_entry.directory? 81 end 82 83 def test_file_eh 84 assert_equal true, @entry.file? 85 assert_equal false, util_dir_entry.file? 86 end 87 88 def test_pos 89 assert_equal 0, @entry.pos 90 91 @entry.getc 92 93 assert_equal 1, @entry.pos 94 end 95 96 def test_read 97 assert_equal @contents, @entry.read 98 end 99 100 def test_read_big 101 assert_equal @contents, @entry.read(@contents.size * 2) 102 end 103 104 def test_read_small 105 assert_equal @contents[0...100], @entry.read(100) 106 end 107 108 def test_rewind 109 char = @entry.getc 110 111 @entry.rewind 112 113 assert_equal 0, @entry.pos 114 115 assert_equal char, @entry.getc 116 end 117 118end 119 120