riot 0.9.12 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/.gitignore +1 -0
  2. data/README.markdown +37 -45
  3. data/VERSION +1 -1
  4. data/lib/riot.rb +27 -18
  5. data/lib/riot/assertion_macros.rb +63 -53
  6. data/lib/riot/context.rb +26 -36
  7. data/lib/riot/reporter.rb +77 -0
  8. data/lib/riot/runnable.rb +50 -0
  9. data/lib/riot/situation.rb +6 -3
  10. data/riot.gemspec +30 -21
  11. data/test/assertion_macros/assigns_test.rb +24 -0
  12. data/test/assertion_macros/equals_test.rb +18 -0
  13. data/test/assertion_macros/exists_test.rb +17 -0
  14. data/test/assertion_macros/kind_of_test.rb +17 -0
  15. data/test/assertion_macros/matching_test.rb +12 -0
  16. data/test/assertion_macros/nil_test.rb +13 -0
  17. data/test/assertion_macros/raises_test.rb +33 -0
  18. data/test/assertion_macros/respond_to_test.rb +12 -0
  19. data/test/assertion_macros/same_elements_test.rb +17 -0
  20. data/test/assertion_test.rb +25 -22
  21. data/test/benchmark/riot_vs_minitest.rb +8 -8
  22. data/test/benchmark/same_elements_vs_set.rb +41 -0
  23. data/test/benchmark/simple_context_and_assertions.rb +8 -8
  24. data/test/context_test.rb +68 -83
  25. data/test/report_test.rb +44 -0
  26. data/test/setup_test.rb +17 -0
  27. data/test/situation_test.rb +16 -0
  28. data/test/teststrap.rb +31 -0
  29. metadata +30 -21
  30. data/lib/riot/assertion.rb +0 -37
  31. data/lib/riot/errors.rb +0 -15
  32. data/lib/riot/report.rb +0 -82
  33. data/test/assertion_macros/assertion_macro_assigns_test.rb +0 -40
  34. data/test/assertion_macros/assertion_macro_equals_test.rb +0 -13
  35. data/test/assertion_macros/assertion_macro_exists_test.rb +0 -17
  36. data/test/assertion_macros/assertion_macro_kind_of_test.rb +0 -13
  37. data/test/assertion_macros/assertion_macro_matching_test.rb +0 -17
  38. data/test/assertion_macros/assertion_macro_nil_test.rb +0 -13
  39. data/test/assertion_macros/assertion_macro_raises_test.rb +0 -43
  40. data/test/assertion_macros/assertion_macro_respond_to_test.rb +0 -16
@@ -1,37 +0,0 @@
1
- module Riot
2
- class Assertion
3
- attr_reader :raised, :to_s, :description, :situation
4
- def initialize(description, situation, &assertion_block)
5
- @description = @to_s = description
6
- @situation = situation
7
- run(situation, &assertion_block)
8
- end
9
-
10
- def actual
11
- unfail_if_default_failure_recorded
12
- @actual
13
- end
14
-
15
- def fail(message)
16
- @failure = Failure.new("#{description}: #{message}") unless errored?
17
- end
18
-
19
- def passed?; !(failed? || errored?); end
20
- def failed?; !@failure.nil?; end
21
- def errored?; !@raised.nil?; end
22
- def result; @failure || @raised; end
23
- private
24
- def run(situation, &assertion_block)
25
- @actual = situation.instance_eval(&assertion_block)
26
- @default_failure = fail("expected true, not #{@actual.inspect}") unless @actual == true
27
- rescue Failure => e
28
- @failure = e
29
- rescue Exception => e
30
- @raised = Error.new("#{description}: errored with #{e}", e)
31
- end
32
-
33
- def unfail_if_default_failure_recorded
34
- @default_failure = @failure = nil if @default_failure
35
- end
36
- end # Assertion
37
- end # Riot
@@ -1,15 +0,0 @@
1
- module Riot
2
- class Failure < Exception
3
- def print_stacktrace?; false; end
4
- end
5
-
6
- class Error < Failure
7
- attr_reader :original_exception
8
- def initialize(message, raised)
9
- super(message)
10
- set_backtrace(raised.backtrace)
11
- @original_exception = raised
12
- end
13
- def print_stacktrace?; true; end
14
- end
15
- end # Riot
@@ -1,82 +0,0 @@
1
- require 'stringio'
2
-
3
- module Riot
4
- class Report
5
- attr_reader :bad_results, :passes, :failures, :errors, :time_taken
6
- def initialize
7
- @bad_results = []
8
- @passes, @failures, @errors, @time_taken = 0, 0, 0, 0.0
9
- end
10
-
11
- def passed?; failures + errors == 0; end
12
- def assertions; passes + failures + errors; end
13
-
14
- def time(&block)
15
- @start = Time.now
16
- result = yield
17
- @time_taken += (Time.now - @start).to_f
18
- result
19
- end
20
-
21
- def process_assertion(assertion)
22
- if assertion.passed?
23
- passed
24
- else
25
- send((assertion.errored? ? :errored : :failed), assertion.result)
26
- end
27
- end
28
-
29
- def passed; @passes += 1; end
30
-
31
- def failed(failure)
32
- @failures += 1
33
- @bad_results << failure
34
- end
35
-
36
- def errored(error)
37
- @errors += 1
38
- @bad_results << error
39
- end
40
- end # Report
41
-
42
- class NilReport < Report
43
- def results; end
44
- def time(&block); yield; end
45
- end # NilReport
46
-
47
- class TextReport < Report
48
- def initialize(writer=nil)
49
- super()
50
- @writer ||= STDOUT
51
- end
52
-
53
- def passed
54
- super && @writer.print('.')
55
- end
56
-
57
- def failed(failure)
58
- super && @writer.print('F')
59
- end
60
-
61
- def errored(error)
62
- super && @writer.print('E')
63
- end
64
-
65
- def results
66
- @writer.puts "\n\n"
67
- print_bad_results
68
- format = "%d assertions, %d failures, %d errors in %s seconds"
69
- @writer.puts format % [assertions, failures, errors, ("%0.6f" % time_taken)]
70
- end
71
- private
72
- def print_bad_results
73
- bad_results.each_with_index do |result, idx|
74
- @writer.puts format_result(idx + 1, result)
75
- @writer.puts " " + result.backtrace.join("\n ") if result.print_stacktrace?
76
- @writer.puts "\n"
77
- end
78
- end
79
-
80
- def format_result(idx, result) "#%d - %s" % [idx, result.to_s]; end
81
- end # TextReport
82
- end # Riot
@@ -1,40 +0,0 @@
1
- require 'teststrap'
2
-
3
- context "assigns assertion" do
4
- setup do
5
- @fake_situation = Riot::Situation.new
6
- object_with_instance_variables = Riot::Situation.new
7
- object_with_instance_variables.instance_eval { @foo = "bar"; @bar = nil}
8
- object_with_instance_variables
9
- end
10
-
11
- asserts("an instance variable was assigned") do
12
- test_object = topic
13
- Riot::Assertion.new("duh", @fake_situation) { test_object }.assigns(:foo)
14
- end
15
-
16
- asserts("an instance variable was never assigned") do
17
- test_object = topic
18
- Riot::Assertion.new("foo", @fake_situation) { test_object }.assigns(:baz)
19
- end.kind_of(Riot::Failure)
20
-
21
- asserts "an instance variable was defined with nil value" do
22
- test_object = topic
23
- Riot::Assertion.new("foo", @fake_situation) { test_object }.assigns(:bar).message
24
- end.matches(/expected @bar to be assigned a value/)
25
-
26
- asserts("an instance variable was assigned a specific value") do
27
- test_object = topic
28
- Riot::Assertion.new("duh", @fake_situation) { test_object }.assigns(:foo, "bar")
29
- end
30
-
31
- asserts("failure when instance never assigned even when a value is expected") do
32
- test_object = topic
33
- Riot::Assertion.new("duh", @fake_situation) { test_object }.assigns(:bar, "bar").message
34
- end.matches(/expected @bar to be assigned a value/)
35
-
36
- asserts("failure when expected value is not assigned to variable with a value") do
37
- test_object = topic
38
- Riot::Assertion.new("duh", @fake_situation) { test_object }.assigns(:foo, "baz").message
39
- end.matches(/expected @foo to be equal to 'baz', not 'bar'/)
40
- end # assigns assertion
@@ -1,13 +0,0 @@
1
- require 'teststrap'
2
-
3
- context "equals assertion:" do
4
- setup { Riot::Situation.new }
5
-
6
- asserts "result equals expectation" do
7
- Riot::Assertion.new("i will pass", topic) { "foo bar" }.equals("foo bar")
8
- end
9
-
10
- should "raise a Failure if results don't equal each other" do
11
- Riot::Assertion.new("failure", topic) { "bar" }.equals("foo")
12
- end.kind_of(Riot::Failure)
13
- end # equals assertion
@@ -1,17 +0,0 @@
1
- require 'teststrap'
2
-
3
- context "nil assertion:" do
4
- setup { Riot::Situation.new }
5
-
6
- asserts("result has a value") do
7
- Riot::Assertion.new("foo", topic) { "foo" }.exists
8
- end
9
-
10
- asserts("empty string is considered a value") do
11
- Riot::Assertion.new("foo", topic) { "" }.exists
12
- end
13
-
14
- should "raise a Failure if value is nil" do
15
- Riot::Assertion.new("foo", topic) { nil }.exists
16
- end.kind_of(Riot::Failure)
17
- end # nil assertion
@@ -1,13 +0,0 @@
1
- require 'teststrap'
2
-
3
- context "kind_of assertion:" do
4
- setup { Riot::Situation.new }
5
-
6
- asserts "specific result is a kind of String" do
7
- Riot::Assertion.new("foo", topic) { "a" }.kind_of(String)
8
- end
9
-
10
- should "raise a Failure if not a kind of String" do
11
- Riot::Assertion.new("foo", topic) { 0 }.kind_of(String)
12
- end.kind_of(Riot::Failure)
13
- end # kind_of assertion
@@ -1,17 +0,0 @@
1
- require 'teststrap'
2
-
3
- context "matching assertion:" do
4
- setup { Riot::Situation.new }
5
-
6
- asserts "result matches expression" do
7
- Riot::Assertion.new("foo", topic) { "a" }.matches(%r[.])
8
- end.equals(0)
9
-
10
- should "raise a Failure if result does not match" do
11
- Riot::Assertion.new("foo", topic) { "" }.matches(%r[.])
12
- end.kind_of(Riot::Failure)
13
-
14
- should "return the result of a matching operation" do
15
- Riot::Assertion.new("foo", topic) { "a" }.matches("a")
16
- end.equals(0)
17
- end # maching assertion
@@ -1,13 +0,0 @@
1
- require 'teststrap'
2
-
3
- context "nil assertion:" do
4
- setup { Riot::Situation.new }
5
-
6
- asserts("result is nil") do
7
- Riot::Assertion.new("foo", topic) { nil }.nil
8
- end
9
-
10
- should "raise a Failure if not nil" do
11
- Riot::Assertion.new("foo", topic) { "a" }.nil
12
- end.kind_of(Riot::Failure)
13
- end # nil assertion
@@ -1,43 +0,0 @@
1
- require 'teststrap'
2
-
3
- class MyException < Exception; end
4
-
5
- context "raises assertion:" do
6
- setup { Riot::Situation.new }
7
-
8
- should("raise an Exception") { raise Exception }.raises(Exception)
9
-
10
- should "fail if nothing was raised" do
11
- assertion = Riot::Assertion.new("foo", topic) { "barf" }
12
- assertion.raises(Exception)
13
- assertion.result.message
14
- end.matches(/should have raised Exception, but raised nothing/)
15
-
16
- should "fail if Exception classes do not match" do
17
- Riot::Assertion.new("foo", topic) { raise MyException }.raises(Exception)
18
- end.kind_of(Riot::Failure)
19
-
20
- should "pass if provided message equals expectation" do
21
- Riot::Assertion.new("foo", topic) { raise Exception, "I'm a nerd" }.raises(Exception, "I'm a nerd")
22
- end
23
-
24
- should "fail if provided message does not equal expectation" do
25
- Riot::Assertion.new("foo", topic) { raise(Exception, "I'm a nerd") }.raises(Exception, "But I'm not")
26
- end.kind_of(Riot::Failure)
27
-
28
- should "pass if provided message matches expectation" do
29
- Riot::Assertion.new("foo", topic) { raise(Exception, "I'm a nerd") }.raises(Exception, /nerd/)
30
- end
31
-
32
- should "fail if provided message does not match expectation" do
33
- Riot::Assertion.new("foo", topic) { raise(Exception, "I'm a nerd") }.raises(Exception, /foo/)
34
- end.kind_of(Riot::Failure)
35
-
36
- should "pass if provided message as array equals expectation" do
37
- Riot::Assertion.new("foo", topic) { raise(Exception, ["foo", "bar"]) }.raises(Exception, "foobar")
38
- end
39
-
40
- should "pass if provided message as array matches expectation" do
41
- Riot::Assertion.new("foo", topic) { raise(Exception, ["foo", "bar"]) }.raises(Exception, /oba/)
42
- end
43
- end # raises assertion
@@ -1,16 +0,0 @@
1
- require 'teststrap'
2
-
3
- context "respond to" do
4
- setup do
5
- Riot::Situation.new
6
- end
7
-
8
- should "pass when object responds to expected method" do
9
- Riot::Assertion.new("foo", topic) { "foo" }.respond_to(:each_byte)
10
- end
11
-
12
- should "fail when object does not respond to expected method" do
13
- Riot::Assertion.new("foo", topic) { "foo" }.respond_to(:goofballs).message
14
- end.equals("foo: expected method :goofballs is not defined")
15
-
16
- end # respond to