spec/build/files/monitor_spec.rb in build-files-0.3.3 vs spec/build/files/monitor_spec.rb in build-files-0.3.4
- old
+ new
@@ -29,50 +29,72 @@
include Build::Files
ROOT = File.expand_path('../tmp', __FILE__)
describe Build::Files::Monitor do
- let(:path) {Path.new(ROOT) + "test.txt"}
-
- before(:all) do
- Path.new(ROOT).mkpath
- end
-
- after(:all) do
- Path.new(ROOT).rmpath
- end
-
- it 'should detect additions' do
- directory = Build::Files::Directory.new(ROOT)
- monitor = Build::Files::Monitor.new
+ shared_examples_for Monitor do |driver|
+ let(:path) {Path.new(ROOT) + "test.txt"}
- changed = false
+ before(:all) do
+ Path.new(ROOT).create
+ end
- monitor.track_changes(directory) do |state|
- changed = state.added.include? path
+ after(:all) do
+ Path.new(ROOT).delete
end
- touched = false
-
- thread = Thread.new do
- sleep 0.1
+ it 'should detect additions' do
+ directory = Build::Files::Directory.new(ROOT)
+ monitor = Build::Files::Monitor.new
- path.touch
+ changed = false
- touched = true
+ monitor.track_changes(directory) do |state|
+ changed = state.added.include? path
+ end
+
+ touched = false
+
+ thread = Thread.new do
+ sleep 0.1
+
+ path.touch
+
+ touched = true
+ end
+
+ triggered = 0
+
+ monitor.run(driver: driver) do
+ triggered += 1
+
+ throw :interrupt if touched
+ end
+
+ thread.join
+
+ expect(changed).to be true
+ expect(triggered).to be >= 1
end
+ end
+
+ # Use the cross-platform driver, :polling
+ it_behaves_like Monitor, :polling
+
+ # Use the native platform driver, e.g. fsevent or inotify.
+ it_behaves_like Monitor
+
+ it "should add and remove monitored paths" do
+ directory = Build::Files::Directory.new(ROOT)
+ monitor = Build::Files::Monitor.new
- triggered = 0
-
- monitor.run do
- triggered += 1
-
- throw :interrupt if touched
+ handler = monitor.track_changes(directory) do |state|
end
- thread.join
+ expect(monitor.roots).to be_include ROOT
- expect(changed).to be true
- expect(triggered).to be >= 1
+ handler.remove!
+
+ expect(monitor.roots).to be_empty
end
end
end