protest 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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