rails/activesupport/test/file_update_checker_test.rb
Carlos Antonio da Silva 33192cfa07 Fix failing test in file update checker
Introduced in 1abe31670fdad2c357b4356b40a4567a46d16693

The test was failing when running on isolation, because the extensions were
not being loaded, thus 1.year.from_now was failing. Just use mktime
instead, adding 1 year to Time.now.
2012-06-29 15:08:08 -03:00

113 lines
3.0 KiB
Ruby

require 'abstract_unit'
require 'fileutils'
require 'thread'
MTIME_FIXTURES_PATH = File.expand_path("../fixtures", __FILE__)
class FileUpdateCheckerWithEnumerableTest < ActiveSupport::TestCase
FILES = %w(1.txt 2.txt 3.txt)
def setup
FileUtils.mkdir_p("tmp_watcher")
FileUtils.touch(FILES)
end
def teardown
FileUtils.rm_rf("tmp_watcher")
FileUtils.rm_rf(FILES)
end
def test_should_not_execute_the_block_if_no_paths_are_given
i = 0
checker = ActiveSupport::FileUpdateChecker.new([]){ i += 1 }
checker.execute_if_updated
assert_equal 0, i
end
def test_should_not_invoke_the_block_if_no_file_has_changed
i = 0
checker = ActiveSupport::FileUpdateChecker.new(FILES){ i += 1 }
5.times { assert !checker.execute_if_updated }
assert_equal 0, i
end
def test_should_invoke_the_block_if_a_file_has_changed
i = 0
checker = ActiveSupport::FileUpdateChecker.new(FILES){ i += 1 }
sleep(1)
FileUtils.touch(FILES)
assert checker.execute_if_updated
assert_equal 1, i
end
def test_should_be_robust_enough_to_handle_deleted_files
i = 0
checker = ActiveSupport::FileUpdateChecker.new(FILES){ i += 1 }
FileUtils.rm(FILES)
assert checker.execute_if_updated
assert_equal 1, i
end
def test_should_be_robust_to_handle_files_with_wrong_modified_time
i = 0
now = Time.now
time = Time.mktime(now.year + 1, now.month, now.day) # wrong mtime from the future
File.utime time, time, FILES[2]
checker = ActiveSupport::FileUpdateChecker.new(FILES){ i += 1 }
sleep(1)
FileUtils.touch(FILES[0..1])
assert checker.execute_if_updated
assert_equal 1, i
end
def test_should_cache_updated_result_until_execute
i = 0
checker = ActiveSupport::FileUpdateChecker.new(FILES){ i += 1 }
assert !checker.updated?
sleep(1)
FileUtils.touch(FILES)
assert checker.updated?
checker.execute
assert !checker.updated?
end
def test_should_invoke_the_block_if_a_watched_dir_changed_its_glob
i = 0
checker = ActiveSupport::FileUpdateChecker.new([], "tmp_watcher" => [:txt]){ i += 1 }
FileUtils.cd "tmp_watcher" do
FileUtils.touch(FILES)
end
assert checker.execute_if_updated
assert_equal 1, i
end
def test_should_not_invoke_the_block_if_a_watched_dir_changed_its_glob
i = 0
checker = ActiveSupport::FileUpdateChecker.new([], "tmp_watcher" => :rb){ i += 1 }
FileUtils.cd "tmp_watcher" do
FileUtils.touch(FILES)
end
assert !checker.execute_if_updated
assert_equal 0, i
end
def test_should_not_block_if_a_strange_filename_used
FileUtils.mkdir_p("tmp_watcher/valid,yetstrange,path,")
FileUtils.touch(FILES.map { |file_name| "tmp_watcher/valid,yetstrange,path,/#{file_name}" })
test = Thread.new do
ActiveSupport::FileUpdateChecker.new([],"tmp_watcher/valid,yetstrange,path," => :txt) { i += 1 }
Thread.exit
end
test.priority = -1
test.join(5)
assert !test.alive?
end
end