diff --git a/lib/listen/listener.rb b/lib/listen/listener.rb index 86c6c5e8..6acf4a63 100644 --- a/lib/listen/listener.rb +++ b/lib/listen/listener.rb @@ -63,11 +63,11 @@ def initialize(*dirs, &block) state :initializing, to: :backend_started - state :backend_started, to: [:frontend_ready] do + state :backend_started, to: [:frontend_ready, :stopped] do backend.start end - state :frontend_ready, to: [:processing_events] do + state :frontend_ready, to: [:processing_events, :stopped] do processor.setup end diff --git a/spec/lib/listen/listener_spec.rb b/spec/lib/listen/listener_spec.rb index ac603583..98e34c93 100644 --- a/spec/lib/listen/listener_spec.rb +++ b/spec/lib/listen/listener_spec.rb @@ -137,13 +137,43 @@ allow(backend).to receive(:start) allow(processor).to receive(:setup) allow(processor).to receive(:resume) - subject.start end - it 'terminates' do - allow(backend).to receive(:stop) - allow(processor).to receive(:teardown) - subject.stop + context 'when fully started' do + before do + subject.start + end + + it 'terminates' do + allow(backend).to receive(:stop) + allow(processor).to receive(:teardown) + subject.stop + end + end + + context 'when frontend is ready' do + before do + subject.transition :backend_started + subject.transition :frontend_ready + end + + it 'terminates' do + allow(backend).to receive(:stop) + allow(processor).to receive(:teardown) + subject.stop + end + end + + context 'when only backend is already started' do + before do + subject.transition :backend_started + end + + it 'terminates' do + allow(backend).to receive(:stop) + allow(processor).to receive(:teardown) + subject.stop + end end end @@ -304,17 +334,4 @@ end end end - - describe 'processing changes' do - before do - allow(backend).to receive(:start) - end - end - - context 'when listener is stopped' do - before do - subject.stop - allow(silencer).to receive(:silenced?) { true } - end - end end