From 47bc9c9da2c1420da71a15815b26eac6c5a39e49 Mon Sep 17 00:00:00 2001 From: Thibault Jouan Date: Tue, 21 Apr 2015 12:35:45 +0000 Subject: [PATCH] Refactor specs with factory helper methods --- spec/spec_helper.rb | 4 ++++ spec/support/factories.rb | 23 +++++++++++++++++++++++ spec/uh/wm/client_spec.rb | 7 ++----- spec/uh/wm/manager_spec.rb | 29 +++++++++++------------------ spec/uh/wm/runner_spec.rb | 6 ++++-- 5 files changed, 44 insertions(+), 25 deletions(-) create mode 100644 spec/support/factories.rb diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 07435cf..7fc9a75 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -2,7 +2,11 @@ require 'headless' require 'uh/wm' +Dir['spec/support/**/*.rb'].map { |e| require e.gsub 'spec/', '' } + RSpec.configure do |config| + config.include Factories + config.expect_with :rspec do |expectations| expectations.include_chain_clauses_in_custom_matcher_descriptions = true end diff --git a/spec/support/factories.rb b/spec/support/factories.rb new file mode 100644 index 0000000..3017e19 --- /dev/null +++ b/spec/support/factories.rb @@ -0,0 +1,23 @@ +module Factories + def build_geo x = 0, y = 0, width = 640, height = 480 + Uh::Geo.new(x, y, width, height) + end + + def mock_event type = :xany, **options + double 'event', type: type, **options + end + + def mock_event_key_press key, modifier_mask + mock_event :key_press, + key: 'f', + modifier_mask: modifier_mask + end + + def mock_window override_redirect: false + instance_spy Uh::Window, 'window', + to_s: 'wid', + name: 'wname', + wclass: 'wclass', + override_redirect?: override_redirect + end +end diff --git a/spec/uh/wm/client_spec.rb b/spec/uh/wm/client_spec.rb index ef3cef5..d246842 100644 --- a/spec/uh/wm/client_spec.rb +++ b/spec/uh/wm/client_spec.rb @@ -1,11 +1,8 @@ module Uh module WM RSpec.describe Client do - let(:geo) { Geo.new(0, 0, 640, 480) } - let(:window) do - instance_spy Window, 'window', to_s: 'wid', - name: 'wname', wclass: 'wclass' - end + let(:window) { mock_window } + let(:geo) { build_geo } subject(:client) { described_class.new window, geo } it 'is not visible' do diff --git a/spec/uh/wm/manager_spec.rb b/spec/uh/wm/manager_spec.rb index 83f2167..dd51cf0 100644 --- a/spec/uh/wm/manager_spec.rb +++ b/spec/uh/wm/manager_spec.rb @@ -2,7 +2,7 @@ module Uh module WM RSpec.describe Manager do let(:block) { proc { } } - let(:window) { instance_spy Window, override_redirect?: false } + let(:window) { mock_window } let(:events) { Dispatcher.new } let(:modifier) { :mod1 } let(:display) { Display.new } @@ -107,13 +107,13 @@ module Uh context 'with new window' do it 'sends a configure event to the window with a default geo' do expect(window) - .to receive(:configure_event).with(Geo.new(0, 0, 320, 240)) + .to receive(:configure_event).with(build_geo 0, 0, 320, 240) manager.configure window end context 'when :configure event returns a geo' do it 'sends a configure event with geo returned by event' do - geo = Geo.new(0, 0, 42, 42) + geo = build_geo 0, 0, 42, 42 events.on(:configure) { geo } expect(window).to receive(:configure_event).with geo manager.configure window @@ -249,7 +249,7 @@ module Uh end describe '#handle_pending_events' do - let(:event) { double 'event' } + let(:event) { mock_event } context 'when an event is pending on display' do before do @@ -277,7 +277,7 @@ module Uh end describe '#handle' do - let(:event) { double 'event', type: :any } + let(:event) { mock_event } it 'emits :xevent event with the X event' do events.on :xevent, &block @@ -285,13 +285,8 @@ module Uh end context 'when key_press event is given' do - let(:mod_mask) { KEY_MODIFIERS[modifier] } - let(:event) do - double 'event', - type: :key_press, - key: 'f', - modifier_mask: mod_mask - end + let(:mod_mask) { KEY_MODIFIERS[modifier] } + let(:event) { mock_event_key_press 'f', mod_mask } it 'emits :key event with the corresponding key' do events.on(:key, :f) { throw :key_press_code } @@ -309,9 +304,7 @@ module Uh end context 'when configure request event is given' do - let(:event) do - double 'event', type: :configure_request, window: :window - end + let(:event) { mock_event :configure_request, window: :window } it 'configures the event window' do expect(manager).to receive(:configure).with :window @@ -320,7 +313,7 @@ module Uh end context 'when destroy_notify event is given' do - let(:event) { double 'event', type: :destroy_notify, window: :window } + let(:event) { mock_event :destroy_notify, window: :window } it 'destroy the event window' do expect(manager).to receive(:destroy).with :window @@ -329,7 +322,7 @@ module Uh end context 'when map_request event is given' do - let(:event) { double 'event', type: :map_request, window: :window } + let(:event) { mock_event :map_request, window: :window } it 'maps the event window' do expect(manager).to receive(:map).with :window @@ -338,7 +331,7 @@ module Uh end context 'when unmap_notify event is given' do - let(:event) { double 'event', type: :unmap_notify, window: :window } + let(:event) { mock_event :unmap_notify, window: :window } it 'unmap the event window' do expect(manager).to receive(:unmap).with :window diff --git a/spec/uh/wm/runner_spec.rb b/spec/uh/wm/runner_spec.rb index 63c9825..a1ed574 100644 --- a/spec/uh/wm/runner_spec.rb +++ b/spec/uh/wm/runner_spec.rb @@ -1,6 +1,8 @@ SomeLayout = Class.new do + include Factories + define_method(:register) { |*args| } - define_method(:suggest_geo) { Uh::Geo.new(0, 0, 42, 42) } + define_method(:suggest_geo) { build_geo 0, 0, 42, 42 } define_method(:<<) { |*args| } define_method(:remove) { |*args| } end @@ -82,7 +84,7 @@ module Uh it 'registers for :configure event' do runner.register_event_hooks expect(runner.events.emit :configure, args: :window) - .to eq Geo.new(0, 0, 42, 42) + .to eq build_geo 0, 0, 42, 42 end it 'registers for :manage event' do