OSDN Git Service

ruby-1.9.1-rc1
[splhack/AndroidRuby.git] / lib / ruby-1.9.1-rc1 / test / rubygems / test_gem_package_tar_writer.rb
1 #--
2 # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
3 # All rights reserved.
4 # See LICENSE.txt for permissions.
5 #++
6
7 require File.join(File.expand_path(File.dirname(__FILE__)),
8                   'gem_package_tar_test_case')
9 require 'rubygems/package/tar_writer'
10
11 class TestTarWriter < TarTestCase
12
13   def setup
14     super
15
16     @data = 'abcde12345'
17     @io = TempIO.new
18     @tar_writer = Gem::Package::TarWriter.new @io
19   end
20
21   def teardown
22     @tar_writer.close unless @tar_writer.closed?
23
24     super
25   end
26
27   def test_add_file
28     @tar_writer.add_file 'x', 0644 do |f| f.write 'a' * 10 end
29
30     assert_headers_equal(tar_file_header('x', '', 0644, 10),
31                          @io.string[0, 512])
32     assert_equal "aaaaaaaaaa#{"\0" * 502}", @io.string[512, 512]
33     assert_equal 1024, @io.pos
34   end
35
36   def test_add_file_simple
37     @tar_writer.add_file_simple 'x', 0644, 10 do |io| io.write "a" * 10 end
38
39     assert_headers_equal(tar_file_header('x', '', 0644, 10),
40                          @io.string[0, 512])
41
42     assert_equal "aaaaaaaaaa#{"\0" * 502}", @io.string[512, 512]
43     assert_equal 1024, @io.pos
44   end
45
46   def test_add_file_simple_padding
47     @tar_writer.add_file_simple 'x', 0, 100
48
49     assert_headers_equal tar_file_header('x', '', 0, 100), 
50                          @io.string[0, 512]
51
52     assert_equal "\0" * 512, @io.string[512, 512]
53   end
54
55   def test_add_file_simple_data
56     @tar_writer.add_file_simple("lib/foo/bar", 0, 10) { |f| f.write @data }
57     @tar_writer.flush
58
59     assert_equal @data + ("\0" * (512-@data.size)),
60                  @io.string[512, 512]
61   end
62
63   def test_add_file_simple_size
64     assert_raises Gem::Package::TarWriter::FileOverflow do 
65       @tar_writer.add_file_simple("lib/foo/bar", 0, 10) do |io|
66         io.write "1" * 11
67       end
68     end
69   end
70
71   def test_add_file_unseekable
72     assert_raises Gem::Package::NonSeekableIO do 
73       Gem::Package::TarWriter.new(Object.new).add_file 'x', 0
74     end
75   end
76
77   def test_close
78     @tar_writer.close
79
80     assert_equal "\0" * 1024, @io.string
81
82     e = assert_raises IOError do
83       @tar_writer.close
84     end
85     assert_equal 'closed Gem::Package::TarWriter', e.message
86
87     e = assert_raises IOError do
88       @tar_writer.flush
89     end
90     assert_equal 'closed Gem::Package::TarWriter', e.message
91
92     e = assert_raises IOError do
93       @tar_writer.add_file 'x', 0
94     end
95     assert_equal 'closed Gem::Package::TarWriter', e.message
96
97     e = assert_raises IOError do
98       @tar_writer.add_file_simple 'x', 0, 0
99     end
100     assert_equal 'closed Gem::Package::TarWriter', e.message
101
102     e = assert_raises IOError do
103       @tar_writer.mkdir 'x', 0
104     end
105     assert_equal 'closed Gem::Package::TarWriter', e.message
106   end
107
108   def test_mkdir
109     @tar_writer.mkdir 'foo', 0644
110
111     assert_headers_equal tar_dir_header('foo', '', 0644),
112                          @io.string[0, 512]
113     assert_equal 512, @io.pos
114   end
115
116   def test_split_name
117     assert_equal ['b' * 100, 'a' * 155],
118                  @tar_writer.split_name("#{'a' * 155}/#{'b' * 100}")
119
120     assert_equal ["#{'qwer/' * 19}bla", 'a' * 151],
121                  @tar_writer.split_name("#{'a' * 151}/#{'qwer/' * 19}bla")
122   end
123
124   def test_split_name_too_long_name
125     name = File.join 'a', 'b' * 100
126     assert_equal ['b' * 100, 'a'], @tar_writer.split_name(name)
127
128     assert_raises Gem::Package::TooLongFileName do
129       name = File.join 'a', 'b' * 101
130       @tar_writer.split_name name
131     end
132   end
133
134   def test_split_name_too_long_prefix
135     name = File.join 'a' * 155, 'b'
136     assert_equal ['b', 'a' * 155], @tar_writer.split_name(name)
137
138     assert_raises Gem::Package::TooLongFileName do
139       name = File.join 'a' * 156, 'b'
140       @tar_writer.split_name name
141     end
142   end
143
144   def test_split_name_too_long_total
145     assert_raises Gem::Package::TooLongFileName do
146       @tar_writer.split_name 'a' * 257
147     end
148   end
149
150 end
151