riot 0.12.2 → 0.12.3
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/CHANGELOG +27 -0
- data/lib/riot.rb +17 -2
- data/lib/riot/context_helpers.rb +58 -18
- data/lib/riot/version.rb +1 -1
- data/test/core/context/asserts_topic_test.rb +20 -0
- data/test/core/context/asserts_with_arguments_test.rb +12 -1
- data/test/core/context/denies_with_arguments_test.rb +23 -0
- data/test/core/context/deny_test.rb +34 -6
- data/test/core/runnable/negative_assertion_test.rb +8 -8
- metadata +4 -2
data/CHANGELOG
CHANGED
@@ -1,3 +1,30 @@
|
|
1
|
+
== 0.12.3
|
2
|
+
|
3
|
+
==== Going nuts with context helpers: should_not, asserts/denies_topic arguments [achiu]
|
4
|
+
|
5
|
+
This works now: `should_not("do something")` as an alias for `denies`
|
6
|
+
|
7
|
+
You can now pass arguments to `asserts`, `denies`, `should`, and `should_not`.
|
8
|
+
|
9
|
+
context "Playing with hashes" do
|
10
|
+
setup do
|
11
|
+
{ "foo" => "bar" }
|
12
|
+
end
|
13
|
+
|
14
|
+
asserts(:[], "foo").equals("bar")
|
15
|
+
should(:[], "foo").equals("bar")
|
16
|
+
denies(:[], "foo").equals("goo")
|
17
|
+
should_not(:[], "foo").equals("goo")
|
18
|
+
end # Playing with hashes
|
19
|
+
|
20
|
+
==== Exit gracefully if a child process exited with failing status [timgaleckas]
|
21
|
+
|
22
|
+
No tests will run in this situation.
|
23
|
+
|
24
|
+
==== No status displayed if no tests run [timgaleckas]
|
25
|
+
|
26
|
+
==== Adding a `denies_topic` macro to Context [Mon-Ouie]
|
27
|
+
|
1
28
|
== 0.12.2
|
2
29
|
|
3
30
|
==== RDoc'ed the hell out of everything [jaknowlden]
|
data/lib/riot.rb
CHANGED
@@ -37,7 +37,7 @@ module Riot
|
|
37
37
|
the_reporter = reporter.new
|
38
38
|
the_reporter.summarize do
|
39
39
|
root_contexts.each { |ctx| ctx.run(the_reporter) }
|
40
|
-
end
|
40
|
+
end unless root_contexts.empty?
|
41
41
|
the_reporter
|
42
42
|
end
|
43
43
|
|
@@ -100,7 +100,16 @@ module Riot
|
|
100
100
|
Riot.reporter = Riot::PrettyDotMatrixReporter
|
101
101
|
end
|
102
102
|
|
103
|
-
|
103
|
+
# Making sure to account for Riot being run as part of a larger rake task (or something similar).
|
104
|
+
# If a child process exited with a failing status, probably don't want to run Riot tests; just exit
|
105
|
+
# with the child status.
|
106
|
+
at_exit do
|
107
|
+
unless Riot.alone?
|
108
|
+
status = $?.exitstatus unless ($?.nil? || $?.success?)
|
109
|
+
exit(status || run.success?)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
104
113
|
end # Riot
|
105
114
|
|
106
115
|
# A little bit of monkey-patch so we can have +context+ available anywhere.
|
@@ -115,3 +124,9 @@ class Object
|
|
115
124
|
end
|
116
125
|
alias_method :describe, :context
|
117
126
|
end # Object
|
127
|
+
|
128
|
+
class Array
|
129
|
+
def extract_options!
|
130
|
+
last.is_a?(::Hash) ? pop : {}
|
131
|
+
end
|
132
|
+
end
|
data/lib/riot/context_helpers.rb
CHANGED
@@ -80,13 +80,17 @@ module Riot
|
|
80
80
|
#
|
81
81
|
# asserts(:size).equals(2)
|
82
82
|
#
|
83
|
+
# Or with arguments:
|
84
|
+
#
|
85
|
+
# asserts(:foo,1,2).equals(3)
|
86
|
+
#
|
83
87
|
# Passing a Symbol to +asserts+ enables this behaviour. For more information on
|
84
88
|
# assertion macros, see {Riot::AssertionMacro}.
|
85
89
|
#
|
86
90
|
# @param [String, Symbol] what description of test or property to inspect on the topic
|
87
91
|
# @return [Riot::Assertion]
|
88
|
-
def asserts(what, &definition)
|
89
|
-
new_assertion("asserts", what, &definition)
|
92
|
+
def asserts(*what, &definition)
|
93
|
+
new_assertion("asserts", *what, &definition)
|
90
94
|
end
|
91
95
|
|
92
96
|
# Same as #asserts, except it uses the phrase "should" in the report output. Sometimes you feel like a
|
@@ -94,10 +98,14 @@ module Riot
|
|
94
98
|
#
|
95
99
|
# should("ensure expected") { "bar" }.equals("bar")
|
96
100
|
#
|
101
|
+
# #should also has the same shortcuts available to #asserts:
|
102
|
+
#
|
103
|
+
# should(:bar,1,2).equals(3)
|
104
|
+
#
|
97
105
|
# @param [String, Symbol] what description of test or property to inspect on the topic
|
98
106
|
# @return [Riot::Assertion]
|
99
|
-
def should(what, &definition)
|
100
|
-
new_assertion("should", what, &definition)
|
107
|
+
def should(*what, &definition)
|
108
|
+
new_assertion("should", *what, &definition)
|
101
109
|
end
|
102
110
|
|
103
111
|
# Like an assertion, but expects negative results.
|
@@ -115,13 +123,39 @@ module Riot
|
|
115
123
|
#
|
116
124
|
# denies(:size).equals(2)
|
117
125
|
#
|
126
|
+
# the shorcut can also pass additional arguments to the method like:
|
127
|
+
#
|
128
|
+
# denies(:foo,1,3).equals(2)
|
129
|
+
#
|
118
130
|
# Passing a Symbol to +denies+ enables this behaviour. For more information on
|
119
131
|
# assertion macros, see {Riot::AssertionMacro}.
|
120
132
|
#
|
121
133
|
# @param [String, Symbol] what description of test or property to inspect on the topic
|
122
134
|
# @return [Riot::Assertion]
|
123
|
-
def denies(what, &definition)
|
124
|
-
|
135
|
+
def denies(*what, &definition)
|
136
|
+
what << {:negative => true}
|
137
|
+
new_assertion "denies", *what, &definition
|
138
|
+
end
|
139
|
+
|
140
|
+
# This is the negative form of #should. This is exactly like denies. Just here for syntactic sugar.
|
141
|
+
#
|
142
|
+
# A basic eample is:
|
143
|
+
#
|
144
|
+
# should_not("have size equal 2") { topic.size == 2 }
|
145
|
+
#
|
146
|
+
# In addition, the #denies shortcut as available as well:
|
147
|
+
#
|
148
|
+
# should_not(:size).equals 3
|
149
|
+
#
|
150
|
+
# Or passing in arguments
|
151
|
+
#
|
152
|
+
# should_not(:foo,1,2).equals(2)
|
153
|
+
#
|
154
|
+
# @param [String,Symbol] what description or property to inspect on the topic
|
155
|
+
# @return [Riot::Assertion]
|
156
|
+
def should_not(*what, &definition)
|
157
|
+
what << {:negative => true}
|
158
|
+
new_assertion "should not", *what, &definition
|
125
159
|
end
|
126
160
|
|
127
161
|
# Makes an assertion on the topic itself, e.g.
|
@@ -133,19 +167,25 @@ module Riot
|
|
133
167
|
def asserts_topic(what="that it")
|
134
168
|
asserts(what) { topic }
|
135
169
|
end
|
136
|
-
private
|
137
|
-
def new_assertion(scope, what, negative=false, &definition)
|
138
|
-
if what.kind_of?(Symbol)
|
139
|
-
definition ||= proc { topic.send(what) }
|
140
|
-
description = "#{scope} ##{what}"
|
141
|
-
elsif what.kind_of?(Array)
|
142
|
-
definition ||= proc { topic.send(*what) }
|
143
|
-
description = "#{scope} ##{what.first} with argument(s): #{what[1..-1]}"
|
144
|
-
else
|
145
|
-
description = "#{scope} #{what}"
|
146
|
-
end
|
147
170
|
|
148
|
-
|
171
|
+
# Makes a negative assertion on the topic itself, e.g.
|
172
|
+
#
|
173
|
+
# denies_topic.matches(/^ab+/)
|
174
|
+
#
|
175
|
+
# @param [String] what description of test
|
176
|
+
# @return [Riot::Assertion]
|
177
|
+
def denies_topic(what="that it")
|
178
|
+
denies(what) { topic }
|
149
179
|
end
|
180
|
+
private
|
181
|
+
|
182
|
+
def new_assertion(scope, *args, &definition)
|
183
|
+
options = args.extract_options!
|
184
|
+
definition ||= proc { topic.send(*args) }
|
185
|
+
description = "#{scope} #{args.first}"
|
186
|
+
description << " with arguments(s): #{args.slice(1, args.length)}" if args.size > 1
|
187
|
+
(@assertions << assertion_class.new(description, options[:negative], &definition)).last
|
188
|
+
end
|
189
|
+
|
150
190
|
end # AssertionHelpers
|
151
191
|
end # Riot
|
data/lib/riot/version.rb
CHANGED
@@ -19,3 +19,23 @@ context "The asserts_topic shortcut" do
|
|
19
19
|
asserts(:to_s).equals("asserts get some")
|
20
20
|
end
|
21
21
|
end # The asserts_topic shortcut
|
22
|
+
|
23
|
+
context "The denies_topic shortcut" do
|
24
|
+
setup do
|
25
|
+
Riot::Context.new("foo") {}.denies_topic
|
26
|
+
end
|
27
|
+
|
28
|
+
should("return an Assertion") { topic }.kind_of(Riot::Assertion)
|
29
|
+
|
30
|
+
should("return the actual topic as the result of evaling the assertion") do
|
31
|
+
(situation = Riot::Situation.new).instance_variable_set(:@_topic, "bar")
|
32
|
+
topic.equals("not bar").run(situation)
|
33
|
+
end.equals([:pass, %Q{is equal to "not bar" when it is "bar"}])
|
34
|
+
|
35
|
+
asserts(:to_s).equals("denies that it")
|
36
|
+
|
37
|
+
context "with an explicit description" do
|
38
|
+
setup { Riot::Context.new("foo") {}.denies_topic("get some") }
|
39
|
+
asserts(:to_s).equals("denies get some")
|
40
|
+
end
|
41
|
+
end # The denies_topic shortcut
|
@@ -2,7 +2,7 @@ require 'teststrap'
|
|
2
2
|
|
3
3
|
context "an assertion made with arguments" do
|
4
4
|
setup do
|
5
|
-
Riot::Context.new("foo") {}.asserts(
|
5
|
+
Riot::Context.new("foo") {}.asserts(:[], 0)
|
6
6
|
end
|
7
7
|
|
8
8
|
should("pass its argument to send, with the first argument as method name") do
|
@@ -10,3 +10,14 @@ context "an assertion made with arguments" do
|
|
10
10
|
topic.equals(1).run(situation).first
|
11
11
|
end.equals(:pass)
|
12
12
|
end # assertion made with arguments
|
13
|
+
|
14
|
+
context "a should made with arguments" do
|
15
|
+
setup do
|
16
|
+
Riot::Context.new("foo") {}.should(:[], 0)
|
17
|
+
end
|
18
|
+
|
19
|
+
should("pass its argument to send, with the first argument as method name") do
|
20
|
+
(situation = Riot::Situation.new).instance_variable_set(:@_topic, [1, 2])
|
21
|
+
topic.equals(1).run(situation).first
|
22
|
+
end.equals(:pass)
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'teststrap'
|
2
|
+
|
3
|
+
context "a negative assertion made with arguments" do
|
4
|
+
setup do
|
5
|
+
Riot::Context.new("foo") {}.denies(:[], 0)
|
6
|
+
end
|
7
|
+
|
8
|
+
should("pass its argument to send, with the first argument as method name") do
|
9
|
+
(situation = Riot::Situation.new).instance_variable_set(:@_topic, [1, 2])
|
10
|
+
topic.equals(1).run(situation).first
|
11
|
+
end.equals(:fail)
|
12
|
+
end # assertion made with arguments
|
13
|
+
|
14
|
+
context "a negative assertion made with arguments" do
|
15
|
+
setup do
|
16
|
+
Riot::Context.new("foo") {}.should_not(:[], 0)
|
17
|
+
end
|
18
|
+
|
19
|
+
should("pass its argument to send, with the first argument as method name") do
|
20
|
+
(situation = Riot::Situation.new).instance_variable_set(:@_topic, [1, 2])
|
21
|
+
topic.equals(1).run(situation).first
|
22
|
+
end.equals(:fail)
|
23
|
+
end # assertion made with arguments
|
@@ -2,24 +2,52 @@ require 'teststrap'
|
|
2
2
|
|
3
3
|
context "Using denies" do
|
4
4
|
|
5
|
-
helper(:denial_context) do
|
5
|
+
helper(:denial_context) do |actual|
|
6
6
|
report = Riot::Context.new("Apple Jackie") do
|
7
|
-
denies("with false"
|
7
|
+
denies("with false") { actual }
|
8
8
|
end.run(MockReporter.new)
|
9
9
|
|
10
10
|
[report.passes, report.failures, report.errors]
|
11
11
|
end # denial_context
|
12
12
|
|
13
13
|
asserts("result when returning false from the assertion block") do
|
14
|
-
denial_context
|
14
|
+
denial_context(false)
|
15
15
|
end.equals([1,0,0])
|
16
16
|
|
17
17
|
asserts("result when returning true from the assertion block") do
|
18
|
-
denial_context
|
18
|
+
denial_context(true)
|
19
19
|
end.equals([0,1,0])
|
20
20
|
|
21
21
|
asserts("result when assertion block has an exception") do
|
22
|
-
|
23
|
-
|
22
|
+
Riot::Context.new("Apple Jackie") do
|
23
|
+
denies("with false") { raise Exception }
|
24
|
+
end.run(MockReporter.new).errors
|
25
|
+
end.equals(1)
|
24
26
|
|
25
27
|
end # Using denies
|
28
|
+
|
29
|
+
context "Using should_not" do
|
30
|
+
|
31
|
+
helper(:denial_context) do |actual|
|
32
|
+
report = Riot::Context.new("Apple Jackie") do
|
33
|
+
should_not("with false") { actual }
|
34
|
+
end.run(MockReporter.new)
|
35
|
+
|
36
|
+
[report.passes, report.failures, report.errors]
|
37
|
+
end # denial_context
|
38
|
+
|
39
|
+
asserts("result when returning false from the assertion block") do
|
40
|
+
denial_context(false)
|
41
|
+
end.equals([1,0,0])
|
42
|
+
|
43
|
+
asserts("result when returning true from the assertion block") do
|
44
|
+
denial_context(true)
|
45
|
+
end.equals([0,1,0])
|
46
|
+
|
47
|
+
asserts("result when assertion block has an exception") do
|
48
|
+
Riot::Context.new("Apple Jackie") do
|
49
|
+
should_not("with false") { raise Exception }
|
50
|
+
end.run(MockReporter.new).errors
|
51
|
+
end.equals(1)
|
52
|
+
|
53
|
+
end # Using should_not
|
@@ -2,35 +2,35 @@ require 'teststrap'
|
|
2
2
|
|
3
3
|
context "A negative assertion test" do
|
4
4
|
|
5
|
-
helper(:negative_assertion) do
|
6
|
-
Riot::Assertion.new("foo", true
|
5
|
+
helper(:negative_assertion) do |definition|
|
6
|
+
Riot::Assertion.new("foo", true) { definition }
|
7
7
|
end
|
8
8
|
|
9
9
|
asserts("response when evaluated with false result") do
|
10
|
-
negative_assertion
|
10
|
+
negative_assertion(false).run(Riot::Situation.new)
|
11
11
|
end.equals([:pass, ""])
|
12
12
|
|
13
13
|
asserts("response when evaluated with nil result") do
|
14
|
-
negative_assertion
|
14
|
+
negative_assertion(false).run(Riot::Situation.new)
|
15
15
|
end.equals([:pass, ""])
|
16
16
|
|
17
17
|
asserts("response when evaluated with true result") do
|
18
|
-
negative_assertion
|
18
|
+
negative_assertion(true).run(Riot::Situation.new)
|
19
19
|
end.equals([:fail, "Expected non-true but got true instead", nil, nil])
|
20
20
|
|
21
21
|
asserts("response when evaluated with \"bar\" result") do
|
22
|
-
negative_assertion
|
22
|
+
negative_assertion("bar").run(Riot::Situation.new)
|
23
23
|
end.equals([:fail, "Expected non-true but got \"bar\" instead", nil, nil])
|
24
24
|
|
25
25
|
asserts("response when evaluated with 0 result") do
|
26
|
-
negative_assertion
|
26
|
+
negative_assertion(0).run(Riot::Situation.new)
|
27
27
|
end.equals([:fail, "Expected non-true but got 0 instead", nil, nil])
|
28
28
|
|
29
29
|
helper(:big_exception) { @exception ||= Exception.new("blah") }
|
30
30
|
|
31
31
|
asserts("response when evaluation errors") do
|
32
32
|
exception = big_exception # :\
|
33
|
-
|
33
|
+
Riot::Assertion.new("foo", true) { raise exception }.run(Riot::Situation.new)
|
34
34
|
end.equals { [:error, big_exception] }
|
35
35
|
|
36
36
|
end # A negative assertion test
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: riot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.12.
|
5
|
+
version: 0.12.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Justin 'Gus' Knowlden
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-03-10 00:00:00 -06:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- test/core/context/asserts_with_arguments_test.rb
|
98
98
|
- test/core/context/context_test.rb
|
99
99
|
- test/core/context/context_with_options_test.rb
|
100
|
+
- test/core/context/denies_with_arguments_test.rb
|
100
101
|
- test/core/context/deny_test.rb
|
101
102
|
- test/core/context/helper_test.rb
|
102
103
|
- test/core/context/hookup_test.rb
|
@@ -168,6 +169,7 @@ test_files:
|
|
168
169
|
- test/core/context/asserts_with_arguments_test.rb
|
169
170
|
- test/core/context/context_test.rb
|
170
171
|
- test/core/context/context_with_options_test.rb
|
172
|
+
- test/core/context/denies_with_arguments_test.rb
|
171
173
|
- test/core/context/deny_test.rb
|
172
174
|
- test/core/context/helper_test.rb
|
173
175
|
- test/core/context/hookup_test.rb
|