protest 0.2.1 → 0.2.2

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.
@@ -30,7 +30,7 @@ Protest.
30
30
 
31
31
  Or
32
32
 
33
- rip install git://github.com/foca/protest.git v0.2.1
33
+ rip install git://github.com/foca/protest.git v0.2.2
34
34
 
35
35
  == Assertions
36
36
 
@@ -36,6 +36,10 @@ module Protest
36
36
  end
37
37
  end
38
38
 
39
+ on :test do |report, test|
40
+ report.tests << test
41
+ end
42
+
39
43
  on :start do |report|
40
44
  report.instance_eval { @started_at = Time.now }
41
45
  end
@@ -100,9 +104,13 @@ module Protest
100
104
  @assertions || 0
101
105
  end
102
106
 
107
+ def tests
108
+ @tests ||= []
109
+ end
110
+
103
111
  # Amount ot tests run (whether passed, pending, failed, or errored.)
104
112
  def total_tests
105
- passes.size + failures.size + errors.size + pendings.size
113
+ tests.size
106
114
  end
107
115
 
108
116
  # Seconds taken since the test suite started running
@@ -20,23 +20,20 @@ module Protest
20
20
  end
21
21
 
22
22
  # Run a test and report if it passes, fails, or is pending. Takes the name
23
- # of the test as an argument. You can avoid reporting a passed test by
24
- # passing +false+ as a second argument.
25
- def report(test, report_success=true)
26
- @report.on_test(Test.new(test)) if @report.respond_to?(:on_test)
27
- yield
28
- @report.on_pass(PassedTest.new(test)) if report_success
23
+ # of the test as an argument. By passing +true+ as the second argument, you
24
+ # force any exceptions to be re-raied and the test not reported as a pass
25
+ # after it finishes (for global setup/teardown blocks)
26
+ def report(test, running_global_setup_or_teardown=false)
27
+ @report.on_test(Test.new(test)) if @report.respond_to?(:on_test) && !running_global_setup_or_teardown
28
+ test.run(@report)
29
+ @report.on_pass(PassedTest.new(test)) unless running_global_setup_or_teardown
29
30
  rescue Pending => e
30
31
  @report.on_pending(PendingTest.new(test, e))
31
32
  rescue AssertionFailed => e
32
33
  @report.on_failure(FailedTest.new(test, e))
33
34
  rescue Exception => e
34
35
  @report.on_error(ErroredTest.new(test, e))
35
- end
36
-
37
- def assert(condition, message) #:nodoc:
38
- @report.add_assertion
39
- raise AssertionFailed, message unless condition
36
+ raise if running_global_setup_or_teardown
40
37
  end
41
38
  end
42
39
  end
@@ -27,10 +27,15 @@ module Protest
27
27
  class TestCase
28
28
  # Run all tests in this context. Takes a Report instance in order to
29
29
  # provide output.
30
- def self.run(result)
31
- result.report("#{description} global setup", false) { do_global_setup }
32
- tests.each {|test| test.run(result) }
33
- result.report("#{description} global teardown", false) { do_global_teardown }
30
+ def self.run(runner)
31
+ runner.report(TestWrapper.new(:setup, self), true)
32
+ tests.each {|test| runner.report(test, false) }
33
+ runner.report(TestWrapper.new(:teardown, self), true)
34
+ rescue Exception => e
35
+ # If any exception bubbles up here, then it means it was during the
36
+ # global setup/teardown blocks, so let's just skip the rest of this
37
+ # context.
38
+ return
34
39
  end
35
40
 
36
41
  # Tests added to this context.
@@ -104,7 +109,6 @@ module Protest
104
109
  end
105
110
  end
106
111
 
107
-
108
112
  # Define a new test context nested under the current one. All +setup+ and
109
113
  # +teardown+ blocks defined on the current context will be inherited by the
110
114
  # new context. This method is aliased as +describe+ for your comfort.
@@ -148,23 +152,22 @@ module Protest
148
152
  #
149
153
  # If the test's block is nil, then the test will be marked as pending and
150
154
  # nothing will be run.
151
- def run(runner)
152
- @runner = runner
153
-
154
- runner.report(self) do
155
- pending if test.nil?
155
+ def run(report)
156
+ @report = report
157
+ pending if test.nil?
156
158
 
157
- setup
158
- instance_eval(&test)
159
- teardown
160
- end
159
+ setup
160
+ instance_eval(&test)
161
+ teardown
162
+ @report = nil
161
163
  end
162
164
 
163
165
  # Ensure a condition is met. This will raise AssertionFailed if the
164
166
  # condition isn't met. You can override the default failure message
165
167
  # by passing it as an argument.
166
168
  def assert(condition, message="Expected condition to be satisfied")
167
- @runner.assert(condition, message)
169
+ @report.add_assertion
170
+ raise AssertionFailed, message unless condition
168
171
  end
169
172
 
170
173
  # Provided for Test::Unit compatibility, this lets you include
@@ -217,5 +220,22 @@ module Protest
217
220
  def self.inherited(child)
218
221
  Protest.add_test_case(child)
219
222
  end
223
+
224
+ # Provides the TestCase API for global setup/teardown blocks, so they can be
225
+ # "faked" as tests into the reporter (they aren't counted towards the total
226
+ # number of tests but they could count towards the number of failures/errors.)
227
+ class TestWrapper #:nodoc:
228
+ attr_reader :name
229
+
230
+ def initialize(type, test_case)
231
+ @type = type
232
+ @test = test_case
233
+ @name = "Global #{@type} for #{test_case.description}"
234
+ end
235
+
236
+ def run(report)
237
+ @test.send("do_global_#{@type}")
238
+ end
239
+ end
220
240
  end
221
241
  end
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "protest"
3
- s.version = "0.2.1"
4
- s.date = "2009-09-11"
3
+ s.version = "0.2.2"
4
+ s.date = "2009-09-17"
5
5
 
6
6
  s.description = "Protest is a tiny, simple, and easy-to-extend test framework"
7
7
  s.summary = s.description
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Nicol\xC3\xA1s Sanguinetti"
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-11 00:00:00 -03:00
12
+ date: 2009-09-17 00:00:00 -03:00
13
13
  default_executable:
14
14
  dependencies: []
15
15