diff --git a/lib/uh/wm.rb b/lib/uh/wm.rb index fb7e515..244715a 100644 --- a/lib/uh/wm.rb +++ b/lib/uh/wm.rb @@ -3,6 +3,7 @@ require 'uh' require 'uh/wm/cli' require 'uh/wm/env' require 'uh/wm/manager' +require 'uh/wm/runner' module Uh module WM diff --git a/lib/uh/wm/runner.rb b/lib/uh/wm/runner.rb new file mode 100644 index 0000000..7407470 --- /dev/null +++ b/lib/uh/wm/runner.rb @@ -0,0 +1,24 @@ +module Uh + module WM + class Runner + class << self + def run env + runner = new env + runner.connect_manager + end + end + + attr_reader :env, :manager + + def initialize env + @env = env + @manager = Manager.new + end + + def connect_manager + @manager.connect + @env.log "Connected to X server" + end + end + end +end diff --git a/spec/uh/wm/runner_spec.rb b/spec/uh/wm/runner_spec.rb new file mode 100644 index 0000000..d160cec --- /dev/null +++ b/spec/uh/wm/runner_spec.rb @@ -0,0 +1,46 @@ +module Uh + module WM + RSpec.describe Runner do + let(:env) { Env.new(StringIO.new) } + subject(:runner) { described_class.new env } + + describe '.run' do + subject(:run) { described_class.run env } + + it 'builds a new Runner with given env' do + expect(described_class).to receive(:new).with(env).and_call_original + run + end + + it 'connects the manager' do + runner + allow(described_class).to receive(:new) { runner } + expect(runner).to receive(:connect_manager) + run + end + end + + describe '#initialize' do + it 'assigns the env' do + expect(runner.env).to be env + end + + it 'assigns a new Manager' do + expect(runner.manager).to be_a Manager + end + end + + describe '#connect_manager' do + it 'connects the manager' do + expect(runner.manager).to receive :connect + runner.connect_manager + end + + it 'logs a message when connected' do + expect(env).to receive(:log).with /connected/i + runner.connect_manager + end + end + end + end +end