From 087a79ab2fe4dfbe1cf1daafe91be5c9ef39be0c Mon Sep 17 00:00:00 2001
From: Xavier Noria <fxn@hashref.com>
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(-)

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