rf-web/vendor/bundle/gems/eventmachine-1.2.7/tests/test_file_watch.rb

86 lines
1.8 KiB
Ruby
Raw Normal View History

2019-10-21 08:18:17 +00:00
require 'em_test_helper'
require 'tempfile'
class TestFileWatch < Test::Unit::TestCase
if windows?
def test_watch_file_raises_unsupported_error
assert_raises(EM::Unsupported) do
EM.run do
file = Tempfile.new("fake_file")
EM.watch_file(file.path)
end
end
end
elsif EM.respond_to? :watch_filename
module FileWatcher
def file_modified
$modified = true
end
def file_deleted
$deleted = true
end
def unbind
$unbind = true
EM.stop
end
end
def setup
EM.kqueue = true if EM.kqueue?
end
def teardown
EM.kqueue = false if EM.kqueue?
end
def test_events
omit_if(solaris?)
EM.run{
file = Tempfile.new('em-watch')
$tmp_path = file.path
# watch it
watch = EM.watch_file(file.path, FileWatcher)
$path = watch.path
# modify it
File.open(file.path, 'w'){ |f| f.puts 'hi' }
# delete it
EM.add_timer(0.01){ file.close; file.delete }
}
assert_equal($path, $tmp_path)
assert($modified)
assert($deleted)
assert($unbind)
end
# Refer: https://github.com/eventmachine/eventmachine/issues/512
def test_invalid_signature
# This works fine with kqueue, only fails with linux inotify.
omit_if(EM.kqueue?)
EM.run {
file = Tempfile.new('foo')
w1 = EventMachine.watch_file(file.path)
w2 = EventMachine.watch_file(file.path)
assert_raise EventMachine::InvalidSignature do
w2.stop_watching
end
EM.stop
}
end
else
warn "EM.watch_file not implemented, skipping tests in #{__FILE__}"
# Because some rubies will complain if a TestCase class has no tests
def test_em_watch_file_unsupported
assert true
end
end
end