riot 0.10.9 → 0.10.10

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.
Files changed (39) hide show
  1. data/CHANGELOG +46 -0
  2. data/README.markdown +53 -16
  3. data/Rakefile +8 -0
  4. data/VERSION +1 -1
  5. data/lib/riot.rb +1 -1
  6. data/lib/riot/assertion.rb +18 -31
  7. data/lib/riot/assertion_macro.rb +35 -0
  8. data/lib/riot/assertion_macros/any.rb +12 -0
  9. data/lib/riot/assertion_macros/assigns.rb +27 -0
  10. data/lib/riot/assertion_macros/empty.rb +13 -0
  11. data/lib/riot/assertion_macros/equals.rb +18 -0
  12. data/lib/riot/assertion_macros/exists.rb +15 -0
  13. data/lib/riot/assertion_macros/includes.rb +17 -0
  14. data/lib/riot/assertion_macros/kind_of.rb +16 -0
  15. data/lib/riot/assertion_macros/matches.rb +17 -0
  16. data/lib/riot/assertion_macros/nil.rb +12 -0
  17. data/lib/riot/assertion_macros/raises.rb +31 -0
  18. data/lib/riot/assertion_macros/respond_to.rb +16 -0
  19. data/lib/riot/assertion_macros/same_elements.rb +14 -0
  20. data/lib/riot/assertion_macros/size.rb +15 -0
  21. data/lib/riot/context.rb +9 -17
  22. data/lib/riot/reporter.rb +25 -21
  23. data/riot.gemspec +17 -3
  24. data/test/assertion_macros/any_test.rb +2 -2
  25. data/test/assertion_macros/equals_test.rb +4 -4
  26. data/test/assertion_macros/exists_test.rb +2 -2
  27. data/test/assertion_macros/includes_test.rb +1 -1
  28. data/test/assertion_macros/kind_of_test.rb +1 -1
  29. data/test/assertion_macros/matching_test.rb +1 -1
  30. data/test/assertion_macros/nil_test.rb +1 -1
  31. data/test/assertion_macros/raises_test.rb +3 -3
  32. data/test/assertion_macros/respond_to_test.rb +1 -1
  33. data/test/assertion_macros/size_test.rb +17 -6
  34. data/test/assertion_test.rb +11 -6
  35. data/test/context_test.rb +2 -54
  36. data/test/report_test.rb +7 -2
  37. data/test/teststrap.rb +12 -3
  38. metadata +17 -3
  39. data/lib/riot/assertion_macros.rb +0 -136
@@ -6,7 +6,7 @@ context "An assertion" do
6
6
  asserts("to_s") { topic.to_s == "foo" }
7
7
 
8
8
  asserts(":pass is returned when evaluated") do
9
- topic.run(Riot::Situation.new) == [:pass]
9
+ topic.run(Riot::Situation.new) == [:pass, nil]
10
10
  end
11
11
  end # that is passing
12
12
 
@@ -32,7 +32,7 @@ context "An assertion" do
32
32
  end
33
33
  end # that is erroring
34
34
 
35
- context "with no block to provide the actual" do
35
+ context "with no block to provide the actual value" do
36
36
  setup do
37
37
  @situation = Riot::Situation.new
38
38
  @situation.topic = "hello"
@@ -41,8 +41,8 @@ context "An assertion" do
41
41
  should("uses block returning topic as default") do
42
42
  topic.equals("hello")
43
43
  result = topic.run(@situation)
44
- end.equals([:pass])
45
- end
44
+ end.equals([:pass, %Q{is equal to "hello"}])
45
+ end # with no block to provide the actual value
46
46
 
47
47
  context "with block expectation" do
48
48
  setup do
@@ -54,11 +54,16 @@ context "An assertion" do
54
54
  should("use block returning topic as default") do
55
55
  topic.equals { "hello" }
56
56
  result = topic.run(@situation)
57
- end.equals([:pass])
57
+ end.equals([:pass, %Q{is equal to "hello"}])
58
58
 
59
59
  asserts("block expectation has access to the situation items") do
60
60
  topic.equals { @topic }
61
61
  topic.run(@situation)
62
- end.equals([:pass])
62
+ end.equals([:pass, %Q{is equal to "hello"}])
63
+ end # with block expectation
64
+
65
+ context "with symbolic description" do
66
+ setup { "foo" }
67
+ asserts(:upcase).equals("FOO")
63
68
  end
64
69
  end # An assertion block
@@ -24,7 +24,7 @@ context "Defining a context with multiple setups" do
24
24
  end
25
25
  @a_context.run(MockReporter.new)
26
26
  end
27
- asserts("has setups") { @a_context.setups.count }.equals(2)
27
+ asserts("has setups") { @a_context.setups.size }.equals(2)
28
28
  asserts("all tests pass") { topic.passes == 1 }
29
29
  end # Defining a context with multiple setups
30
30
 
@@ -86,57 +86,5 @@ context "The asserts_topic shortcut" do
86
86
  should("return the actual topic as the result of evaling the assertion") do
87
87
  (situation = Riot::Situation.new).topic = "bar"
88
88
  topic.equals("bar").run(situation)
89
- end.equals([:pass])
89
+ end.equals([:pass, %Q{is equal to "bar"}])
90
90
  end # The asserts_topic shortcut
91
-
92
- context "Setting assertion extensions" do
93
- fake_mod_one, fake_mod_two = Module.new, Module.new
94
-
95
- setup do
96
- Riot::Context.new("foo") do
97
- extend_assertions fake_mod_one, fake_mod_two
98
- end.asserts_topic
99
- end
100
-
101
- should("still return an Assertion") { topic }.kind_of(Riot::Assertion)
102
-
103
- should("have included the given assertion extension modules in the assertion") do
104
- topic.class.included_modules.include?(fake_mod_one) && topic.class.included_modules.include?(fake_mod_two)
105
- end
106
-
107
- context "involving subcontexts without the subcontext extending assertions" do
108
- assertion_one = assertion_two = nil
109
-
110
- setup do
111
- Riot::Context.new "bleh" do
112
- extend_assertions Module.new
113
- assertion_one = asserts_topic
114
- context("foo") { assertion_two = asserts_topic }
115
- end
116
- end
117
-
118
- should "not create separate instances of the assertion class in subcontexts" do
119
- assertion_one && assertion_two && assertion_one.class.object_id == assertion_two.class.object_id
120
- end
121
- end # involving subcontexts without the subcontext extending assertions
122
-
123
- context "involving subcontexts with the subcontext extending assertions" do
124
- assertion_one = assertion_two = nil
125
-
126
- setup do
127
- Riot::Context.new "bah" do
128
- extend_assertions Module.new
129
- assertion_one = asserts_topic
130
- context("meh") do
131
- extend_assertions Module.new
132
- assertion_two = asserts_topic
133
- end
134
- end
135
- end
136
-
137
- should "create separate instances of the assertion class in subcontexts" do
138
- assertion_one && assertion_two && assertion_one.class.object_id != assertion_two.class.object_id
139
- end
140
-
141
- end # involving subcontexts with the subcontext extending assertions
142
- end # Setting assertion extensions
@@ -3,7 +3,7 @@ require 'teststrap'
3
3
  context "A reporter" do
4
4
  setup do
5
5
  Class.new(Riot::Reporter) do
6
- def pass(d) "passed(#{d})"; end
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
9
  end.new
@@ -18,7 +18,7 @@ context "A reporter" do
18
18
 
19
19
  asserts("description sent to #pass") do
20
20
  topic.report("hi mom", [:pass])
21
- end.equals("passed(hi mom)")
21
+ end.equals("passed(hi mom, nil)")
22
22
 
23
23
  # fail
24
24
 
@@ -56,6 +56,11 @@ context "StoryReporter" do
56
56
  Riot::StoryReporter.new(@out)
57
57
  end
58
58
 
59
+ asserts("success message is stripped if nil") do
60
+ topic.pass("foo", nil)
61
+ ColorHelper.uncolored(@out.string)
62
+ end.equals(" + foo\n")
63
+
59
64
  context 'reporting on an empty context' do
60
65
  setup do
61
66
  context = Riot::Context.new('empty context') do
@@ -1,13 +1,16 @@
1
1
  $:.unshift(File.dirname(__FILE__)+"/../lib/")
2
2
  require 'riot'
3
+ Riot.verbose
3
4
 
4
5
  module Riot
5
6
  module AssertionTestContextMacros
6
7
 
7
- def assertion_test_passes(description, &block)
8
+ def assertion_test_passes(description, success_message=nil, &block)
8
9
  context(description) do
9
10
  setup(&block)
10
- asserts("passes") { topic.run(Riot::Situation.new) }.equals([:pass])
11
+ setup { topic.run(Riot::Situation.new) }
12
+ asserts("pass") { topic.first }.equals(:pass)
13
+ asserts("success message") { topic.last }.equals(success_message)
11
14
  end
12
15
  end
13
16
 
@@ -25,8 +28,14 @@ end # Riot
25
28
  Riot::Context.instance_eval { include Riot::AssertionTestContextMacros }
26
29
 
27
30
  class MockReporter < Riot::Reporter
28
- def pass(description); end
31
+ def pass(description, message); end
29
32
  def fail(description, message); end
30
33
  def error(description, e); end
31
34
  def results; end
32
35
  end
36
+
37
+ class ColorHelper
38
+ require 'rubygems'
39
+ require 'term/ansicolor'
40
+ extend Term::ANSIColor
41
+ end
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.9
4
+ version: 0.10.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin 'Gus' Knowlden
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-15 00:00:00 -06:00
12
+ date: 2009-12-29 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -32,6 +32,7 @@ extra_rdoc_files:
32
32
  - README.markdown
33
33
  files:
34
34
  - .gitignore
35
+ - CHANGELOG
35
36
  - MIT-LICENSE
36
37
  - README.markdown
37
38
  - Rakefile
@@ -39,7 +40,20 @@ files:
39
40
  - VERSION
40
41
  - lib/riot.rb
41
42
  - lib/riot/assertion.rb
42
- - lib/riot/assertion_macros.rb
43
+ - lib/riot/assertion_macro.rb
44
+ - lib/riot/assertion_macros/any.rb
45
+ - lib/riot/assertion_macros/assigns.rb
46
+ - lib/riot/assertion_macros/empty.rb
47
+ - lib/riot/assertion_macros/equals.rb
48
+ - lib/riot/assertion_macros/exists.rb
49
+ - lib/riot/assertion_macros/includes.rb
50
+ - lib/riot/assertion_macros/kind_of.rb
51
+ - lib/riot/assertion_macros/matches.rb
52
+ - lib/riot/assertion_macros/nil.rb
53
+ - lib/riot/assertion_macros/raises.rb
54
+ - lib/riot/assertion_macros/respond_to.rb
55
+ - lib/riot/assertion_macros/same_elements.rb
56
+ - lib/riot/assertion_macros/size.rb
43
57
  - lib/riot/context.rb
44
58
  - lib/riot/reporter.rb
45
59
  - lib/riot/runnable.rb
@@ -1,136 +0,0 @@
1
- module Riot
2
- class Assertion
3
- # Asserts that the result of the test equals the expected value. Using the +===+ operator to assert
4
- # equality.
5
- # asserts("test") { "foo" }.equals("foo")
6
- # should("test") { "foo" }.equals("foo")
7
- # asserts("test") { "foo" }.equals { "foo" }
8
- assertion(:equals) do |actual, expected|
9
- expected === actual ? pass : fail("expected #{expected.inspect}, not #{actual.inspect}")
10
- end
11
-
12
- # Asserts that the result of the test is nil
13
- # asserts("test") { nil }.nil
14
- # should("test") { nil }.nil
15
- assertion(:nil) do |actual|
16
- actual.nil? ? pass : fail("expected nil, not #{actual.inspect}")
17
- end
18
-
19
- # Asserts that the result of the test is a non-nil value. This is useful in the case where you don't want
20
- # to translate the result of the test into a boolean value
21
- # asserts("test") { "foo" }.exists
22
- # should("test") { 123 }.exists
23
- # asserts("test") { "" }.exists
24
- # asserts("test") { nil }.exists # This would fail
25
- assertion(:exists) do |actual|
26
- !actual.nil? ? pass : fail("expected a non-nil value")
27
- end
28
-
29
- # Asserts that the result of the test is an object that is a kind of the expected type
30
- # asserts("test") { "foo" }.kind_of(String)
31
- # should("test") { "foo" }.kind_of(String)
32
- assertion(:kind_of) do |actual, expected|
33
- actual.kind_of?(expected) ? pass : fail("expected kind of #{expected}, not #{actual.class.inspect}")
34
- end
35
-
36
- # Asserts that an instance variable is defined for the result of the assertion. Value of instance
37
- # variable is expected to not be nil
38
- # setup { User.new(:email => "foo@bar.baz") }
39
- # topic.assigns(:email)
40
- #
41
- # If a value is provided in addition to the variable name, the actual value of the instance variable
42
- # must equal the expected value
43
- # setup { User.new(:email => "foo@bar.baz") }
44
- # topic.assigns(:email, "foo@bar.baz")
45
- assertion(:assigns) do |actual, *expectings|
46
- variable, expected_value = expectings
47
- variable_name = "@#{variable}"
48
- actual_value = actual.instance_variable_defined?(variable_name) ? actual.instance_variable_get(variable_name) : nil
49
- if actual_value.nil?
50
- fail("expected @#{variable} to be assigned a value")
51
- elsif !expected_value.nil? && expected_value != actual_value
52
- fail(%Q[expected @#{variable} to be equal to #{expected_value.inspect}, not #{actual_value.inspect}])
53
- else
54
- pass
55
- end
56
- end
57
-
58
- # Asserts that the result of the test equals matches against the proved expression
59
- # asserts("test") { "12345" }.matches(/\d+/)
60
- # should("test") { "12345" }.matches(/\d+/)
61
- assertion(:matches) do |actual, expected|
62
- expected = %r[#{Regexp.escape(expected)}] if expected.kind_of?(String)
63
- actual =~ expected ? pass : fail("expected #{expected.inspect} to match #{actual.inspect}")
64
- end
65
-
66
- # Asserts that the result of the test is an object that responds to the given method
67
- # asserts("test") { "foo" }.respond_to(:to_s)
68
- # should("test") { "foo" }.respond_to(:to_s)
69
- assertion(:respond_to) do |actual, expected|
70
- actual.respond_to?(expected) ? pass : fail("expected method #{expected.inspect} is not defined")
71
- end
72
-
73
- # Asserts that two arrays contain the same elements, the same number of times.
74
- # asserts("test") { ["foo", "bar"] }.same_elements(["bar", "foo"])
75
- # should("test") { ["foo", "bar"] }.same_elements(["bar", "foo"])
76
- assertion(:same_elements) do |actual, expected|
77
- require 'set'
78
- same = (Set.new(expected) == Set.new(actual))
79
- same ? pass : fail("expected elements #{expected.inspect} to match #{actual.inspect}")
80
- end
81
-
82
- # Asserts that the test raises the expected Exception
83
- # asserts("test") { raise My::Exception }.raises(My::Exception)
84
- # should("test") { raise My::Exception }.raises(My::Exception)
85
- #
86
- # You can also check to see if the provided message equals or matches your expectations. The message
87
- # from the actual raised exception will be converted to a string before any comparison is executed.
88
- # asserts("test") { raise My::Exception, "Foo" }.raises(My::Exception, "Foo")
89
- # asserts("test") { raise My::Exception, "Foo Bar" }.raises(My::Exception, /Bar/)
90
- assertion(:raises, expect_exception=true) do |actual_exception, expected_class, expected_message|
91
- actual_message = actual_exception && actual_exception.message
92
- if actual_exception.nil?
93
- fail("should have raised #{expected_class}, but raised nothing")
94
- elsif expected_class != actual_exception.class
95
- fail("should have raised #{expected_class}, not #{actual_exception.class}")
96
- elsif expected_message && !(actual_message.to_s =~ %r[#{expected_message}])
97
- fail("expected #{expected_message.inspect} for message, not #{actual_message.inspect}")
98
- else
99
- pass
100
- end
101
- end
102
-
103
- # Asserts the result is empty
104
- # asserts("a string") { "" }.empty
105
- # asserts("an array") { [] }.empty
106
- # asserts("a hash") { Hash.new }.empty
107
- assertion(:empty) do |actual|
108
- actual.length == 0 ? pass : fail("expected #{actual.inspect} to be empty")
109
- end
110
-
111
- # Asserts the result has items
112
- # asserts("an array") { [1] }.any
113
- # asserts("a hash") { {:name => 'washington'} }.any
114
- assertion(:any) do |actual|
115
- actual.any? ? pass : fail("expected #{actual.inspect} to have items")
116
- end
117
-
118
- # Asserts that result's size is as expected. Expected size can be specified as
119
- # a number or a range.
120
- # asserts("a string") { 'washington' }.size(9..12)
121
- # asserts("an array") { [1, 2, 3] }.size(3)
122
- # asserts("a hash") { {:name => 'washington'} }.size(1)
123
- assertion(:size) do |actual, expected|
124
- expected === actual.size ? pass : fail("size of #{actual.inspect} expected to be #{expected} but is #{actual.size}")
125
- end
126
-
127
- # Asserts the result contains the expected element
128
- # asserts("a string") { "world" }.includes('o')
129
- # asserts("an array") { [1,2,3] }.includes(2)
130
- # asserts("a range") { (1..15) }.includes(10)
131
- assertion(:includes) do |actual, expected|
132
- actual.include?(expected) ? pass : fail("expected #{actual.inspect} to include #{expected.inspect}")
133
- end
134
-
135
- end # Assertion
136
- end # Riot