command-unit 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.gitignore +2 -1
- data/changelog.md +10 -0
- data/command-unit.gemspec +1 -1
- data/lib/command-unit/expectation.rb +11 -0
- data/lib/command-unit/expectation_result.rb +14 -0
- data/lib/command-unit/hooks +7 -0
- data/lib/command-unit/hooks.rb +56 -0
- data/lib/command-unit/scenario.rb +106 -0
- data/lib/command-unit/test.rb +15 -0
- data/lib/command-unit/totaliser.rb +55 -0
- data/lib/command-unit.rb +32 -114
- data/lib/string/console_colours.rb +21 -0
- data/test/scenarios/empty_scenario.rb +20 -0
- data/test/scenarios/one_test_one_failing_expectation.rb +52 -0
- data/test/scenarios/one_test_one_passing_expectation.rb +52 -0
- data/test/test.rb +2 -52
- metadata +14 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YmNiYmM2MjU5Y2M4ZGY0ZTU4ZTgwNDYyMmUxMDgxNTIxMDJiZmM1NQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWMyZTc3N2FjNWMxZjcwMzNlNWI4YWU5ZjNkMDc5ZTFjM2U2M2UyMQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MDRhZGRkMDM0N2RhNzU3ZTRlZmQ3YjU1OTAwZmQxMmU0NmExOTFlMjc4NjUy
|
10
|
+
ODhjYjYyMmJhYjVmMjQ5Y2I1MjBkMWRhMjU3ZDgzYzA3MWY3MTI5MDkxMzI0
|
11
|
+
M2RhYjkyYjE5YjMxODk0NTZhMTQ3MTFkNTA1Nzc5YzAwNjY3ZTU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NjVlODMyMmEwMDUzZTljZjA5Y2FjMzVmZmE0Y2FiMWZmMDhjODllYTUxZDU5
|
14
|
+
NzVjN2YxNDkzNzhjOWE2ODY3ZjA5MzcyYjdmMWE5NTQ3ZThmMTM3NzMxOTc2
|
15
|
+
M2QxNzgzN2JjZDJlMjZkYzcyMDYzNzBkNDNiMTM4YWExZmE5NWE=
|
data/.gitignore
CHANGED
data/changelog.md
ADDED
data/command-unit.gemspec
CHANGED
@@ -0,0 +1,56 @@
|
|
1
|
+
require_relative 'totaliser'
|
2
|
+
|
3
|
+
module CommandUnit
|
4
|
+
|
5
|
+
class Hooks
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@before_scenario = []
|
9
|
+
@scenario_pass = []
|
10
|
+
@scenario_fail = []
|
11
|
+
@after_scenario = []
|
12
|
+
@before_test = []
|
13
|
+
@test_pass = []
|
14
|
+
@test_fail = []
|
15
|
+
@after_test = []
|
16
|
+
@before_expectation = []
|
17
|
+
@expectation_pass = []
|
18
|
+
@expectation_fail = []
|
19
|
+
@after_expectation = []
|
20
|
+
# Note: I know this is a smell, just trying to get tests passing...
|
21
|
+
# Looks ripe for inheriting the hooks, and passing in a composition
|
22
|
+
# of all hooks to the test runner...
|
23
|
+
@totaliser = Totaliser.new
|
24
|
+
add :before_scenario do totaliser.scenario_run end
|
25
|
+
add :scenario_pass do totaliser.scenario_pass end
|
26
|
+
add :scenario_fail do totaliser.scenario_fail end
|
27
|
+
add :before_test do totaliser.test_run end
|
28
|
+
add :test_pass do totaliser.test_pass end
|
29
|
+
add :test_fail do totaliser.test_fail end
|
30
|
+
add :before_expectation do totaliser.expectation_run end
|
31
|
+
add :expectation_pass do totaliser.expectation_pass end
|
32
|
+
add :expectation_fail do totaliser.expectation_fail end
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_reader :totaliser,
|
36
|
+
:before_scenario, :scenario_pass, :scenario_fail, :after_scenario,
|
37
|
+
:before_test, :test_pass, :test_fail, :after_test,
|
38
|
+
:before_expectation, :expectation_pass, :expectation_fail, :after_expectation
|
39
|
+
|
40
|
+
def add(event_name, &handler)
|
41
|
+
raise "CommandUnit::Hooks.add No such event '#{event_name}'" unless self.respond_to? event_name
|
42
|
+
handlers = instance_variable_get "@#{event_name}"
|
43
|
+
handlers.push handler
|
44
|
+
end
|
45
|
+
|
46
|
+
def fire(event_name)
|
47
|
+
raise "CommandUnit::Hooks.fire No such event '#{event_name}'" unless self.respond_to? event_name
|
48
|
+
handlers = instance_variable_get "@#{event_name}"
|
49
|
+
handlers.each do |handler|
|
50
|
+
handler.call
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require_relative '../string/console_colours'
|
2
|
+
|
3
|
+
module CommandUnit
|
4
|
+
|
5
|
+
class Scenario
|
6
|
+
def initialize(namespace, desc, out_stream, &block)
|
7
|
+
@out_stream = out_stream
|
8
|
+
@namespace = namespace
|
9
|
+
@id = @@scenario_count += 1
|
10
|
+
@desc = desc
|
11
|
+
@block = block
|
12
|
+
@set_up_block = nil
|
13
|
+
@tests = []
|
14
|
+
@current_test = nil
|
15
|
+
@tear_down_block = nil
|
16
|
+
@scenario_set_up_block = nil
|
17
|
+
@scenario_tear_down_block = nil
|
18
|
+
@tests_run = 0
|
19
|
+
@expectations_run = 0
|
20
|
+
@expectations_met = 0
|
21
|
+
@expectations_not_met = 0
|
22
|
+
@inconclusive_expectations = 0
|
23
|
+
end
|
24
|
+
|
25
|
+
def run(hooks, out_stream=@out_stream)
|
26
|
+
raise "CommandUnit::Scenario.run hooks must be of type Hooks" unless hooks.is_a? Hooks
|
27
|
+
hooks.fire(:before_scenario)
|
28
|
+
scenario_failed = false
|
29
|
+
out_stream.puts "\nRunning scenario #{@id}: #{@desc}"
|
30
|
+
@@current_scenario = self
|
31
|
+
@block.call
|
32
|
+
context = {}
|
33
|
+
@scenario_set_up_block.call(context) unless @scenario_set_up_block.nil?
|
34
|
+
@tests.each do |test|
|
35
|
+
hooks.fire(:before_test)
|
36
|
+
test_failed = false
|
37
|
+
out_stream.puts "\tWhen I #{test.when_i_text}"
|
38
|
+
@tests_run += 1
|
39
|
+
@set_up_block.call(context) unless @set_up_block.nil?
|
40
|
+
test.when_i_block.call(context) unless test.when_i_block.nil?
|
41
|
+
test.expectations.each do |expectation|
|
42
|
+
hooks.fire :before_expectation
|
43
|
+
out_stream.print "\t\tI expect #{expectation.desc}..."
|
44
|
+
result = expectation.block.call(context)
|
45
|
+
@expectations_run += 1
|
46
|
+
if result.respond_to? :success?
|
47
|
+
if result.success?
|
48
|
+
hooks.fire :expectation_pass
|
49
|
+
@expectations_met +=1
|
50
|
+
out_stream.puts "Success! #{result.message}".console_green
|
51
|
+
else
|
52
|
+
hooks.fire :expectation_fail
|
53
|
+
test_failed = true
|
54
|
+
scenario_failed = true
|
55
|
+
@expectations_not_met +=1
|
56
|
+
out_stream.puts "Failure!".console_red
|
57
|
+
out_stream.puts result.message
|
58
|
+
end
|
59
|
+
else
|
60
|
+
test_failed = true
|
61
|
+
@inconclusive_expectations += 1
|
62
|
+
out_stream.puts "Inconclusive! #{result}".console_yellow
|
63
|
+
end
|
64
|
+
hooks.fire :after_expectation
|
65
|
+
end
|
66
|
+
if test_failed
|
67
|
+
hooks.fire :test_fail
|
68
|
+
else
|
69
|
+
hooks.fire :test_pass
|
70
|
+
end
|
71
|
+
|
72
|
+
hooks.fire :after_test
|
73
|
+
@tear_down_block.call(context) unless @tear_down_block.nil?
|
74
|
+
end
|
75
|
+
|
76
|
+
if scenario_failed
|
77
|
+
hooks.fire :scenario_fail
|
78
|
+
else
|
79
|
+
hooks.fire :scenario_pass
|
80
|
+
end
|
81
|
+
|
82
|
+
hooks.fire :after_scenario
|
83
|
+
@scenario_tear_down_block.call(context) unless @scenario_tear_down_block.nil?
|
84
|
+
@@current_scenario = nil
|
85
|
+
|
86
|
+
colour = @expectations_not_met == 0 ? String::CONSOLE_GREEN : String::CONSOLE_RED
|
87
|
+
|
88
|
+
out_stream.puts "Scenario #{@id} finished, #{@tests_run} tests, #{@expectations_run} expectations with #{@expectations_met} successful and #{@expectations_not_met} failures.".console_colour(colour)
|
89
|
+
end
|
90
|
+
|
91
|
+
def run_silent(hooks)
|
92
|
+
buffer = StringIO.new
|
93
|
+
run(hooks, buffer)
|
94
|
+
return buffer.string
|
95
|
+
end
|
96
|
+
|
97
|
+
def add_test(test)
|
98
|
+
@tests.push test
|
99
|
+
@current_test = test
|
100
|
+
end
|
101
|
+
|
102
|
+
attr_accessor :desc, :block, :set_up_block, :tests, :tear_down_block, :current_test,
|
103
|
+
:scenario_set_up_block, :scenario_tear_down_block, :namespace, :out
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module CommandUnit
|
2
|
+
|
3
|
+
class Test
|
4
|
+
def initialize(when_i_text, &when_i_block)
|
5
|
+
@when_i_text = when_i_text
|
6
|
+
@when_i_block = when_i_block
|
7
|
+
@expectations = []
|
8
|
+
end
|
9
|
+
attr_reader :when_i_text, :when_i_block, :expectations
|
10
|
+
def add_expectation(expectation)
|
11
|
+
@expectations.push expectation
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module CommandUnit
|
2
|
+
class Totaliser
|
3
|
+
def initialize
|
4
|
+
@scenarios_run = 0
|
5
|
+
@scenarios_passed = 0
|
6
|
+
@scenarios_failed = 0
|
7
|
+
@tests_run = 0
|
8
|
+
@tests_passed = 0
|
9
|
+
@tests_failed = 0
|
10
|
+
@expectations_run = 0
|
11
|
+
@expectations_passed = 0
|
12
|
+
@expectations_failed = 0
|
13
|
+
end
|
14
|
+
|
15
|
+
def scenario_run
|
16
|
+
@scenarios_run += 1
|
17
|
+
end
|
18
|
+
|
19
|
+
def scenario_pass
|
20
|
+
@scenarios_passed += 1
|
21
|
+
end
|
22
|
+
|
23
|
+
def scenario_fail
|
24
|
+
@scenarios_failed += 1
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_run
|
28
|
+
@tests_run += 1
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_pass
|
32
|
+
@tests_passed += 1
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_fail
|
36
|
+
@tests_failed += 1
|
37
|
+
end
|
38
|
+
|
39
|
+
def expectation_run
|
40
|
+
@expectations_run += 1
|
41
|
+
end
|
42
|
+
|
43
|
+
def expectation_pass
|
44
|
+
@expectations_passed += 1
|
45
|
+
end
|
46
|
+
|
47
|
+
def expectation_fail
|
48
|
+
@expectations_failed += 1
|
49
|
+
end
|
50
|
+
|
51
|
+
attr_reader :scenarios_run, :scenarios_passed, :scenarios_failed,
|
52
|
+
:tests_run, :tests_passed, :tests_failed,
|
53
|
+
:expectations_run, :expectations_passed, :expectations_failed
|
54
|
+
end
|
55
|
+
end
|
data/lib/command-unit.rb
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
require_relative 'command-unit/scenario'
|
3
|
+
require_relative 'command-unit/test'
|
4
|
+
require_relative 'command-unit/expectation'
|
5
|
+
require_relative 'command-unit/expectation_result'
|
6
|
+
require_relative 'command-unit/hooks'
|
7
|
+
|
1
8
|
module CommandUnit
|
2
9
|
|
3
10
|
@@scenario_count = 0
|
@@ -18,40 +25,46 @@ module CommandUnit
|
|
18
25
|
namespace = namespace_or_description
|
19
26
|
end
|
20
27
|
|
21
|
-
@@scenarios.push Scenario.new(namespace, description, &block)
|
28
|
+
@@scenarios.push Scenario.new(namespace, description, STDOUT, &block)
|
29
|
+
|
22
30
|
return @@scenarios.last
|
23
31
|
end
|
24
32
|
|
25
|
-
def
|
33
|
+
def run_silent(namespace_or_nil=nil)
|
34
|
+
output = StringIO.new
|
35
|
+
run(namespace_or_nil, output)
|
36
|
+
return output.string
|
37
|
+
end
|
38
|
+
|
39
|
+
def run(namespace_or_scenario_or_nowt=nil, out_stream=STDOUT)
|
40
|
+
hooks = Hooks.new
|
26
41
|
if namespace_or_scenario_or_nowt.nil?
|
27
42
|
# Run the lot...
|
43
|
+
out_stream.puts "\nRunning #{@@scenarios.count} scenarios..."
|
28
44
|
@@scenarios.each do |scenario|
|
29
|
-
scenario.run
|
45
|
+
scenario.run(hooks, out_stream)
|
30
46
|
end
|
31
47
|
else
|
32
48
|
if namespace_or_scenario_or_nowt.is_a? Symbol
|
33
|
-
|
34
|
-
|
35
|
-
|
49
|
+
namespace = namespace_or_scenario_or_nowt
|
50
|
+
scenarios_in_namespace = @@scenarios.select { |s| s.namespace == namespace }
|
51
|
+
out_stream.puts "\nRunning #{scenarios_in_namespace.length} scenarios in namespace '#{namespace}'..."
|
52
|
+
scenarios_in_namespace.each do |scenario|
|
53
|
+
scenario.run(hooks, out_stream)
|
36
54
|
end
|
37
55
|
elsif namespace_or_scenario.is_a? Scenario
|
38
|
-
|
56
|
+
scenario = namespace_or_scenario
|
57
|
+
out_stream.puts "\nRunning single scenario..."
|
58
|
+
scenario.run(hooks, out_stream)
|
39
59
|
else
|
40
60
|
raise "You must pass either a Scenario, a Symbol (namespace), or nil into run. You passed a #{namespace_or_scenario_or_nowt.class}"
|
41
61
|
end
|
42
62
|
end
|
43
|
-
end
|
44
63
|
|
45
|
-
|
64
|
+
t = hooks.totaliser
|
65
|
+
message = "\nRan #{t.scenarios_run} scenarios, #{t.scenarios_passed} passed, #{t.scenarios_failed} failed (tests passed: #{t.tests_passed}, failed: #{t.tests_failed}) (expectations passed: #{t.expectations_passed}, failed: #{t.expectations_failed})\n"
|
46
66
|
|
47
|
-
|
48
|
-
out = StringIO.new
|
49
|
-
$stdout = out
|
50
|
-
yield
|
51
|
-
r = out.string
|
52
|
-
return r
|
53
|
-
ensure
|
54
|
-
$stdout = STDOUT
|
67
|
+
out_stream.puts message
|
55
68
|
end
|
56
69
|
|
57
70
|
def ensure_inside_scenario
|
@@ -88,107 +101,12 @@ module CommandUnit
|
|
88
101
|
@@current_scenario.current_test.add_expectation Expectation.new(desc, &i_expect_block)
|
89
102
|
end
|
90
103
|
|
91
|
-
def
|
104
|
+
def pass(desc = '')
|
92
105
|
ExpectationResult.new(desc, true)
|
93
106
|
end
|
94
107
|
|
95
|
-
def
|
108
|
+
def fail(desc = '')
|
96
109
|
ExpectationResult.new(desc, false)
|
97
110
|
end
|
98
111
|
|
99
|
-
class Scenario
|
100
|
-
def initialize(namespace, desc, &block)
|
101
|
-
@namespace = namespace
|
102
|
-
@id = @@scenario_count += 1
|
103
|
-
@desc = desc
|
104
|
-
@block = block
|
105
|
-
@set_up_block = nil
|
106
|
-
@tests = []
|
107
|
-
@current_test = nil
|
108
|
-
@tear_down_block = nil
|
109
|
-
@scenario_set_up_block = nil
|
110
|
-
@scenario_tear_down_block = nil
|
111
|
-
@tests_run = 0
|
112
|
-
@expectations_run = 0
|
113
|
-
@expectations_met = 0
|
114
|
-
@expectations_not_met = 0
|
115
|
-
@inconclusive_expectations = 0
|
116
|
-
end
|
117
|
-
|
118
|
-
def run
|
119
|
-
puts "\nRunning scenario #{@id}: #{@desc}"
|
120
|
-
@@current_scenario = self
|
121
|
-
@block.call
|
122
|
-
context = {}
|
123
|
-
@scenario_set_up_block.call(context) unless @scenario_set_up_block.nil?
|
124
|
-
@tests.each do |test|
|
125
|
-
puts "\tWhen I #{test.when_i_text}"
|
126
|
-
@tests_run += 1
|
127
|
-
@set_up_block.call(context) unless @set_up_block.nil?
|
128
|
-
test.when_i_block.call(context) unless test.when_i_block.nil?
|
129
|
-
test.expectations.each do |expectation|
|
130
|
-
print "\t\tI expect #{expectation.desc}..."
|
131
|
-
result = expectation.block.call(context)
|
132
|
-
@expectations_run += 1
|
133
|
-
if result.respond_to? :success?
|
134
|
-
if result.success?
|
135
|
-
@expectations_met +=1
|
136
|
-
puts "Success! #{result.message}"
|
137
|
-
else
|
138
|
-
@expectations_not_met +=1
|
139
|
-
puts "Failure! #{result.message}"
|
140
|
-
end
|
141
|
-
else
|
142
|
-
@inconclusive_expectations += 1
|
143
|
-
puts "Inconclusive! #{result}"
|
144
|
-
end
|
145
|
-
end
|
146
|
-
@tear_down_block.call(context) unless @tear_down_block.nil?
|
147
|
-
end
|
148
|
-
@scenario_tear_down_block.call(context) unless @scenario_tear_down_block.nil?
|
149
|
-
@@current_scenario = nil
|
150
|
-
|
151
|
-
puts "Scenario #{@id} finished, #{@tests_run} tests, #{@expectations_run} expectations with #{@expectations_met} successful and #{@expectations_not_met} failures."
|
152
|
-
end
|
153
|
-
|
154
|
-
def add_test(test)
|
155
|
-
@tests.push test
|
156
|
-
@current_test = test
|
157
|
-
end
|
158
|
-
|
159
|
-
attr_accessor :desc, :block, :set_up_block, :tests, :tear_down_block, :current_test,
|
160
|
-
:scenario_set_up_block, :scenario_tear_down_block, :namespace
|
161
|
-
end
|
162
|
-
|
163
|
-
class Test
|
164
|
-
def initialize(when_i_text, &when_i_block)
|
165
|
-
@when_i_text = when_i_text
|
166
|
-
@when_i_block = when_i_block
|
167
|
-
@expectations = []
|
168
|
-
end
|
169
|
-
attr_reader :when_i_text, :when_i_block, :expectations
|
170
|
-
def add_expectation(expectation)
|
171
|
-
@expectations.push expectation
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
class Expectation
|
176
|
-
def initialize(expectation_text, &expectaton_block)
|
177
|
-
@desc = expectation_text
|
178
|
-
@block = expectaton_block
|
179
|
-
end
|
180
|
-
attr_accessor :desc, :block
|
181
|
-
end
|
182
|
-
|
183
|
-
class ExpectationResult
|
184
|
-
def initialize(description, expectation_met)
|
185
|
-
@message = description
|
186
|
-
@success = expectation_met
|
187
|
-
end
|
188
|
-
attr_reader :message
|
189
|
-
def success?
|
190
|
-
@success
|
191
|
-
end
|
192
|
-
|
193
|
-
end
|
194
112
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class String
|
2
|
+
def console_colour(colour_code)
|
3
|
+
"\e[#{colour_code}m#{self}\e[0m"
|
4
|
+
end
|
5
|
+
|
6
|
+
def console_red
|
7
|
+
console_colour(CONSOLE_RED)
|
8
|
+
end
|
9
|
+
|
10
|
+
def console_green
|
11
|
+
console_colour(CONSOLE_GREEN)
|
12
|
+
end
|
13
|
+
|
14
|
+
def console_yellow
|
15
|
+
console_colour(CONSOLE_YELLOW)
|
16
|
+
end
|
17
|
+
|
18
|
+
CONSOLE_RED = 31
|
19
|
+
CONSOLE_GREEN = 32
|
20
|
+
CONSOLE_YELLOW = 33
|
21
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
include CommandUnit
|
2
|
+
|
3
|
+
scenario :command_unit, 'Running a scenario with no tests or assertions' do
|
4
|
+
|
5
|
+
when_i 'execute the scenario' do |context|
|
6
|
+
context[:scenario] = scenario 'This is an empty scenario' do
|
7
|
+
|
8
|
+
end
|
9
|
+
context[:out] = context[:scenario].run_silent(Hooks.new)
|
10
|
+
end
|
11
|
+
|
12
|
+
i_expect 'to see the scenario title' do |context|
|
13
|
+
if context[:out].include? 'This is an empty scenario'
|
14
|
+
pass
|
15
|
+
else
|
16
|
+
fail "Output was: '#{context[:out]}'"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
include CommandUnit
|
2
|
+
|
3
|
+
scenario :command_unit, 'Running a scenario with 1 test and 1 failing assertion from CommandUnit::run' do
|
4
|
+
|
5
|
+
set_up do
|
6
|
+
scenario :one_test_one_failing_expectation, 'This is the one scenario' do
|
7
|
+
when_i 'this is the one test' do
|
8
|
+
# Nowt ;)
|
9
|
+
end
|
10
|
+
i_expect 'this is the one expectation' do
|
11
|
+
fail
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
when_i 'run the one scenario' do |context|
|
17
|
+
context[:out] = run_silent :one_test_one_failing_expectation
|
18
|
+
end
|
19
|
+
|
20
|
+
i_expect 'to see the when_i text' do |context|
|
21
|
+
if context[:out].include? 'this is the one test'
|
22
|
+
pass
|
23
|
+
else
|
24
|
+
fail
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
i_expect 'to see the i_expect text' do |context|
|
29
|
+
if context[:out].include? 'this is the one expectation'
|
30
|
+
pass
|
31
|
+
else
|
32
|
+
fail "\n\n=====\n\n#{context[:out]}\n\n=====\n\n"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
i_expect 'to see the correct number of tests and expectations of the scenario reported' do |context|
|
37
|
+
if context[:out].include? '1 tests, 1 expectations with 0 successful and 1 failures'
|
38
|
+
pass
|
39
|
+
else
|
40
|
+
fail "\n\n=====\n\n#{context[:out]}\n\n=====\n\n"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
i_expect 'to see the total number of run scenarios and totals' do |context|
|
45
|
+
if context[:out].include? 'Ran 1 scenarios, 0 passed, 1 failed (tests passed: 0, failed: 1) (expectations passed: 0, failed: 1)'
|
46
|
+
pass
|
47
|
+
else
|
48
|
+
fail "\n\n=====\n\n#{context[:out]}\n\n=====\n\n"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
include CommandUnit
|
2
|
+
|
3
|
+
scenario :command_unit, 'Running a scenario with 1 test and 1 passing assertion from CommandUnit::run' do
|
4
|
+
|
5
|
+
set_up do
|
6
|
+
scenario :one_test_one_passing_expectation, 'This is the one scenario' do
|
7
|
+
when_i 'this is the one test' do
|
8
|
+
# Nowt ;)
|
9
|
+
end
|
10
|
+
i_expect 'this is the one expectation' do
|
11
|
+
pass
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
when_i 'run the one scenario' do |context|
|
17
|
+
context[:out] = run_silent :one_test_one_passing_expectation
|
18
|
+
end
|
19
|
+
|
20
|
+
i_expect 'to see the when_i text' do |context|
|
21
|
+
if context[:out].include? 'this is the one test'
|
22
|
+
pass
|
23
|
+
else
|
24
|
+
fail
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
i_expect 'to see the i_expect text' do |context|
|
29
|
+
if context[:out].include? 'this is the one expectation'
|
30
|
+
pass
|
31
|
+
else
|
32
|
+
fail "\n\n=====\n\n#{context[:out]}\n\n=====\n\n"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
i_expect 'to see the correct number of tests and expectations of the scenario reported' do |context|
|
37
|
+
if context[:out].include? '1 tests, 1 expectations with 1 successful and 0 failures'
|
38
|
+
pass
|
39
|
+
else
|
40
|
+
fail "\n\n=====\n\n#{context[:out]}\n\n=====\n\n"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
i_expect 'to see the total number of run scenarios and totals' do |context|
|
45
|
+
if context[:out].include? 'Ran 1 scenarios, 1 passed, 0 failed (tests passed: 1, failed: 0) (expectations passed: 1, failed: 0)'
|
46
|
+
pass
|
47
|
+
else
|
48
|
+
fail "\n\n=====\n\n#{context[:out]}\n\n=====\n\n"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
data/test/test.rb
CHANGED
@@ -2,58 +2,8 @@ require_relative '../lib/command-unit'
|
|
2
2
|
|
3
3
|
include CommandUnit
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
when_i 'execute the scenario' do |context|
|
8
|
-
context[:scenario] = scenario 'This is an empty scenario' do
|
9
|
-
|
10
|
-
end
|
11
|
-
context[:out] = capture_stdout { context[:scenario].run }
|
12
|
-
end
|
13
|
-
|
14
|
-
i_expect 'to see the scenario title' do |context|
|
15
|
-
if context[:out].include? 'This is an empty scenario'
|
16
|
-
success
|
17
|
-
else
|
18
|
-
failure "Output was: '#{context[:out]}'"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
scenario :command_unit, 'Running a scenario with 1 test and 1 passing assertion' do
|
25
|
-
|
26
|
-
set_up do |context|
|
27
|
-
context[:scenario] = scenario 'This scenario has 1 test with 1 assertion' do
|
28
|
-
when_i 'have 1 test in the scenario' do
|
29
|
-
# Empty test test ;)
|
30
|
-
end
|
31
|
-
i_expect 'that this should pass' do
|
32
|
-
success
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
when_i 'run the scenario' do |context|
|
38
|
-
context[:out] = capture_stdout do context[:scenario].run end
|
39
|
-
end
|
40
|
-
|
41
|
-
i_expect 'to see the when_i text and the i_expect text' do |context|
|
42
|
-
if context[:out].include? 'have 1 test in the scenario' and context[:out].include? 'that this should pass'
|
43
|
-
success
|
44
|
-
else
|
45
|
-
failure
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
i_expect 'to see the correct number of tests and expectations reported' do |context|
|
50
|
-
if context[:out].include? '1 tests, 1 expectations with 1 successful and 0 failures'
|
51
|
-
success
|
52
|
-
else
|
53
|
-
failure
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
5
|
+
Dir[File.dirname(__FILE__) + '/scenarios/*.rb'].each do |file|
|
6
|
+
require File.expand_path(file)
|
57
7
|
end
|
58
8
|
|
59
9
|
run :command_unit
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: command-unit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel R. Salisbury
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: ! 'ALPHA: Test runner for one-shot command line tools. This was built
|
14
14
|
to support writing git hooks over at http://github.com/samsalisbury/righteous-git-hooks'
|
@@ -20,9 +20,21 @@ files:
|
|
20
20
|
- .gitignore
|
21
21
|
- .ruby-version
|
22
22
|
- README.md
|
23
|
+
- changelog.md
|
23
24
|
- command-unit.gemspec
|
24
25
|
- lib/command-unit.rb
|
26
|
+
- lib/command-unit/expectation.rb
|
27
|
+
- lib/command-unit/expectation_result.rb
|
28
|
+
- lib/command-unit/hooks
|
29
|
+
- lib/command-unit/hooks.rb
|
30
|
+
- lib/command-unit/scenario.rb
|
31
|
+
- lib/command-unit/test.rb
|
32
|
+
- lib/command-unit/totaliser.rb
|
33
|
+
- lib/string/console_colours.rb
|
25
34
|
- test/quick-test.rb
|
35
|
+
- test/scenarios/empty_scenario.rb
|
36
|
+
- test/scenarios/one_test_one_failing_expectation.rb
|
37
|
+
- test/scenarios/one_test_one_passing_expectation.rb
|
26
38
|
- test/test.rb
|
27
39
|
homepage: http://github.com/samsalisbury/command-unit
|
28
40
|
licenses: []
|