PageRenderTime 50ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/projects/jruby-1.7.3/test/externals/ruby1.8/ruby/test_file_exhaustive.rb

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Ruby | 673 lines | 594 code | 77 blank | 2 comment | 29 complexity | f24b94d20a9267e397de92ba00530fce MD5 | raw file
  1. require "test/unit"
  2. require "fileutils"
  3. require "tmpdir"
  4. class TestFileExhaustive < Test::Unit::TestCase
  5. def setup
  6. @dir = Dir.mktmpdir("rubytest-file")
  7. File.chown(-1, Process.gid, @dir)
  8. @file = make_tmp_filename("file")
  9. @zerofile = make_tmp_filename("zerofile")
  10. @nofile = make_tmp_filename("nofile")
  11. @symlinkfile = make_tmp_filename("symlinkfile")
  12. @hardlinkfile = make_tmp_filename("hardlinkfile")
  13. make_file("foo", @file)
  14. make_file("", @zerofile)
  15. @time = Time.now
  16. begin
  17. File.symlink(@file, @symlinkfile)
  18. rescue NotImplementedError
  19. @symlinkfile = nil
  20. end
  21. begin
  22. File.link(@file, @hardlinkfile)
  23. rescue NotImplementedError, Errno::EINVAL # EINVAL for Windows Vista
  24. @hardlinkfile = nil
  25. end
  26. end
  27. def teardown
  28. GC.start
  29. FileUtils.remove_entry_secure @dir
  30. end
  31. def make_file(content, file = @file)
  32. open(file, "w") {|fh| fh << content }
  33. end
  34. def make_tmp_filename(prefix)
  35. @hardlinkfile = @dir + "/" + prefix + File.basename(__FILE__) + ".#{$$}.test"
  36. end
  37. def test_path
  38. file = @file
  39. assert_equal(file, File.open(file) {|f| f.path})
  40. end
  41. def assert_integer(n)
  42. assert(n.is_a?(Integer), n.inspect + " is not Fixnum.")
  43. end
  44. def assert_integer_or_nil(n)
  45. assert(n.is_a?(Integer) || n.equal?(nil), n.inspect + " is neither Fixnum nor nil.")
  46. end
  47. def test_stat
  48. sleep(@time - Time.now + 1.1)
  49. make_file("foo", @file + "2")
  50. fs1, fs2 = File.stat(@file), File.stat(@file + "2")
  51. assert_nothing_raised do
  52. assert_equal(0, fs1 <=> fs1)
  53. assert_equal(-1, fs1 <=> fs2)
  54. assert_equal(1, fs2 <=> fs1)
  55. assert_nil(fs1 <=> nil)
  56. assert_integer(fs1.dev)
  57. assert_integer_or_nil(fs1.rdev)
  58. assert_integer_or_nil(fs1.dev_major)
  59. assert_integer_or_nil(fs1.dev_minor)
  60. assert_integer_or_nil(fs1.rdev_major)
  61. assert_integer_or_nil(fs1.rdev_minor)
  62. assert_integer(fs1.ino)
  63. assert_integer(fs1.mode)
  64. unless /emx/ =~ RUBY_PLATFORM
  65. assert_equal(@hardlinkfile ? 2 : 1, fs1.nlink)
  66. end
  67. assert_integer(fs1.uid)
  68. assert_integer(fs1.gid)
  69. assert_equal(3, fs1.size)
  70. assert_integer_or_nil(fs1.blksize)
  71. assert_integer_or_nil(fs1.blocks)
  72. assert_kind_of(Time, fs1.atime)
  73. assert_kind_of(Time, fs1.mtime)
  74. assert_kind_of(Time, fs1.ctime)
  75. assert_kind_of(String, fs1.inspect)
  76. end
  77. assert_raise(Errno::ENOENT) { File.stat(@nofile) }
  78. assert_kind_of(File::Stat, File.open(@file) {|f| f.stat})
  79. assert_raise(Errno::ENOENT) { File.lstat(@nofile) }
  80. assert_kind_of(File::Stat, File.open(@file) {|f| f.lstat})
  81. end
  82. def test_directory_p
  83. assert(File.directory?(@dir))
  84. assert(!(File.directory?(@dir+"/...")))
  85. assert(!(File.directory?(@file)))
  86. assert(!(File.directory?(@nofile)))
  87. end
  88. def test_pipe_p ## xxx
  89. assert(!(File.pipe?(@dir)))
  90. assert(!(File.pipe?(@file)))
  91. assert(!(File.pipe?(@nofile)))
  92. end
  93. def test_symlink_p
  94. assert(!(File.symlink?(@dir)))
  95. assert(!(File.symlink?(@file)))
  96. assert(File.symlink?(@symlinkfile)) if @symlinkfile
  97. assert(!(File.symlink?(@hardlinkfile))) if @hardlinkfile
  98. assert(!(File.symlink?(@nofile)))
  99. end
  100. def test_socket_p ## xxx
  101. assert(!(File.socket?(@dir)))
  102. assert(!(File.socket?(@file)))
  103. assert(!(File.socket?(@nofile)))
  104. end
  105. def test_blockdev_p ## xxx
  106. assert(!(File.blockdev?(@dir)))
  107. assert(!(File.blockdev?(@file)))
  108. assert(!(File.blockdev?(@nofile)))
  109. end
  110. def test_chardev_p ## xxx
  111. assert(!(File.chardev?(@dir)))
  112. assert(!(File.chardev?(@file)))
  113. assert(!(File.chardev?(@nofile)))
  114. end
  115. def test_exist_p
  116. assert(File.exist?(@dir))
  117. assert(File.exist?(@file))
  118. assert(!(File.exist?(@nofile)))
  119. end
  120. def test_readable_p
  121. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  122. File.chmod(0200, @file)
  123. assert(!(File.readable?(@file)))
  124. File.chmod(0600, @file)
  125. assert(File.readable?(@file))
  126. assert(!(File.readable?(@nofile)))
  127. end
  128. def test_readable_real_p
  129. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  130. File.chmod(0200, @file)
  131. assert(!(File.readable_real?(@file)))
  132. File.chmod(0600, @file)
  133. assert(File.readable_real?(@file))
  134. assert(!(File.readable_real?(@nofile)))
  135. end
  136. def test_writable_p
  137. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  138. File.chmod(0400, @file)
  139. assert(!(File.writable?(@file)))
  140. File.chmod(0600, @file)
  141. assert(File.writable?(@file))
  142. assert(!(File.writable?(@nofile)))
  143. end
  144. def test_writable_real_p
  145. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  146. File.chmod(0400, @file)
  147. assert(!(File.writable_real?(@file)))
  148. File.chmod(0600, @file)
  149. assert(File.writable_real?(@file))
  150. assert(!(File.writable_real?(@nofile)))
  151. end
  152. def test_executable_p
  153. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  154. File.chmod(0100, @file)
  155. assert(File.executable?(@file))
  156. File.chmod(0600, @file)
  157. assert(!(File.executable?(@file)))
  158. assert(!(File.executable?(@nofile)))
  159. end
  160. def test_executable_real_p
  161. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  162. File.chmod(0100, @file)
  163. assert(File.executable_real?(@file))
  164. File.chmod(0600, @file)
  165. assert(!(File.executable_real?(@file)))
  166. assert(!(File.executable_real?(@nofile)))
  167. end
  168. def test_file_p
  169. assert(!(File.file?(@dir)))
  170. assert(File.file?(@file))
  171. assert(!(File.file?(@nofile)))
  172. end
  173. def test_zero_p
  174. assert_nothing_raised { File.zero?(@dir) }
  175. assert(!(File.zero?(@file)))
  176. assert(File.zero?(@zerofile))
  177. assert(!(File.zero?(@nofile)))
  178. end
  179. def test_size_p
  180. assert_nothing_raised { File.size?(@dir) }
  181. assert_equal(3, File.size?(@file))
  182. assert(!(File.size?(@zerofile)))
  183. assert(!(File.size?(@nofile)))
  184. end
  185. def test_owned_p ## xxx
  186. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  187. assert(File.owned?(@file))
  188. assert(File.grpowned?(@file))
  189. end
  190. def test_suid_sgid_sticky ## xxx
  191. assert(!(File.setuid?(@file)))
  192. assert(!(File.setgid?(@file)))
  193. assert(!(File.sticky?(@file)))
  194. end
  195. def test_identical_p
  196. assert(File.identical?(@file, @file))
  197. assert(!(File.identical?(@file, @zerofile)))
  198. assert(!(File.identical?(@file, @nofile)))
  199. assert(!(File.identical?(@nofile, @file)))
  200. end
  201. def test_size
  202. assert_integer(File.size(@dir))
  203. assert_equal(3, File.size(@file))
  204. assert_equal(0, File.size(@zerofile))
  205. assert_raise(Errno::ENOENT) { File.size(@nofile) }
  206. end
  207. def test_ftype
  208. assert_equal("directory", File.ftype(@dir))
  209. assert_equal("file", File.ftype(@file))
  210. assert_equal("link", File.ftype(@symlinkfile)) if @symlinkfile
  211. assert_equal("file", File.ftype(@hardlinkfile)) if @hardlinkfile
  212. assert_raise(Errno::ENOENT) { File.ftype(@nofile) }
  213. end
  214. def test_atime
  215. t1 = File.atime(@file)
  216. t2 = File.open(@file) {|f| f.atime}
  217. assert_kind_of(Time, t1)
  218. assert_kind_of(Time, t2)
  219. assert_equal(t1, t2)
  220. assert_raise(Errno::ENOENT) { File.atime(@nofile) }
  221. end
  222. def test_mtime
  223. t1 = File.mtime(@file)
  224. t2 = File.open(@file) {|f| f.mtime}
  225. assert_kind_of(Time, t1)
  226. assert_kind_of(Time, t2)
  227. assert_equal(t1, t2)
  228. assert_raise(Errno::ENOENT) { File.mtime(@nofile) }
  229. end
  230. def test_ctime
  231. t1 = File.ctime(@file)
  232. t2 = File.open(@file) {|f| f.ctime}
  233. assert_kind_of(Time, t1)
  234. assert_kind_of(Time, t2)
  235. assert_equal(t1, t2)
  236. assert_raise(Errno::ENOENT) { File.ctime(@nofile) }
  237. end
  238. def test_chmod
  239. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  240. assert_equal(1, File.chmod(0444, @file))
  241. assert_equal(0444, File.stat(@file).mode % 01000)
  242. assert_equal(0, File.open(@file) {|f| f.chmod(0222)})
  243. assert_equal(0222, File.stat(@file).mode % 01000)
  244. File.chmod(0600, @file)
  245. assert_raise(Errno::ENOENT) { File.chmod(0600, @nofile) }
  246. end
  247. def test_lchmod
  248. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  249. assert_equal(1, File.lchmod(0444, @file))
  250. assert_equal(0444, File.stat(@file).mode % 01000)
  251. File.lchmod(0600, @file)
  252. assert_raise(Errno::ENOENT) { File.lchmod(0600, @nofile) }
  253. rescue NotImplementedError
  254. end
  255. def test_chown ## xxx
  256. end
  257. def test_lchown ## xxx
  258. end
  259. def test_symlink
  260. return unless @symlinkfile
  261. assert_equal("link", File.ftype(@symlinkfile))
  262. assert_raise(Errno::EEXIST) { File.symlink(@file, @file) }
  263. end
  264. def test_utime
  265. t = Time.local(2000)
  266. File.utime(t + 1, t + 2, @zerofile)
  267. assert_equal(t + 1, File.atime(@zerofile))
  268. assert_equal(t + 2, File.mtime(@zerofile))
  269. end
  270. def test_hardlink
  271. return unless @hardlinkfile
  272. assert_equal("file", File.ftype(@hardlinkfile))
  273. assert_raise(Errno::EEXIST) { File.link(@file, @file) }
  274. end
  275. def test_symlink2
  276. return unless @symlinkfile
  277. assert_equal(@file, File.readlink(@symlinkfile))
  278. assert_raise(Errno::EINVAL) { File.readlink(@file) }
  279. assert_raise(Errno::ENOENT) { File.readlink(@nofile) }
  280. rescue NotImplementedError
  281. end
  282. def test_unlink
  283. assert_equal(1, File.unlink(@file))
  284. make_file("foo", @file)
  285. assert_raise(Errno::ENOENT) { File.unlink(@nofile) }
  286. end
  287. def test_rename
  288. assert_equal(0, File.rename(@file, @nofile))
  289. assert(!(File.exist?(@file)))
  290. assert(File.exist?(@nofile))
  291. assert_equal(0, File.rename(@nofile, @file))
  292. assert_raise(Errno::ENOENT) { File.rename(@nofile, @file) }
  293. end
  294. def test_umask
  295. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  296. prev = File.umask(0777)
  297. assert_equal(0777, File.umask)
  298. open(@nofile, "w") { }
  299. assert_equal(0, File.stat(@nofile).mode % 01000)
  300. File.unlink(@nofile)
  301. assert_equal(0777, File.umask(prev))
  302. assert_raise(ArgumentError) { File.umask(0, 1, 2) }
  303. end
  304. def test_expand_path
  305. assert_equal(@file, File.expand_path(File.basename(@file), File.dirname(@file)))
  306. if /cygwin|mingw|mswin|bccwin/ =~ RUBY_PLATFORM
  307. assert_equal(@file, File.expand_path(@file + " "))
  308. assert_equal(@file, File.expand_path(@file + "."))
  309. assert_equal(@file, File.expand_path(@file + "::$DATA"))
  310. end
  311. end
  312. def test_basename
  313. assert_equal(File.basename(@file).sub(/\.test$/, ""), File.basename(@file, ".test"))
  314. assert_equal("", File.basename(""))
  315. assert_equal("foo", File.basename("foo"))
  316. assert_equal("foo", File.basename("foo", ".ext"))
  317. assert_equal("foo", File.basename("foo.ext", ".ext"))
  318. assert_equal("foo", File.basename("foo.ext", ".*"))
  319. if /cygwin|mingw|mswin|bccwin/ =~ RUBY_PLATFORM
  320. basename = File.basename(@file)
  321. assert_equal(basename, File.basename(@file + " "))
  322. assert_equal(basename, File.basename(@file + "."))
  323. assert_equal(basename, File.basename(@file + "::$DATA"))
  324. basename.chomp!(".test")
  325. assert_equal(basename, File.basename(@file + " ", ".test"))
  326. assert_equal(basename, File.basename(@file + ".", ".test"))
  327. assert_equal(basename, File.basename(@file + "::$DATA", ".test"))
  328. assert_equal(basename, File.basename(@file + " ", ".*"))
  329. assert_equal(basename, File.basename(@file + ".", ".*"))
  330. assert_equal(basename, File.basename(@file + "::$DATA", ".*"))
  331. end
  332. end
  333. def test_dirname
  334. assert(@file.start_with?(File.dirname(@file)))
  335. assert_equal(".", File.dirname(""))
  336. end
  337. def test_extname
  338. assert(".test", File.extname(@file))
  339. prefixes = ["", "/", ".", "/.", "bar/.", "/bar/."]
  340. infixes = ["", " ", "."]
  341. infixes2 = infixes + [".ext "]
  342. appendixes = [""]
  343. if /cygwin|mingw|mswin|bccwin/ =~ RUBY_PLATFORM
  344. appendixes << " " << "." << "::$DATA" << "::$DATA.bar"
  345. end
  346. prefixes.each do |prefix|
  347. appendixes.each do |appendix|
  348. infixes.each do |infix|
  349. path = "#{prefix}foo#{infix}#{appendix}"
  350. assert_equal("", File.extname(path), "File.extname(#{path.inspect})")
  351. end
  352. infixes2.each do |infix|
  353. path = "#{prefix}foo#{infix}.ext#{appendix}"
  354. assert_equal(".ext", File.extname(path), "File.extname(#{path.inspect})")
  355. end
  356. end
  357. end
  358. end
  359. def test_split
  360. d, b = File.split(@file)
  361. assert_equal(File.dirname(@file), d)
  362. assert_equal(File.basename(@file), b)
  363. end
  364. def test_join
  365. s = "foo" + File::SEPARATOR + "bar" + File::SEPARATOR + "baz"
  366. assert_equal(s, File.join("foo", "bar", "baz"))
  367. assert_equal(s, File.join(["foo", "bar", "baz"]))
  368. assert_equal(s, File.join("foo" + File::SEPARATOR, "bar", File::SEPARATOR + "baz"))
  369. end
  370. def test_truncate
  371. assert_equal(0, File.truncate(@file, 1))
  372. assert(File.exist?(@file))
  373. assert_equal(1, File.size(@file))
  374. assert_equal(0, File.truncate(@file, 0))
  375. assert(File.exist?(@file))
  376. assert(File.zero?(@file))
  377. make_file("foo", @file)
  378. assert_raise(Errno::ENOENT) { File.truncate(@nofile, 0) }
  379. f = File.new(@file, "w")
  380. assert_equal(0, f.truncate(2))
  381. assert(File.exist?(@file))
  382. assert_equal(2, File.size(@file))
  383. assert_equal(0, f.truncate(0))
  384. assert(File.exist?(@file))
  385. assert(File.zero?(@file))
  386. f.close
  387. make_file("foo", @file)
  388. assert_raise(IOError) { File.open(@file) {|f| f.truncate(0)} }
  389. rescue NotImplementedError
  390. end
  391. def test_flock ## xxx
  392. f = File.new(@file, "r+")
  393. f.flock(File::LOCK_EX)
  394. f.flock(File::LOCK_SH)
  395. f.flock(File::LOCK_UN)
  396. f.close
  397. rescue NotImplementedError
  398. end
  399. def test_test
  400. sleep(@time - Time.now + 1.1)
  401. make_file("foo", @file + "2")
  402. [@dir, @file, @zerofile, @symlinkfile, @hardlinkfile].compact.each do |f|
  403. assert_equal(File.atime(f), test(?A, f))
  404. assert_equal(File.ctime(f), test(?C, f))
  405. assert_equal(File.mtime(f), test(?M, f))
  406. assert_equal(File.blockdev?(f), test(?b, f))
  407. assert_equal(File.chardev?(f), test(?c, f))
  408. assert_equal(File.directory?(f), test(?d, f))
  409. assert_equal(File.exist?(f), test(?e, f))
  410. assert_equal(File.file?(f), test(?f, f))
  411. assert_equal(File.setgid?(f), test(?g, f))
  412. assert_equal(File.grpowned?(f), test(?G, f))
  413. assert_equal(File.sticky?(f), test(?k, f))
  414. assert_equal(File.symlink?(f), test(?l, f))
  415. assert_equal(File.owned?(f), test(?o, f))
  416. assert_nothing_raised { test(?O, f) }
  417. assert_equal(File.pipe?(f), test(?p, f))
  418. assert_equal(File.readable?(f), test(?r, f))
  419. assert_equal(File.readable_real?(f), test(?R, f))
  420. assert_equal(File.size?(f), test(?s, f))
  421. assert_equal(File.socket?(f), test(?S, f))
  422. assert_equal(File.setuid?(f), test(?u, f))
  423. assert_equal(File.writable?(f), test(?w, f))
  424. assert_equal(File.executable?(f), test(?x, f))
  425. assert_equal(File.executable_real?(f), test(?X, f))
  426. assert_equal(File.zero?(f), test(?z, f))
  427. end
  428. assert_equal(false, test(?-, @dir, @file))
  429. assert_equal(true, test(?-, @file, @file))
  430. assert_equal(true, test(?=, @file, @file))
  431. assert_equal(false, test(?>, @file, @file))
  432. assert_equal(false, test(?<, @file, @file))
  433. unless /cygwin/ =~ RUBY_PLATFORM
  434. assert_equal(false, test(?=, @file, @file + "2"))
  435. assert_equal(false, test(?>, @file, @file + "2"))
  436. assert_equal(true, test(?>, @file + "2", @file))
  437. assert_equal(true, test(?<, @file, @file + "2"))
  438. assert_equal(false, test(?<, @file + "2", @file))
  439. end
  440. assert_raise(ArgumentError) { test }
  441. assert_raise(Errno::ENOENT) { test(?A, @nofile) }
  442. assert_raise(ArgumentError) { test(?a) }
  443. end
  444. def test_stat_init
  445. sleep(@time - Time.now + 1.1)
  446. make_file("foo", @file + "2")
  447. fs1, fs2 = File::Stat.new(@file), File::Stat.new(@file + "2")
  448. assert_nothing_raised do
  449. assert_equal(0, fs1 <=> fs1)
  450. assert_equal(-1, fs1 <=> fs2)
  451. assert_equal(1, fs2 <=> fs1)
  452. assert_nil(fs1 <=> nil)
  453. assert_integer(fs1.dev)
  454. assert_integer_or_nil(fs1.rdev)
  455. assert_integer_or_nil(fs1.dev_major)
  456. assert_integer_or_nil(fs1.dev_minor)
  457. assert_integer_or_nil(fs1.rdev_major)
  458. assert_integer_or_nil(fs1.rdev_minor)
  459. assert_integer(fs1.ino)
  460. assert_integer(fs1.mode)
  461. unless /emx/ =~ RUBY_PLATFORM
  462. assert_equal(@hardlinkfile ? 2 : 1, fs1.nlink)
  463. end
  464. assert_integer(fs1.uid)
  465. assert_integer(fs1.gid)
  466. assert_equal(3, fs1.size)
  467. assert_integer_or_nil(fs1.blksize)
  468. assert_integer_or_nil(fs1.blocks)
  469. assert_kind_of(Time, fs1.atime)
  470. assert_kind_of(Time, fs1.mtime)
  471. assert_kind_of(Time, fs1.ctime)
  472. assert_kind_of(String, fs1.inspect)
  473. end
  474. assert_raise(Errno::ENOENT) { File::Stat.new(@nofile) }
  475. assert_kind_of(File::Stat, File::Stat.new(@file).dup)
  476. assert_raise(TypeError) do
  477. File::Stat.new(@file).instance_eval { initialize_copy(0) }
  478. end
  479. end
  480. def test_stat_ftype
  481. assert_equal("directory", File::Stat.new(@dir).ftype)
  482. assert_equal("file", File::Stat.new(@file).ftype)
  483. # File::Stat uses stat
  484. assert_equal("file", File::Stat.new(@symlinkfile).ftype) if @symlinkfile
  485. assert_equal("file", File::Stat.new(@hardlinkfile).ftype) if @hardlinkfile
  486. end
  487. def test_stat_directory_p
  488. assert(File::Stat.new(@dir).directory?)
  489. assert(!(File::Stat.new(@file).directory?))
  490. end
  491. def test_stat_pipe_p ## xxx
  492. assert(!(File::Stat.new(@dir).pipe?))
  493. assert(!(File::Stat.new(@file).pipe?))
  494. end
  495. def test_stat_symlink_p
  496. assert(!(File::Stat.new(@dir).symlink?))
  497. assert(!(File::Stat.new(@file).symlink?))
  498. # File::Stat uses stat
  499. assert(!(File::Stat.new(@symlinkfile).symlink?)) if @symlinkfile
  500. assert(!(File::Stat.new(@hardlinkfile).symlink?)) if @hardlinkfile
  501. end
  502. def test_stat_socket_p ## xxx
  503. assert(!(File::Stat.new(@dir).socket?))
  504. assert(!(File::Stat.new(@file).socket?))
  505. end
  506. def test_stat_blockdev_p ## xxx
  507. assert(!(File::Stat.new(@dir).blockdev?))
  508. assert(!(File::Stat.new(@file).blockdev?))
  509. end
  510. def test_stat_chardev_p ## xxx
  511. assert(!(File::Stat.new(@dir).chardev?))
  512. assert(!(File::Stat.new(@file).chardev?))
  513. end
  514. def test_stat_readable_p
  515. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  516. File.chmod(0200, @file)
  517. assert(!(File::Stat.new(@file).readable?))
  518. File.chmod(0600, @file)
  519. assert(File::Stat.new(@file).readable?)
  520. end
  521. def test_stat_readable_real_p
  522. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  523. File.chmod(0200, @file)
  524. assert(!(File::Stat.new(@file).readable_real?))
  525. File.chmod(0600, @file)
  526. assert(File::Stat.new(@file).readable_real?)
  527. end
  528. def test_stat_writable_p
  529. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  530. File.chmod(0400, @file)
  531. assert(!(File::Stat.new(@file).writable?))
  532. File.chmod(0600, @file)
  533. assert(File::Stat.new(@file).writable?)
  534. end
  535. def test_stat_writable_real_p
  536. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  537. File.chmod(0400, @file)
  538. assert(!(File::Stat.new(@file).writable_real?))
  539. File.chmod(0600, @file)
  540. assert(File::Stat.new(@file).writable_real?)
  541. end
  542. def test_stat_executable_p
  543. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  544. File.chmod(0100, @file)
  545. assert(File::Stat.new(@file).executable?)
  546. File.chmod(0600, @file)
  547. assert(!(File::Stat.new(@file).executable?))
  548. end
  549. def test_stat_executable_real_p
  550. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  551. File.chmod(0100, @file)
  552. assert(File::Stat.new(@file).executable_real?)
  553. File.chmod(0600, @file)
  554. assert(!(File::Stat.new(@file).executable_real?))
  555. end
  556. def test_stat_file_p
  557. assert(!(File::Stat.new(@dir).file?))
  558. assert(File::Stat.new(@file).file?)
  559. end
  560. def test_stat_zero_p
  561. assert_nothing_raised { File::Stat.new(@dir).zero? }
  562. assert(!(File::Stat.new(@file).zero?))
  563. assert(File::Stat.new(@zerofile).zero?)
  564. end
  565. def test_stat_size_p
  566. assert_nothing_raised { File::Stat.new(@dir).size? }
  567. assert_equal(3, File::Stat.new(@file).size?)
  568. assert(!(File::Stat.new(@zerofile).size?))
  569. end
  570. def test_stat_owned_p ## xxx
  571. return if /cygwin|mswin|bccwin|mingw|emx/ =~ RUBY_PLATFORM
  572. assert(File::Stat.new(@file).owned?)
  573. assert(File::Stat.new(@file).grpowned?)
  574. end
  575. def test_stat_suid_sgid_sticky ## xxx
  576. assert(!(File::Stat.new(@file).setuid?))
  577. assert(!(File::Stat.new(@file).setgid?))
  578. assert(!(File::Stat.new(@file).sticky?))
  579. end
  580. def test_stat_size
  581. assert_integer(File::Stat.new(@dir).size)
  582. assert_equal(3, File::Stat.new(@file).size)
  583. assert_equal(0, File::Stat.new(@zerofile).size)
  584. end
  585. def test_path_check
  586. assert_nothing_raised { ENV["PATH"] }
  587. end
  588. def test_find_file
  589. assert_raise(SecurityError) do
  590. Thread.new do
  591. $SAFE = 4
  592. load(@file)
  593. end.join
  594. end
  595. end
  596. end