From 087a79ab2fe4dfbe1cf1daafe91be5c9ef39be0c Mon Sep 17 00:00:00 2001 From: Xavier Noria Date: Mon, 12 Oct 2015 21:44:21 +0200 Subject: initial edit pass over the evented file checker patch --- .../test/file_evented_update_checker_test.rb | 15 +--- activesupport/test/file_update_checker_test.rb | 5 +- ...le_update_checker_with_enumerable_test_cases.rb | 88 +++++++++++++++------- 3 files changed, 67 insertions(+), 41 deletions(-) (limited to 'activesupport/test') diff --git a/activesupport/test/file_evented_update_checker_test.rb b/activesupport/test/file_evented_update_checker_test.rb index 09087738dc..ebcba078ce 100644 --- a/activesupport/test/file_evented_update_checker_test.rb +++ b/activesupport/test/file_evented_update_checker_test.rb @@ -3,19 +3,12 @@ require 'fileutils' 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 diff --git a/activesupport/test/file_update_checker_test.rb b/activesupport/test/file_update_checker_test.rb index c61193d133..9c517290e2 100644 --- a/activesupport/test/file_update_checker_test.rb +++ b/activesupport/test/file_update_checker_test.rb @@ -3,10 +3,11 @@ require 'fileutils' 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 diff --git a/activesupport/test/file_update_checker_with_enumerable_test_cases.rb b/activesupport/test/file_update_checker_with_enumerable_test_cases.rb index cd1f12d42f..c7b5ffb7a5 100644 --- a/activesupport/test/file_update_checker_with_enumerable_test_cases.rb +++ b/activesupport/test/file_update_checker_with_enumerable_test_cases.rb @@ -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 @@ module FileUpdateCheckerWithEnumerableTestCases 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) -- cgit v1.2.3