From 7493ab3284c9f3000621681f2329b4d5477fd918 Mon Sep 17 00:00:00 2001 From: Thibault Jouan Date: Tue, 14 Apr 2015 00:38:45 +0000 Subject: [PATCH] Evaluate run control file when present --- features/run_control/evaluation.feature | 10 +++++++++ features/steps/output_steps.rb | 4 ++++ lib/uh/wm/runner.rb | 6 +++++ spec/uh/wm/runner_spec.rb | 30 ++++++++++++++++++++++--- 4 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 features/run_control/evaluation.feature diff --git a/features/run_control/evaluation.feature b/features/run_control/evaluation.feature new file mode 100644 index 0000000..24eb4bd --- /dev/null +++ b/features/run_control/evaluation.feature @@ -0,0 +1,10 @@ +@mocked_home_directory +Feature: run control file evaluation + + Scenario: evaluates the default run control file when it exists + Given a file named .uhwmrc.rb with: + """ + puts 'run control evaluation' + """ + When I start uhwm + Then the output must contain "run control evaluation" diff --git a/features/steps/output_steps.rb b/features/steps/output_steps.rb index 21c51d4..b056e62 100644 --- a/features/steps/output_steps.rb +++ b/features/steps/output_steps.rb @@ -19,6 +19,10 @@ Then /^the output must contain:$/ do |content| uhwm_wait_output content.to_s end +Then /^the output must contain "([^"]+)"$/ do |content| + uhwm_wait_output content.to_s +end + Then /^the output must contain current display$/ do uhwm_wait_output ENV['DISPLAY'] end diff --git a/lib/uh/wm/runner.rb b/lib/uh/wm/runner.rb index 24c0675..e972cbe 100644 --- a/lib/uh/wm/runner.rb +++ b/lib/uh/wm/runner.rb @@ -4,6 +4,7 @@ module Uh class << self def run env, **options runner = new env, **options + runner.evaluate_run_control runner.register_event_hooks runner.connect_manager runner.run_until { runner.stopped? } @@ -30,6 +31,11 @@ module Uh @stopped = true end + def evaluate_run_control + rc_path = File.expand_path(@env.rc_path) + eval File.read(rc_path) if File.exist?(rc_path) + end + def register_event_hooks register_manager_hooks register_layout_event_hooks diff --git a/spec/uh/wm/runner_spec.rb b/spec/uh/wm/runner_spec.rb index 8149e84..02c41bd 100644 --- a/spec/uh/wm/runner_spec.rb +++ b/spec/uh/wm/runner_spec.rb @@ -1,3 +1,5 @@ +require 'support/filesystem_helpers' + SomeLayout = Class.new do define_method(:register) { |*args| } end @@ -5,10 +7,15 @@ end module Uh module WM RSpec.describe Runner do - let(:env) do - Env.new(StringIO.new).tap { |o| o.layout_class = SomeLayout } + include FileSystemHelpers + + let(:env) { Env.new(StringIO.new) } + subject(:runner) { described_class.new env } + + before do + env.layout_class = SomeLayout + env.rc_path = 'non_existent_run_control.rb' end - subject(:runner) { described_class.new env } describe '#initialize' do it 'assigns the env' do @@ -52,6 +59,23 @@ module Uh end end + describe '#evaluate_run_control' do + context 'when run control file exists' do + it 'evaluates the run control file' do + with_file 'throw :run_control' do |f| + env.rc_path = f.path + expect { runner.evaluate_run_control }.to throw_symbol :run_control + end + end + end + + context 'when run control file does not exist' do + it 'does not raise any error' do + expect { runner.evaluate_run_control }.not_to raise_error + end + end + end + describe '#register_event_hooks' do it 'registers manager event hooks for logging' do runner.register_event_hooks