riot 0.10.10 → 0.10.11

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,35 @@
1
+ *0.10.11*
2
+
3
+ * Context#asserts_topic now takes an optional description [gabrielg, jaknowlden]
4
+
5
+ asserts_topic.exists
6
+ asserts_topic("some kind of description").exists
7
+
8
+ * Added not! assertion macro [gabrielg, jaknowlden]
9
+
10
+ setup { User.new(:funny? => false) }
11
+ asserts(:funny?).not!
12
+
13
+ * Added Context#hookup to add some setup code to an already defined topic [jaknowlden]
14
+
15
+ context "yo mama" do
16
+ setup { YoMama.new }
17
+ # ...
18
+ context "is cool" do
19
+ hookup { topic.do_something_involving_state }
20
+ asserts_topic.kind_of?(YoMama)
21
+ end
22
+ end
23
+
24
+ * Added Riot.alone! mode to ensure Riot.run is not run at-exit [jaknowlden]
25
+
26
+ Riot.alone!
27
+ Riot.run
28
+
29
+ This will still print output unless you also Riot.silently!
30
+
31
+ * Returning non-zero status at-exit when tests don't pass [gabrielg, jaknowlden]
32
+
1
33
  *0.10.10*
2
34
 
3
35
  * Passing assertion macros can now return a custom message [dasch, jaknowlden]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.10.10
1
+ 0.10.11
@@ -17,11 +17,16 @@ module Riot
17
17
  the_reporter.summarize do
18
18
  root_contexts.each { |ctx| ctx.run(the_reporter) }
19
19
  end
20
+ the_reporter
20
21
  end
21
22
 
22
23
  def self.silently!; @silent = true; end
23
24
  def self.silently?; defined?(@silent) && @silent == true end
24
25
 
26
+ # This means you don't want Riot to run tests for you. You will execute Riot.run manually.
27
+ def self.alone!; @alone = true; end
28
+ def self.alone?; defined?(@alone) && @alone == true end
29
+
25
30
  def self.reporter=(reporter_class) @reporter_class = reporter_class; end
26
31
 
27
32
  def self.reporter
@@ -36,7 +41,7 @@ module Riot
36
41
  def self.verbose; Riot.reporter = Riot::VerboseStoryReporter; end
37
42
  def self.dots; Riot.reporter = Riot::DotMatrixReporter; end
38
43
 
39
- at_exit { run unless Riot.silently? }
44
+ at_exit { exit(run.success?) unless Riot.alone? }
40
45
  end # Riot
41
46
 
42
47
  class Object
@@ -29,6 +29,7 @@ require 'riot/assertion_macros/includes'
29
29
  require 'riot/assertion_macros/kind_of'
30
30
  require 'riot/assertion_macros/matches'
31
31
  require 'riot/assertion_macros/nil'
32
+ require 'riot/assertion_macros/not_borat'
32
33
  require 'riot/assertion_macros/raises'
33
34
  require 'riot/assertion_macros/respond_to'
34
35
  require 'riot/assertion_macros/same_elements'
@@ -0,0 +1,16 @@
1
+ module Riot
2
+ # Asserts the result of the test is a non-truthy value. Read the following assertions in the way Borat
3
+ # learned about humor:
4
+ # asserts("you are funny") { false }.not!
5
+ # should("be funny") { nil }.not!
6
+ #
7
+ # Thusly, Borat would say "You are funny ... not!" The above two assertions would pass because the values
8
+ # are non-truthy.
9
+ class NotMacro < AssertionMacro
10
+ register :not!
11
+
12
+ def evaluate(actual)
13
+ actual ? fail("expected to exist ... not!") : pass("does exist ... not!")
14
+ end
15
+ end
16
+ end
@@ -14,11 +14,27 @@ module Riot
14
14
  def teardowns; @parent.teardowns + @teardowns; end
15
15
 
16
16
  def setup(&definition) (@setups << Setup.new(&definition)).last; end
17
+
18
+ # A setup shortcut that returns the original topic so you don't have to. Good for nested setups. Instead
19
+ # of doing this in your context:
20
+ #
21
+ # setup do
22
+ # topic.do_something
23
+ # topic
24
+ # end
25
+ #
26
+ # You would do this:
27
+ #
28
+ # hookup { topic.do_something } # Yay!
29
+ def hookup(&definition)
30
+ setup { self.instance_eval(&definition); topic }
31
+ end
32
+
17
33
  def teardown(&definition) (@teardowns << Setup.new(&definition)).last; end
18
34
 
19
35
  def asserts(what, &definition) new_assertion("asserts", what, &definition); end
20
36
  def should(what, &definition) new_assertion("should", what, &definition); end
21
- def asserts_topic; asserts("topic") { topic }; end
37
+ def asserts_topic(what="topic"); asserts(what) { topic }; end
22
38
 
23
39
  def context(description, &definition)
24
40
  @contexts << self.class.new("#{@description} #{description}", self, &definition)
@@ -6,6 +6,7 @@ module Riot
6
6
  @current_context = ""
7
7
  end
8
8
 
9
+ def success?; (@failures + @errors) == 0; end
9
10
  def summarize(&block)
10
11
  started = Time.now
11
12
  yield
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{riot}
8
- s.version = "0.10.10"
8
+ s.version = "0.10.11"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Justin 'Gus' Knowlden"]
@@ -35,6 +35,7 @@ Gem::Specification.new do |s|
35
35
  "lib/riot/assertion_macros/kind_of.rb",
36
36
  "lib/riot/assertion_macros/matches.rb",
37
37
  "lib/riot/assertion_macros/nil.rb",
38
+ "lib/riot/assertion_macros/not_borat.rb",
38
39
  "lib/riot/assertion_macros/raises.rb",
39
40
  "lib/riot/assertion_macros/respond_to.rb",
40
41
  "lib/riot/assertion_macros/same_elements.rb",
@@ -53,6 +54,7 @@ Gem::Specification.new do |s|
53
54
  "test/assertion_macros/kind_of_test.rb",
54
55
  "test/assertion_macros/matching_test.rb",
55
56
  "test/assertion_macros/nil_test.rb",
57
+ "test/assertion_macros/not_borat_test.rb",
56
58
  "test/assertion_macros/raises_test.rb",
57
59
  "test/assertion_macros/respond_to_test.rb",
58
60
  "test/assertion_macros/same_elements_test.rb",
@@ -84,6 +86,7 @@ Gem::Specification.new do |s|
84
86
  "test/assertion_macros/kind_of_test.rb",
85
87
  "test/assertion_macros/matching_test.rb",
86
88
  "test/assertion_macros/nil_test.rb",
89
+ "test/assertion_macros/not_borat_test.rb",
87
90
  "test/assertion_macros/raises_test.rb",
88
91
  "test/assertion_macros/respond_to_test.rb",
89
92
  "test/assertion_macros/same_elements_test.rb",
@@ -0,0 +1,15 @@
1
+ require 'teststrap'
2
+
3
+ context "A not! assertion macro" do
4
+ setup do
5
+ def assert_not(value)
6
+ Riot::Assertion.new("test") { value }.not!
7
+ end
8
+ end
9
+
10
+ assertion_test_passes("when value is false", "does exist ... not!") { assert_not(false) }
11
+ assertion_test_passes("when value is nil", "does exist ... not!") { assert_not(nil) }
12
+ assertion_test_fails("when value is not nil or false", "expected to exist ... not!") do
13
+ assert_not("funny")
14
+ end
15
+ end # A not! assertion macro
@@ -1,4 +1,4 @@
1
- $:.unshift(File.dirname(__FILE__)+"/../../lib")
1
+ $:.unshift(File.dirname(__FILE__) + "/../../lib")
2
2
  require 'benchmark'
3
3
 
4
4
  #
@@ -46,6 +46,7 @@ n = 100 * 100
46
46
  Benchmark.bmbm do |x|
47
47
  x.report("Riot") do
48
48
  Riot.silently!
49
+ Riot.alone!
49
50
  n.times { Riot.run }
50
51
  end
51
52
 
@@ -1,4 +1,4 @@
1
- $:.concat ['./lib']
1
+ $:.unshift(File.dirname(__FILE__) + "/../../lib/")
2
2
  require 'benchmark'
3
3
 
4
4
  #
@@ -62,6 +62,7 @@ n = 100 * 100
62
62
  Benchmark.bmbm do |x|
63
63
  x.report("Riot") do
64
64
  Riot.silently!
65
+ Riot.alone!
65
66
  n.times { Riot.run }
66
67
  end
67
68
 
@@ -87,4 +87,24 @@ context "The asserts_topic shortcut" do
87
87
  (situation = Riot::Situation.new).topic = "bar"
88
88
  topic.equals("bar").run(situation)
89
89
  end.equals([:pass, %Q{is equal to "bar"}])
90
+
91
+ asserts(:to_s).equals("asserts topic")
92
+
93
+ context "with an explicit description" do
94
+ setup { Riot::Context.new("foo") {}.asserts_topic("get some") }
95
+ asserts(:to_s).equals("asserts get some")
96
+ end
97
+
90
98
  end # The asserts_topic shortcut
99
+
100
+ context "Using a hookup" do
101
+ setup do
102
+ situation = Riot::Situation.new
103
+ a_context = Riot::Context.new("foobar") {}
104
+ a_context.setup { "I'm a string" }.run(situation)
105
+ a_context.hookup { topic.size }.run(situation)
106
+ situation.topic
107
+ end
108
+
109
+ asserts_topic.equals("I'm a string")
110
+ end # Using a hookup
@@ -6,6 +6,7 @@ context "A reporter" do
6
6
  def pass(d, message) "passed(#{d}, #{message.inspect})"; end
7
7
  def fail(d, message) "failed(#{d}, #{message})"; end
8
8
  def error(d, e) "errored(#{d}, #{e})"; end
9
+ def results(time); end
9
10
  end.new
10
11
  end
11
12
 
@@ -44,9 +45,23 @@ context "A reporter" do
44
45
 
45
46
  context "instance" do
46
47
  setup { Riot::Reporter.new }
47
-
48
48
  should("return self invoking new") { topic.new }.equals { topic }
49
49
  end
50
+
51
+ context "with no errors or failures" do
52
+ hookup { topic.report("foo", [:pass, nil]) }
53
+ asserts(:success?)
54
+ end
55
+
56
+ context "with failures and no errors" do
57
+ hookup { topic.report("foo", [:fail, "blah"]) }
58
+ asserts(:success?).equals(false)
59
+ end
60
+
61
+ context "with errors and no failures" do
62
+ hookup { topic.report("foo", [:error, Exception.new("boogers")]) }
63
+ asserts(:success?).equals(false)
64
+ end
50
65
  end # A reporter
51
66
 
52
67
  require 'stringio'
@@ -1,7 +1,9 @@
1
- $:.unshift(File.dirname(__FILE__)+"/../lib/")
1
+ $:.unshift(File.dirname(__FILE__) + "/../lib/")
2
2
  require 'riot'
3
3
  Riot.verbose
4
4
 
5
+ Riot.dots if ENV["TM_MODE"]
6
+
5
7
  module Riot
6
8
  module AssertionTestContextMacros
7
9
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.10
4
+ version: 0.10.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin 'Gus' Knowlden
@@ -50,6 +50,7 @@ files:
50
50
  - lib/riot/assertion_macros/kind_of.rb
51
51
  - lib/riot/assertion_macros/matches.rb
52
52
  - lib/riot/assertion_macros/nil.rb
53
+ - lib/riot/assertion_macros/not_borat.rb
53
54
  - lib/riot/assertion_macros/raises.rb
54
55
  - lib/riot/assertion_macros/respond_to.rb
55
56
  - lib/riot/assertion_macros/same_elements.rb
@@ -68,6 +69,7 @@ files:
68
69
  - test/assertion_macros/kind_of_test.rb
69
70
  - test/assertion_macros/matching_test.rb
70
71
  - test/assertion_macros/nil_test.rb
72
+ - test/assertion_macros/not_borat_test.rb
71
73
  - test/assertion_macros/raises_test.rb
72
74
  - test/assertion_macros/respond_to_test.rb
73
75
  - test/assertion_macros/same_elements_test.rb
@@ -121,6 +123,7 @@ test_files:
121
123
  - test/assertion_macros/kind_of_test.rb
122
124
  - test/assertion_macros/matching_test.rb
123
125
  - test/assertion_macros/nil_test.rb
126
+ - test/assertion_macros/not_borat_test.rb
124
127
  - test/assertion_macros/raises_test.rb
125
128
  - test/assertion_macros/respond_to_test.rb
126
129
  - test/assertion_macros/same_elements_test.rb