uh-wm 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/uh/wm/actions_handler.rb +9 -0
- data/lib/uh/wm/cli.rb +1 -1
- data/lib/uh/wm/client.rb +14 -0
- data/lib/uh/wm/env.rb +3 -1
- data/lib/uh/wm/env_logging.rb +1 -1
- data/lib/uh/wm/launcher.rb +73 -0
- data/lib/uh/wm/run_control.rb +10 -0
- data/lib/uh/wm/runner.rb +26 -5
- data/lib/uh/wm/testing/acceptance_helpers.rb +36 -65
- data/lib/uh/wm/testing/x_client.rb +63 -0
- data/lib/uh/wm/version.rb +1 -1
- data/lib/uh/wm/workers/base.rb +1 -1
- data/lib/uh/wm/workers/mux.rb +3 -1
- data/lib/uh/wm.rb +5 -3
- metadata +9 -111
- data/.gitignore +0 -3
- data/.rspec +0 -1
- data/.travis.yml +0 -15
- data/Gemfile +0 -5
- data/Guardfile +0 -12
- data/LICENSE +0 -30
- data/Rakefile +0 -40
- data/config/cucumber.yaml +0 -1
- data/features/actions/execute.feature +0 -9
- data/features/actions/layout_delegation.feature +0 -31
- data/features/actions/quit.feature +0 -9
- data/features/cli/debug.feature +0 -5
- data/features/cli/layout.feature +0 -15
- data/features/cli/require.feature +0 -5
- data/features/cli/run_control.feature +0 -9
- data/features/cli/usage.feature +0 -11
- data/features/cli/verbose.feature +0 -5
- data/features/cli/version.feature +0 -6
- data/features/cli/worker.feature +0 -9
- data/features/layout/manage.feature +0 -12
- data/features/layout/protocol.feature +0 -56
- data/features/layout/unmanage.feature +0 -10
- data/features/manager/change.feature +0 -7
- data/features/manager/check_other_wm.feature +0 -8
- data/features/manager/expose.feature +0 -5
- data/features/manager/input_events.feature +0 -8
- data/features/manager/manage.feature +0 -14
- data/features/manager/unmanage.feature +0 -13
- data/features/manager/x_errors.feature +0 -17
- data/features/run_control/evaluation.feature +0 -18
- data/features/run_control/key.feature +0 -33
- data/features/run_control/layout.feature +0 -39
- data/features/run_control/modifier.feature +0 -10
- data/features/run_control/worker.feature +0 -9
- data/features/session/connection.feature +0 -5
- data/features/session/termination.feature +0 -12
- data/features/steps/filesystem_steps.rb +0 -3
- data/features/steps/output_steps.rb +0 -55
- data/features/steps/run_control_steps.rb +0 -3
- data/features/steps/run_steps.rb +0 -41
- data/features/steps/x_steps.rb +0 -58
- data/features/support/env.rb +0 -33
- data/features/workers/block.feature +0 -15
- data/features/workers/mux.feature +0 -15
- data/spec/spec_helper.rb +0 -30
- data/spec/support/exit_helpers.rb +0 -6
- data/spec/support/factories.rb +0 -27
- data/spec/support/filesystem_helpers.rb +0 -11
- data/spec/uh/wm/actions_handler_spec.rb +0 -35
- data/spec/uh/wm/cli_spec.rb +0 -214
- data/spec/uh/wm/client_spec.rb +0 -148
- data/spec/uh/wm/dispatcher_spec.rb +0 -76
- data/spec/uh/wm/env_spec.rb +0 -154
- data/spec/uh/wm/manager_spec.rb +0 -386
- data/spec/uh/wm/run_control_spec.rb +0 -126
- data/spec/uh/wm/runner_spec.rb +0 -196
- data/uh-wm.gemspec +0 -26
@@ -1,39 +0,0 @@
|
|
1
|
-
Feature: `layout' run control keyword
|
2
|
-
|
3
|
-
Background:
|
4
|
-
Given a file named my_layout.rb with:
|
5
|
-
"""
|
6
|
-
class MyLayout
|
7
|
-
def initialize **options
|
8
|
-
puts "testing_rc_layout_#{options.inspect}" if options.any?
|
9
|
-
end
|
10
|
-
|
11
|
-
def register *_, **options
|
12
|
-
puts "testing_rc_layout_register"
|
13
|
-
end
|
14
|
-
end
|
15
|
-
"""
|
16
|
-
|
17
|
-
Scenario: configures a layout class
|
18
|
-
Given a run control file with:
|
19
|
-
"""
|
20
|
-
layout MyLayout
|
21
|
-
"""
|
22
|
-
When I run uhwm with options -r./my_layout
|
23
|
-
Then the output must contain "testing_rc_layout_register"
|
24
|
-
|
25
|
-
Scenario: configures a layout class with options
|
26
|
-
Given a run control file with:
|
27
|
-
"""
|
28
|
-
layout MyLayout, foo: :bar
|
29
|
-
"""
|
30
|
-
When I run uhwm with options -r./my_layout
|
31
|
-
Then the output must contain "testing_rc_layout_{:foo=>:bar}"
|
32
|
-
|
33
|
-
Scenario: configures a layout instance
|
34
|
-
Given a run control file with:
|
35
|
-
"""
|
36
|
-
layout MyLayout.new
|
37
|
-
"""
|
38
|
-
When I run uhwm with options -r./my_layout
|
39
|
-
Then the output must contain "testing_rc_layout_register"
|
@@ -1,12 +0,0 @@
|
|
1
|
-
Feature: program termination
|
2
|
-
|
3
|
-
Background:
|
4
|
-
Given uhwm is running
|
5
|
-
|
6
|
-
Scenario: terminates on quit request
|
7
|
-
When I tell uhwm to quit
|
8
|
-
Then uhwm must terminate successfully
|
9
|
-
|
10
|
-
Scenario: logs about termination
|
11
|
-
When I tell uhwm to quit
|
12
|
-
Then the output must match /terminat/i
|
@@ -1,55 +0,0 @@
|
|
1
|
-
Then /^the output must contain exactly the usage$/ do
|
2
|
-
assert_exact_output <<-eoh, all_output
|
3
|
-
Usage: uhwm [options]
|
4
|
-
|
5
|
-
options:
|
6
|
-
-v, --verbose enable verbose mode
|
7
|
-
-d, --debug enable debug mode
|
8
|
-
-f, --run-control PATH specify alternate run control file
|
9
|
-
-r, --require PATH require ruby feature
|
10
|
-
-l, --layout LAYOUT specify layout
|
11
|
-
-w, --worker WORKER specify worker
|
12
|
-
|
13
|
-
-h, --help print this message
|
14
|
-
-V, --version print version
|
15
|
-
eoh
|
16
|
-
end
|
17
|
-
|
18
|
-
Then /^the output must contain exactly the version$/ do
|
19
|
-
assert_exact_output "%s\n" % Uh::WM::VERSION, all_output
|
20
|
-
end
|
21
|
-
|
22
|
-
Then /^the output must match \/([^\/]+)\/([a-z]*)$/ do |pattern, options|
|
23
|
-
uhwm_wait_output Regexp.new(pattern, options)
|
24
|
-
end
|
25
|
-
|
26
|
-
Then /^the output must not match \/([^\/]+)\/([a-z]*)$/ do |pattern, options|
|
27
|
-
expect(all_output).not_to match Regexp.new(pattern, options)
|
28
|
-
end
|
29
|
-
|
30
|
-
Then /^the output must match \/([^\/]+)\/([a-z]*) at least (\d+) times$/ do
|
31
|
-
|pattern, options, times|
|
32
|
-
uhwm_wait_output Regexp.new(pattern, options), times.to_i
|
33
|
-
end
|
34
|
-
|
35
|
-
Then /^the output must match \/([^\/]+)\/([a-z]*) exactly (\d+) times$/ do
|
36
|
-
|pattern, options, times|
|
37
|
-
scans = uhwm_wait_output Regexp.new(pattern, options)
|
38
|
-
expect(scans.size).to eq times.to_i
|
39
|
-
end
|
40
|
-
|
41
|
-
Then /^the output must contain:$/ do |content|
|
42
|
-
uhwm_wait_output content.to_s
|
43
|
-
end
|
44
|
-
|
45
|
-
Then /^the output must contain "([^"]+)"$/ do |content|
|
46
|
-
uhwm_wait_output content.to_s
|
47
|
-
end
|
48
|
-
|
49
|
-
Then /^the output must contain current display$/ do
|
50
|
-
uhwm_wait_output ENV['DISPLAY']
|
51
|
-
end
|
52
|
-
|
53
|
-
Then /^the output must contain the window name$/ do
|
54
|
-
uhwm_wait_output x_window_name
|
55
|
-
end
|
data/features/steps/run_steps.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
Given /^another window manager is running$/ do
|
2
|
-
expect(other_wm).to be_alive
|
3
|
-
end
|
4
|
-
|
5
|
-
Given /^uhwm is running$/ do
|
6
|
-
uhwm_run_wait_ready
|
7
|
-
end
|
8
|
-
|
9
|
-
Given /^uhwm is running with options? (-.+)$/ do |options|
|
10
|
-
uhwm_run_wait_ready options
|
11
|
-
end
|
12
|
-
|
13
|
-
Given /^uhwm is running with this run control file:$/ do |rc|
|
14
|
-
write_file '.uhwmrc.rb', rc
|
15
|
-
uhwm_run_wait_ready
|
16
|
-
end
|
17
|
-
|
18
|
-
When /^I start uhwm$/ do
|
19
|
-
uhwm_run
|
20
|
-
end
|
21
|
-
|
22
|
-
When /^I run uhwm with options? (-.+)$/ do |options|
|
23
|
-
uhwm_run options
|
24
|
-
end
|
25
|
-
|
26
|
-
When /^I tell uhwm to quit$/ do
|
27
|
-
uhwm_request_quit
|
28
|
-
end
|
29
|
-
|
30
|
-
When /^I quit uhwm$/ do
|
31
|
-
uhwm_request_quit
|
32
|
-
assert_exit_status 0
|
33
|
-
end
|
34
|
-
|
35
|
-
Then /^the exit status must be (\d+)$/ do |exit_status|
|
36
|
-
assert_exit_status exit_status.to_i
|
37
|
-
end
|
38
|
-
|
39
|
-
Then /^uhwm must terminate successfully$/ do
|
40
|
-
assert_exit_status 0
|
41
|
-
end
|
data/features/steps/x_steps.rb
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
Given /^a(?:\s(\w+))? window is mapped$/ do |ident|
|
2
|
-
x_client(ident).map.sync
|
3
|
-
timeout_until 'window not mapped after %d seconds' do
|
4
|
-
x_window_map_state(x_client(ident).window_id) == 'IsViewable'
|
5
|
-
end
|
6
|
-
end
|
7
|
-
|
8
|
-
When /^I press the ([^ ]+) keys?$/ do |keys|
|
9
|
-
x_key keys
|
10
|
-
end
|
11
|
-
|
12
|
-
When /^I press the ([^ ]+) keys? (\d+) times$/ do |keys, times|
|
13
|
-
times.to_i.times { x_key keys }
|
14
|
-
end
|
15
|
-
|
16
|
-
When /^a window requests to be mapped$/ do
|
17
|
-
x_client.map.sync
|
18
|
-
end
|
19
|
-
|
20
|
-
When /^a window requests to be mapped (\d+) times$/ do |times|
|
21
|
-
x_client.map times: times.to_i
|
22
|
-
end
|
23
|
-
|
24
|
-
When /^the(?:\s(\w+))? window is unmapped$/ do |ident|
|
25
|
-
x_client(ident).unmap.sync
|
26
|
-
timeout_until 'window not unmapped after %d seconds' do
|
27
|
-
x_window_map_state(x_client(ident).window_id) == 'IsUnMapped'
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
When /^the window is destroyed$/ do
|
32
|
-
x_client.destroy.sync
|
33
|
-
end
|
34
|
-
|
35
|
-
When /^the window name changes to "([^"]+)"$/ do |name|
|
36
|
-
x_client.window_name = name
|
37
|
-
end
|
38
|
-
|
39
|
-
Then /^it must connect to X display$/ do
|
40
|
-
uhwm_wait_ready
|
41
|
-
expect(x_socket_check uhwm.pid).to be true
|
42
|
-
end
|
43
|
-
|
44
|
-
Then /^the(?:\s(\w+))? window must be mapped$/ do |ident|
|
45
|
-
timeout_until 'window not mapped after %d seconds' do
|
46
|
-
x_window_map_state(x_client(ident).window_id) == 'IsViewable'
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
Then /^the window must be focused$/ do
|
51
|
-
timeout_until 'window not focused after %d seconds' do
|
52
|
-
x_focused_window_id == x_client.window_id
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
Then /^the input event mask must include (.+)$/ do |mask|
|
57
|
-
expect(x_input_event_masks).to include mask
|
58
|
-
end
|
data/features/support/env.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'aruba/cucumber'
|
2
|
-
require 'headless'
|
3
|
-
|
4
|
-
require 'uh/wm/testing/acceptance_helpers'
|
5
|
-
|
6
|
-
module Aruba
|
7
|
-
class SpawnProcess
|
8
|
-
def pid
|
9
|
-
@process.pid
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
World(Uh::WM::Testing::AcceptanceHelpers)
|
15
|
-
|
16
|
-
Headless.new.start
|
17
|
-
|
18
|
-
Before do
|
19
|
-
set_env 'HOME', File.expand_path(current_dir)
|
20
|
-
end
|
21
|
-
|
22
|
-
After do
|
23
|
-
uhwm_ensure_stop
|
24
|
-
x_clients_ensure_stop
|
25
|
-
end
|
26
|
-
|
27
|
-
Around '@other_wm_running' do |_, block|
|
28
|
-
with_other_wm { block.call }
|
29
|
-
end
|
30
|
-
|
31
|
-
if ENV.key? 'TRAVIS'
|
32
|
-
ENV['UHWMTEST_TIMEOUT'] = 8.to_s
|
33
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
Feature: blocking worker
|
2
|
-
|
3
|
-
Scenario: processes initial events
|
4
|
-
Given uhwm is running with options -d -w block
|
5
|
-
Then the output must match /xevent/i at least 2 times
|
6
|
-
|
7
|
-
Scenario: processes generated events
|
8
|
-
Given a run control file with:
|
9
|
-
"""
|
10
|
-
key(:f) { puts 'testing_worker_read' }
|
11
|
-
"""
|
12
|
-
And uhwm is running with options -d -w block
|
13
|
-
When I press the alt+f key 3 times
|
14
|
-
And I quit uhwm
|
15
|
-
Then the output must match /(testing_worker_read)/ exactly 3 times
|
@@ -1,15 +0,0 @@
|
|
1
|
-
Feature: multiplexing worker
|
2
|
-
|
3
|
-
Scenario: processes initial events
|
4
|
-
Given uhwm is running with options -d -w mux
|
5
|
-
Then the output must match /xevent/i at least 2 times
|
6
|
-
|
7
|
-
Scenario: processes generated events
|
8
|
-
Given a run control file with:
|
9
|
-
"""
|
10
|
-
key(:f) { puts 'testing_worker_read' }
|
11
|
-
"""
|
12
|
-
And uhwm is running with options -d -w mux
|
13
|
-
When I press the alt+f key 3 times
|
14
|
-
And I quit uhwm
|
15
|
-
Then the output must match /(testing_worker_read)/ exactly 3 times
|
data/spec/spec_helper.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'headless'
|
2
|
-
|
3
|
-
require 'uh/wm'
|
4
|
-
|
5
|
-
Dir['spec/support/**/*.rb'].map { |e| require e.gsub 'spec/', '' }
|
6
|
-
|
7
|
-
RSpec.configure do |config|
|
8
|
-
config.include Factories
|
9
|
-
|
10
|
-
config.expect_with :rspec do |expectations|
|
11
|
-
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
12
|
-
end
|
13
|
-
|
14
|
-
config.mock_with :rspec do |mocks|
|
15
|
-
mocks.verify_partial_doubles = true
|
16
|
-
end
|
17
|
-
|
18
|
-
config.disable_monkey_patching!
|
19
|
-
|
20
|
-
config.before :all do
|
21
|
-
# Ensure current X display is not available from rspec test suite.
|
22
|
-
ENV.delete 'DISPLAY'
|
23
|
-
end
|
24
|
-
|
25
|
-
config.around :example, :xvfb do |example|
|
26
|
-
Headless.ly do
|
27
|
-
example.run
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
data/spec/support/factories.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
module Factories
|
2
|
-
def build_geo x = 0, y = 0, width = 640, height = 480
|
3
|
-
Uh::Geo.new(x, y, width, height)
|
4
|
-
end
|
5
|
-
|
6
|
-
def build_client window = mock_window
|
7
|
-
Uh::WM::Client.new(window)
|
8
|
-
end
|
9
|
-
|
10
|
-
def mock_event type = :xany, **options
|
11
|
-
double 'event', type: type, **options
|
12
|
-
end
|
13
|
-
|
14
|
-
def mock_event_key_press key, modifier_mask
|
15
|
-
mock_event :key_press,
|
16
|
-
key: 'f',
|
17
|
-
modifier_mask: modifier_mask
|
18
|
-
end
|
19
|
-
|
20
|
-
def mock_window override_redirect: false
|
21
|
-
instance_spy Uh::Window, 'window',
|
22
|
-
to_s: 'wid',
|
23
|
-
name: 'wname',
|
24
|
-
wclass: 'wclass',
|
25
|
-
override_redirect?: override_redirect
|
26
|
-
end
|
27
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
module Uh
|
2
|
-
module WM
|
3
|
-
RSpec.describe ActionsHandler do
|
4
|
-
let(:env) { Env.new(StringIO.new) }
|
5
|
-
let(:events) { Dispatcher.new }
|
6
|
-
subject(:actions) { described_class.new env, events }
|
7
|
-
|
8
|
-
describe '#evaluate' do
|
9
|
-
it 'evaluates code given as Proc argument' do
|
10
|
-
expect { actions.evaluate proc { throw :action_code } }
|
11
|
-
.to throw_symbol :action_code
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'evaluates code given as block' do
|
15
|
-
expect { actions.evaluate { throw :action_code } }
|
16
|
-
.to throw_symbol :action_code
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe '#quit' do
|
21
|
-
it 'emits the quit event' do
|
22
|
-
expect(events).to receive(:emit).with :quit
|
23
|
-
actions.quit
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe '#layout_*' do
|
28
|
-
it 'delegates messages to the layout with handle_ prefix' do
|
29
|
-
expect(env.layout).to receive :handle_screen_sel
|
30
|
-
actions.layout_screen_sel :succ
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/spec/uh/wm/cli_spec.rb
DELETED
@@ -1,214 +0,0 @@
|
|
1
|
-
require 'support/exit_helpers'
|
2
|
-
|
3
|
-
module Uh
|
4
|
-
module WM
|
5
|
-
RSpec.describe CLI do
|
6
|
-
include ExitHelpers
|
7
|
-
|
8
|
-
let(:stdout) { StringIO.new }
|
9
|
-
let(:stderr) { StringIO.new }
|
10
|
-
let(:arguments) { [] }
|
11
|
-
subject(:cli) { described_class.new arguments, stdout: stdout }
|
12
|
-
|
13
|
-
describe '.run' do
|
14
|
-
subject(:run) do
|
15
|
-
described_class.run arguments, stdout: stdout, stderr: stderr
|
16
|
-
end
|
17
|
-
|
18
|
-
# Prevent Runner from connecting a Manager and blocking.
|
19
|
-
before { allow(Runner).to receive :run }
|
20
|
-
|
21
|
-
it 'builds a new CLI with given arguments' do
|
22
|
-
expect(described_class)
|
23
|
-
.to receive(:new).with(arguments, stdout: stdout).and_call_original
|
24
|
-
run
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'parses new CLI arguments' do
|
28
|
-
cli
|
29
|
-
allow(described_class).to receive(:new) { cli }
|
30
|
-
expect(cli).to receive :parse_arguments!
|
31
|
-
run
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'runs new CLI' do
|
35
|
-
cli
|
36
|
-
allow(described_class).to receive(:new) { cli }
|
37
|
-
expect(cli).to receive :run
|
38
|
-
run
|
39
|
-
end
|
40
|
-
|
41
|
-
context 'with invalid arguments' do
|
42
|
-
let(:arguments) { %w[--unknown-option] }
|
43
|
-
|
44
|
-
it 'prints the usage on standard error stream' do
|
45
|
-
trap_exit { run }
|
46
|
-
expect(stderr.string).to match /\AUsage: .+/
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'exits with a return status of 64' do
|
50
|
-
expect { run }.to raise_error(SystemExit) do |e|
|
51
|
-
expect(e.status).to eq 64
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
context 'when the new CLI raises a runtime error' do
|
57
|
-
before do
|
58
|
-
allow(cli).to receive(:run) { fail RuntimeError, 'some error' }
|
59
|
-
allow(described_class).to receive(:new) { cli }
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'exits with a return status of 70' do
|
63
|
-
expect { run }.to raise_error(SystemExit) do |e|
|
64
|
-
expect(e.status).to eq 70
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'formats the error' do
|
69
|
-
trap_exit { run }
|
70
|
-
expect(stderr.string)
|
71
|
-
.to match /\AUh::WM::RuntimeError: some error\n/
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'does not output a backtrace' do
|
75
|
-
trap_exit { run }
|
76
|
-
expect(stderr.string).not_to include __FILE__
|
77
|
-
end
|
78
|
-
|
79
|
-
context 'when debug mode is enabled' do
|
80
|
-
let(:arguments) { %w[-d] }
|
81
|
-
|
82
|
-
it 'outputs a backtrace' do
|
83
|
-
trap_exit { run }
|
84
|
-
expect(stderr.string).to include __FILE__
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
describe '#initialize' do
|
91
|
-
it 'builds an env with given stdout' do
|
92
|
-
expect(cli.env.output).to be stdout
|
93
|
-
end
|
94
|
-
|
95
|
-
it 'syncs the output' do
|
96
|
-
expect(stdout).to receive(:sync=).with(true)
|
97
|
-
cli
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
describe '#run' do
|
102
|
-
it 'runs a runner with the env' do
|
103
|
-
expect(Runner).to receive(:run).with(cli.env)
|
104
|
-
cli.run
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
describe '#parse_arguments!' do
|
109
|
-
context 'with verbose option' do
|
110
|
-
let(:arguments) { %w[-v] }
|
111
|
-
|
112
|
-
it 'sets the env as verbose' do
|
113
|
-
cli.parse_arguments!
|
114
|
-
expect(cli.env).to be_verbose
|
115
|
-
end
|
116
|
-
|
117
|
-
it 'tells the env to log its logger level' do
|
118
|
-
expect(cli.env).to receive :log_logger_level
|
119
|
-
cli.parse_arguments!
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
context 'with debug option' do
|
124
|
-
let(:arguments) { %w[-d] }
|
125
|
-
|
126
|
-
it 'sets the env as debug' do
|
127
|
-
cli.parse_arguments!
|
128
|
-
expect(cli.env).to be_debug
|
129
|
-
end
|
130
|
-
|
131
|
-
it 'tells the env to log its logger level' do
|
132
|
-
expect(cli.env).to receive :log_logger_level
|
133
|
-
cli.parse_arguments!
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
context 'with run control option' do
|
138
|
-
let(:arguments) { %w[-f uhwmrc.rb] }
|
139
|
-
|
140
|
-
it 'assigns run control file path in the env' do
|
141
|
-
cli.parse_arguments!
|
142
|
-
expect(cli.env.rc_path).to eq 'uhwmrc.rb'
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
context 'with require option' do
|
147
|
-
let(:arguments) { %w[-r abbrev] }
|
148
|
-
|
149
|
-
it 'requires the given ruby feature' do
|
150
|
-
expect { cli.parse_arguments! }
|
151
|
-
.to change { $LOADED_FEATURES.grep(/abbrev/).any? }
|
152
|
-
.from(false).to(true)
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
context 'with layout option' do
|
157
|
-
let(:arguments) { %w[-l Object] }
|
158
|
-
|
159
|
-
it 'assigns the layout class in the env' do
|
160
|
-
cli.parse_arguments!
|
161
|
-
expect(cli.env.layout_class).to eq Object
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
context 'with worker option' do
|
166
|
-
let(:arguments) { %w[-w mux] }
|
167
|
-
|
168
|
-
it 'assigns the worker type in the env' do
|
169
|
-
cli.parse_arguments!
|
170
|
-
expect(cli.env.worker).to eq :mux
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
context 'with help option' do
|
175
|
-
let(:arguments) { %w[-h] }
|
176
|
-
|
177
|
-
it 'prints the usage banner on standard output' do
|
178
|
-
trap_exit { cli.parse_arguments! }
|
179
|
-
expect(stdout.string).to match /\AUsage: .+/
|
180
|
-
end
|
181
|
-
|
182
|
-
it 'prints options usage on standard output' do
|
183
|
-
trap_exit { cli.parse_arguments! }
|
184
|
-
expect(stdout.string).to match /\n^options:\n\s+-/
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
context 'with version option' do
|
189
|
-
let(:arguments) { %w[-V] }
|
190
|
-
|
191
|
-
it 'prints the version on standard output' do
|
192
|
-
trap_exit { cli.parse_arguments! }
|
193
|
-
expect(stdout.string).to eq "#{::Uh::WM::VERSION}\n"
|
194
|
-
end
|
195
|
-
|
196
|
-
it 'exits with a return status of 0' do
|
197
|
-
expect { cli.parse_arguments! }.to raise_error(SystemExit) do |e|
|
198
|
-
expect(e.status).to eq 0
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
context 'with invalid option' do
|
204
|
-
let(:arguments) { %w[--unknown-option] }
|
205
|
-
|
206
|
-
it 'raises a CLI::ArgumentError' do
|
207
|
-
expect { cli.parse_arguments! }
|
208
|
-
.to raise_error CLI::ArgumentError
|
209
|
-
end
|
210
|
-
end
|
211
|
-
end
|
212
|
-
end
|
213
|
-
end
|
214
|
-
end
|