protest 0.2.2 → 0.2.3
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.
- data/README.rdoc +34 -24
- data/lib/protest.rb +14 -0
- data/lib/protest/rails.rb +20 -2
- data/lib/protest/test_case.rb +10 -3
- data/lib/protest/tests.rb +1 -1
- data/lib/protest/utils/backtrace_filter.rb +12 -6
- data/protest.gemspec +3 -3
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -8,11 +8,11 @@
|
|
8
8
|
end
|
9
9
|
|
10
10
|
test "has a name" do
|
11
|
-
|
11
|
+
assert_equal "John Doe", @user.name
|
12
12
|
end
|
13
13
|
|
14
14
|
test "has an email" do
|
15
|
-
|
15
|
+
assert_equal "john@example.org", @user.email
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -30,23 +30,7 @@ Protest.
|
|
30
30
|
|
31
31
|
Or
|
32
32
|
|
33
|
-
rip install git://github.com/foca/protest.git v0.2.
|
34
|
-
|
35
|
-
== Assertions
|
36
|
-
|
37
|
-
You probably wonder why the above example doesn't have any assertion other than
|
38
|
-
+assert+. Where's +assert_equal+, right? Well, the idea is to keep it slim. If
|
39
|
-
you want to use more assertions, you're free to define your own. You can also
|
40
|
-
use all the assertions provided by Test::Unit, by just including them:
|
41
|
-
|
42
|
-
require "test/unit/assertions"
|
43
|
-
|
44
|
-
class Protest::TestCase
|
45
|
-
include Test::Unit::Assertions
|
46
|
-
end
|
47
|
-
|
48
|
-
You could also define rspec-like matchers if you like that. See +matchers.rb+ in
|
49
|
-
the examples directory for an example.
|
33
|
+
rip install git://github.com/foca/protest.git v0.2.3
|
50
34
|
|
51
35
|
== Setup and teardown
|
52
36
|
|
@@ -131,16 +115,42 @@ Or you can call the +pending+ method from inside your test.
|
|
131
115
|
end
|
132
116
|
end
|
133
117
|
|
118
|
+
== Custom assertions
|
119
|
+
|
120
|
+
By default Protest bundles all the assertions defined in Test::Unit (it
|
121
|
+
literally requires them), so check its documentation for all the goodness.
|
122
|
+
|
123
|
+
If you want to add assertions, just define methods that rely on +assert+ or
|
124
|
+
+assert_block+. The former takes a boolean and an optional error message as
|
125
|
+
arguments, while the latter takes an optional error message as an argument and
|
126
|
+
a block. The assertions is considered to fail if the block evaluates to neither
|
127
|
+
+false+ nor +nil+.
|
128
|
+
|
129
|
+
For example:
|
130
|
+
|
131
|
+
module AwesomenessAssertions
|
132
|
+
def assert_awesomeness(object)
|
133
|
+
assert object.awesome?, "#{object.inspect} is not awesome enough"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
class Protest::TestCase
|
138
|
+
include AwesomenessAssertions
|
139
|
+
end
|
140
|
+
|
141
|
+
You could also define rspec-like matchers if you like that style. See
|
142
|
+
<tt>matchers.rb</tt> in the examples directory for an example.
|
143
|
+
|
134
144
|
== Reports
|
135
145
|
|
136
146
|
Protest can report the output of a test suite in many ways. The library ships
|
137
|
-
with a
|
138
|
-
default.
|
147
|
+
with a <tt>:progress</tt> report, and a <tt>:documentation</tt> report,
|
148
|
+
<tt>:progress</tt> being the default.
|
139
149
|
|
140
150
|
=== Progress report
|
141
151
|
|
142
|
-
|
143
|
-
|
152
|
+
This is the default option, but you can force this by calling
|
153
|
+
<tt>Protest.report_with(:progress)</tt>.
|
144
154
|
|
145
155
|
The progress report will output the "classic" Test::Unit output of periods for
|
146
156
|
passing tests, "F" for failing assertions, "E" for unrescued exceptions, and
|
@@ -163,7 +173,7 @@ in that context, one per line. For example:
|
|
163
173
|
end
|
164
174
|
end
|
165
175
|
|
166
|
-
Will output, when run with the
|
176
|
+
Will output, when run with the <tt>:documentation</tt> report:
|
167
177
|
|
168
178
|
A user
|
169
179
|
- has a name (Not Yet Implemented)
|
data/lib/protest.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
module Protest
|
2
|
+
VERSION = "0.2.3"
|
3
|
+
|
2
4
|
# Exception raised when an assertion fails. See TestCase#assert
|
3
5
|
class AssertionFailed < StandardError; end
|
4
6
|
|
@@ -63,6 +65,17 @@ module Protest
|
|
63
65
|
available_reports.fetch(name).new(*report_args)
|
64
66
|
end
|
65
67
|
|
68
|
+
# Set what object will filter the backtrace. It must respond to
|
69
|
+
# +filter_backtrace+, taking a backtrace array and a prefix path.
|
70
|
+
def self.backtrace_filter=(filter)
|
71
|
+
@backtrace_filter = filter
|
72
|
+
end
|
73
|
+
|
74
|
+
# The object that filters the backtrace
|
75
|
+
def self.backtrace_filter
|
76
|
+
@backtrace_filter
|
77
|
+
end
|
78
|
+
|
66
79
|
def self.available_test_cases
|
67
80
|
@test_cases ||= []
|
68
81
|
end
|
@@ -88,6 +101,7 @@ require "protest/reports/documentation"
|
|
88
101
|
|
89
102
|
Protest.autorun = true
|
90
103
|
Protest.report_with(:progress)
|
104
|
+
Protest.backtrace_filter = Protest::Utils::BacktraceFilter.new
|
91
105
|
|
92
106
|
at_exit do
|
93
107
|
Protest.run_all_tests! if Protest.autorun?
|
data/lib/protest/rails.rb
CHANGED
@@ -1,10 +1,26 @@
|
|
1
1
|
require "protest"
|
2
2
|
require "test/unit/assertions"
|
3
3
|
require "action_controller/test_case"
|
4
|
-
|
4
|
+
|
5
|
+
begin
|
6
|
+
require "webrat"
|
7
|
+
rescue LoadError
|
8
|
+
$no_webrat = true
|
9
|
+
end
|
5
10
|
|
6
11
|
module Protest
|
7
12
|
module Rails
|
13
|
+
# Exclude rails' files from the errors
|
14
|
+
class BacktraceFilter < Utils::BacktraceFilter
|
15
|
+
include ::Rails::BacktraceFilterForTestUnit
|
16
|
+
|
17
|
+
def filter_backtrace(backtrace, prefix=nil)
|
18
|
+
super(backtrace, prefix).reject do |line|
|
19
|
+
line.starts_with?("/")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
8
24
|
# Wrap all tests in a database transaction.
|
9
25
|
#
|
10
26
|
# TODO: make this optional somehow (yet enabled by default) so users of
|
@@ -38,7 +54,7 @@ module Protest
|
|
38
54
|
# should use webrat for integration tests. Really.
|
39
55
|
class IntegrationTest < RequestTest
|
40
56
|
include ActionController::Integration::Runner
|
41
|
-
include Webrat::Methods
|
57
|
+
include Webrat::Methods unless $no_webrat
|
42
58
|
end
|
43
59
|
end
|
44
60
|
|
@@ -59,4 +75,6 @@ module Protest
|
|
59
75
|
class << self
|
60
76
|
alias_method :describe, :context
|
61
77
|
end
|
78
|
+
|
79
|
+
self.backtrace_filter = Rails::BacktraceFilter.new
|
62
80
|
end
|
data/lib/protest/test_case.rb
CHANGED
@@ -25,6 +25,12 @@ module Protest
|
|
25
25
|
# your tests by declaring nested contexts inside the class. See
|
26
26
|
# TestCase.context.
|
27
27
|
class TestCase
|
28
|
+
begin
|
29
|
+
require "test/unit/assertions"
|
30
|
+
include Test::Unit::Assertions
|
31
|
+
rescue LoadError
|
32
|
+
end
|
33
|
+
|
28
34
|
# Run all tests in this context. Takes a Report instance in order to
|
29
35
|
# provide output.
|
30
36
|
def self.run(runner)
|
@@ -46,7 +52,7 @@ module Protest
|
|
46
52
|
# Add a test to be run in this context. This method is aliased as +it+ and
|
47
53
|
# +should+ for your comfort.
|
48
54
|
def self.test(name, &block)
|
49
|
-
tests << new(name, &block)
|
55
|
+
tests << new(name, caller.at(0), &block)
|
50
56
|
end
|
51
57
|
|
52
58
|
# Add a setup block to be run before each test in this context. This method
|
@@ -140,8 +146,9 @@ module Protest
|
|
140
146
|
|
141
147
|
# Initialize a new instance of a single test. This test can be run in
|
142
148
|
# isolation by calling TestCase#run.
|
143
|
-
def initialize(name, &block)
|
149
|
+
def initialize(name, location, &block)
|
144
150
|
@test = block
|
151
|
+
@location = location
|
145
152
|
@name = name
|
146
153
|
end
|
147
154
|
|
@@ -179,7 +186,7 @@ module Protest
|
|
179
186
|
# Make the test be ignored as pending. You can override the default message
|
180
187
|
# that will be sent to the report by passing it as an argument.
|
181
188
|
def pending(message="Not Yet Implemented")
|
182
|
-
raise Pending, message
|
189
|
+
raise Pending, message, [@location, *caller].uniq
|
183
190
|
end
|
184
191
|
|
185
192
|
# Name of the test
|
data/lib/protest/tests.rb
CHANGED
@@ -39,7 +39,7 @@ module Protest
|
|
39
39
|
# Filtered backtrace of the assertion. See Protest::Utils::BacktraceFilter
|
40
40
|
# for details on the filtering.
|
41
41
|
def backtrace
|
42
|
-
@backtrace ||=
|
42
|
+
@backtrace ||= Protest.backtrace_filter.filter_backtrace(raw_backtrace)
|
43
43
|
end
|
44
44
|
|
45
45
|
# Raw backtrace, as provided by the error.
|
@@ -1,17 +1,23 @@
|
|
1
1
|
module Protest
|
2
2
|
module Utils
|
3
3
|
# Small utility object to filter an error's backtrace and remove any mention
|
4
|
-
# of
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
# of Protest's own files.
|
5
|
+
class BacktraceFilter
|
6
|
+
ESCAPE_PATHS = [
|
7
|
+
# Path to the library's 'lib' dir.
|
8
|
+
/^#{Regexp.escape(File.dirname(File.dirname(File.dirname(File.expand_path(__FILE__)))))}/,
|
9
|
+
|
10
|
+
# Users certainly don't care about what test loader is being used
|
11
|
+
%r[lib/rake/rake_test_loader.rb], %r[bin/testrb]
|
12
|
+
]
|
8
13
|
|
9
14
|
# Filter the backtrace, removing any reference to files located in
|
10
15
|
# BASE_PATH.
|
11
|
-
def
|
16
|
+
def filter_backtrace(backtrace, prefix=nil)
|
17
|
+
paths = ESCAPE_PATHS + [prefix].compact
|
12
18
|
backtrace.reject do |line|
|
13
19
|
file = line.split(":").first
|
14
|
-
File.expand_path(file) =~
|
20
|
+
paths.any? {|path| File.expand_path(file) =~ path }
|
15
21
|
end
|
16
22
|
end
|
17
23
|
end
|
data/protest.gemspec
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "protest"
|
3
|
-
s.version = "0.2.
|
4
|
-
s.date = "2009-
|
3
|
+
s.version = "0.2.3"
|
4
|
+
s.date = "2009-11-14"
|
5
5
|
|
6
6
|
s.description = "Protest is a tiny, simple, and easy-to-extend test framework"
|
7
7
|
s.summary = s.description
|
8
|
-
s.homepage = "http://
|
8
|
+
s.homepage = "http://rubyprotest.org"
|
9
9
|
|
10
10
|
s.authors = ["Nicolás Sanguinetti"]
|
11
11
|
s.email = "contacto@nicolassanguinetti.info"
|
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.
|
4
|
+
version: 0.2.3
|
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-
|
12
|
+
date: 2009-11-14 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -41,7 +41,7 @@ files:
|
|
41
41
|
- lib/protest/reports/documentation.rb
|
42
42
|
- lib/protest/rails.rb
|
43
43
|
has_rdoc: true
|
44
|
-
homepage: http://
|
44
|
+
homepage: http://rubyprotest.org
|
45
45
|
licenses: []
|
46
46
|
|
47
47
|
post_install_message:
|
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements: []
|
65
65
|
|
66
66
|
rubyforge_project: protest
|
67
|
-
rubygems_version: 1.3.
|
67
|
+
rubygems_version: 1.3.5
|
68
68
|
signing_key:
|
69
69
|
specification_version: 3
|
70
70
|
summary: Protest is a tiny, simple, and easy-to-extend test framework
|