提交 087a79ab 编写于 作者: X Xavier Noria

initial edit pass over the evented file checker patch

上级 785adabc
......@@ -3,19 +3,12 @@
require 'thread'
require 'file_update_checker_with_enumerable_test_cases'
MTIME_FIXTURES_PATH = File.expand_path("../fixtures", __FILE__)
MTIME_FIXTURES_PATH = File.expand_path('fixtures', __dir__)
class FileEventedUpdateCheckerTest < ActiveSupport::TestCase
include FileUpdateCheckerWithEnumerableTestCases
class FileEventedUpdateCheckerWithEnumerableTest < ActiveSupport::TestCase
include FileUpdateCheckerWithEnumerableTestCases
def build_new_watcher(files, dirs={}, &block)
ActiveSupport::FileEventedUpdateChecker.new(files, dirs, &block)
end
def test_modified_should_become_true_when_watched_file_is_updated
watcher = ActiveSupport::FileEventedUpdateChecker.new(FILES){ i += 1 }
assert_equal watcher.updated?, false
FileUtils.rm(FILES)
sleep 1
assert_equal watcher.updated?, true
end
end
......@@ -3,10 +3,11 @@
require 'thread'
require 'file_update_checker_with_enumerable_test_cases'
MTIME_FIXTURES_PATH = File.expand_path("../fixtures", __FILE__)
MTIME_FIXTURES_PATH = File.expand_path('fixtures', __dir__)
class FileUpdateCheckerWithEnumerableTest < ActiveSupport::TestCase
class FileUpdateCheckerTest < ActiveSupport::TestCase
include FileUpdateCheckerWithEnumerableTestCases
def build_new_watcher(files, dirs={}, &block)
ActiveSupport::FileUpdateChecker.new(files, dirs, &block)
end
......
......@@ -2,71 +2,95 @@ module FileUpdateCheckerWithEnumerableTestCases
FILES = %w(1.txt 2.txt 3.txt)
def setup
FileUtils.mkdir_p("tmp_watcher")
FileUtils.mkdir_p('tmp_watcher')
FileUtils.touch(FILES)
end
def teardown
FileUtils.rm_rf("tmp_watcher")
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 = build_new_watcher([]){ i += 1}
checker = build_new_watcher([]) { 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 = build_new_watcher(FILES){ i += 1 }
5.times { assert !checker.execute_if_updated }
checker = build_new_watcher(FILES) { i += 1 }
assert !checker.execute_if_updated
assert_equal 0, i
end
def test_should_invoke_the_block_if_a_file_has_changed
i = 0
checker = build_new_watcher(FILES){ i += 1 }
sleep(1)
checker = build_new_watcher(FILES) { i += 1 }
sleep 1
FileUtils.touch(FILES)
sleep(1) #extra
sleep 1
assert checker.execute_if_updated
assert_equal 1, i
end
def test_updated_should_become_true_when_watched_files_are_deleted
watcher = build_new_watcher(FILES) { i += 1 }
assert !watcher.updated?
FileUtils.rm(FILES)
sleep 1
assert watcher.updated?
end
def test_should_be_robust_enough_to_handle_deleted_files
i = 0
checker = build_new_watcher(FILES){ i += 1 }
FileUtils.rm(FILES)
sleep(1) #extra
checker = build_new_watcher(FILES) { i += 1 }
FileUtils.rm_f(FILES)
sleep 1
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]
File.utime(time, time, FILES[2])
checker = build_new_watcher(FILES){ i += 1 }
checker = build_new_watcher(FILES) { i += 1 }
sleep 1
sleep(1)
FileUtils.touch(FILES[0..1])
sleep(1) #extra
sleep 1
assert checker.execute_if_updated
assert_equal 1, i
end
def test_should_cache_updated_result_until_execute
i = 0
checker = build_new_watcher(FILES){ i += 1 }
checker = build_new_watcher(FILES) { i += 1 }
assert !checker.updated?
sleep 1
sleep(1)
FileUtils.touch(FILES)
sleep(1) #extra
sleep 1
assert checker.updated?
checker.execute
assert !checker.updated?
......@@ -74,34 +98,42 @@ def test_should_cache_updated_result_until_execute
def test_should_invoke_the_block_if_a_watched_dir_changed_its_glob
i = 0
checker = build_new_watcher([], "tmp_watcher" => [:txt]){ i += 1 }
FileUtils.cd "tmp_watcher" do
checker = build_new_watcher([], 'tmp_watcher' => [:txt]) { i += 1 }
FileUtils.cd 'tmp_watcher' do
FileUtils.touch(FILES)
end
sleep(1) #extra
sleep 1
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 = build_new_watcher([], "tmp_watcher" => :rb){ i += 1 }
FileUtils.cd "tmp_watcher" do
checker = build_new_watcher([], 'tmp_watcher' => :rb) { i += 1 }
FileUtils.cd 'tmp_watcher' do
FileUtils.touch(FILES)
end
sleep(1) #extra
sleep 1
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}" })
def test_should_not_block_with_unusual_file_names
unusual_dirname = 'tmp_watcher/valid,yetstrange,path,'
FileUtils.mkdir_p(unusual_dirname)
FileUtils.touch(FILES.map { |file_name| "#{unusual_dirname}/#{file_name}" })
test = Thread.new do
build_new_watcher([],"tmp_watcher/valid,yetstrange,path," => :txt) { i += 1 }
build_new_watcher([], unusual_dirname => :txt) { i += 1 }
Thread.exit
end
test.priority = -1
test.join(5)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册