summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_package_tar_reader_entry.rb
blob: 3c1bf7291aae5074ad646a12b28b8550bdd8989e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
require 'rubygems/package/tar_test_case'
require 'rubygems/package'

class TestGemPackageTarReaderEntry < Gem::Package::TarTestCase

  def setup
    super

    @contents = ('a'..'z').to_a.join * 100

    @tar = ''
    @tar << tar_file_header("lib/foo", "", 0, @contents.size, Time.now)
    @tar << @contents
    @tar << "\0" * (512 - (@tar.size % 512))

    @entry = util_entry @tar
  end

  def test_bytes_read
    assert_equal 0, @entry.bytes_read

    @entry.getc

    assert_equal 1, @entry.bytes_read
  end

  def test_close
    @entry.close

    assert @entry.bytes_read

    e = assert_raises IOError do @entry.eof? end
    assert_equal 'closed Gem::Package::TarReader::Entry', e.message

    e = assert_raises IOError do @entry.getc end
    assert_equal 'closed Gem::Package::TarReader::Entry', e.message

    e = assert_raises IOError do @entry.pos end
    assert_equal 'closed Gem::Package::TarReader::Entry', e.message

    e = assert_raises IOError do @entry.read end
    assert_equal 'closed Gem::Package::TarReader::Entry', e.message

    e = assert_raises IOError do @entry.rewind end
    assert_equal 'closed Gem::Package::TarReader::Entry', e.message
  end

  def test_closed_eh
    @entry.close

    assert @entry.closed?
  end

  def test_eof_eh
    @entry.read

    assert @entry.eof?
  end

  def test_full_name
    assert_equal 'lib/foo', @entry.full_name
  end

  def test_full_name_null
    @entry.header.prefix << "\000"

    e = assert_raises Gem::Package::TarInvalidError do
      @entry.full_name
    end

    assert_equal 'tar is corrupt, name contains null byte', e.message
  end

  def test_getc
    assert_equal ?a, @entry.getc
  end

  def test_directory_eh
    assert_equal false, @entry.directory?
    assert_equal true, util_dir_entry.directory?
  end

  def test_file_eh
    assert_equal true, @entry.file?
    assert_equal false, util_dir_entry.file?
  end

  def test_pos
    assert_equal 0, @entry.pos

    @entry.getc

    assert_equal 1, @entry.pos
  end

  def test_read
    assert_equal @contents, @entry.read
  end

  def test_read_big
    assert_equal @contents, @entry.read(@contents.size * 2)
  end

  def test_read_small
    assert_equal @contents[0...100], @entry.read(100)
  end

  def test_rewind
    char = @entry.getc

    @entry.rewind

    assert_equal 0, @entry.pos

    assert_equal char, @entry.getc
  end

end