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