rspec 0.6.4 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +90 -1
- data/EXAMPLES.rd +28 -6
- data/MIT-LICENSE +20 -0
- data/README +18 -12
- data/Rakefile +60 -54
- data/examples/custom_formatter.rb +4 -4
- data/examples/helper_method_example.rb +11 -0
- data/examples/mocking_example.rb +19 -2
- data/examples/partial_mock_example.rb +28 -0
- data/examples/stack_spec.rb +8 -8
- data/examples/stubbing_example.rb +50 -9
- data/examples/test_case_spec.rb +6 -6
- data/lib/spec.rb +1 -2
- data/lib/spec/callback.rb +0 -0
- data/lib/spec/expectations.rb +3 -6
- data/lib/spec/expectations/diff.rb +23 -47
- data/lib/spec/expectations/differs/default.rb +62 -0
- data/lib/spec/expectations/{exceptions.rb → errors.rb} +0 -0
- data/lib/spec/expectations/extensions.rb +4 -0
- data/lib/spec/expectations/extensions/inspect_for_expectation_not_met_error.rb +14 -0
- data/lib/spec/expectations/extensions/numeric.rb +5 -0
- data/lib/spec/expectations/{expectations.rb → extensions/object.rb} +3 -6
- data/lib/spec/expectations/extensions/symbol.rb +5 -0
- data/lib/spec/expectations/should.rb +4 -0
- data/lib/spec/expectations/should/base.rb +42 -0
- data/lib/spec/expectations/should/have.rb +79 -0
- data/lib/spec/expectations/should/not.rb +72 -0
- data/lib/spec/expectations/should/should.rb +83 -0
- data/lib/spec/expectations/sugar.rb +6 -25
- data/lib/spec/mocks.rb +5 -1
- data/lib/spec/mocks/argument_expectation.rb +15 -1
- data/lib/spec/mocks/error_generator.rb +72 -0
- data/lib/spec/mocks/{exceptions.rb → errors.rb} +0 -0
- data/lib/spec/mocks/extensions/object.rb +3 -0
- data/lib/spec/mocks/message_expectation.rb +80 -73
- data/lib/spec/mocks/mock.rb +4 -69
- data/lib/spec/mocks/mock_handler.rb +158 -0
- data/lib/spec/mocks/mock_methods.rb +44 -0
- data/lib/spec/mocks/order_group.rb +10 -2
- data/lib/spec/rake/spectask.rb +20 -18
- data/lib/spec/rake/{rcov_verify.rb → verify_rcov.rb} +2 -2
- data/lib/spec/runner.rb +3 -1
- data/lib/spec/runner/backtrace_tweaker.rb +2 -1
- data/lib/spec/runner/context.rb +10 -16
- data/lib/spec/runner/context_eval.rb +40 -40
- data/lib/spec/runner/execution_context.rb +1 -12
- data/lib/spec/runner/{kernel_ext.rb → extensions/kernel.rb} +2 -2
- data/lib/spec/runner/{instance_exec.rb → extensions/object.rb} +0 -0
- data/lib/spec/runner/formatter/base_text_formatter.rb +25 -18
- data/lib/spec/runner/formatter/html_formatter.rb +81 -101
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +9 -9
- data/lib/spec/runner/formatter/rdoc_formatter.rb +6 -6
- data/lib/spec/runner/formatter/specdoc_formatter.rb +7 -6
- data/lib/spec/runner/option_parser.rb +41 -5
- data/lib/spec/runner/reporter.rb +3 -15
- data/lib/spec/runner/spec_should_raise_handler.rb +74 -0
- data/lib/spec/runner/specification.rb +33 -14
- data/lib/spec/version.rb +6 -3
- data/vendor/watir/README.txt +1 -1
- metadata +34 -68
- data/bin/test2spec +0 -112
- data/examples/helper_method_spec.rb +0 -12
- data/lib/spec/expectations/have_helper.rb +0 -41
- data/lib/spec/expectations/helper.rb +0 -4
- data/lib/spec/expectations/should_base.rb +0 -52
- data/lib/spec/expectations/should_helper.rb +0 -93
- data/lib/spec/expectations/should_negator.rb +0 -71
- data/lib/spec/test_to_spec/ruby2ruby.rb +0 -492
- data/lib/spec/test_to_spec/sexp_transformer.rb +0 -196
- data/lib/spec/test_to_spec/test_case_ext.rb +0 -22
- data/lib/spec/test_to_spec/translation_test_runner.rb +0 -147
- data/test/spec/expectations/arbitrary_operator_test.rb +0 -55
- data/test/spec/expectations/arbitrary_predicate_test.rb +0 -163
- data/test/spec/expectations/containment_test.rb +0 -129
- data/test/spec/expectations/diff_test.rb +0 -62
- data/test/spec/expectations/identity_test.rb +0 -75
- data/test/spec/expectations/object_equality_test.rb +0 -65
- data/test/spec/expectations/raising_test.rb +0 -106
- data/test/spec/expectations/regex_matching_test.rb +0 -36
- data/test/spec/expectations/should_have_test.rb +0 -169
- data/test/spec/expectations/should_satisfy_test.rb +0 -37
- data/test/spec/expectations/sugar_test.rb +0 -93
- data/test/spec/expectations/supported_symbols_test.rb +0 -33
- data/test/spec/expectations/throwing_test.rb +0 -55
- data/test/spec/expectations/true_false_special_case_test.rb +0 -85
- data/test/spec/expectations/typing_test.rb +0 -108
- data/test/spec/mocks/mock_arg_constraints_test.rb +0 -113
- data/test/spec/mocks/mock_counts_test.rb +0 -431
- data/test/spec/mocks/mock_ordering_test.rb +0 -109
- data/test/spec/mocks/mock_test.rb +0 -220
- data/test/spec/mocks/null_object_test.rb +0 -37
- data/test/spec/runner/backtrace_tweaker_test.rb +0 -90
- data/test/spec/runner/context_matching_test.rb +0 -35
- data/test/spec/runner/context_runner_test.rb +0 -62
- data/test/spec/runner/context_test.rb +0 -191
- data/test/spec/runner/execution_context_test.rb +0 -45
- data/test/spec/runner/formatter/failure_dump_test.rb +0 -94
- data/test/spec/runner/formatter/html_formatter_test.rb +0 -48
- data/test/spec/runner/formatter/progress_bar_formatter_test.rb +0 -56
- data/test/spec/runner/formatter/rdoc_formatter_test.rb +0 -51
- data/test/spec/runner/formatter/specdoc_formatter_test.rb +0 -57
- data/test/spec/runner/kernel_ext_test.rb +0 -13
- data/test/spec/runner/option_parser_test.rb +0 -141
- data/test/spec/runner/reporter_test.rb +0 -128
- data/test/spec/runner/spec_matcher_test.rb +0 -47
- data/test/spec/runner/specification_test.rb +0 -121
- data/test/spec/test_to_spec/ruby_to_ruby_test.rb +0 -79
- data/test/spec/test_to_spec/sexp_transformer_assertion_test.rb +0 -207
- data/test/spec/test_to_spec/sexp_transformer_test.rb +0 -303
- data/test/spec/test_to_spec/test_case_ext_test.rb +0 -25
- data/test/spec/test_to_spec/testfiles/test_unit_api_spec.rb +0 -75
- data/test/spec/test_to_spec/testfiles/test_unit_api_test.rb +0 -70
- data/test/test_classes.rb +0 -102
- data/test/test_helper.rb +0 -32
data/CHANGES
CHANGED
@@ -1,10 +1,99 @@
|
|
1
1
|
= RSpec Changelog
|
2
2
|
|
3
|
+
== Version 0.7.0 (in SVN)
|
4
|
+
|
5
|
+
This is the "Grow up and eat your own dog food release". RSpec is now used on itself and
|
6
|
+
we're no longer using Test::Unit to test it. Although, we are still extending Test::Unit
|
7
|
+
for the rails plugin (indirectly - through ZenTest)
|
8
|
+
|
9
|
+
IMPORTANT NOTE: THIS RELEASE IS NOT 100% BACKWARDS COMPATIBLE TO 0.6.x
|
10
|
+
|
11
|
+
There are a few changes that will require that you change your existing specs.
|
12
|
+
|
13
|
+
--------------------------------------------------
|
14
|
+
RSpec now handles equality exactly like ruby does:
|
15
|
+
|
16
|
+
# actual.should_equal(expected) will pass if actual.equal?(expected) returns true
|
17
|
+
# actual.should_eql(expected) will pass if actual.eql?(expected) returns true
|
18
|
+
# actual.should == expected will pass if actual == expected) returns true
|
19
|
+
|
20
|
+
At the high level, eql? implies equivalence, while equal? implies object identity. For more
|
21
|
+
information on how ruby deals w/ equality, you should do this:
|
22
|
+
|
23
|
+
ri equal?
|
24
|
+
|
25
|
+
or look at this:
|
26
|
+
|
27
|
+
http://www.ruby-doc.org/core/classes/Object.html#M001057
|
28
|
+
|
29
|
+
Also, we left in should_be as a synonym for should_equal, so the only specs that should break are the
|
30
|
+
ones using should_equal (which used to use <code>==</code> instead of <code>.equal?</code>).
|
31
|
+
|
32
|
+
Lastly, should_be used to handle true and false differently from any other values. We've removed
|
33
|
+
this special handling, so now actual.should_be true will fail for any value other than true (it
|
34
|
+
used to pass for any non-nil, non-false value), and actual.should_be false will fail for any
|
35
|
+
value other than false (it used to pass for nil or false).
|
36
|
+
|
37
|
+
Here's what you'll need to do to update your specs:
|
38
|
+
* search for "should_equal" and replace with "should_eql"
|
39
|
+
* run specs
|
40
|
+
|
41
|
+
If any specs still fail, they are probably related to should_be(true) or should_be(false) using
|
42
|
+
non-boolean values. Those you'll just have to inspect manually and adjust appropriately (sorry!).
|
43
|
+
|
44
|
+
--------------------------------------------------
|
45
|
+
Specifying multiple return values in mocks now works like this:
|
46
|
+
|
47
|
+
mock.should_receive(:message).and_return(1,2,3)
|
48
|
+
|
49
|
+
It used to work like this:
|
50
|
+
|
51
|
+
mock.should_receive(:message).and_return([1,2,3])
|
52
|
+
|
53
|
+
but we decided that was counter intuitive and otherwise lame.
|
54
|
+
|
55
|
+
Here's what you'll need to do to update your specs:
|
56
|
+
* search for "and_return(["
|
57
|
+
* get rid of the "[" and "]"
|
58
|
+
|
59
|
+
--------------------------------------------------
|
60
|
+
RSpec on Rails now supports the following (thanks to ZenTest upon which it is built):
|
61
|
+
|
62
|
+
* Separate specs for models, views, controllers and helpers
|
63
|
+
* Controller specs are completely decoupled from the views by default (though you can tell them to couple themselves if you prefer)
|
64
|
+
* View specs are completely decoupled from app-specific controllers
|
65
|
+
|
66
|
+
See http://rspec.rubyforge.org/documentation/rails/index.html for more information
|
67
|
+
--------------------------------------------------
|
68
|
+
As usual, there are also other new features and bug fixes:
|
69
|
+
|
70
|
+
* Added lots of documentation on mocks/stubs and the rails plugin.
|
71
|
+
* Added support for assigns[key] syntax for controller specs (to align w/ pre-existing syntax for view specs)
|
72
|
+
* Added support for controller.should_redirect_to
|
73
|
+
* RSpec on Rails automatically checks whether it's compatible with the installed RSpec
|
74
|
+
* Applied [#6393] rspec_on_rails uses deprecated '@response' instead of the accessor
|
75
|
+
* RSpec now has 100% spec coverage(!)
|
76
|
+
* Added support for stubbing and partial mocking
|
77
|
+
* Progress (....F..F.) is now coloured. Tweaked patch from KAKUTANI Shintaro.
|
78
|
+
* Backtrace now excludes the rcov runner (/usr/local/bin/rcov)
|
79
|
+
* Fixed [#5539] predicates do not work w/ rails
|
80
|
+
* Added [#6091] support for Regexp matching messages sent to should_raise
|
81
|
+
* Added [#6333] support for Regexp matching in mock arguments
|
82
|
+
* Applied [#6283] refactoring of diff support to allow selectable formats and custom differs
|
83
|
+
* Fixed [#5564] "ruby spec_file.rb" doesn't work the same way as "spec spec_file.rb"
|
84
|
+
* Fixed [#6056] Multiple output of failing-spec notice
|
85
|
+
* Fixed [#6233] Colours in specdoc
|
86
|
+
* Applied [#6207] Allows --diff option to diff target and expected's #inspect output (Patch by Lachie Cox)
|
87
|
+
* Fixed [#6203] Failure messages are misleading - consider using inspect.
|
88
|
+
* Added [#6334] subject.should_have_xyz will try to call subject.has_xyz? - use this for hash.should_have_key(key)
|
89
|
+
* Fixed [#6017] Rake task should ignore empty or non-existent spec-dirs
|
90
|
+
|
3
91
|
== Version 0.6.4
|
4
92
|
|
5
93
|
In addition to a number of bug fixes and patches, this release begins to formalize the support for
|
6
94
|
RSpec on Rails.
|
7
95
|
|
96
|
+
* Added Christopher Petrilli's TextMate bundle to vendor/textmate/RSpec.tmbundle
|
8
97
|
* Fixed [#5909], once again supporting multi_word_predicates
|
9
98
|
* Applied [#5873] - response.should_have_rjs (initial patch from Jake Howerton, based on ARTS by Kevin Clark)
|
10
99
|
* Added generation of view specs for rspec_on_rails
|
@@ -75,7 +164,7 @@ This release improves Rails support and test2spec translation.
|
|
75
164
|
* Fixed underscore problems that occurred when RSpec was used in Rails
|
76
165
|
* Simplified the Rails support by packaging it as a plugin instead of a generator gem.
|
77
166
|
* Fixed [#5063] 'rspec_on_rails' require line in spec_helper.rb
|
78
|
-
* Added pre_commit rake task to reduce risk of regressions. Useful for
|
167
|
+
* Added pre_commit rake task to reduce risk of regressions. Useful for RSpec developers and patchers.
|
79
168
|
* Added failure_message to RSpec Rake task
|
80
169
|
* test2spec now defines converted helper methods outside of the setup block (bug #5057).
|
81
170
|
|
data/EXAMPLES.rd
CHANGED
@@ -1,11 +1,23 @@
|
|
1
1
|
# A FileAccessor
|
2
2
|
# * should open a file and pass it to the processor's process method
|
3
|
-
#
|
4
|
-
# * should
|
3
|
+
# a context with helper a method
|
4
|
+
# * should make that method available to specs
|
5
5
|
# An IoProcessor
|
6
6
|
# * should raise nothing when the file is exactly 32 bytes
|
7
7
|
# * should raise an exception when the file length is less than 32 bytes
|
8
|
-
# A
|
8
|
+
# A consumer of a mock
|
9
|
+
# * should be able to send messages to the mock
|
10
|
+
# a mock
|
11
|
+
# * should be able to mock the same message twice w/ different args
|
12
|
+
# * should be able to mock the same message twice w/ different args in reverse order
|
13
|
+
# A partial mock
|
14
|
+
# * should work at the class level
|
15
|
+
# * should revert to the original after each spec
|
16
|
+
# * can be mocked w/ ordering
|
17
|
+
# BDD framework
|
18
|
+
# * should be adopted quickly
|
19
|
+
# * should be intuitive
|
20
|
+
# A stack which is neither empty nor full
|
9
21
|
# * should add to the top when sent 'push'
|
10
22
|
# * should return the top item when sent 'peek'
|
11
23
|
# * should NOT remove the top item when sent 'peek'
|
@@ -28,7 +40,17 @@
|
|
28
40
|
# * should remain full after 'peek'
|
29
41
|
# * should no longer be full after 'pop'
|
30
42
|
# * should complain on 'push'
|
31
|
-
#
|
43
|
+
# A consumer of a stub
|
44
|
+
# * should be able to stub methods on any Object
|
45
|
+
# A stubbed method on a class
|
46
|
+
# * should return the stubbed value
|
47
|
+
# * should revert to the original method after each spec
|
48
|
+
# * can stub! and mock the same message
|
49
|
+
# A mock
|
50
|
+
# * can stub!
|
51
|
+
# * can stub! and mock
|
52
|
+
# * can stub! and mock the same message
|
53
|
+
# RSpec should integrate with Test::Unit::TestCase
|
32
54
|
# * TestCase#setup should be called.
|
33
|
-
# *
|
34
|
-
# *
|
55
|
+
# * RSpec should be able to access TestCase methods
|
56
|
+
# * RSpec should be able to accept included modules
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2005-2006 The RSpec Development Team
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
17
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
18
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
19
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
20
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README
CHANGED
@@ -1,15 +1,21 @@
|
|
1
|
-
|
1
|
+
== Building the RSpec gem ==
|
2
|
+
rake gem
|
3
|
+
gem install pkg/rspec-0.x.x.gem (you may have to sudo)
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
*
|
7
|
-
*
|
8
|
-
*
|
9
|
-
*
|
10
|
-
*
|
11
|
-
*
|
12
|
-
*
|
5
|
+
== Running the specs ==
|
6
|
+
In order to run RSpec's full suite of specs (rake pre_commit) you must install the following gems:
|
7
|
+
|
8
|
+
* rake # Runs the build script
|
9
|
+
* rcov # Verifies that the code is 100% covered by specs
|
10
|
+
* webgen # Generates the static HTML website
|
11
|
+
* RedCloth # Required by webgen
|
12
|
+
* syntax # Required by our own custom webgen extension to highlight ruby code
|
13
|
+
* diff-lcs # Required if you use the --diff switch
|
14
|
+
* win32console # Required by the --colour switch if you're on Windows
|
15
|
+
* meta_project # Required in order to make releases at RubyForge
|
16
|
+
* sqlite3-ruby # Required by RSpec on Rails specs
|
17
|
+
* ZenTest # Required by RSpec on Rails specs
|
18
|
+
* Rails # Required by RSpec on Rails specs
|
13
19
|
|
14
20
|
You must also install SQLite - which is needed to test the Rails plugin.
|
15
21
|
|
@@ -17,7 +23,7 @@ Note that RSpec itself - once built - doesn't have any dependencies outside the
|
|
17
23
|
and stdlib - with a few exceptions:
|
18
24
|
|
19
25
|
* The spec command line uses diff-lcs when --diff is specified.
|
20
|
-
* The test2spec command line uses ParseTree and RubyInline.
|
21
26
|
* The Spec::Rake::SpecTask needs RCov if RCov is enabled in the task.
|
27
|
+
* RSpec on Rails needs the ZenTest gem to be installed (and Rails and its dependencies of course)
|
22
28
|
|
23
29
|
See http://rspec.rubyforge.org for further documentation.
|
data/Rakefile
CHANGED
@@ -3,17 +3,15 @@ require 'rubygems'
|
|
3
3
|
require 'rake/gempackagetask'
|
4
4
|
require 'rake/contrib/rubyforgepublisher'
|
5
5
|
require 'rake/clean'
|
6
|
-
require 'rake/testtask'
|
7
6
|
require 'rake/rdoctask'
|
8
7
|
require 'spec/version'
|
9
|
-
require 'rcov/rcovtask'
|
10
8
|
|
11
9
|
# Some of the tasks are in separate files since they are also part of the website documentation
|
12
|
-
load File.dirname(__FILE__) + '/
|
13
|
-
load File.dirname(__FILE__) + '/
|
14
|
-
load File.dirname(__FILE__) + '/
|
15
|
-
load File.dirname(__FILE__) + '/
|
16
|
-
load File.dirname(__FILE__) + '/
|
10
|
+
load File.dirname(__FILE__) + '/tasks/examples.rake'
|
11
|
+
load File.dirname(__FILE__) + '/tasks/examples_specdoc.rake'
|
12
|
+
load File.dirname(__FILE__) + '/tasks/examples_with_rcov.rake'
|
13
|
+
load File.dirname(__FILE__) + '/tasks/failing_examples_with_html.rake'
|
14
|
+
load File.dirname(__FILE__) + '/tasks/verify_rcov.rake'
|
17
15
|
|
18
16
|
PKG_NAME = "rspec"
|
19
17
|
PKG_VERSION = Spec::VERSION::STRING
|
@@ -29,50 +27,22 @@ PKG_FILES = FileList[
|
|
29
27
|
'vendor/selenium/*.txt'
|
30
28
|
]
|
31
29
|
|
32
|
-
task :default => :
|
30
|
+
task :default => [:spec, :verify_rcov]
|
31
|
+
|
32
|
+
desc "Run all specs"
|
33
|
+
Spec::Rake::SpecTask.new do |t|
|
34
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
35
|
+
t.spec_opts = ['--diff','--color','--backtrace']
|
36
|
+
t.rcov = true
|
37
|
+
t.rcov_dir = 'doc/output/coverage'
|
38
|
+
t.rcov_opts = ['--exclude', 'spec\/spec,bin\/spec']
|
39
|
+
end
|
33
40
|
|
34
41
|
desc "Run all failing examples"
|
35
42
|
Spec::Rake::SpecTask.new('failing_examples') do |t|
|
36
43
|
t.spec_files = FileList['failing_examples/**/*_spec.rb']
|
37
44
|
end
|
38
45
|
|
39
|
-
require 'rbconfig'
|
40
|
-
windows = Config::CONFIG['target_os'] == 'mswin32'
|
41
|
-
Rake::TestTask.new do |t|
|
42
|
-
tests = FileList['test/**/*_test.rb']
|
43
|
-
tests.exclude 'test/spec/test_to_spec/*.rb' if windows
|
44
|
-
t.test_files = tests
|
45
|
-
t.verbose = true
|
46
|
-
# t.warning = true
|
47
|
-
end
|
48
|
-
|
49
|
-
Rcov::RcovTask.new do |t|
|
50
|
-
t.test_files = FileList['test/**/*_test.rb']
|
51
|
-
t.output_dir = 'doc/output/coverage'
|
52
|
-
t.rcov_opts = ['--text-report']
|
53
|
-
end
|
54
|
-
|
55
|
-
desc 'Translate our own tests to specs'
|
56
|
-
task :test2spec => :create_test2spec_dir do
|
57
|
-
rm_rf 'spec/translated'
|
58
|
-
`bin/test2spec --force --template spec/test2spec.erb --specdir spec/translated test`
|
59
|
-
# Remove the spec translations that we don't care about.
|
60
|
-
rm 'spec/translated/spec/test_to_spec/sexp_transformer_assertion_spec.rb'
|
61
|
-
rm 'spec/translated/spec/test_to_spec/sexp_transformer_spec.rb'
|
62
|
-
rm 'spec/translated/r2_r_spec.rb'
|
63
|
-
end
|
64
|
-
task :create_test2spec_dir do
|
65
|
-
mkdir_p 'doc/output/tools' unless File.exist? 'doc/output/tools'
|
66
|
-
end
|
67
|
-
|
68
|
-
desc 'Runs all RSpec specs - translated with test2spec from our own tests'
|
69
|
-
Spec::Rake::SpecTask.new('test2spec_test' => :test2spec) do |t|
|
70
|
-
t.spec_files = FileList['spec/**/*_spec.rb']
|
71
|
-
t.spec_opts = ["--format", "html", "--diff"]
|
72
|
-
t.out = 'doc/output/tools/rspec_specs.html'
|
73
|
-
t.failure_message = "**** Translated specs failed. See doc/output/tools/rspec_specs.html ****"
|
74
|
-
end
|
75
|
-
|
76
46
|
desc 'Verify that no warnings occur'
|
77
47
|
task :verify_warnings do
|
78
48
|
`ruby -w #{File.dirname(__FILE__) + '/bin/spec'} --help 2> warnings.txt`
|
@@ -82,7 +52,7 @@ task :verify_warnings do
|
|
82
52
|
end
|
83
53
|
|
84
54
|
desc 'Generate HTML documentation for website'
|
85
|
-
task :webgen
|
55
|
+
task :webgen do
|
86
56
|
Dir.chdir 'doc' do
|
87
57
|
output = nil
|
88
58
|
IO.popen('webgen 2>&1') do |io|
|
@@ -122,9 +92,9 @@ spec = Gem::Specification.new do |s|
|
|
122
92
|
s.require_path = 'lib'
|
123
93
|
s.autorequire = 'spec'
|
124
94
|
s.bindir = "bin"
|
125
|
-
s.executables = ["spec"
|
95
|
+
s.executables = ["spec"]
|
126
96
|
s.default_executable = "spec"
|
127
|
-
s.author = "Steven Baker, Aslak Hellesoy, Dave Astels, David Chelimsky"
|
97
|
+
s.author = ["Steven Baker", "Aslak Hellesoy", "Dave Astels", "David Chelimsky", "Brian Takita"]
|
128
98
|
s.email = "rspec-devel@rubyforge.org"
|
129
99
|
s.homepage = "http://rspec.rubyforge.org"
|
130
100
|
s.rubyforge_project = "rspec"
|
@@ -151,15 +121,44 @@ end
|
|
151
121
|
|
152
122
|
desc "Look for TODO and FIXME tags in the code"
|
153
123
|
task :todo do
|
154
|
-
egrep
|
124
|
+
egrep /(FIXME|TODO|TBD)/
|
155
125
|
end
|
156
126
|
|
157
127
|
task :clobber do
|
158
128
|
rm_rf 'doc/output'
|
159
|
-
rm_rf 'spec/translated'
|
160
129
|
end
|
161
130
|
|
162
|
-
|
131
|
+
desc "Touches files storing revisions so that svn will update $LastChangedRevision"
|
132
|
+
task :touch_revision_storing_files do
|
133
|
+
# See http://svnbook.red-bean.com/en/1.0/ch07s02.html - the section on svn:keywords
|
134
|
+
files = [
|
135
|
+
'lib/spec/version.rb',
|
136
|
+
'vendor/rspec_on_rails/vendor/plugins/rspec/lib/spec/rails/version.rb'
|
137
|
+
]
|
138
|
+
touch_needed = false
|
139
|
+
IO.popen('svn stat') do |io|
|
140
|
+
io.each_line do |line|
|
141
|
+
if line =~ /^M\s*(.*)/
|
142
|
+
touch_needed = !files.index($1)
|
143
|
+
break if touch_needed
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
if touch_needed
|
149
|
+
new_token = rand
|
150
|
+
files.each do |path|
|
151
|
+
abs_path = File.join(File.dirname(__FILE__), path)
|
152
|
+
content = File.open(abs_path).read
|
153
|
+
touched_content = content.gsub(/# RANDOM_TOKEN: (.*)\n/n, "# RANDOM_TOKEN: #{new_token}\n")
|
154
|
+
File.open(abs_path, 'w') do |io|
|
155
|
+
io.write touched_content
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
task :release => [:clobber, :verify_committed, :verify_user, :verify_password, :spec, :publish_packages, :tag, :publish_website, :publish_news]
|
163
162
|
|
164
163
|
desc "Verifies that there is no uncommitted code"
|
165
164
|
task :verify_committed do
|
@@ -178,7 +177,14 @@ task :tag do
|
|
178
177
|
end
|
179
178
|
|
180
179
|
desc "Run this task before you commit. You should see 'OK TO COMMIT'"
|
181
|
-
task :pre_commit => [
|
180
|
+
task :pre_commit => [
|
181
|
+
:touch_revision_storing_files,
|
182
|
+
:verify_warnings,
|
183
|
+
:website,
|
184
|
+
:examples,
|
185
|
+
:failing_examples_with_html,
|
186
|
+
:rails_pre_commit,
|
187
|
+
:commit_ok]
|
182
188
|
|
183
189
|
task :rails_pre_commit do
|
184
190
|
Dir.chdir 'vendor/rspec_on_rails' do
|
@@ -191,8 +197,8 @@ task :commit_ok do |t|
|
|
191
197
|
puts "OK TO COMMIT"
|
192
198
|
end
|
193
199
|
|
194
|
-
desc "Build the website
|
195
|
-
task :website => [:clobber, :
|
200
|
+
desc "Build the website, but do not publish it"
|
201
|
+
task :website => [:clobber, :verify_rcov, :webgen, :failing_examples_with_html, :spec, :examples_specdoc, :rdoc]
|
196
202
|
|
197
203
|
task :verify_user do
|
198
204
|
raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER']
|
@@ -5,18 +5,18 @@ require 'spec/runner/formatter/base_text_formatter'
|
|
5
5
|
# bin/spec failing_examples -r examples/custom_formatter.rb -f CustomFormatter
|
6
6
|
class CustomFormatter < Spec::Runner::Formatter::BaseTextFormatter
|
7
7
|
def add_context(name, first)
|
8
|
-
@output
|
8
|
+
@output.print "\n" if first
|
9
9
|
end
|
10
10
|
|
11
11
|
def spec_failed(name, counter, failure)
|
12
|
-
@output
|
12
|
+
@output.print 'X'
|
13
13
|
end
|
14
14
|
|
15
15
|
def spec_passed(name)
|
16
|
-
@output
|
16
|
+
@output.print '_'
|
17
17
|
end
|
18
18
|
|
19
19
|
def start_dump
|
20
|
-
@output
|
20
|
+
@output.print "\n"
|
21
21
|
end
|
22
22
|
end
|
data/examples/mocking_example.rb
CHANGED
@@ -1,11 +1,28 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../lib/spec'
|
2
2
|
|
3
3
|
context "A consumer of a mock" do
|
4
|
-
|
5
4
|
specify "should be able to send messages to the mock" do
|
6
5
|
mock = mock("poke me")
|
7
6
|
mock.should_receive(:poke)
|
8
7
|
mock.poke
|
9
8
|
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context "a mock" do
|
12
|
+
specify "should be able to mock the same message twice w/ different args" do
|
13
|
+
mock = mock("mock")
|
14
|
+
mock.should_receive(:msg).with(:arg1).and_return(:val1)
|
15
|
+
mock.should_receive(:msg).with(:arg2).and_return(:val2)
|
16
|
+
mock.msg(:arg1).should_eql(:val1)
|
17
|
+
mock.msg(:arg2).should_eql(:val2)
|
18
|
+
end
|
10
19
|
|
11
|
-
|
20
|
+
specify "should be able to mock the same message twice w/ different args in reverse order" do
|
21
|
+
mock = mock("mock")
|
22
|
+
mock.should_receive(:msg).with(:arg1).and_return(:val1)
|
23
|
+
mock.should_receive(:msg).with(:arg2).and_return(:val2)
|
24
|
+
mock.msg(:arg2).should_eql(:val2)
|
25
|
+
mock.msg(:arg1).should_eql(:val1)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|