wukong 3.0.0.pre3 → 3.0.0
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.
- data/Gemfile +1 -0
- data/README.md +689 -50
- data/bin/wu-local +1 -74
- data/diagrams/wu_local.dot +39 -0
- data/diagrams/wu_local.dot.png +0 -0
- data/examples/loadable.rb +2 -0
- data/examples/string_reverser.rb +7 -0
- data/lib/hanuman/stage.rb +2 -2
- data/lib/wukong.rb +21 -10
- data/lib/wukong/dataflow.rb +2 -5
- data/lib/wukong/doc_helpers.rb +14 -0
- data/lib/wukong/doc_helpers/dataflow_handler.rb +29 -0
- data/lib/wukong/doc_helpers/field_handler.rb +91 -0
- data/lib/wukong/doc_helpers/processor_handler.rb +29 -0
- data/lib/wukong/driver.rb +11 -1
- data/lib/wukong/local.rb +40 -0
- data/lib/wukong/local/event_machine_driver.rb +27 -0
- data/lib/wukong/local/runner.rb +98 -0
- data/lib/wukong/local/stdio_driver.rb +44 -0
- data/lib/wukong/local/tcp_driver.rb +47 -0
- data/lib/wukong/logger.rb +16 -7
- data/lib/wukong/plugin.rb +48 -0
- data/lib/wukong/processor.rb +57 -15
- data/lib/wukong/rake_helper.rb +6 -0
- data/lib/wukong/runner.rb +151 -128
- data/lib/wukong/runner/boot_sequence.rb +123 -0
- data/lib/wukong/runner/code_loader.rb +52 -0
- data/lib/wukong/runner/deploy_pack_loader.rb +75 -0
- data/lib/wukong/runner/help_message.rb +42 -0
- data/lib/wukong/spec_helpers.rb +4 -12
- data/lib/wukong/spec_helpers/integration_tests.rb +150 -0
- data/lib/wukong/spec_helpers/{integration_driver_matchers.rb → integration_tests/integration_test_matchers.rb} +28 -62
- data/lib/wukong/spec_helpers/integration_tests/integration_test_runner.rb +97 -0
- data/lib/wukong/spec_helpers/shared_examples.rb +19 -10
- data/lib/wukong/spec_helpers/unit_tests.rb +134 -0
- data/lib/wukong/spec_helpers/{processor_methods.rb → unit_tests/unit_test_driver.rb} +42 -8
- data/lib/wukong/spec_helpers/{spec_driver_matchers.rb → unit_tests/unit_test_matchers.rb} +6 -32
- data/lib/wukong/spec_helpers/unit_tests/unit_test_runner.rb +54 -0
- data/lib/wukong/version.rb +1 -1
- data/lib/wukong/widget/filters.rb +134 -8
- data/lib/wukong/widget/processors.rb +64 -5
- data/lib/wukong/widget/reducers/bin.rb +68 -18
- data/lib/wukong/widget/reducers/count.rb +12 -0
- data/lib/wukong/widget/reducers/group.rb +48 -5
- data/lib/wukong/widget/reducers/group_concat.rb +30 -2
- data/lib/wukong/widget/reducers/moments.rb +4 -4
- data/lib/wukong/widget/reducers/sort.rb +53 -3
- data/lib/wukong/widget/serializers.rb +37 -12
- data/lib/wukong/widget/utils.rb +1 -1
- data/spec/spec_helper.rb +20 -2
- data/spec/wukong/driver_spec.rb +2 -0
- data/spec/wukong/local/runner_spec.rb +40 -0
- data/spec/wukong/local_spec.rb +6 -0
- data/spec/wukong/logger_spec.rb +49 -0
- data/spec/wukong/processor_spec.rb +22 -0
- data/spec/wukong/runner_spec.rb +128 -8
- data/spec/wukong/widget/filters_spec.rb +28 -10
- data/spec/wukong/widget/processors_spec.rb +5 -5
- data/spec/wukong/widget/reducers/bin_spec.rb +14 -14
- data/spec/wukong/widget/reducers/count_spec.rb +1 -1
- data/spec/wukong/widget/reducers/group_spec.rb +7 -6
- data/spec/wukong/widget/reducers/moments_spec.rb +2 -2
- data/spec/wukong/widget/reducers/sort_spec.rb +1 -1
- data/spec/wukong/widget/serializers_spec.rb +84 -88
- data/spec/wukong/wu-local_spec.rb +109 -0
- metadata +43 -20
- data/bin/wu-server +0 -70
- data/lib/wukong/boot.rb +0 -96
- data/lib/wukong/configuration.rb +0 -8
- data/lib/wukong/emitter.rb +0 -22
- data/lib/wukong/server.rb +0 -119
- data/lib/wukong/spec_helpers/integration_driver.rb +0 -157
- data/lib/wukong/spec_helpers/processor_helpers.rb +0 -89
- data/lib/wukong/spec_helpers/spec_driver.rb +0 -28
- data/spec/wukong/local_runner_spec.rb +0 -31
- data/spec/wukong/wu_local_spec.rb +0 -125
@@ -0,0 +1,75 @@
|
|
1
|
+
module Wukong
|
2
|
+
class Runner
|
3
|
+
|
4
|
+
# Lets Wukong bootstrap by requiring an enclosing deploy pack's
|
5
|
+
# environment file if available.
|
6
|
+
#
|
7
|
+
# We use a simple heuristic (presence of 'Gemfile' and
|
8
|
+
# 'config/environment.rb' in a non-root parent directory) to
|
9
|
+
# determine whether or not we are in a deploy pack.
|
10
|
+
module DeployPackLoader
|
11
|
+
|
12
|
+
# Load the actual deploy pack environment. Will not swallow any
|
13
|
+
# load errors.
|
14
|
+
def load_deploy_pack
|
15
|
+
load_ruby_file(environment_file) if in_deploy_pack?
|
16
|
+
end
|
17
|
+
|
18
|
+
# Is execution likely happening within a deploy pack?
|
19
|
+
#
|
20
|
+
# See Wukong::Deploy for more information on deploy packs.
|
21
|
+
#
|
22
|
+
# @return [true, false]
|
23
|
+
def in_deploy_pack?
|
24
|
+
return @in_deploy_pack unless @in_deploy_pack.nil?
|
25
|
+
@in_deploy_pack = (deploy_pack_dir != '/')
|
26
|
+
end
|
27
|
+
|
28
|
+
# Have we already loaded the environment of a deploy pack?
|
29
|
+
#
|
30
|
+
# See Wukong::Deploy for more information on deploy packs.
|
31
|
+
#
|
32
|
+
# @return [true, false]
|
33
|
+
def loaded_deploy_pack?
|
34
|
+
in_deploy_pack? && defined?(::Wukong::Deploy)
|
35
|
+
end
|
36
|
+
|
37
|
+
# The default environment file that will be require'd when
|
38
|
+
# booting.
|
39
|
+
#
|
40
|
+
# @return [String]
|
41
|
+
def environment_file
|
42
|
+
File.join(deploy_pack_dir, 'config', 'environment.rb')
|
43
|
+
end
|
44
|
+
|
45
|
+
# Return the directory of the enclosing deploy pack. Will return
|
46
|
+
# the root ('/') if no deeper directory is identified as a deploy
|
47
|
+
# pack.
|
48
|
+
#
|
49
|
+
# @return [String]
|
50
|
+
def deploy_pack_dir
|
51
|
+
return File.dirname(ENV["BUNDLE_GEMFILE"]) if ENV["BUNDLE_GEMFILE"] && is_deploy_pack_dir?(File.dirname(ENV["BUNDLE_GEMFILE"]))
|
52
|
+
return @deploy_pack_dir if @deploy_pack_dir
|
53
|
+
wd = Dir.pwd
|
54
|
+
parent = File.dirname(wd)
|
55
|
+
until wd == parent
|
56
|
+
return wd if is_deploy_pack_dir?(wd)
|
57
|
+
wd = parent
|
58
|
+
parent = File.dirname(wd)
|
59
|
+
end
|
60
|
+
@deploy_pack_dir = wd
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
# Could `dir` be a deploy pack dir?
|
66
|
+
#
|
67
|
+
# @param [String] dir
|
68
|
+
# @return [true, false]
|
69
|
+
def is_deploy_pack_dir? dir
|
70
|
+
dir && !dir.empty? && File.directory?(dir) && File.exist?(File.join(dir, 'Gemfile')) && File.exist?(File.join(dir, 'config', 'environment.rb'))
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Wukong
|
2
|
+
class Runner
|
3
|
+
|
4
|
+
# Defines methods for handling help messages.
|
5
|
+
#
|
6
|
+
# Runners which want to modify how help messages are generated
|
7
|
+
# should override the `contextualize_help_message!` instance method.
|
8
|
+
module HelpMessage
|
9
|
+
|
10
|
+
# Was the `--help` option specified on the command line?
|
11
|
+
#
|
12
|
+
# The boot sequence for a Runner strips out the `--help` option to
|
13
|
+
# allow individual Runner classes to customize their help
|
14
|
+
# messages.
|
15
|
+
#
|
16
|
+
# @return [true, false]
|
17
|
+
def help_given?
|
18
|
+
!!@help_given
|
19
|
+
end
|
20
|
+
|
21
|
+
# Strip the `--help` message from the original ARGV, storing
|
22
|
+
# whether or not it was given for later.
|
23
|
+
def strip_help_param!
|
24
|
+
@help_given = ARGV.delete('--help')
|
25
|
+
end
|
26
|
+
|
27
|
+
# Print a help message.
|
28
|
+
def dump_help
|
29
|
+
settings.dump_help
|
30
|
+
end
|
31
|
+
|
32
|
+
# Print a help message and exit.
|
33
|
+
#
|
34
|
+
# @raise [SystemExit]
|
35
|
+
def dump_help_and_exit!
|
36
|
+
dump_help
|
37
|
+
exit(1)
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/wukong/spec_helpers.rb
CHANGED
@@ -1,10 +1,6 @@
|
|
1
1
|
require 'wukong'
|
2
|
-
|
3
|
-
require_relative('spec_helpers/
|
4
|
-
require_relative('spec_helpers/processor_methods')
|
5
|
-
require_relative('spec_helpers/spec_driver_matchers')
|
6
|
-
require_relative('spec_helpers/integration_driver')
|
7
|
-
require_relative('spec_helpers/integration_driver_matchers')
|
2
|
+
require_relative('spec_helpers/unit_tests')
|
3
|
+
require_relative('spec_helpers/integration_tests')
|
8
4
|
require_relative('spec_helpers/shared_examples')
|
9
5
|
|
10
6
|
module Wukong
|
@@ -71,12 +67,8 @@ module Wukong
|
|
71
67
|
# processor(:similar_tokenizer, :json => true).given("hi there").should emit(2).records
|
72
68
|
# end
|
73
69
|
module SpecHelpers
|
74
|
-
include
|
75
|
-
include
|
76
|
-
include IntegrationRunner
|
77
|
-
include IntegrationMatchers
|
70
|
+
include UnitTests
|
71
|
+
include IntegrationTests
|
78
72
|
end
|
79
|
-
|
80
|
-
Processor.class_eval { include SpecHelpers::ProcessorSpecMethods }
|
81
73
|
end
|
82
74
|
|
@@ -0,0 +1,150 @@
|
|
1
|
+
require_relative('integration_tests/integration_test_runner')
|
2
|
+
require_relative('integration_tests/integration_test_matchers')
|
3
|
+
|
4
|
+
module Wukong
|
5
|
+
module SpecHelpers
|
6
|
+
|
7
|
+
# This module defines methods that are helpful to use in
|
8
|
+
# integration tests which require reading files from the local
|
9
|
+
# repository.
|
10
|
+
#
|
11
|
+
# Integration tests will spawn new system processes with their own
|
12
|
+
# environments. This module provides methods and hooks for
|
13
|
+
# customizing that environment.
|
14
|
+
module IntegrationTests
|
15
|
+
|
16
|
+
# The directory to add to the `RUBYLIB` environment variable for
|
17
|
+
# the spawned processes.
|
18
|
+
#
|
19
|
+
# If `args` are given, return a path within this directory.
|
20
|
+
#
|
21
|
+
# @param [Array<String>] args
|
22
|
+
# @return [String]
|
23
|
+
def lib_dir *args
|
24
|
+
root.join('lib', *args).to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
# The directory to add to the `PATH` environment variable for
|
28
|
+
# the spawned processes.
|
29
|
+
#
|
30
|
+
# If `args` are given, return a path within this directory.
|
31
|
+
#
|
32
|
+
# @param [Array<String>] args
|
33
|
+
# @return [String]
|
34
|
+
def bin_dir *args
|
35
|
+
root.join('bin', *args).to_s
|
36
|
+
end
|
37
|
+
|
38
|
+
# The directory to use for examples for the spawned process.
|
39
|
+
#
|
40
|
+
# If `args` are given, return a path within this directory.
|
41
|
+
#
|
42
|
+
# @param [Array<String>] args
|
43
|
+
# @return [String]
|
44
|
+
def examples_dir *args
|
45
|
+
root.join('examples', *args).to_s
|
46
|
+
end
|
47
|
+
|
48
|
+
# A Hash of environment variables to use for the spawned
|
49
|
+
# process.
|
50
|
+
#
|
51
|
+
# By default, will put the IntegrationHelper#lib_dir on the
|
52
|
+
# `RUBYLIB` and the IntegrationHelper#bin_dir on the `PATH`.
|
53
|
+
#
|
54
|
+
# @return [Hash]
|
55
|
+
def integration_env
|
56
|
+
{
|
57
|
+
"PATH" => [bin_dir.to_s, ENV["PATH"]].compact.join(':'),
|
58
|
+
"RUBYLIB" => [lib_dir.to_s, ENV["RUBYLIB"]].compact.join(':')
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
# The directory to spawn new processes in.
|
63
|
+
#
|
64
|
+
# @return [String]
|
65
|
+
def integration_cwd
|
66
|
+
root.to_s
|
67
|
+
end
|
68
|
+
|
69
|
+
# Checks that each `expectation` appears in the STDOUT of the
|
70
|
+
# command. Order is irrelevant and each `expectation` can be
|
71
|
+
# either a String to check for inclusion or a Regexp to match
|
72
|
+
# with.
|
73
|
+
#
|
74
|
+
# @param [Array<String,Regexp>] expectations
|
75
|
+
def have_stdout *expectations
|
76
|
+
StdoutMatcher.new(*expectations)
|
77
|
+
end
|
78
|
+
|
79
|
+
# Checks that each `expectation` appears in the STDERR of the
|
80
|
+
# command. Order is irrelevant and each `expectation` can be
|
81
|
+
# either a String to check for inclusion or a Regexp to match
|
82
|
+
# with.
|
83
|
+
#
|
84
|
+
# @param [Array<String,Regexp>] expectations
|
85
|
+
def have_stderr *expectations
|
86
|
+
StderrMatcher.new(*expectations)
|
87
|
+
end
|
88
|
+
|
89
|
+
# Checks that the command exits with the given `code`.
|
90
|
+
#
|
91
|
+
# @param [Integer] code
|
92
|
+
def exit_with code
|
93
|
+
ExitCodeMatcher.new(code)
|
94
|
+
end
|
95
|
+
|
96
|
+
# Spawn a command and capture its STDOUT, STDERR, and exit code.
|
97
|
+
#
|
98
|
+
# The `args` will be joined together into a command line.
|
99
|
+
#
|
100
|
+
# It is expected that you will use the matchers defined in
|
101
|
+
# IntegrationMatchers in your integration tests:
|
102
|
+
#
|
103
|
+
# @example Check output of 'ls' includes a string 'foo.txt'
|
104
|
+
# it "lists files" do
|
105
|
+
# command('ls').should have_output('foo.txt')
|
106
|
+
# end
|
107
|
+
#
|
108
|
+
# @example More complicated
|
109
|
+
# context "long format" do
|
110
|
+
# it "lists files with timestamps" do
|
111
|
+
# command('ls', '-l').should have_output('foo.txt', /\w+ \d+ \d+:\d+/)
|
112
|
+
# end
|
113
|
+
# end
|
114
|
+
#
|
115
|
+
# @param [Array<String>] args
|
116
|
+
#
|
117
|
+
# @overload command(*args, options={})
|
118
|
+
# If the last element of `args` is a Hash it will be used for
|
119
|
+
# options.
|
120
|
+
#
|
121
|
+
# The :env option specifies the command line environment to
|
122
|
+
# use for the command. By default this will be the value of
|
123
|
+
# the Ruby process's own `ENV` variable. If running in a
|
124
|
+
# context in which the `integration_env` method is defined,
|
125
|
+
# its return value will be merged on top of `ENV`. An
|
126
|
+
# explicitly provided :env option will again be merged on top.
|
127
|
+
#
|
128
|
+
# The :cwd option specifies the working directory to start in.
|
129
|
+
# It defaults to the value of <tt>Dir.pwd</tt>
|
130
|
+
#
|
131
|
+
# @param [Array<String>] args
|
132
|
+
# @param [Hash] options
|
133
|
+
# @option options [Hash] env the shell environment to spawn the command with
|
134
|
+
# @option options [Hash] cwd the directory to execute the command in
|
135
|
+
def command *args
|
136
|
+
a = args.flatten.compact
|
137
|
+
options = (a.last.is_a?(Hash) ? a.pop : {})
|
138
|
+
|
139
|
+
env = ENV.to_hash.dup
|
140
|
+
env.merge!(integration_env) if respond_to?(:integration_env)
|
141
|
+
env.merge!(options[:env] || {})
|
142
|
+
|
143
|
+
cwd = options[:cwd]
|
144
|
+
cwd ||= (respond_to?(:integration_cwd) ? integration_cwd : Dir.pwd)
|
145
|
+
|
146
|
+
IntegrationTestRunner.new(a, cwd: cwd, env: env)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
@@ -1,48 +1,15 @@
|
|
1
1
|
module Wukong
|
2
2
|
module SpecHelpers
|
3
|
-
|
4
|
-
# Provides matchers for STDOUT, STDERR, and exit code when writing
|
5
|
-
# integration tests for Wukong's command-line APIs.
|
6
|
-
module IntegrationMatchers
|
7
|
-
|
8
|
-
# Checks that each `expectation` appears in the STDOUT of the
|
9
|
-
# command. Order is irrelevant and each `expectation` can be
|
10
|
-
# either a String to check for inclusion or a Regexp to match
|
11
|
-
# with.
|
12
|
-
#
|
13
|
-
# @param [Array<String,Regexp>] expectations
|
14
|
-
def have_stdout *expectations
|
15
|
-
StdoutMatcher.new(*expectations)
|
16
|
-
end
|
17
|
-
|
18
|
-
# Checks that each `expectation` appears in the STDERR of the
|
19
|
-
# command. Order is irrelevant and each `expectation` can be
|
20
|
-
# either a String to check for inclusion or a Regexp to match
|
21
|
-
# with.
|
22
|
-
#
|
23
|
-
# @param [Array<String,Regexp>] expectations
|
24
|
-
def have_stderr *expectations
|
25
|
-
StderrMatcher.new(*expectations)
|
26
|
-
end
|
27
|
-
|
28
|
-
# Checks that the command exits with the given `code`.
|
29
|
-
#
|
30
|
-
# @param [Integer] code
|
31
|
-
def exit_with code
|
32
|
-
ExitCodeMatcher.new(code)
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
|
3
|
+
|
37
4
|
# A class for running commands and capturing their STDOUT, STDERR,
|
38
5
|
# and exit code. This class is designed to work with the matchers
|
39
|
-
# defined in
|
40
|
-
class
|
6
|
+
# defined in IntegrationTestMatchers.
|
7
|
+
class IntegrationTestMatcher
|
41
8
|
|
42
|
-
# The
|
43
|
-
attr_accessor :
|
9
|
+
# The runner used to run the actual commands.
|
10
|
+
attr_accessor :runner
|
44
11
|
|
45
|
-
# An array of expectations about the output of the
|
12
|
+
# An array of expectations about the output of the runner.
|
46
13
|
attr_accessor :expectations
|
47
14
|
|
48
15
|
# The expectation which caused failure.
|
@@ -54,11 +21,11 @@ module Wukong
|
|
54
21
|
# If an expectation failes to match, the `failed_expectation`
|
55
22
|
# attribute will be set accordingly.
|
56
23
|
#
|
57
|
-
# @param [
|
24
|
+
# @param [IntegrationTestRunner] runner
|
58
25
|
# @return [true, false]
|
59
|
-
def matches?(
|
60
|
-
self.
|
61
|
-
|
26
|
+
def matches?(runner)
|
27
|
+
self.runner = runner
|
28
|
+
runner.run!
|
62
29
|
expectations.each do |expectation|
|
63
30
|
unless output.send(match_function(expectation), expectation)
|
64
31
|
self.failed_expectation = expectation
|
@@ -80,12 +47,12 @@ module Wukong
|
|
80
47
|
|
81
48
|
# :nodoc:
|
82
49
|
def failure_message
|
83
|
-
"
|
50
|
+
"From within #{runner.cwd} ran\n\n#{formatted_env}\n#{formatted_command}\n\nand expected #{output_description}\n\n#{formatted_output}\n\nto #{match_type}\n\n #{failed_expectation}#{formatted_error_output}"
|
84
51
|
end
|
85
52
|
|
86
53
|
# :nodoc:
|
87
54
|
def negative_failure_message
|
88
|
-
"Expected #{output_description} of #{
|
55
|
+
"Expected #{output_description} of #{runner.cmd}\n\n#{output}\n\nto NOT #{match_type}\n\n#{self.failed_expectation}."
|
89
56
|
end
|
90
57
|
|
91
58
|
# :nodoc:
|
@@ -95,18 +62,18 @@ module Wukong
|
|
95
62
|
|
96
63
|
# :nodoc:
|
97
64
|
def formatted_error_output
|
98
|
-
output_description.to_s =~ /stderr/ ? "\n\nSTDOUT was\n\n#{
|
65
|
+
output_description.to_s =~ /stderr/ ? "\n\nSTDOUT was\n\n#{runner.stdout}" : "\n\nSTDERR was\n\n#{runner.stderr}"
|
99
66
|
end
|
100
67
|
|
101
68
|
# :nodoc:
|
102
69
|
def formatted_command
|
103
|
-
" $ #{
|
70
|
+
" $ #{runner.cmd}"
|
104
71
|
end
|
105
72
|
|
106
73
|
# :nodoc:
|
107
74
|
def formatted_env
|
108
75
|
[' {'].tap do |lines|
|
109
|
-
|
76
|
+
runner.env.each_pair do |key, value|
|
110
77
|
if key =~ /^(BUNDLE_GEMFILE|PATH|RUBYLIB)$/
|
111
78
|
lines << " #{key} => #{value},"
|
112
79
|
end
|
@@ -128,11 +95,11 @@ module Wukong
|
|
128
95
|
end
|
129
96
|
|
130
97
|
# A matcher for the STDOUT of a command.
|
131
|
-
class StdoutMatcher <
|
98
|
+
class StdoutMatcher < IntegrationTestMatcher
|
132
99
|
|
133
100
|
# Picks the STDOUT of the command.
|
134
101
|
def output
|
135
|
-
|
102
|
+
runner.stdout
|
136
103
|
end
|
137
104
|
|
138
105
|
# :nodoc:
|
@@ -147,11 +114,11 @@ module Wukong
|
|
147
114
|
end
|
148
115
|
|
149
116
|
# A matcher for the STDOUT of a command.
|
150
|
-
class StderrMatcher <
|
117
|
+
class StderrMatcher < IntegrationTestMatcher
|
151
118
|
|
152
119
|
# Picks the STDOUT of the command.
|
153
120
|
def output
|
154
|
-
|
121
|
+
runner.stderr
|
155
122
|
end
|
156
123
|
|
157
124
|
# :nodoc:
|
@@ -165,7 +132,7 @@ module Wukong
|
|
165
132
|
end
|
166
133
|
|
167
134
|
# A matcher for the exit code of a command.
|
168
|
-
class ExitCodeMatcher <
|
135
|
+
class ExitCodeMatcher < IntegrationTestMatcher
|
169
136
|
|
170
137
|
# Initialize this matcher with the given `code`.
|
171
138
|
#
|
@@ -184,27 +151,27 @@ module Wukong
|
|
184
151
|
# Return whether or not the given command's exit code matches
|
185
152
|
# the expectation.
|
186
153
|
#
|
187
|
-
# @param [
|
154
|
+
# @param [IntegrationTestRunner] runner
|
188
155
|
# @return [true, false]
|
189
|
-
def matches?(
|
190
|
-
self.
|
191
|
-
|
156
|
+
def matches?(runner)
|
157
|
+
self.runner = runner
|
158
|
+
runner.run!
|
192
159
|
if non_zero_exit_code?
|
193
|
-
@failed = true if
|
160
|
+
@failed = true if runner.exit_code == 0
|
194
161
|
else
|
195
|
-
@failed = true if
|
162
|
+
@failed = true if runner.exit_code != expected_exit_code
|
196
163
|
end
|
197
164
|
@failed ? false : true
|
198
165
|
end
|
199
166
|
|
200
167
|
# :nodoc:
|
201
168
|
def failure_message
|
202
|
-
"
|
169
|
+
"From within #{runner.cwd} ran\n\n#{formatted_env}\n#{formatted_command}\n\nexpecting #{expected_exit_code_description} Got #{runner.exit_code} instead.#{formatted_error_output}"
|
203
170
|
end
|
204
171
|
|
205
172
|
# :nodoc:
|
206
173
|
def negative_failure_message
|
207
|
-
"
|
174
|
+
"From within #{runner.cwd} ran\n\n#{formatted_env}\n#{formatted_command}\n\nNOT expecting #{expected_exit_code_description}.#{formatted_error_output}"
|
208
175
|
end
|
209
176
|
|
210
177
|
# :nodoc:
|
@@ -235,7 +202,6 @@ module Wukong
|
|
235
202
|
def output_description
|
236
203
|
"STDOUT"
|
237
204
|
end
|
238
|
-
|
239
205
|
end
|
240
206
|
end
|
241
207
|
end
|