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