aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test
diff options
context:
space:
mode:
authorwycats <wycats@gmail.com>2011-02-20 01:37:37 -0800
committerwycats <wycats@gmail.com>2011-02-20 01:39:25 -0800
commite984fd43d56797874c532b7d45af8240decfd5ba (patch)
treea9b54435336e3cc6790b15bf81c3a3315fd1e527 /activesupport/test
parent89e6b193564075c89b1e0fc24b8184240ea6d324 (diff)
downloadrails-e984fd43d56797874c532b7d45af8240decfd5ba.tar.gz
rails-e984fd43d56797874c532b7d45af8240decfd5ba.tar.bz2
rails-e984fd43d56797874c532b7d45af8240decfd5ba.zip
Allow tests to proceed as soon as the payload changes, instead of always having to wait for a timeout
Diffstat (limited to 'activesupport/test')
-rw-r--r--activesupport/test/file_watcher_test.rb52
1 files changed, 37 insertions, 15 deletions
diff --git a/activesupport/test/file_watcher_test.rb b/activesupport/test/file_watcher_test.rb
index 1394c66d9f..027453f86a 100644
--- a/activesupport/test/file_watcher_test.rb
+++ b/activesupport/test/file_watcher_test.rb
@@ -1,6 +1,7 @@
require 'abstract_unit'
require 'fssm'
require "fileutils"
+require "timeout"
class FileWatcherTest < ActiveSupport::TestCase
@@ -128,6 +129,9 @@ class FSSMFileWatcherTest < ActiveSupport::TestCase
def setup
Thread.abort_on_exception = true
+ @payload = []
+ @triggered = false
+
@watcher = ActiveSupport::FileWatcher.new
@path = path = File.expand_path("../tmp", __FILE__)
@@ -140,13 +144,12 @@ class FSSMFileWatcherTest < ActiveSupport::TestCase
@backend = FSSMBackend.new(path, @watcher)
- @payload = []
-
@watcher.watch %r{^app/assets/.*\.scss$} do |pay|
pay.each do |status, files|
files.sort!
end
@payload << pay
+ trigger
end
end
@@ -156,22 +159,43 @@ class FSSMFileWatcherTest < ActiveSupport::TestCase
end
def create(path, past = false)
- path = File.join(@path, path)
- FileUtils.mkdir_p(File.dirname(path))
+ wait(past) do
+ path = File.join(@path, path)
+ FileUtils.mkdir_p(File.dirname(path))
- FileUtils.touch(path)
- File.utime(Time.now - 100, Time.now - 100, path) if past
- sleep 0.1 unless past
+ FileUtils.touch(path)
+ File.utime(Time.now - 100, Time.now - 100, path) if past
+ end
end
def change(path)
- FileUtils.touch(File.join(@path, path))
- sleep 0.1
+ wait do
+ FileUtils.touch(File.join(@path, path))
+ end
end
def delete(path)
- FileUtils.rm(File.join(@path, path))
- sleep 0.1
+ wait do
+ FileUtils.rm(File.join(@path, path))
+ end
+ end
+
+ def wait(past = false)
+ yield
+ return if past
+
+ begin
+ Timeout.timeout(1) do
+ sleep 0.05 until @triggered
+ end
+ rescue Timeout::Error
+ end
+
+ @triggered = false
+ end
+
+ def trigger
+ @triggered = true
end
def test_one_change
@@ -199,14 +223,11 @@ class FSSMFileWatcherTest < ActiveSupport::TestCase
assert_equal([{:created => ["app/assets/new.scss"]}, {:changed => ["app/assets/print.scss"]}, {:deleted => ["app/assets/videos.scss"]}], @payload)
end
- def test_delete
-
- end
-
def test_more_blocks
payload = []
@watcher.watch %r{^config/routes\.rb$} do |pay|
payload << pay
+ trigger
end
create "config/routes.rb"
@@ -218,6 +239,7 @@ class FSSMFileWatcherTest < ActiveSupport::TestCase
payload = []
@watcher.watch %r{^app/assets/main\.scss$} do |pay|
payload << pay
+ trigger
end
change "app/assets/main.scss"