baretest 0.1.0 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.txt +52 -0
- data/MANIFEST.txt +50 -31
- data/README.rdoc +260 -0
- data/bin/baretest +82 -24
- data/doc/baretest.rdoc +98 -0
- data/doc/mocking_stubbing_test_doubles.rdoc +5 -0
- data/doc/quickref.rdoc +261 -0
- data/doc/writing_tests.rdoc +148 -0
- data/examples/test.rake +58 -30
- data/examples/tests/irb_mode/failures.rb +26 -0
- data/examples/tests/mock_developer/test/helper/mocks.rb +0 -0
- data/examples/tests/mock_developer/test/setup.rb +57 -0
- data/examples/tests/mock_developer/test/suite/mock_demo.rb +19 -0
- data/examples/tests/overview/test.rb +89 -0
- data/examples/tests/variations/variations_01.rb +14 -0
- data/examples/tests/variations/variations_02.rb +19 -0
- data/examples/tests/variations/variations_03.rb +19 -0
- data/lib/baretest/assertion/context.rb +20 -0
- data/lib/baretest/assertion/failure.rb +22 -0
- data/lib/baretest/assertion/skip.rb +21 -0
- data/lib/{test → baretest}/assertion/support.rb +174 -39
- data/lib/baretest/assertion.rb +182 -0
- data/lib/baretest/irb_mode.rb +263 -0
- data/lib/{test/assertion/failure.rb → baretest/layout.rb} +6 -5
- data/lib/baretest/mocha.rb +18 -0
- data/lib/baretest/run/cli.rb +104 -0
- data/lib/{test → baretest}/run/errors.rb +12 -7
- data/lib/{test → baretest}/run/minimal.rb +8 -3
- data/lib/baretest/run/profile.rb +151 -0
- data/lib/{test → baretest}/run/spec.rb +10 -4
- data/lib/baretest/run/tap.rb +44 -0
- data/lib/baretest/run/xml.rb +80 -0
- data/lib/{test → baretest}/run.rb +31 -18
- data/lib/baretest/setup.rb +15 -0
- data/lib/baretest/skipped/assertion.rb +20 -0
- data/lib/baretest/skipped/suite.rb +49 -0
- data/lib/baretest/skipped.rb +15 -0
- data/lib/baretest/suite.rb +234 -0
- data/lib/baretest/utilities.rb +43 -0
- data/lib/{test → baretest}/version.rb +12 -3
- data/lib/baretest.rb +112 -0
- data/test/external/bootstraptest.rb +1 -1
- data/test/setup.rb +1 -1
- data/test/{lib/test → suite/lib/baretest}/assertion/support.rb +78 -24
- data/test/suite/lib/baretest/assertion.rb +192 -0
- data/test/{lib/test → suite/lib/baretest}/irb_mode.rb +0 -0
- data/test/{lib/test → suite/lib/baretest}/run/cli.rb +0 -0
- data/test/{lib/test → suite/lib/baretest}/run/errors.rb +0 -0
- data/test/{lib/test → suite/lib/baretest}/run/interactive.rb +0 -0
- data/test/{lib/test → suite/lib/baretest}/run/spec.rb +0 -0
- data/test/{lib/test → suite/lib/baretest}/run/tap.rb +0 -0
- data/test/{lib/test → suite/lib/baretest}/run/xml.rb +0 -0
- data/test/{lib/test → suite/lib/baretest}/run.rb +63 -61
- data/test/{lib/test → suite/lib/baretest}/suite.rb +77 -54
- data/test/{lib/test.rb → suite/lib/baretest.rb} +37 -37
- metadata +61 -40
- data/README.markdown +0 -229
- data/examples/test.rb +0 -93
- data/lib/test/assertion.rb +0 -117
- data/lib/test/debug.rb +0 -34
- data/lib/test/irb_mode.rb +0 -104
- data/lib/test/run/cli.rb +0 -79
- data/lib/test/run/interactive.rb +0 -60
- data/lib/test/run/tap.rb +0 -32
- data/lib/test/run/xml.rb +0 -56
- data/lib/test/suite.rb +0 -95
- data/lib/test.rb +0 -118
- data/test/lib/test/assertion.rb +0 -142
- data/test/lib/test/debug.rb +0 -63
data/LICENSE.txt
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
The BareTest library is copyrighted free software by Stefan Rusterholz.
|
2
|
+
You can redistribute it and/or modify it under the terms o the conditions
|
3
|
+
below (also known as the 'Ruby License'):
|
4
|
+
|
5
|
+
1. You may make and give away verbatim copies of the source form of the
|
6
|
+
software without restriction, provided that you duplicate all of the
|
7
|
+
original copyright notices and associated disclaimers.
|
8
|
+
|
9
|
+
2. You may modify your copy of the software in any way, provided that
|
10
|
+
you do at least ONE of the following:
|
11
|
+
|
12
|
+
a) place your modifications in the Public Domain or otherwise
|
13
|
+
make them Freely Available, such as by posting said
|
14
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
15
|
+
the author to include your modifications in the software.
|
16
|
+
|
17
|
+
b) use the modified software only within your corporation or
|
18
|
+
organization.
|
19
|
+
|
20
|
+
c) rename any non-standard executables so the names do not conflict
|
21
|
+
with standard executables, which must also be provided.
|
22
|
+
|
23
|
+
d) make other distribution arrangements with the author.
|
24
|
+
|
25
|
+
3. You may distribute the software in object code or executable
|
26
|
+
form, provided that you do at least ONE of the following:
|
27
|
+
|
28
|
+
a) distribute the executables and library files of the software,
|
29
|
+
together with instructions (in the manual page or equivalent)
|
30
|
+
on where to get the original distribution.
|
31
|
+
|
32
|
+
b) accompany the distribution with the machine-readable source of
|
33
|
+
the software.
|
34
|
+
|
35
|
+
c) give non-standard executables non-standard names, with
|
36
|
+
instructions on where to get the original software distribution.
|
37
|
+
|
38
|
+
d) make other distribution arrangements with the author.
|
39
|
+
|
40
|
+
4. You may modify and include the part of the software into any other
|
41
|
+
software (possibly commercial).
|
42
|
+
|
43
|
+
5. The scripts and library files supplied as input to or produced as
|
44
|
+
output from the software do not automatically fall under the
|
45
|
+
copyright of the software, but belong to whomever generated them,
|
46
|
+
and may be sold commercially, and may be aggregated with this
|
47
|
+
software.
|
48
|
+
|
49
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
50
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
51
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
52
|
+
PURPOSE.
|
data/MANIFEST.txt
CHANGED
@@ -1,38 +1,57 @@
|
|
1
|
+
LICENSE.txt
|
1
2
|
MANIFEST.txt
|
2
|
-
README.
|
3
|
+
README.rdoc
|
3
4
|
bin/baretest
|
5
|
+
doc/baretest.rdoc
|
6
|
+
doc/mocking_stubbing_test_doubles.rdoc
|
7
|
+
doc/quickref.rdoc
|
8
|
+
doc/writing_tests.rdoc
|
9
|
+
examples/tests/irb_mode/failures.rb
|
10
|
+
examples/tests/mock_developer/test/helper/mocks.rb
|
11
|
+
examples/tests/mock_developer/test/setup.rb
|
12
|
+
examples/tests/mock_developer/test/suite/mock_demo.rb
|
13
|
+
examples/tests/overview/test.rb
|
14
|
+
examples/tests/variations/variations_01.rb
|
15
|
+
examples/tests/variations/variations_02.rb
|
16
|
+
examples/tests/variations/variations_03.rb
|
4
17
|
examples/test.rake
|
5
|
-
|
6
|
-
lib/
|
7
|
-
lib/
|
8
|
-
lib/
|
9
|
-
lib/
|
10
|
-
lib/
|
11
|
-
lib/
|
12
|
-
lib/
|
13
|
-
lib/
|
14
|
-
lib/
|
15
|
-
lib/
|
16
|
-
lib/
|
17
|
-
lib/
|
18
|
-
lib/
|
19
|
-
lib/
|
20
|
-
lib/
|
21
|
-
lib/
|
18
|
+
lib/baretest.rb
|
19
|
+
lib/baretest/assertion.rb
|
20
|
+
lib/baretest/assertion/context.rb
|
21
|
+
lib/baretest/assertion/failure.rb
|
22
|
+
lib/baretest/assertion/skip.rb
|
23
|
+
lib/baretest/assertion/support.rb
|
24
|
+
lib/baretest/irb_mode.rb
|
25
|
+
lib/baretest/layout.rb
|
26
|
+
lib/baretest/mocha.rb
|
27
|
+
lib/baretest/run.rb
|
28
|
+
lib/baretest/run/cli.rb
|
29
|
+
lib/baretest/run/errors.rb
|
30
|
+
lib/baretest/run/minimal.rb
|
31
|
+
lib/baretest/run/profile.rb
|
32
|
+
lib/baretest/run/spec.rb
|
33
|
+
lib/baretest/run/tap.rb
|
34
|
+
lib/baretest/run/xml.rb
|
35
|
+
lib/baretest/setup.rb
|
36
|
+
lib/baretest/skipped.rb
|
37
|
+
lib/baretest/skipped/assertion.rb
|
38
|
+
lib/baretest/skipped/suite.rb
|
39
|
+
lib/baretest/suite.rb
|
40
|
+
lib/baretest/utilities.rb
|
41
|
+
lib/baretest/version.rb
|
22
42
|
test/external/bootstraptest.rb
|
23
43
|
test/external/bootstrapwrap.rb
|
24
44
|
test/helper/mocks.rb
|
25
|
-
test/lib/test.rb
|
26
|
-
test/lib/test/assertion.rb
|
27
|
-
test/lib/test/assertion/support.rb
|
28
|
-
test/lib/test/debug.rb
|
29
|
-
test/lib/test/irb_mode.rb
|
30
|
-
test/lib/test/run.rb
|
31
|
-
test/lib/test/run/cli.rb
|
32
|
-
test/lib/test/run/errors.rb
|
33
|
-
test/lib/test/run/interactive.rb
|
34
|
-
test/lib/test/run/spec.rb
|
35
|
-
test/lib/test/run/tap.rb
|
36
|
-
test/lib/test/run/xml.rb
|
37
|
-
test/lib/test/suite.rb
|
38
45
|
test/setup.rb
|
46
|
+
test/suite/lib/baretest.rb
|
47
|
+
test/suite/lib/baretest/assertion.rb
|
48
|
+
test/suite/lib/baretest/assertion/support.rb
|
49
|
+
test/suite/lib/baretest/irb_mode.rb
|
50
|
+
test/suite/lib/baretest/run.rb
|
51
|
+
test/suite/lib/baretest/run/cli.rb
|
52
|
+
test/suite/lib/baretest/run/errors.rb
|
53
|
+
test/suite/lib/baretest/run/interactive.rb
|
54
|
+
test/suite/lib/baretest/run/spec.rb
|
55
|
+
test/suite/lib/baretest/run/tap.rb
|
56
|
+
test/suite/lib/baretest/run/xml.rb
|
57
|
+
test/suite/lib/baretest/suite.rb
|
data/README.rdoc
ADDED
@@ -0,0 +1,260 @@
|
|
1
|
+
= Bare Test
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
== Summary
|
6
|
+
|
7
|
+
A testframework that doesn't stand in your way or forces you to learn a new
|
8
|
+
language. Two methods is all that is required to know.
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
== Also See
|
13
|
+
|
14
|
+
Executable Docs:: doc/baretest.rdoc
|
15
|
+
IRC:: The channel #ruby-lang on irc.freenode.org
|
16
|
+
|
17
|
+
I'm there under the nick apeiros.
|
18
|
+
|
19
|
+
Beware, I'm idling there 24/7, so my nick being in there doesn't
|
20
|
+
mean I'm in front of the computer.
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
== Description
|
25
|
+
|
26
|
+
Baretest is a Testframework that tries to stay out of your way, but support you when you want it.
|
27
|
+
In order to do so it has a load of features:
|
28
|
+
|
29
|
+
* Straightforward and terse assertions (just a block whose return value defines
|
30
|
+
success/failure)
|
31
|
+
* Easy grouping of assertions into suites
|
32
|
+
* BDD style specifications/test descriptions (NOT code), also extractable
|
33
|
+
* Uncomplicated dependency testing and skipping
|
34
|
+
* Helpers to deal painlessly with raising, throwing, float imprecision,
|
35
|
+
unordered collections etc.
|
36
|
+
* Ships with colored Shell formatter, Diagnostic-, XML- and TAP formatter
|
37
|
+
* Interactive mode - drops you into an irb session within failed assertion
|
38
|
+
with all setup methods executed, so you can inspect interactively why it
|
39
|
+
failed.
|
40
|
+
* Trivial to add new formatters (the standard formatters are only roughly 20-50
|
41
|
+
lines of code each)
|
42
|
+
* Teardown and Setup for suites
|
43
|
+
* Callbacks to integrate mock libraries
|
44
|
+
* API to use it from code, such as rake tasks (comes with an example rake-task)
|
45
|
+
* baretest executable to run tests on multiple files at once
|
46
|
+
* Diagnostic assertion helpers (e.g. same(:a, :b) will give you 'Expected
|
47
|
+
:a but got :b' as diagnostic)
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
== Quick Try
|
52
|
+
|
53
|
+
1. Download from github and unpack (or clone)
|
54
|
+
2. Change into the baretest directory: `cd the/baretest/directory`
|
55
|
+
3. Run the examples: `./bin/baretest examples/test.rb`
|
56
|
+
|
57
|
+
That's it. Alternatively you can run baretests own tests, and play with formatters:
|
58
|
+
`./bin/baretest -f tap`
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
== Install
|
63
|
+
|
64
|
+
1. run `gem install baretest`, alternatively run `sudo gem install baretest`
|
65
|
+
2. There is no 2.
|
66
|
+
|
67
|
+
To get baretest edge, use:
|
68
|
+
|
69
|
+
1. Download from github and unpack (or clone)
|
70
|
+
2. Change into the baretest directory: `cd the/baretest/directory`
|
71
|
+
3. Run the installation task: `rake gem:install` (alternatively `rake install:lib`)
|
72
|
+
|
73
|
+
If you have multiple ruby versions installed parallely, this might pick the wrong gem
|
74
|
+
executable to install the gem. You can set the GEM env variable to ensure it uses the
|
75
|
+
right one: `rake gem:install GEM=gem1.9`
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
== Executable
|
80
|
+
|
81
|
+
Usage:
|
82
|
+
|
83
|
+
baretest [options] [glob, ...]
|
84
|
+
|
85
|
+
Glob defaults to 'test/**/*.rb'
|
86
|
+
Providing a directory as glob is equivalent to dir/**/*.rb
|
87
|
+
Options:
|
88
|
+
-f, --format FORMAT use FORMAT for output
|
89
|
+
-F, --formats show available formats
|
90
|
+
-d, --debug set debugging flags (set $DEBUG to true)
|
91
|
+
-i, --interactive drop into IRB on error or failure
|
92
|
+
-s, --setup FILE specify setup file
|
93
|
+
-v, --version print the version and exit
|
94
|
+
-w, --warn turn warnings on for your script
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
== Planned Features
|
99
|
+
|
100
|
+
* Passing on flags/options for formatters
|
101
|
+
* Tagging tests to allow focusing (only run tests with/without specific tags)
|
102
|
+
* Word-wrapping for CLI runner
|
103
|
+
* Flags for color and verbose (\[no-]color and \[no-]verbose) for the executable
|
104
|
+
* baretest --init \[LAYOUT], to create the necessary directory structure
|
105
|
+
* Detect whether baretest is run from an interactive terminal or not and adjust
|
106
|
+
defaults (no-color e.g.)
|
107
|
+
* Alternative CLI runner with status implicit via colored/bg-colored descriptions
|
108
|
+
* Alternative CLI runner which prints the name of the test prior the label and rewrites
|
109
|
+
the line when the test has executed to add status & coloring.
|
110
|
+
* Simple stubbing with automatic cleanup at teardown. Example:
|
111
|
+
|
112
|
+
assert "Should require a single file listed in :requires option." do |a|
|
113
|
+
file = 'foo/bar'
|
114
|
+
stub(Kernel, :require) do |file, *args| a.touch(file) end
|
115
|
+
::Test::Suite.create(nil, nil, :requires => file)
|
116
|
+
|
117
|
+
touched file
|
118
|
+
end
|
119
|
+
|
120
|
+
* Inline tests via Module#describe (basically the same as Test::Suite#suite)
|
121
|
+
* YARD code to extract the specifications without running the code
|
122
|
+
* A redmine plugin
|
123
|
+
* --fail-all flag, to test/review diagnostics of tests (no idea how to do that yet)
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
== Rejected Features
|
128
|
+
|
129
|
+
* Currently none
|
130
|
+
|
131
|
+
|
132
|
+
== A Bit of Background
|
133
|
+
|
134
|
+
Originally, bare-test started out as a project for shits & giggles on the flight
|
135
|
+
back from vegas (railsconf09), to prove that it is possible to have a fully
|
136
|
+
fledged test-framework in under 100 lines of source-code.
|
137
|
+
Later I realized that this project could become more. For one it was (still is)
|
138
|
+
dead simple to add another formatter, it is just as dead simple to embedd it
|
139
|
+
in code.
|
140
|
+
The principles are trivial to understand, embrace and extend.
|
141
|
+
Upon that it dawned me, that the project was viable and I began adding features
|
142
|
+
not found in other projects.
|
143
|
+
|
144
|
+
|
145
|
+
|
146
|
+
== Example Testsuite
|
147
|
+
|
148
|
+
From examples/test.rb:
|
149
|
+
|
150
|
+
BareTest.suite do
|
151
|
+
# assertions and refutations can be grouped in suites. They will share
|
152
|
+
# setup and teardown
|
153
|
+
# they don't have to be in suites, though
|
154
|
+
suite "Success" do
|
155
|
+
assert "An assertion returning a trueish value (non nil/false) is a success" do
|
156
|
+
true
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
suite "Failure" do
|
161
|
+
assert "An assertion returning a falsish value (nil/false) is a failure" do
|
162
|
+
false
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
suite "Pending" do
|
167
|
+
assert "An assertion without a block is pending"
|
168
|
+
end
|
169
|
+
|
170
|
+
suite "Error" do
|
171
|
+
assert "Uncaught exceptions in an assertion are an error" do
|
172
|
+
raise "Error!"
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
suite "Special assertions" do
|
177
|
+
assert "Assert a block to raise" do
|
178
|
+
raises do
|
179
|
+
sleep(rand()/3+0.05)
|
180
|
+
raise "If this raises then the assertion is a success"
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
assert "Assert a float to be close to another" do
|
185
|
+
a = 0.18 - 0.01
|
186
|
+
b = 0.17
|
187
|
+
within_delta a, b, 0.001
|
188
|
+
end
|
189
|
+
|
190
|
+
suite "Nested suite" do
|
191
|
+
assert "Assert two randomly ordered arrays to contain the same values" do
|
192
|
+
a = [*"A".."Z"] # an array with values from A to Z
|
193
|
+
b = a.sort_by { rand }
|
194
|
+
equal_unordered(a, b) # can be used with any Enumerable, uses hash-key identity
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
suite "Setup & Teardown" do
|
200
|
+
setup do
|
201
|
+
@foo = "foo"
|
202
|
+
@bar = "bar"
|
203
|
+
end
|
204
|
+
|
205
|
+
assert "@foo should be set" do
|
206
|
+
@foo == "foo"
|
207
|
+
end
|
208
|
+
|
209
|
+
suite "Nested suite" do
|
210
|
+
setup do
|
211
|
+
@bar = "inner bar"
|
212
|
+
@baz = "baz"
|
213
|
+
end
|
214
|
+
|
215
|
+
assert "@foo is inherited" do
|
216
|
+
@foo == "foo"
|
217
|
+
end
|
218
|
+
|
219
|
+
assert "@bar is overridden" do
|
220
|
+
@bar == "inner bar"
|
221
|
+
end
|
222
|
+
|
223
|
+
assert "@baz is defined only for inner" do
|
224
|
+
@baz == "baz"
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
teardown do
|
229
|
+
@foo = nil # not that it'd make much sense, just to demonstrate
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
suite "Dependencies", :requires => ['foo', 'bar'] do
|
234
|
+
assert "Will be skipped, due to unsatisfied dependencies" do
|
235
|
+
failure "Why the heck do you have a 'foo/bar' file?"
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
|
241
|
+
|
242
|
+
== Credits & Contributions
|
243
|
+
|
244
|
+
* dominikh
|
245
|
+
* adding mocha integration
|
246
|
+
* showing me every dirty little bit I did wrong
|
247
|
+
* fixes
|
248
|
+
* added line number on failures
|
249
|
+
|
250
|
+
|
251
|
+
|
252
|
+
== Known bugs
|
253
|
+
|
254
|
+
Currently none.
|
255
|
+
|
256
|
+
|
257
|
+
|
258
|
+
== Foot Notes
|
259
|
+
<sup>1</sup>:: The abbreviated form without support code and output formatters.
|
260
|
+
The normal code is expanded to more lines for readability.
|
data/bin/baretest
CHANGED
@@ -8,19 +8,19 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
Version = "0.3.2"
|
12
|
+
|
13
|
+
|
14
|
+
|
13
15
|
require 'optparse'
|
14
16
|
begin
|
15
|
-
|
17
|
+
# if baretest is installed as a gem, the executable is be wrapped by rubgems anyway, so we don't
|
18
|
+
# need to require rubygems ourself.
|
19
|
+
require 'baretest'
|
16
20
|
rescue LoadError
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
rescue LoadError
|
21
|
-
$LOAD_PATH.unshift(File.expand_path("#{__FILE__}/../../lib"))
|
22
|
-
require 'test'
|
23
|
-
end
|
21
|
+
# assume baretest is not installed and this is a cold-run from source
|
22
|
+
$LOAD_PATH.unshift(File.expand_path("#{__FILE__}/../../lib"))
|
23
|
+
require 'baretest'
|
24
24
|
end
|
25
25
|
|
26
26
|
|
@@ -33,23 +33,80 @@ setup_path = nil
|
|
33
33
|
opts = OptionParser.new("", 24, ' ') do |opts|
|
34
34
|
opts.banner = "Usage: baretest [options] [glob, ...]"
|
35
35
|
|
36
|
-
opts.separator "Glob defaults to 'test/**/*.rb'"
|
36
|
+
opts.separator "Glob defaults to 'test/{suite,unit,integration,system}/**/*.rb'"
|
37
37
|
opts.separator "Providing a directory as glob is equivalent to dir/**/*.rb\n"
|
38
38
|
opts.separator "Options:"
|
39
39
|
|
40
|
+
opts.on(nil, "--init", "create the necessary directories and files") {
|
41
|
+
core = %w[
|
42
|
+
test
|
43
|
+
test/external
|
44
|
+
test/helper
|
45
|
+
test/helper/suite
|
46
|
+
test/suite
|
47
|
+
]
|
48
|
+
mirror = {
|
49
|
+
'bin' => %w[test/helper/suite test/suite],
|
50
|
+
'lib' => %w[test/helper/suite test/suite],
|
51
|
+
'rake' => %w[test/helper/suite test/suite],
|
52
|
+
}
|
53
|
+
files = {
|
54
|
+
'test/setup.rb' => <<-END_OF_SETUP.gsub(/^ {8}/, '')
|
55
|
+
$LOAD_PATH.unshift(File.expand_path("\#{__FILE__}/../../lib")) # Add PROJECT/lib to $LOAD_PATH
|
56
|
+
END_OF_SETUP
|
57
|
+
}
|
58
|
+
|
59
|
+
puts "Creating all directories and files needed in #{File.expand_path('.')}"
|
60
|
+
core.each do |dir|
|
61
|
+
if File.exist?(dir) then
|
62
|
+
puts "Directory #{dir} exists already -- skipping"
|
63
|
+
else
|
64
|
+
puts "Creating #{dir}"
|
65
|
+
Dir.mkdir(dir)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
mirror.each do |path, destinations|
|
69
|
+
if File.exist?(path) then
|
70
|
+
destinations.each do |destination|
|
71
|
+
destination = File.join(destination,path)
|
72
|
+
if File.exist?(destination) then
|
73
|
+
puts "Mirror #{destination} of #{path} exists already -- skipping"
|
74
|
+
else
|
75
|
+
puts "Mirroring #{path} in #{destination}"
|
76
|
+
Dir.mkdir(destination)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
files.each do |path, data|
|
82
|
+
if File.exist?(path) then
|
83
|
+
puts "File #{path} exists already -- skipping"
|
84
|
+
else
|
85
|
+
puts "Writing #{path}"
|
86
|
+
File.open(path, 'wb') do |fh|
|
87
|
+
fh.write(data)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
exit
|
93
|
+
}
|
94
|
+
|
40
95
|
opts.on("-f", "--format FORMAT", "use FORMAT for output") { |use|
|
41
96
|
format = use
|
42
97
|
}
|
43
98
|
|
44
99
|
opts.on("-F", "--formats", "show available formats") { |use|
|
45
|
-
|
100
|
+
puts "Available formats:"
|
101
|
+
Dir.glob("{#{$LOAD_PATH.join(',')}}/baretest/run/*.rb") { |path|
|
46
102
|
puts "- #{File.basename(path, '.rb')}"
|
47
103
|
}
|
48
104
|
exit
|
49
105
|
}
|
50
106
|
|
51
107
|
opts.on("-d", "--debug", "set debugging flags (set $DEBUG to true)") {
|
52
|
-
$DEBUG
|
108
|
+
$DEBUG = true
|
109
|
+
$VERBOSE = true
|
53
110
|
}
|
54
111
|
|
55
112
|
opts.on("-i", "--interactive", "drop into IRB on error or failure") {
|
@@ -61,7 +118,7 @@ opts = OptionParser.new("", 24, ' ') do |opts|
|
|
61
118
|
}
|
62
119
|
|
63
120
|
opts.on("-v", "--version", "print the version and exit") {
|
64
|
-
puts "baretest version
|
121
|
+
puts "baretest executable version #{Version}, library version #{BareTest::VERSION}"
|
65
122
|
exit
|
66
123
|
}
|
67
124
|
|
@@ -76,15 +133,11 @@ end
|
|
76
133
|
|
77
134
|
# Load the setup file, all helper files and all test files
|
78
135
|
if ARGV.empty? then
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
load(helper_path) if File.exist?(helper_path)
|
85
|
-
puts "Loading test file #{path}" if $VERBOSE
|
86
|
-
load(path)
|
87
|
-
}
|
136
|
+
BareTest.load_standard_test_files(
|
137
|
+
:verbose => $VERBOSE,
|
138
|
+
:setup_path => setup_path,
|
139
|
+
:chdir => '.'
|
140
|
+
)
|
88
141
|
else
|
89
142
|
load(setup_path) if setup_path && File.exist?(setup_path)
|
90
143
|
ARGV.each { |path|
|
@@ -99,4 +152,9 @@ end
|
|
99
152
|
|
100
153
|
|
101
154
|
# Run the tests
|
102
|
-
|
155
|
+
puts if $VERBOSE
|
156
|
+
if BareTest.run(:format => format, :interactive => interactive).global_status == :success then
|
157
|
+
exit 0
|
158
|
+
else
|
159
|
+
exit 1
|
160
|
+
end
|
data/doc/baretest.rdoc
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
= The baretest executable
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
== 1. Usage
|
6
|
+
|
7
|
+
Basic Usage:
|
8
|
+
|
9
|
+
baretest [options] [glob, ...]"
|
10
|
+
|
11
|
+
Either you provide a `glob` (or a directory, which is equivalent to DIRECTORY/\*\*/\*.rb),
|
12
|
+
then baretest will load all the files it matches and invoke BareTest.run in the end. Or you
|
13
|
+
use the standard way and let baretest use convention. For that you should run baretest within
|
14
|
+
the project, preferably the toplevel.
|
15
|
+
Baretest will then search the directory tree upwards until it finds 'test/setup.rb'. It
|
16
|
+
will then use the default layout of a project, which should look roughly like this:
|
17
|
+
|
18
|
+
|-- bin
|
19
|
+
| `-- ...
|
20
|
+
|-- doc
|
21
|
+
| `-- ...
|
22
|
+
|-- examples
|
23
|
+
| `-- ...
|
24
|
+
|-- lib
|
25
|
+
| `-- ...
|
26
|
+
|-- rake
|
27
|
+
| `-- ...
|
28
|
+
`-- test
|
29
|
+
|-- external
|
30
|
+
| `-- ...
|
31
|
+
|-- helper
|
32
|
+
| `-- ...
|
33
|
+
|-- setup.rb
|
34
|
+
`-- suite
|
35
|
+
|-- bin
|
36
|
+
| `-- ...
|
37
|
+
`-- lib
|
38
|
+
`-- ...
|
39
|
+
|
40
|
+
The important part are the directories under 'test'. The directory 'test/suite' should mirror your
|
41
|
+
project, but instead of the real files contain the files that test their counterparts. For example,
|
42
|
+
the file 'YOURPROJECT/lib/yourproject.rb' has its tests in
|
43
|
+
'YOURPROJECT/test/suite/lib/yourproject.rb'.
|
44
|
+
Additionally, baretest will in that mode look for a file
|
45
|
+
'YOURPROJECT/test/helper/suite/lib/yourproject.rb' and load it if found.
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
== 2. Options
|
50
|
+
|
51
|
+
|
52
|
+
=== Getting information about baretest:
|
53
|
+
|
54
|
+
-F, \--formats:: Lists the available output formatters
|
55
|
+
|
56
|
+
-v:: Prints the baretest executables and the libs version number
|
57
|
+
|
58
|
+
|
59
|
+
=== Running tests:
|
60
|
+
|
61
|
+
-i, \--interactive:: drop into IRB on error or failure
|
62
|
+
|
63
|
+
-d, \--debug:: Set debugging flags.
|
64
|
+
|
65
|
+
This sets $DEBUG to true, same as rubys -d switch.
|
66
|
+
|
67
|
+
-f, \--format FORMAT:: Use the formatter specified in FORMAT, defaults to 'cli'
|
68
|
+
|
69
|
+
-s, \--setup FILE:: specify setup file
|
70
|
+
|
71
|
+
This option allows you to tell baretest where it finds the setup.rb file.
|
72
|
+
|
73
|
+
Defaults to test/setup.rb.
|
74
|
+
|
75
|
+
-w, \--warn:: Turn warnings on for your script.
|
76
|
+
|
77
|
+
This sets $VERBOSE to true, same as rubys -w switch.
|
78
|
+
|
79
|
+
Additionally, some formatters will provide more information
|
80
|
+
(e.g. full backtraces on errors) when $VERBOSE is set.
|
81
|
+
|
82
|
+
|
83
|
+
|
84
|
+
=== 3. The interactive mode
|
85
|
+
|
86
|
+
In interactive mode, baretest will stop execution when an error or a failure is hit. It
|
87
|
+
then prints out the status, the assertions description, its code and then drops you into
|
88
|
+
an irb-shell in the context of the failed assertion, with setup already executed. You
|
89
|
+
can then try out what caused the assertion to fail.
|
90
|
+
|
91
|
+
Be aware that printing the code relies on your indentation.
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
=== 4. Writing a formatter
|
96
|
+
|
97
|
+
This section will follow. For now, just take a look at the existing formatters.
|
98
|
+
They are pretty simple.
|