BTW, the tmpfs method has the added advantage of failing if you have any file handles still open at the end of your test (as umount will fail). Conversely, one test in which umount fails will probably cause all the subsequent tests to fail. -----Original Message----- From: Daniel Sheppard Sent: Tuesday, 20 September 2005 4:34 PM To: ruby-talk ML Subject: Re: MockFS 0.1.2 Except for the fact that you can pretend you're talking to the entirety of the filesystem from the root directory, is there much use for this that wouldn't be met by running: mount -t tmpfs tmpfs /somewhere ie. your unit test would be something like: require 'test/unit' def move_log File.rename('/somewhere/var/log/httpd/access_log','/somewhere/home/franc is/logs/access_log') end class TestMoveLog < Test::Unit::TestCase def test_move_log assert(system("mount -t tmpfs tmpfs /somewhere")) begin require 'pathname' Pathname.new('/somewhere/var/log/httpd/').mkpath Pathname.new( '/somewhere/home/francis/logs/').mkpath File.open('/somewhere/var/log/httpd/access_log', "a") do |f| f.puts "line 1 of the access log" end move_log assert( File.exist?( '/somewhere/home/francis/logs/access_log' ) ) assert( !File.exist?( '/somewhere/var/log/httpd/access_log' ) ) contents = File.open( '/somewhere/home/francis/logs/access_log' ) do |f| f.gets( nil ) end assert_equal( "line 1 of the access log\n", contents ) ensure assert(system("umount /somewhere")) end end end Or am I not understanding the project properly? -----Original Message----- From: Francis Hwang [mailto:sera / fhwang.net] Sent: Tuesday, 20 September 2005 12:27 PM To: ruby-talk ML Subject: ANN: MockFS 0.1.2 Hi everyone, MockFS lumbers forward with its newest release, 0.1.2. Besides a liberal heaping of bugfixes, this version adds override.rb, which does some convenient but possibly dangerous redefining of global constants and methods. Ooh, danger! http://rubyforge.org/projects/mockfs/ == What's MockFS? MockFS is nothing less than an attempt to simulate a file system in memory for the purposes of testing. I wrote it for my own use, because I write lots of tests and sometimes I get sick of cleaning up test files. It's a lot simpler to just simulate the disk in memory and drop the whole thing when you're done with your test. It's not complete by a longshot, but it's complete enough that I'm able to use it to help me write tests for production code--most notably, for Rhizome.org, a community website that gets more than a million pageviews a month. == What's new in 0.1.2? * First, a lot of little things have been fixed. MockFS now has a better understanding of file permissions, of paths, and the multiple ways that File, FileUtils, and Dir allow the same method to be called through class or instance methods. * I've also added override.rb, which redefines File, FileUtils, and Dir. This is so your code doesn't have to reference MockFS directly; the test cases can include override.rb and reference the mock file system that way. override.rb also includes a redefinition of Kernel.require, so that if a file doesn't exist in the real file system, Kernel.require will look for it in the mock file system. This might be useful in cases where you have configuration files written in Ruby, and would like to swap them out during testing. Pretty much everything in override.rb is experimental, so I'd urge caution in including the file. == Help me make this useful for you I'm putting this out in the hopes that it will be useful right now to others, but also as a way of soliciting specific bug reports. I don't expect to fill in the entire necessary functionality overnight, but if people submit targeted bug reports about specific cases and methods, I can fill those in first. Thanks, Francis ######################################################################## ############# This email has been scanned by MailMarshal, an email content filter. ######################################################################## ############# ##################################################################################### This email has been scanned by MailMarshal, an email content filter. #####################################################################################