Imported Upstream version 1.46.0
[platform/upstream/nghttp2.git] / third-party / mruby / mrbgems / mruby-io / test / file.rb
1 ##
2 # File Test
3
4 MRubyIOTestUtil.io_test_setup
5
6 assert('File.class', '15.2.21') do
7   assert_equal Class, File.class
8 end
9
10 assert('File.superclass', '15.2.21.2') do
11   assert_equal IO, File.superclass
12 end
13
14 assert('File#initialize', '15.2.21.4.1') do
15   io = File.open($mrbtest_io_rfname, "r")
16   assert_nil io.close
17   assert_raise IOError do
18     io.close
19   end
20 end
21
22 assert('File#path', '15.2.21.4.2') do
23   io = File.open($mrbtest_io_rfname, "r")
24   assert_equal $mrbtest_io_msg, io.read
25   assert_equal $mrbtest_io_rfname, io.path
26   io.close
27   assert_equal $mrbtest_io_rfname, io.path
28   assert_true io.closed?
29 end
30
31 assert('File.basename') do
32   assert_equal '/', File.basename('//')
33   assert_equal 'a', File.basename('/a/')
34   assert_equal 'b', File.basename('/a/b')
35   assert_equal 'b', File.basename('../a/b')
36   assert_raise(ArgumentError) { File.basename("/a/b\0") }
37 end
38
39 assert('File.dirname') do
40   assert_equal '.',    File.dirname('')
41   assert_equal '.',    File.dirname('a')
42   assert_equal '/',    File.dirname('/a')
43   assert_equal 'a',    File.dirname('a/b')
44   assert_equal '/a',   File.dirname('/a/b')
45 end
46
47 assert('File.extname') do
48   assert_equal '.txt', File.extname('foo/foo.txt')
49   assert_equal '.gz',  File.extname('foo/foo.tar.gz')
50   assert_equal '', File.extname('foo/bar')
51   assert_equal '', File.extname('foo/.bar')
52   assert_equal '', File.extname('foo.txt/bar')
53   assert_equal '', File.extname('.foo')
54 end
55
56 assert('File#flock') do
57   f = File.open $mrbtest_io_rfname
58   begin
59     assert_equal(f.flock(File::LOCK_SH), 0)
60     assert_equal(f.flock(File::LOCK_UN), 0)
61     assert_equal(f.flock(File::LOCK_EX | File::LOCK_NB), 0)
62     assert_equal(f.flock(File::LOCK_UN), 0)
63   rescue NotImplementedError => e
64     skip e.message
65   ensure
66     f.close
67   end
68 end
69
70 assert('File#mtime') do
71   begin
72     File.open("#{$mrbtest_io_wfname}.mtime", 'w') do |f|
73       assert_equal Time, f.mtime.class
74       File.open("#{$mrbtest_io_wfname}.mtime", 'r') do |f2|
75         assert_equal true, f.mtime == f2.mtime
76       end
77     end
78   ensure
79     File.delete("#{$mrbtest_io_wfname}.mtime")
80   end
81 end
82
83 assert('File#size and File#truncate') do
84   fname = "#{$mrbtest_io_wfname}.resize"
85   begin
86     File.open(fname, 'w') do |f|
87       assert_equal 0, f.size
88       assert_equal 0, f.truncate(100)
89       assert_equal 100, f.size
90       assert_equal 0, f.pos
91       assert_equal 0, f.truncate(5)
92       assert_equal 5, f.size
93     end
94   ensure
95     File.delete(fname)
96   end
97 end
98
99 assert('File.join') do
100   assert_equal "", File.join()
101   assert_equal "a", File.join("a")
102   assert_equal "/a", File.join("/a")
103   assert_equal "a/", File.join("a/")
104   assert_equal "a/b/c", File.join("a", "b", "c")
105   assert_equal "/a/b/c", File.join("/a", "b", "c")
106   assert_equal "a/b/c/", File.join("a", "b", "c/")
107   assert_equal "a/b/c", File.join("a/", "/b/", "/c")
108   assert_equal "a/b/c", File.join(["a", "b", "c"])
109   assert_equal "a/b/c", File.join("a", ["b", ["c"]])
110 end
111
112 assert('File.realpath') do
113   dir = MRubyIOTestUtil.mkdtemp("mruby-io-test.XXXXXX")
114   begin
115     sep = File::ALT_SEPARATOR || File::SEPARATOR
116     relative_path = "#{File.basename(dir)}#{sep}realpath_test"
117     path = "#{File._getwd}#{sep}#{relative_path}"
118     File.open(path, "w"){}
119     assert_equal path, File.realpath(relative_path)
120
121     unless MRubyIOTestUtil.win?
122       path1 = File.realpath($mrbtest_io_rfname)
123       path2 = File.realpath($mrbtest_io_symlinkname)
124       assert_equal path1, path2
125     end
126   ensure
127     File.delete path rescue nil
128     MRubyIOTestUtil.rmdir dir
129   end
130
131   assert_raise(ArgumentError) { File.realpath("TO\0DO") }
132 end
133
134 assert("File.readlink") do
135   begin
136     exp = File.basename($mrbtest_io_rfname)
137     act = File.readlink($mrbtest_io_symlinkname)
138     assert_equal exp, act
139   rescue NotImplementedError => e
140     skip e.message
141   end
142 end
143
144 assert("File.readlink fails with non-symlink") do
145   skip "readlink is not supported on this platform" if MRubyIOTestUtil.win?
146   begin
147     e2 = nil
148     assert_raise(RuntimeError) {
149       begin
150         File.readlink($mrbtest_io_rfname)
151       rescue => e
152         if Object.const_defined?(:SystemCallError) and e.kind_of?(SystemCallError)
153           raise RuntimeError, "SystemCallError converted to RuntimeError"
154         end
155         raise e
156       rescue NotImplementedError => e
157         e2 = e
158       end
159     }
160     raise e2 if e2
161   rescue NotImplementedError => e
162     skip e.message
163   end
164 end
165
166 assert('File.expand_path') do
167   assert_equal "/",    File.expand_path("..", "/tmp"),       "parent path with base_dir (1)"
168   assert_equal "/tmp", File.expand_path("..", "/tmp/mruby"), "parent path with base_dir (2)"
169
170   assert_equal "/home", File.expand_path("/home"),      "absolute"
171   assert_equal "/home", File.expand_path("/home", "."), "absolute with base_dir"
172
173   assert_equal "/hoge", File.expand_path("/tmp/..//hoge")
174   assert_equal "/hoge", File.expand_path("////tmp/..///////hoge")
175
176   assert_equal "/", File.expand_path("../../../..", "/")
177   if File._getwd[1] == ":"
178     drive_letter = File._getwd[0]
179     assert_equal drive_letter + ":\\", File.expand_path(([".."] * 100).join("/"))
180   else
181     assert_equal "/", File.expand_path(([".."] * 100).join("/"))
182   end
183 end
184
185 assert('File.expand_path (with ENV)') do
186   skip unless Object.const_defined?(:ENV) && ENV['HOME']
187
188   assert_equal ENV['HOME'], File.expand_path("~/"),      "home"
189   assert_equal ENV['HOME'], File.expand_path("~/", "/"), "home with base_dir"
190
191   assert_equal "#{ENV['HOME']}/user", File.expand_path("user", ENV['HOME']), "relative with base_dir"
192 end
193
194 assert('File.path') do
195   assert_equal "", File.path("")
196   assert_equal "a/b/c", File.path("a/b/c")
197   assert_equal "a/../b/./c", File.path("a/../b/./c")
198   assert_raise(TypeError) { File.path(nil) }
199   assert_raise(TypeError) { File.path(123) }
200 end
201
202 assert('File.symlink') do
203   target_name = "/usr/bin"
204   if !File.exist?(target_name)
205     skip("target directory of File.symlink is not found")
206   end
207
208   begin
209     tmpdir = MRubyIOTestUtil.mkdtemp("mruby-io-test.XXXXXX")
210   rescue => e
211     skip e.message
212   end
213
214   symlink_name = "#{tmpdir}/test-bin-dummy"
215   begin
216     assert_equal 0, File.symlink(target_name, symlink_name)
217     assert_equal true, File.symlink?(symlink_name)
218   rescue NotImplementedError => e
219     skip e.message
220   ensure
221     File.delete symlink_name rescue nil
222     MRubyIOTestUtil.rmdir tmpdir rescue nil
223   end
224 end
225
226 assert('File.chmod') do
227   File.open("#{$mrbtest_io_wfname}.chmod-test", 'w') {}
228   begin
229     assert_equal 1, File.chmod(0400, "#{$mrbtest_io_wfname}.chmod-test")
230   ensure
231     File.delete("#{$mrbtest_io_wfname}.chmod-test")
232   end
233 end
234
235 MRubyIOTestUtil.io_test_cleanup