diff options
Diffstat (limited to 'vendor/plugins/rspec')
164 files changed, 3010 insertions, 6040 deletions
diff --git a/vendor/plugins/rspec/CHANGES b/vendor/plugins/rspec/CHANGES index e17793323..f9c578cdd 100644 --- a/vendor/plugins/rspec/CHANGES +++ b/vendor/plugins/rspec/CHANGES @@ -1,3 +1,146 @@ +== Version 1.1.2 + +Minor bug fixes/enhancements. + +* RSpec's Autotest subclasses compatible with ZenTest-3.8.0 (thanks to Ryan Davis for making it easier on Autotest subs). +* Applied patch from idl to add spec/lib to rake stats. Closes #226. +* calling setup_fixtures and teardown_fixtures for Rails >= r8570. Closes #219. +* Applied patch from Josh Knowles using ActiveSupport's Inflector (when available) to make 'should have' read a bit better. Closes #197. +* Fixed regression in 1.1 that caused failing examples to fail to generate their own names. Closes #209. +* Applied doc patch from Jens Krämer for capturing content_for +* Applied patch from Alexander Lang to clean up story steps after each story. Closes #198. +* Applied patch from Josh Knowles to support 'string_or_response.should have_text(...)'. Closes #193. +* Applied patch from Ian Dees to quiet the Story Runner backtrace. Closes #183. +* Complete support for defining steps with regexp 'names'. + +== Version 1.1.1 + +Bug fix release. + +* Fix regression in 1.1.0 that caused transactions to not get rolled back between examples. +* Applied patch from Bob Cotton to reintroduce ExampleGroup.description_options. Closes LH[#186] + +== Version 1.1.0 + +The "tell me a story and go nest yourself" release. + +* Applied patch from Mike Vincent to handle generators rails > 2.0.1. Closes LH[#181] +* Formatter.pending signature changed so it gets passed an ExampleGroup instance instead of the name ( LH[#180]) +* Fixed LH[#180] Spec::Rails::Example::ModelExampleGroup and friends show up in rspec/rails output +* Spec::Rails no longer loads ActiveRecord extensions if it's disabled in config/boot.rb +* Applied LH[#178] small annoyances running specs with warnings enabled (Patch from Mikko Lehtonen) +* Tighter integration with Rails fixtures. Take advantage of fixture caching to get performance improvements (Thanks to Pat Maddox, Nick Kallen, Jonathan Barnes, and Curtis) + +== Version 1.1.0-RC1 + +Textmate Bundle users - this release adds a new RSpec bundle that highlights describe, it, before and after and +provides navigation to descriptions and examples (rather than classes and methods). When you first install this, +it is going to try to hijack all of your .rb files. All you need to do is open a .rb file that does not end with +'spec.rb' and change the bundle selection from RSpec to Ruby. TextMate will do the right thing from then on. + +Shortcuts for tab-activated snippets all follow the TextMate convention of 2 or 3 letters of the first word, followed by the first letter of each subsequent word. So "should have_at_least" would be triggered by shhal. + +We reduced the scope for running spec directories, files, a single file or individual spec in TextMate to source.ruby.rspec. This allowed us to restore the standard Ruby shortcuts: + +CMD-R runs all the specs in one file +CMD-SHIFT-R runs an individual spec +CMD-OPT-R runs any files or directories selected in the TextMate drawer + +rspec_on_rails users - don't forget to run script/generate rspec + +* Added shared_examples_for method, which you can (should) use instead of describe Foo, :shared => true +* Applied LH[#168] Fix describe Object, "description contains a # in it" (Patch from Martin Emde) +* Applied LH[#15] Reverse loading of ActionView::Base helper modules (Patch from Mark Van Holstyn) +* Applied LH[#149] Update contribute page to point towards lighthouse (Patch from Josh Knowles) +* Applied LH[#142] verify_rcov fails with latest rcov (Patch from Kyle Hargraves) +* Applied LH[#10] Allow stubs to yield and return values (Patch from Pat Maddox) +* Fixed LH[#139] version.rb in trunk missing svn last changed number +* Applied LH[#14] Adding support for by_at_least/by_at_most in Change matcher (Patch from Saimon Moore) +* Applied LH[#12] Fix for TM when switching to alternate file (Patch from Trevor Squires) +* Applied LH[#133] ExampleMatcher should match against before(:all) (Patch from Bob Cotton) +* Applied LH[#134] Only load spec inside spec_helper.rb (Patch from Mark Van Holstyn) +* RSpec now bails immediately if there are examples with identical names. +* Applied LH[#132] Plain Text stories should support Given and Given: (Patch from Jarkko Laine) +* Applied patch from Pat Maddox: Story Mediator - the glue that binds the plain text story parser with the rest of the system +* Applied LH[#16] Have SimpleMatchers expose their description for specdocs (Patch from Bryan Helmkamp) +* Stories now support --colour +* Changed the DSL modules to Example (i.e. Spec::Example instead of Spec::DSL) +* Applied [#15608] Story problem if parenthesis used in Given, When, Then or And (Patch from Sinclair Bain) +* Applied [#15659] GivenScenario fails when it is a RailsStory (Patch from Nathan Sutton) +* Fixed [#15639] rcov exclusion configuration. (Spec::Rails projects can configure rcov with spec/rcov.opts) +* The rdoc formatter (--format rdoc) is gone. It was buggy and noone was using it. +* Changed Spec::DSL::Behaviour to Spec::DSL::ExampleGroup +* Changed Spec::DSL::SharedBehaviour to Spec::DSL::SharedExampleGroup +* Applied [#14023] Small optimization for heavily proxied objects. (Patch from Ian Leitch) +* Applied [#13943] ProfileFormatter (Top 10 slowest examples) (Patch from Ian Leitch) +* Fixed [#15232] heckle is not working correctly in trunk (as of r2801) +* Applied [#14399] Show pending reasons in HTML report (Patch from Bryan Helmkamp) +* Discovered fixed: [#10263] mock "leak" when setting an expectation in a block passed to mock#should_receive +* Fixed [#14671] Spec::DSL::ExampleRunner gives "NO NAME because of --dry-run" for every example for 'rake spec:doc' +* Fixed [#14543] rspec_scaffold broken with Rails 2.0 +* Removed Patch [#10577] Rails with Oracle breaks 0.9.2 - was no longer necessary since we moved describe to the Main object (instead of Object) +* Fixed [#14527] specs run twice on rails 1.2.4 and rspec/rspec_on_rails trunk +* Applied [#14043] Change output ordering to show pending before errors (Patch from Mike Mangino) +* Applied [#14095] Don't have ./script/generate rspec create previous_failures.txt (Patch from Bryan Helmkamp) +* Applied [#14254] Improved error handling for Object#should and Object#should_not (Patch from Antti Tarvainen) +* Applied [#14186] Remove dead code from message_expecation.rb (Patch from Antti Tarvainen) +* Applied [#14183] Tiny improvement on mock_spec.rb (Patch from Antti Tarvainen) +* Applied [#14208] Fix to Mock#method_missing raising NameErrors instead of MockExpectationErrors (Patch from Antti Tarvainen) +* Applied [#14255] Fixed examples in mock_spec.rb and shared_behaviour_spec.rb (Patch from Antti Tarvainen) +* Applied [#14362] partially mocking objects that define == can blow up (Patch from Pat Maddox) +* test_ methods with an arity of 0 defined in a describe block or Example object will be run as an Example, providing a seamless transition from Test::Unit +* Removed BehaviourRunner +* Fixed [#13969] Spec Failures on Trunk w/ Autotest +* Applied [#14156] False positives with should_not (Patch from Antti Tarvainen) +* Applied [#14170] route_for and params_from internal specs fixed (Patch from Antti Tarvainen) +* Fixed [#14166] Cannot build trunk +* Applied [#14142] Fix for bug #11602: Nested #have_tag specifications fails on the wrong line number (Patch from Antti Tarvainen) +* Removed warn_if_no_files argument and feature +* Steps (Given/When/Then) with no blocks are treated as pending +* Applied [#13913] Scenario should treat no code block as pending (Patch from Evan Light) +* Fixed [#13370] Weird mock expectation error (Patch from Mike Mangino) +* Applied [#13952] Fix for performance regression introduced in r2096 (Patch from Ian Leitch) +* Applied [#13881] Dynamically include Helpers that are included on ActionView::Base (Patch from Brandon Keepers) +* Applied [#13833] ActionView::Helpers::JavaScriptMacrosHelper removed after 1.2.3 (Patch from Yurii Rashkovskii) +* Applied [#13814] RSpec on Rails w/ fixture-scenarios (Patch from Shintaro Kakutani) +* Add ability to define Example subclass instead of using describe +* Applied Patch from James Edward Gray II to improve syntax highlighting in TextMate +* Fixed [#13579] NoMethodError not raised for missing helper methods +* Fixed [#13713] form helper method 'select' can not be called when calling custom helper methods from specs +* Example subclasses Test::Unit::TestCase +* Added stub_everything method to create a stub that will return itself for any message it doesn't understand +* Added stories directory with stories/all.rb and stories/helper.rb when you script/generate rspec +* Applied [#13554] Add "And" so you can say Given... And... When... Then... And... +* Applied [#11254] RSpec syntax coloring and function pop-up integration in TextMate (Patch from Wincent Colaiuta) +* Applied [#13143] ActionView::Helpers::RecordIdentificationHelper should be included if present (Patch from Jay Levitt) +* Applied [#13567] patch to allow stubs to yield consecutive values (Patch from Rupert Voelcker) +* Applied [#13559] reverse version of route_for (Patch from Rupert Voelcker) +* Added [#13532] /lib specs should get base EvalContext +* Applied [#13451] Add a null_object option to mock_model (Patch from James Deville) +* Applied [#11919] Making non-implemented specs easy in textmate (Patch from Scott Taylor) +* Applied [#13274] ThrowSymbol recognized a NameError triggered by Kernel#method_missing as a thrown Symbol +* Applied [#12722] the alternate file command does not work in rails views due to scope (Patch from Carl Porth) +* Behaviour is now a Module that is used by Example class methods and SharedBehaviour +* Added ExampleDefinition +* Added story runner framework based on rbehave [#12628] +* Applied [#13336] Helper directory incorrect for rake stats in statsetup task (Patch from Curtis Miller) +* Applied [#13339] Add the ability for spec_parser to parse describes with :behaviour_type set (Patch from Will Leinweber and Dav Yaginuma) +* Fixed [#13271] incorrect behaviour with expect_render and stub_render +* Applied [#13129] Fix failing specs in spec_distributed (Patch from Bob Cotton) +* Applied [#13118] Rinda support for Spec::Distributed (Patch from Bob Cotton) +* Removed BehaviourEval +* Removed Behaviour#inherit +* Moved implementation of install_dependencies to example_rails_app +* Renamed RSPEC_DEPS to VENDOR_DEPS +* Added Example#not_implemented? +* You can now stub!(:msg).with(specific args) +* describe("A", Hash, "with one element") will generate description "A Hash with one element" (Tip from Ola Bini) +* Applied [#13016] [DOC] Point out that view specs render, well, a view (Patch from Jay Levitt) +* Applied [#13078] Develop rspec with autotest (Patch from Scott Taylor) +* Fixed [#13065] Named routes throw a NoMethodError in Helper specs (Patches from James Deville and Mike Mangino) +* Added (back) the verbose attribute in Spec::Rake::SpecTask +* Changed documentation to point at the new http svn URL, which is more accessible. + == Version 1.0.8 Another bugfix release - this time to resolve the version mismatch @@ -31,7 +174,7 @@ able to use the passed Example instance as if it were a String. * Applied [#12935] Remove requirement that mocha must be installed as a gem when used as mocking framework. (Patch from Ryan Kinderman). * Fixed [#12893] RSpec's Autotest should work with rspec's trunk * Fixed [#12865] Partial mock error when object has an @options instance var -* Applied [#12701] Allow checking of content captured with content_for in view specs (Patch from Jens Krämer) +* Applied [#12701] Allow checking of content captured with content_for in view specs (Patch from Jens Kr�mer) * Applied [#12817] Cannot include same shared behaviour when required with absolute paths (Patch from Ian Leitch) * Applied [#12719] rspec_on_rails should not include pagination helper (Patch from Matthijs Langenberg) * Fixed [#12714] helper spec not finding rails core helpers @@ -56,7 +199,7 @@ able to use the passed Example instance as if it were a String. * Fixed [#12079] auto-generated example name incomplete: should have 1 error on ....] * Applied [#12066] Docfix for mocks/mocks.page (Patch from Kyle Hargraves) * Fixed [#11891] script/generate rspec_controller fails to create appropriate views (from templates) on edge rails -* Applied [#11921] Adds the correct controller_name from derived_controller_name() to the ViewExampleController (Patch from Eloy Duran) +* Applied [#11921] Adds the correct controller_name from derived_controller_name() to the ViewExampleGroupController (Patch from Eloy Duran) * Fixed [#11903] config.include with behaviour_type 'hash' does not work * Examples without blocks and pending is now reported with a P instead of a * * Pending blocks that now pass are rendered blue diff --git a/vendor/plugins/rspec/README b/vendor/plugins/rspec/README index ee351245d..0683b0deb 100644 --- a/vendor/plugins/rspec/README +++ b/vendor/plugins/rspec/README @@ -1,11 +1,13 @@ == RSpec -RSpec is a Behaviour Definition Framework intended for use in Behaviour -Driven Development. RSpec plays the same role that a unit testing framework -would play in a Test Driven Development environment, but does so using -words and structures that better support BDD. +RSpec is a Behaviour Driven Development framework with tools to express User Stories +with Executable Scenarios and Executable Examples at the code level. -RSpec ships with four modules: +RSpec ships with several modules: + +Spec::Story provides a framework for expressing User Stories + +Spec::Example provides a framework for expressing code Examples Spec::Matchers provides Expression Matchers for use with Spec::Expectations and Spec::Mocks. @@ -18,9 +20,6 @@ can do things like: Spec::Mocks supports creating Mock Objects, Stubs, and adding Mock/Stub behaviour to your existing objects. -Spec::Runner provides a very small but powerful DSL for writing executable -examples of how your code should work. - == Installation The simplest approach is to install the gem: @@ -39,9 +38,8 @@ In order to run RSpec's full suite of specs (rake pre_commit) you must install t * rake # Runs the build script * rcov # Verifies that the code is 100% covered by specs -* webgen # Generates the static HTML website -* RedCloth # Required by webgen -* syntax # Required by our own custom webgen extension to highlight ruby code +* webby # Generates the static HTML website +* syntax # Required to highlight ruby code * diff-lcs # Required if you use the --diff switch * win32console # Required by the --colour switch if you're on Windows * meta_project # Required in order to make releases at RubyForge @@ -60,7 +58,6 @@ Once those are all installed, you should be able to run the suite with the follo * cd .. * rake pre_commit - Note that RSpec itself - once built - doesn't have any dependencies outside the Ruby core and stdlib - with a few exceptions: @@ -69,3 +66,6 @@ and stdlib - with a few exceptions: * The Spec::Rake::SpecTask needs RCov if RCov is enabled in the task. See http://rspec.rubyforge.org for further documentation. + +== Contributing + diff --git a/vendor/plugins/rspec/Rakefile b/vendor/plugins/rspec/Rakefile index 24ed57963..84d0b7da5 100644 --- a/vendor/plugins/rspec/Rakefile +++ b/vendor/plugins/rspec/Rakefile @@ -4,6 +4,7 @@ require 'rake/gempackagetask' require 'rake/contrib/rubyforgepublisher' require 'rake/clean' require 'rake/rdoctask' +require 'rake/testtask' require 'spec/version' dir = File.dirname(__FILE__) $LOAD_PATH.unshift(File.expand_path("#{dir}/../pre_commit/lib")) @@ -11,7 +12,6 @@ require "pre_commit" # Some of the tasks are in separate files since they are also part of the website documentation load File.dirname(__FILE__) + '/rake_tasks/examples.rake' -load File.dirname(__FILE__) + '/rake_tasks/examples_specdoc.rake' load File.dirname(__FILE__) + '/rake_tasks/examples_with_rcov.rake' load File.dirname(__FILE__) + '/rake_tasks/failing_examples_with_html.rake' load File.dirname(__FILE__) + '/rake_tasks/verify_rcov.rake' @@ -24,42 +24,36 @@ PKG_FILES = FileList[ 'lib/**/*.rb', 'spec/**/*.rb', 'examples/**/*', - 'plugins/**/*' + 'plugins/**/*', + 'stories/**/*' ] -FileUtils.touch(File.dirname(__FILE__) + '/previous_failures.txt') task :default => [:verify_rcov] +task :verify_rcov => [:spec, :stories] desc "Run all specs" Spec::Rake::SpecTask.new do |t| - t.spec_files = FileList[ - 'spec/**/*_spec.rb', - '../RSpec.tmbundle/Support/spec/*_spec.rb' - # TODO: get these in too - need to fix coverage - # '../spec_ui/spec/**/*_spec.rb' - ] + t.spec_files = FileList['spec/**/*_spec.rb'] t.spec_opts = ['--options', 'spec.opts'] - t.rcov = true - t.rcov_dir = '../doc/output/coverage' - t.rcov_opts = ['--exclude', 'spec\/spec,bin\/spec,examples'] + unless ENV['NO_RCOV'] + t.rcov = true + t.rcov_dir = '../doc/output/coverage' + t.rcov_opts = ['--exclude', 'spec\/spec,bin\/spec,examples,\/var\/lib\/gems,\/Library\/Ruby,\.autotest'] + end end -desc "Run all translated specs" -Spec::Rake::SpecTask.new('translated_specs') do |t| - t.spec_files = FileList['translated_specs/**/*_spec.rb'].exclude( # These translate, but have other quirks - 'translated_specs/spec/translator_spec.rb', - 'translated_specs/spec/runner/formatter/html_formatter_spec.rb', - 'translated_specs/spec/runner/option_parser_spec.rb' - ) - t.spec_opts = ['--options', 'spec.opts'] - t.rcov = true - t.rcov_dir = '../doc/output/coverage' - t.rcov_opts = ['--exclude', 'spec\/spec,bin\/spec,examples'] +desc "Run all stories" +task :stories do + html = 'story_server/prototype/rspec_stories.html' + ruby "stories/all.rb --colour --format plain --format html:#{html}" + unless IO.read(html) =~ /<span class="param">/m + raise 'highlighted parameters are broken in story HTML' + end end desc "Run all specs and store html output in doc/output/report.html" Spec::Rake::SpecTask.new('spec_html') do |t| - t.spec_files = FileList['spec/**/*_spec.rb', 'vendor/RSpec.tmbundle/Support/spec/*_spec.rb'] + t.spec_files = FileList['spec/**/*_spec.rb', '../../RSpec.tmbundle/Support/spec/*_spec.rb'] t.spec_opts = ['--format html:../doc/output/report.html','--backtrace'] end @@ -68,21 +62,11 @@ Spec::Rake::SpecTask.new('failing_examples') do |t| t.spec_files = FileList['failing_examples/**/*_spec.rb'] end -desc 'Generate HTML documentation for website' -task :webgen do - core.webgen -end - desc 'Generate RDoc' rd = Rake::RDocTask.new do |rdoc| rdoc.rdoc_dir = '../doc/output/rdoc' rdoc.options << '--title' << 'RSpec' << '--line-numbers' << '--inline-source' << '--main' << 'README' - rdoc.rdoc_files.include('README', 'CHANGES', 'MIT-LICENSE', 'EXAMPLES.rd', 'UPGRADE', 'lib/**/*.rb') -end - -desc "Generate EXAMPLES.rb" -task :rdoc do - core.rdoc + rdoc.rdoc_files.include('README', 'CHANGES', 'MIT-LICENSE', 'UPGRADE', 'lib/**/*.rb') end spec = Gem::Specification.new do |s| @@ -103,13 +87,13 @@ spec = Gem::Specification.new do |s| s.rdoc_options = rd.options s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$|^EXAMPLES.rd$/ }.to_a - s.autorequire = 'spec' s.bindir = 'bin' s.executables = ['spec', 'spec_translator'] s.default_executable = 'spec' s.author = "RSpec Development Team" s.email = "rspec-devel@rubyforge.org" s.homepage = "http://rspec.rubyforge.org" + s.platform = Gem::Platform::RUBY s.rubyforge_project = "rspec" end @@ -141,7 +125,7 @@ task :clobber do core.clobber end -task :release => [:clobber, :verify_committed, :verify_user, :spec, :publish_packages, :tag, :publish_website, :publish_news] +task :release => [:clobber, :verify_committed, :verify_user, :spec, :publish_packages, :tag, :publish_news] desc "Verifies that there is no uncommitted code" task :verify_committed do @@ -177,9 +161,7 @@ task(:pre_commit) {core.pre_commit} desc "Build the website, but do not publish it" task(:website) {core.website} -task :rdoc_rails do - core.rdoc_rails -end +task(:rdoc_rails) {core.rdoc_rails} task :verify_user do raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER'] @@ -231,24 +213,14 @@ task :package_tmbundle do end task :pkg => :package_tmbundle -desc "Package the Spec::Ui gem" -task :package_spec_ui do - Dir.chdir '../spec_ui' do - `rake clobber gem` - end -end -task :pkg => :package_spec_ui - desc "Publish gem+tgz+zip on RubyForge. You must make sure lib/version.rb is aligned with the CHANGELOG file" task :publish_packages => [:verify_user, :package] do - require File.dirname(__FILE__) + '/../spec_ui/lib/spec/ui/version' release_files = FileList[ "pkg/#{PKG_FILE_NAME}.gem", "pkg/#{PKG_FILE_NAME}.tgz", "pkg/rspec_on_rails-#{PKG_VERSION}.tgz", "pkg/#{PKG_FILE_NAME}.zip", - "pkg/RSpec-#{PKG_VERSION}.tmbundle.tgz", - "../spec_ui/pkg/spec_ui-#{Spec::Ui::VERSION::STRING}.gem" + "pkg/RSpec-#{PKG_VERSION}.tmbundle.tgz" ] unless Spec::VERSION::RELEASE_CANDIDATE require 'meta_project' diff --git a/vendor/plugins/rspec/bin/spec b/vendor/plugins/rspec/bin/spec index a7e6ce0cb..283176d76 100755 --- a/vendor/plugins/rspec/bin/spec +++ b/vendor/plugins/rspec/bin/spec @@ -1,3 +1,4 @@ +#!/usr/bin/env ruby $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib")) require 'spec' -::Spec::Runner::CommandLine.run(ARGV, STDERR, STDOUT, true, true) +exit ::Spec::Runner::CommandLine.run(rspec_options) diff --git a/vendor/plugins/rspec/bin/spec_translator b/vendor/plugins/rspec/bin/spec_translator index 9df11dad2..abd50b743 100755 --- a/vendor/plugins/rspec/bin/spec_translator +++ b/vendor/plugins/rspec/bin/spec_translator @@ -1,8 +1,8 @@ -#!/usr/bin/env ruby
-raise "\n\nUsage: spec_translator from_dir to_dir\n\n" if ARGV.size != 2
-$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
-require 'spec/translator'
-t = ::Spec::Translator.new
-from = ARGV[0]
-to = ARGV[1]
-t.translate(from, to)
+#!/usr/bin/env ruby +raise "\n\nUsage: spec_translator from_dir to_dir\n\n" if ARGV.size != 2 +$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib")) +require 'spec/translator' +t = ::Spec::Translator.new +from = ARGV[0] +to = ARGV[1] +t.translate(from, to) diff --git a/vendor/plugins/rspec/examples/auto_spec_description_example.rb b/vendor/plugins/rspec/examples/auto_spec_description_example.rb deleted file mode 100644 index a4928ef4a..000000000 --- a/vendor/plugins/rspec/examples/auto_spec_description_example.rb +++ /dev/null @@ -1,19 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper' - -# Run spec w/ -fs to see the output of this file - -describe "Examples with no descriptions" do - - # description is auto-generated as "should equal(5)" based on the last #should - it do - 3.should equal(3) - 5.should equal(5) - end - - it { 3.should be < 5 } - - it { ["a"].should include("a") } - - it { [1,2,3].should respond_to(:size) } - -end diff --git a/vendor/plugins/rspec/examples/before_and_after_example.rb b/vendor/plugins/rspec/examples/before_and_after_example.rb deleted file mode 100644 index 09e3805fb..000000000 --- a/vendor/plugins/rspec/examples/before_and_after_example.rb +++ /dev/null @@ -1,39 +0,0 @@ -$global = 0 - -describe "State created in before(:all)" do - before :all do - @sideeffect = 1 - $global +=1 - end - - before :each do - @isolated = 1 - end - - it "should be accessible from example" do - @sideeffect.should == 1 - $global.should == 1 - @isolated.should == 1 - - @sideeffect += 1 - @isolated += 1 - end - - it "should not have sideffects" do - @sideeffect.should == 1 - $global.should == 2 - @isolated.should == 1 - - @sideeffect += 1 - @isolated += 1 - end - - after :each do - $global += 1 - end - - after :all do - $global.should == 3 - $global = 0 - end -end diff --git a/vendor/plugins/rspec/examples/behave_as_example.rb b/vendor/plugins/rspec/examples/behave_as_example.rb deleted file mode 100755 index e95d1469a..000000000 --- a/vendor/plugins/rspec/examples/behave_as_example.rb +++ /dev/null @@ -1,45 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper' - -def behave_as_electric_musician - respond_to(:read_notes, :turn_down_amp) -end - -def behave_as_musician - respond_to(:read_notes) -end - -module BehaveAsExample - - class BluesGuitarist - def read_notes; end - def turn_down_amp; end - end - - class RockGuitarist - def read_notes; end - def turn_down_amp; end - end - - class ClassicGuitarist - def read_notes; end - end - - describe BluesGuitarist do - it "should behave as guitarist" do - BluesGuitarist.new.should behave_as_electric_musician - end - end - - describe RockGuitarist do - it "should behave as guitarist" do - RockGuitarist.new.should behave_as_electric_musician - end - end - - describe ClassicGuitarist do - it "should not behave as guitarist" do - ClassicGuitarist.new.should behave_as_musician - end - end - -end diff --git a/vendor/plugins/rspec/examples/custom_expectation_matchers.rb b/vendor/plugins/rspec/examples/custom_expectation_matchers.rb deleted file mode 100644 index 075bb542d..000000000 --- a/vendor/plugins/rspec/examples/custom_expectation_matchers.rb +++ /dev/null @@ -1,54 +0,0 @@ -module AnimalSpecHelper - class Eat - def initialize(food) - @food = food - end - - def matches?(animal) - @animal = animal - @animal.eats?(@food) - end - - def failure_message - "expected #{@animal} to eat #{@food}, but it does not" - end - - def negative_failure_message - "expected #{@animal} not to eat #{@food}, but it does" - end - end - - def eat(food) - Eat.new(food) - end -end - -module Animals - class Animal - def eats?(food) - return foods_i_eat.include?(food) - end - end - - class Mouse < Animal - def foods_i_eat - [:cheese] - end - end - - describe Mouse do - include AnimalSpecHelper - before(:each) do - @mouse = Animals::Mouse.new - end - - it "should eat cheese" do - @mouse.should eat(:cheese) - end - - it "should not eat cat" do - @mouse.should_not eat(:cat) - end - end - -end diff --git a/vendor/plugins/rspec/examples/custom_formatter.rb b/vendor/plugins/rspec/examples/custom_formatter.rb deleted file mode 100644 index 851c9906f..000000000 --- a/vendor/plugins/rspec/examples/custom_formatter.rb +++ /dev/null @@ -1,11 +0,0 @@ -require 'spec/runner/formatter/progress_bar_formatter' - -# Example of a formatter with custom bactrace printing. Run me with: -# ruby bin/spec failing_examples -r examples/custom_formatter.rb -f CustomFormatter -class CustomFormatter < Spec::Runner::Formatter::ProgressBarFormatter - def backtrace_line(line) - line.gsub(/([^:]*\.rb):(\d*)/) do - "<a href=\"file://#{File.expand_path($1)}\">#{$1}:#{$2}</a> " - end - end -end diff --git a/vendor/plugins/rspec/examples/dynamic_spec.rb b/vendor/plugins/rspec/examples/dynamic_spec.rb deleted file mode 100644 index 15d473d61..000000000 --- a/vendor/plugins/rspec/examples/dynamic_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper' - -describe "Some integers" do - (1..10).each do |n| - it "The root of #{n} square should be #{n}" do - Math.sqrt(n*n).should == n - end - end -end diff --git a/vendor/plugins/rspec/examples/file_accessor.rb b/vendor/plugins/rspec/examples/file_accessor.rb deleted file mode 100644 index 16bc45dbb..000000000 --- a/vendor/plugins/rspec/examples/file_accessor.rb +++ /dev/null @@ -1,18 +0,0 @@ -class FileAccessor - def open_and_handle_with(pathname, processor) - pathname.open do |io| - processor.process(io) - end - end -end - -if __FILE__ == $0 - require File.dirname(__FILE__) + '/io_processor' - require 'pathname' - - accessor = FileAccessor.new - io_processor = IoProcessor.new - file = Pathname.new ARGV[0] - - accessor.open_and_handle_with(file, io_processor) -end diff --git a/vendor/plugins/rspec/examples/file_accessor_spec.rb b/vendor/plugins/rspec/examples/file_accessor_spec.rb deleted file mode 100644 index 628d4c0b0..000000000 --- a/vendor/plugins/rspec/examples/file_accessor_spec.rb +++ /dev/null @@ -1,38 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper' -require File.dirname(__FILE__) + '/file_accessor' -require 'stringio' - -describe "A FileAccessor" do - # This sequence diagram illustrates what this spec specifies. - # - # +--------------+ +----------+ +-------------+ - # | FileAccessor | | Pathname | | IoProcessor | - # +--------------+ +----------+ +-------------+ - # | | | - # open_and_handle_with | | | - # -------------------->| | open | | - # | |--------------->| | | - # | | io | | | - # | |<...............| | | - # | | | process(io) | - # | |---------------------------------->| | - # | | | | | - # | |<..................................| | - # | | | - # - it "should open a file and pass it to the processor's process method" do - # This is the primary actor - accessor = FileAccessor.new - - # These are the primary actor's neighbours, which we mock. - file = mock "Pathname" - io_processor = mock "IoProcessor" - - io = StringIO.new "whatever" - file.should_receive(:open).and_yield io - io_processor.should_receive(:process).with(io) - - accessor.open_and_handle_with(file, io_processor) - end - -end diff --git a/vendor/plugins/rspec/examples/greeter_spec.rb b/vendor/plugins/rspec/examples/greeter_spec.rb deleted file mode 100644 index 7d67e3187..000000000 --- a/vendor/plugins/rspec/examples/greeter_spec.rb +++ /dev/null @@ -1,30 +0,0 @@ -# greeter.rb -# -# Based on http://glu.ttono.us/articles/2006/12/19/tormenting-your-tests-with-heckle -# -# Run with: -# -# spec greeter_spec.rb --heckle Greeter -# -class Greeter - def initialize(person = nil) - @person = person - end - - def greet - @person.nil? ? "Hi there!" : "Hi #{@person}!" - end -end - -describe "Greeter" do - it "should say Hi to person" do - greeter = Greeter.new("Kevin") - greeter.greet.should == "Hi Kevin!" - end - - it "should say Hi to nobody" do - greeter = Greeter.new - # Uncomment the next line to make Heckle happy - #greeter.greet.should == "Hi there!" - end -end diff --git a/vendor/plugins/rspec/examples/helper_method_example.rb b/vendor/plugins/rspec/examples/helper_method_example.rb deleted file mode 100644 index 5f94cf151..000000000 --- a/vendor/plugins/rspec/examples/helper_method_example.rb +++ /dev/null @@ -1,11 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper' - -describe "a context with helper a method" do - def helper_method - "received call" - end - - it "should make that method available to specs" do - helper_method.should == "received call" - end -end diff --git a/vendor/plugins/rspec/examples/io_processor.rb b/vendor/plugins/rspec/examples/io_processor.rb deleted file mode 100644 index 6b15147b6..000000000 --- a/vendor/plugins/rspec/examples/io_processor.rb +++ /dev/null @@ -1,8 +0,0 @@ -class DataTooShort < StandardError; end - -class IoProcessor - # Does some fancy stuff unless the length of +io+ is shorter than 32 - def process(io) - raise DataTooShort if io.read.length < 32 - end -end diff --git a/vendor/plugins/rspec/examples/io_processor_spec.rb b/vendor/plugins/rspec/examples/io_processor_spec.rb deleted file mode 100644 index 5cab7bf31..000000000 --- a/vendor/plugins/rspec/examples/io_processor_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper' -require File.dirname(__FILE__) + '/io_processor' -require 'stringio' - -describe "An IoProcessor" do - before(:each) do - @processor = IoProcessor.new - end - - it "should raise nothing when the file is exactly 32 bytes" do - lambda { - @processor.process(StringIO.new("z"*32)) - }.should_not raise_error - end - - it "should raise an exception when the file length is less than 32 bytes" do - lambda { - @processor.process(StringIO.new("z"*31)) - }.should raise_error(DataTooShort) - end -end diff --git a/vendor/plugins/rspec/examples/legacy_spec.rb b/vendor/plugins/rspec/examples/legacy_spec.rb deleted file mode 100644 index 61669e7e6..000000000 --- a/vendor/plugins/rspec/examples/legacy_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -context "A legacy spec" do - setup do - end - - specify "should work fine" do - end - - teardown do - end -end diff --git a/vendor/plugins/rspec/examples/mocking_example.rb b/vendor/plugins/rspec/examples/mocking_example.rb deleted file mode 100644 index 6adbef59d..000000000 --- a/vendor/plugins/rspec/examples/mocking_example.rb +++ /dev/null @@ -1,27 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper' - -describe "A consumer of a mock" do - it "should be able to send messages to the mock" do - mock = mock("poke me") - mock.should_receive(:poke) - mock.poke - end -end - -describe "a mock" do - it "should be able to mock the same message twice w/ different args" do - mock = mock("mock") - mock.should_receive(:msg).with(:arg1).and_return(:val1) - mock.should_receive(:msg).with(:arg2).and_return(:val2) - mock.msg(:arg1).should eql(:val1) - mock.msg(:arg2).should eql(:val2) - end - - it "should be able to mock the same message twice w/ different args in reverse order" do - mock = mock("mock") - mock.should_receive(:msg).with(:arg1).and_return(:val1) - mock.should_receive(:msg).with(:arg2).and_return(:val2) - mock.msg(:arg2).should eql(:val2) - mock.msg(:arg1).should eql(:val1) - end -end diff --git a/vendor/plugins/rspec/examples/multi_threaded_behaviour_runner.rb b/vendor/plugins/rspec/examples/multi_threaded_behaviour_runner.rb deleted file mode 100644 index e2824a61e..000000000 --- a/vendor/plugins/rspec/examples/multi_threaded_behaviour_runner.rb +++ /dev/null @@ -1,25 +0,0 @@ - -class MultiThreadedBehaviourRunner < Spec::Runner::BehaviourRunner - def initialize(options) - super - # configure these - @thread_count = 4 - @thread_wait = 0 - end - - def run_behaviours(behaviours) - @threads = [] - q = Queue.new - behaviours.each { |b| q << b} - @thread_count.times do - @threads << Thread.new(q) do |queue| - while not queue.empty? - behaviour = queue.pop - behaviour.run(@options.reporter, @options.dry_run, @options.reverse) - end - end - sleep @thread_wait - end - @threads.each {|t| t.join} - end -end diff --git a/vendor/plugins/rspec/examples/partial_mock_example.rb b/vendor/plugins/rspec/examples/partial_mock_example.rb deleted file mode 100644 index 841ec8847..000000000 --- a/vendor/plugins/rspec/examples/partial_mock_example.rb +++ /dev/null @@ -1,28 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper' - -class MockableClass - def self.find id - return :original_return - end -end - -describe "A partial mock" do - - it "should work at the class level" do - MockableClass.should_receive(:find).with(1).and_return {:stub_return} - MockableClass.find(1).should equal(:stub_return) - end - - it "should revert to the original after each spec" do - MockableClass.find(1).should equal(:original_return) - end - - it "can be mocked w/ ordering" do - MockableClass.should_receive(:msg_1).ordered - MockableClass.should_receive(:msg_2).ordered - MockableClass.should_receive(:msg_3).ordered - MockableClass.msg_1 - MockableClass.msg_2 - MockableClass.msg_3 - end -end diff --git a/vendor/plugins/rspec/examples/pending_example.rb b/vendor/plugins/rspec/examples/pending_example.rb deleted file mode 100644 index 13f3d00c4..000000000 --- a/vendor/plugins/rspec/examples/pending_example.rb +++ /dev/null @@ -1,20 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper' - -describe "pending example (using pending method)" do - it %Q|should be reported as "PENDING: for some reason"| do - pending("for some reason") - end -end - -describe "pending example (with no block)" do - it %Q|should be reported as "PENDING: Not Yet Implemented"| -end - -describe "pending example (with block for pending)" do - it %Q|should have a failing block, passed to pending, reported as "PENDING: for some reason"| do - pending("for some reason") do - raise "some reason" - end - end -end - diff --git a/vendor/plugins/rspec/examples/predicate_example.rb b/vendor/plugins/rspec/examples/predicate_example.rb deleted file mode 100644 index 1202bb670..000000000 --- a/vendor/plugins/rspec/examples/predicate_example.rb +++ /dev/null @@ -1,27 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper' - -class BddFramework - def intuitive? - true - end - - def adopted_quickly? - true - end -end - -describe "BDD framework" do - - before(:each) do - @bdd_framework = BddFramework.new - end - - it "should be adopted quickly" do - @bdd_framework.should be_adopted_quickly - end - - it "should be intuitive" do - @bdd_framework.should be_intuitive - end - -end diff --git a/vendor/plugins/rspec/examples/priority.txt b/vendor/plugins/rspec/examples/priority.txt deleted file mode 100644 index 5b00064e2..000000000 --- a/vendor/plugins/rspec/examples/priority.txt +++ /dev/null @@ -1 +0,0 @@ -examples/custom_expectation_matchers.rb
\ No newline at end of file diff --git a/vendor/plugins/rspec/examples/shared_behaviours_example.rb b/vendor/plugins/rspec/examples/shared_behaviours_example.rb deleted file mode 100644 index 33c924643..000000000 --- a/vendor/plugins/rspec/examples/shared_behaviours_example.rb +++ /dev/null @@ -1,39 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper' - -module SharedBehaviourExample - class OneThing - def what_things_do - "stuff" - end - end - - class AnotherThing - def what_things_do - "stuff" - end - end - - describe "All Things", :shared => true do - def helper_method - "helper method" - end - - it "should do what things do" do - @thing.what_things_do.should == "stuff" - end - end - - describe OneThing do - it_should_behave_like "All Things" - before(:each) { @thing = OneThing.new } - - it "should have access to helper methods defined in the shared behaviour" do - helper_method.should == "helper method" - end - end - - describe AnotherThing do - it_should_behave_like "All Things" - before(:each) { @thing = AnotherThing.new } - end -end diff --git a/vendor/plugins/rspec/examples/spec_helper.rb b/vendor/plugins/rspec/examples/spec_helper.rb deleted file mode 100644 index 61f51fbdb..000000000 --- a/vendor/plugins/rspec/examples/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -require File.dirname(__FILE__) + '/../lib/spec' diff --git a/vendor/plugins/rspec/examples/stack.rb b/vendor/plugins/rspec/examples/stack.rb deleted file mode 100644 index 407173f7b..000000000 --- a/vendor/plugins/rspec/examples/stack.rb +++ /dev/null @@ -1,36 +0,0 @@ -class StackUnderflowError < RuntimeError -end - -class StackOverflowError < RuntimeError -end - -class Stack - - def initialize - @items = [] - end - - def push object - raise StackOverflowError if @items.length == 10 - @items.push object - end - - def pop - raise StackUnderflowError if @items.empty? - @items.delete @items.last - end - - def peek - raise StackUnderflowError if @items.empty? - @items.last - end - - def empty? - @items.empty? - end - - def full? - @items.length == 10 - end - -end diff --git a/vendor/plugins/rspec/examples/stack_spec.rb b/vendor/plugins/rspec/examples/stack_spec.rb deleted file mode 100644 index 22d8a652b..000000000 --- a/vendor/plugins/rspec/examples/stack_spec.rb +++ /dev/null @@ -1,97 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper' -require File.dirname(__FILE__) + "/stack" - -describe "non-empty Stack", :shared => true do - # NOTE that this one auto-generates the description "should not be empty" - it { @stack.should_not be_empty } - - it "should return the top item when sent #peek" do - @stack.peek.should == @last_item_added - end - - it "should NOT remove the top item when sent #peek" do - @stack.peek.should == @last_item_added - @stack.peek.should == @last_item_added - end - - it "should return the top item when sent #pop" do - @stack.pop.should == @last_item_added - end - - it "should remove the top item when sent #pop" do - @stack.pop.should == @last_item_added - unless @stack.empty? - @stack.pop.should_not == @last_item_added - end - end -end - -describe "non-full Stack", :shared => true do - # NOTE that this one auto-generates the description "should not be full" - it { @stack.should_not be_full } - - it "should add to the top when sent #push" do - @stack.push "newly added top item" - @stack.peek.should == "newly added top item" - end -end - -describe Stack, " (empty)" do - before(:each) do - @stack = Stack.new - end - - # NOTE that this one auto-generates the description "should be empty" - it { @stack.should be_empty } - - it_should_behave_like "non-full Stack" - - it "should complain when sent #peek" do - lambda { @stack.peek }.should raise_error(StackUnderflowError) - end - - it "should complain when sent #pop" do - lambda { @stack.pop }.should raise_error(StackUnderflowError) - end -end - -describe Stack, " (with one item)" do - before(:each) do - @stack = Stack.new - @stack.push 3 - @last_item_added = 3 - end - - it_should_behave_like "non-empty Stack" - it_should_behave_like "non-full Stack" - -end - -describe Stack, " (with one item less than capacity)" do - before(:each) do - @stack = Stack.new - (1..9).each { |i| @stack.push i } - @last_item_added = 9 - end - - it_should_behave_like "non-empty Stack" - it_should_behave_like "non-full Stack" -end - -describe Stack, " (full)" do - before(:each) do - @stack = Stack.new - (1..10).each { |i| @stack.push i } - @last_item_added = 10 - end - - # NOTE that this one auto-generates the description "should be full" - it { @stack.should be_full } - - it_should_behave_like "non-empty Stack" - - it "should complain on #push" do - lambda { @stack.push Object.new }.should raise_error(StackOverflowError) - end - -end diff --git a/vendor/plugins/rspec/examples/stubbing_example.rb b/vendor/plugins/rspec/examples/stubbing_example.rb deleted file mode 100644 index 31354aec6..000000000 --- a/vendor/plugins/rspec/examples/stubbing_example.rb +++ /dev/null @@ -1,69 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper' - -describe "A consumer of a stub" do - it "should be able to stub methods on any Object" do - obj = Object.new - obj.stub!(:foobar).and_return {:return_value} - obj.foobar.should equal(:return_value) - end -end - -class StubbableClass - def self.find id - return :original_return - end -end - -describe "A stubbed method on a class" do - it "should return the stubbed value" do - StubbableClass.stub!(:find).and_return(:stub_return) - StubbableClass.find(1).should equal(:stub_return) - end - - it "should revert to the original method after each spec" do - StubbableClass.find(1).should equal(:original_return) - end - - it "can stub! and mock the same message" do - StubbableClass.stub!(:msg).and_return(:stub_value) - StubbableClass.should_receive(:msg).with(:arg).and_return(:mock_value) - - StubbableClass.msg.should equal(:stub_value) - StubbableClass.msg(:other_arg).should equal(:stub_value) - StubbableClass.msg(:arg).should equal(:mock_value) - StubbableClass.msg(:another_arg).should equal(:stub_value) - StubbableClass.msg(:yet_another_arg).should equal(:stub_value) - StubbableClass.msg.should equal(:stub_value) - end -end - -describe "A mock" do - it "can stub!" do - mock = mock("stubbing mock") - mock.stub!(:msg).and_return(:value) - (1..10).each {mock.msg.should equal(:value)} - end - - it "can stub! and mock" do - mock = mock("stubbing mock") - mock.stub!(:stub_message).and_return(:stub_value) - mock.should_receive(:mock_message).once.and_return(:mock_value) - (1..10).each {mock.stub_message.should equal(:stub_value)} - mock.mock_message.should equal(:mock_value) - (1..10).each {mock.stub_message.should equal(:stub_value)} - end - - it "can stub! and mock the same message" do - mock = mock("stubbing mock") - mock.stub!(:msg).and_return(:stub_value) - mock.should_receive(:msg).with(:arg).and_return(:mock_value) - mock.msg.should equal(:stub_value) - mock.msg(:other_arg).should equal(:stub_value) - mock.msg(:arg).should equal(:mock_value) - mock.msg(:another_arg).should equal(:stub_value) - mock.msg(:yet_another_arg).should equal(:stub_value) - mock.msg.should equal(:stub_value) - end -end - - diff --git a/vendor/plugins/rspec/examples/test_case_adapter_example.rb b/vendor/plugins/rspec/examples/test_case_adapter_example.rb deleted file mode 100755 index 02ba3be17..000000000 --- a/vendor/plugins/rspec/examples/test_case_adapter_example.rb +++ /dev/null @@ -1,26 +0,0 @@ -#This is an example of using RSpec's expectations in test/unit. -$LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "lib") - -require 'test/unit' -require 'spec/test_case_adapter' - -class IntegratingRSpecExpectationsIntoTestCaseTest < Test::Unit::TestCase - - def test_should_support_rspecs_equality_expectations - 5.should == 5 - end - - def test_should_support_rspecs_comparison_expectations - 5.should be > 4 - end - - class Band - def players - ["John", "Paul", "George", "Ringo"] - end - end - - def test_should_support_rspecs_collection_expectations - Band.new.should have(4).players - end -end diff --git a/vendor/plugins/rspec/examples/test_case_spec.rb b/vendor/plugins/rspec/examples/test_case_spec.rb deleted file mode 100644 index 4ffa2c598..000000000 --- a/vendor/plugins/rspec/examples/test_case_spec.rb +++ /dev/null @@ -1,65 +0,0 @@ -require File.dirname(__FILE__) + '/spec_helper' -require 'test/unit' - -class RSpecIntegrationTest < Test::Unit::TestCase - def self.fixtures(*args) - @@fixtures = true - end - - def self.verify_class_method - @@fixtures.should == true - end - - def setup - @test_case_setup_called = true - end - - def teardown - @test_case_teardown_called = true - end - - def run(result) - end - - def helper_method - @helper_method_called = true - end -end - -module RandomHelperModule - def random_task - @random_task_called = true - end -end - -describe "RSpec should integrate with Test::Unit::TestCase" do - inherit RSpecIntegrationTest - include RandomHelperModule - - fixtures :some_table - - prepend_before(:each) {setup} - - before(:each) do - @rspec_setup_called = true - end - - it "TestCase#setup should be called." do - @test_case_setup_called.should be_true - @rspec_setup_called.should be_true - end - - it "RSpec should be able to access TestCase methods" do - helper_method - @helper_method_called.should be_true - end - - it "RSpec should be able to accept included modules" do - random_task - @random_task_called.should be_true - end - - after(:each) do - RSpecIntegrationTest.verify_class_method - end -end diff --git a/vendor/plugins/rspec/failing_examples/predicate_example.rb b/vendor/plugins/rspec/failing_examples/predicate_example.rb index df54d7337..53b6367e2 100644 --- a/vendor/plugins/rspec/failing_examples/predicate_example.rb +++ b/vendor/plugins/rspec/failing_examples/predicate_example.rb @@ -4,7 +4,7 @@ class BddFramework def intuitive? true end - + def adopted_quickly? #this will cause failures because it reallly SHOULD be adopted quickly false @@ -21,7 +21,7 @@ describe "BDD framework" do #this will fail because it reallly SHOULD be adopted quickly @bdd_framework.should be_adopted_quickly end - + it "should be intuitive" do @bdd_framework.should be_intuitive end diff --git a/vendor/plugins/rspec/failing_examples/spec_helper.rb b/vendor/plugins/rspec/failing_examples/spec_helper.rb index 61f51fbdb..f8d657554 100644 --- a/vendor/plugins/rspec/failing_examples/spec_helper.rb +++ b/vendor/plugins/rspec/failing_examples/spec_helper.rb @@ -1 +1,3 @@ -require File.dirname(__FILE__) + '/../lib/spec' +lib_path = File.expand_path("#{File.dirname(__FILE__)}/../lib") +$LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path) +require "spec" diff --git a/vendor/plugins/rspec/init.rb b/vendor/plugins/rspec/init.rb index f710a3dbf..6262f0368 100644 --- a/vendor/plugins/rspec/init.rb +++ b/vendor/plugins/rspec/init.rb @@ -1,3 +1,9 @@ -if ENV['RAILS_ENV'] == 'test' - require 'spec' -end +# Placeholder to satisfy Rails. +# +# Do NOT add any require statements to this file. Doing +# so will cause Rails to load this plugin all of the time. +# +# Running 'ruby script/generate rspec' will +# generate spec/spec_helper.rb, which includes the necessary +# require statements and configuration. This file should +# be required by all of your spec files.
\ No newline at end of file diff --git a/vendor/plugins/rspec/lib/autotest/rspec.rb b/vendor/plugins/rspec/lib/autotest/rspec.rb index d4b77ea6b..cf7421ee1 100644 --- a/vendor/plugins/rspec/lib/autotest/rspec.rb +++ b/vendor/plugins/rspec/lib/autotest/rspec.rb @@ -1,30 +1,24 @@ require 'autotest' +Autotest.add_hook :initialize do |at| + at.clear_mappings + # watch out: Ruby bug (1.8.6): + # %r(/) != /\// + at.add_mapping(%r%^spec/.*\.rb$%) { |filename, _| + filename + } + at.add_mapping(%r%^lib/(.*)\.rb$%) { |_, m| + ["spec/#{m[1]}_spec.rb"] + } + at.add_mapping(%r%^spec/(spec_helper|shared/.*)\.rb$%) { + at.files_matching %r%^spec/.*_spec\.rb$% + } +end + class RspecCommandError < StandardError; end class Autotest::Rspec < Autotest - def initialize(kernel=Kernel, separator=File::SEPARATOR, alt_separator=File::ALT_SEPARATOR) # :nodoc: - super() - @kernel, @separator, @alt_separator = kernel, separator, alt_separator - @spec_command = spec_command - - # watch out: Ruby bug (1.8.6): - # %r(/) != /\// - # since Ruby compares the REGEXP source, not the resulting pattern - @test_mappings = { - %r%^spec/.*\.rb$% => kernel.proc { |filename, _| - filename - }, - %r%^lib/(.*)\.rb$% => kernel.proc { |_, m| - ["spec/#{m[1]}_spec.rb"] - }, - %r%^spec/(spec_helper|shared/.*)\.rb$% => kernel.proc { - files_matching %r%^spec/.*_spec\.rb$% - } - } - end - def tests_for_file(filename) super.select { |f| @files.has_key? f } end @@ -59,7 +53,7 @@ class Autotest::Rspec < Autotest end def make_test_cmd(files_to_test) - return "#{ruby} -S #{@spec_command} #{add_options_if_present} #{files_to_test.keys.flatten.join(' ')}" + return "#{ruby} -S #{spec_command} #{add_options_if_present} #{files_to_test.keys.flatten.join(' ')}" end def add_options_if_present @@ -71,12 +65,11 @@ class Autotest::Rspec < Autotest # that in ~/.autotest to provide a different spec command # then the default paths provided. def spec_command - spec_commands.each do |command| + @spec_command ||= spec_commands.each do |command| if File.exists?(command) return @alt_separator ? (command.gsub @separator, @alt_separator) : command end end - raise RspecCommandError, "No spec command could be found!" end @@ -87,7 +80,7 @@ class Autotest::Rspec < Autotest # * default spec bin/loader installed in Rubygems def spec_commands [ - File.join('bin', 'spec'), + File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec')), File.join(Config::CONFIG['bindir'], 'spec') ] end diff --git a/vendor/plugins/rspec/lib/spec.rb b/vendor/plugins/rspec/lib/spec.rb index 48c12595c..a0fc64750 100644 --- a/vendor/plugins/rspec/lib/spec.rb +++ b/vendor/plugins/rspec/lib/spec.rb @@ -1,13 +1,37 @@ -require 'spec/extensions' require 'spec/version' require 'spec/matchers' require 'spec/expectations' -require 'spec/translator' -require 'spec/dsl' +require 'spec/example' +require 'spec/extensions' require 'spec/runner' -class Object - def metaclass - class << self; self; end +if Object.const_defined?(:Test); \ + require 'spec/interop/test'; \ +end + +module Spec + class << self + def run? + @run || rspec_options.examples_run? + end + + def run; \ + return true if run?; \ + result = rspec_options.run_examples; \ + @run = true; \ + result; \ + end + attr_writer :run + + def exit?; \ + !Object.const_defined?(:Test) || Test::Unit.run?; \ + end end end + +at_exit do \ + unless $! || Spec.run?; \ + success = Spec.run; \ + exit success if Spec.exit?; \ + end \ +end
\ No newline at end of file diff --git a/vendor/plugins/rspec/lib/spec/dsl.rb b/vendor/plugins/rspec/lib/spec/dsl.rb deleted file mode 100644 index f960eb907..000000000 --- a/vendor/plugins/rspec/lib/spec/dsl.rb +++ /dev/null @@ -1,11 +0,0 @@ -require 'spec/dsl/description' -require 'spec/dsl/errors' -require 'spec/dsl/configuration' -require 'spec/dsl/behaviour_callbacks' -require 'spec/dsl/behaviour' -require 'spec/dsl/behaviour_eval' -require 'spec/dsl/composite_proc_builder' -require 'spec/dsl/example' -require 'spec/dsl/example_matcher' -require 'spec/dsl/example_should_raise_handler' -require 'spec/dsl/behaviour_factory' diff --git a/vendor/plugins/rspec/lib/spec/dsl/behaviour.rb b/vendor/plugins/rspec/lib/spec/dsl/behaviour.rb deleted file mode 100644 index 5158bb673..000000000 --- a/vendor/plugins/rspec/lib/spec/dsl/behaviour.rb +++ /dev/null @@ -1,220 +0,0 @@ -module Spec - module DSL - class EvalModule < Module; end - class Behaviour - extend BehaviourCallbacks - - class << self - def add_shared_behaviour(behaviour) - return if behaviour.equal?(found_behaviour = find_shared_behaviour(behaviour.description)) - return if found_behaviour and File.expand_path(behaviour.description[:spec_path]) == File.expand_path(found_behaviour.description[:spec_path]) - raise ArgumentError.new("Shared Behaviour '#{behaviour.description}' already exists") if found_behaviour - shared_behaviours << behaviour - end - - def find_shared_behaviour(behaviour_description) - shared_behaviours.find { |b| b.description == behaviour_description } - end - - def shared_behaviours - # TODO - this needs to be global, or at least accessible from - # from subclasses of Behaviour in a centralized place. I'm not loving - # this as a solution, but it works for now. - $shared_behaviours ||= [] - end - end - - def initialize(*args, &behaviour_block) - init_description(*args) - init_eval_module - before_eval - eval_behaviour(&behaviour_block) - end - - private - - def init_description(*args) - unless self.class == Behaviour - args << {} unless Hash === args.last - args.last[:behaviour_class] = self.class - end - @description = Description.new(*args) - end - - def init_eval_module - @eval_module = EvalModule.new - @eval_module.extend BehaviourEval::ModuleMethods - @eval_module.include BehaviourEval::InstanceMethods - @eval_module.include described_type if described_type.class == Module - @eval_module.behaviour = self - @eval_module.description = @description - end - - def eval_behaviour(&behaviour_block) - @eval_module.class_eval(&behaviour_block) - end - - protected - - def before_eval - end - - public - - def run(reporter, dry_run=false, reverse=false, timeout=nil) - raise "shared behaviours should never run" if shared? - # TODO - change add_behaviour to add_description ?????? - reporter.add_behaviour(@description) - prepare_execution_context_class - before_all_errors = run_before_all(reporter, dry_run) - - exs = reverse ? examples.reverse : examples - example_execution_context = nil - - if before_all_errors.empty? - exs.each do |example| - example_execution_context = execution_context(example) - example_execution_context.copy_instance_variables_from(@before_and_after_all_context_instance) unless before_all_proc(behaviour_type).nil? - - befores = before_each_proc(behaviour_type) {|e| raise e} - afters = after_each_proc(behaviour_type) - example.run(reporter, befores, afters, dry_run, example_execution_context, timeout) - end - end - - @before_and_after_all_context_instance.copy_instance_variables_from(example_execution_context) unless after_all_proc(behaviour_type).nil? - run_after_all(reporter, dry_run) - end - - def number_of_examples - examples.length - end - - def matches?(specified_examples) - matcher ||= ExampleMatcher.new(description) - - examples.each do |example| - return true if example.matches?(matcher, specified_examples) - end - return false - end - - def shared? - @description[:shared] - end - - def retain_examples_matching!(specified_examples) - return if specified_examples.index(description) - matcher = ExampleMatcher.new(description) - examples.reject! do |example| - !example.matches?(matcher, specified_examples) - end - end - - def methods - my_methods = super - my_methods |= @eval_module.methods - my_methods - end - - # Includes modules in the Behaviour (the <tt>describe</tt> block). - def include(*args) - @eval_module.include(*args) - end - - def behaviour_type #:nodoc: - @description[:behaviour_type] - end - - # Sets the #number on each Example and returns the next number - def set_sequence_numbers(number, reverse) #:nodoc: - exs = reverse ? examples.reverse : examples - exs.each do |example| - example.number = number - number += 1 - end - number - end - - protected - - # Messages that this class does not understand - # are passed directly to the @eval_module. - def method_missing(sym, *args, &block) - @eval_module.send(sym, *args, &block) - end - - def prepare_execution_context_class - plugin_mock_framework - weave_in_included_modules - define_predicate_matchers #this is in behaviour_eval - execution_context_class - end - - def weave_in_included_modules - mods = [@eval_module] - mods << included_modules.dup - mods << Spec::Runner.configuration.modules_for(behaviour_type) - execution_context_class.class_eval do - # WARNING - the following can be executed in the context of any - # class, and should never pass more than one module to include - # even though we redefine include in this class. This is NOT - # tested anywhere, hence this comment. - mods.flatten.each {|mod| include mod} - end - end - - def execution_context(example) - execution_context_class.new(example) - end - - def run_before_all(reporter, dry_run) - errors = [] - unless dry_run - begin - @before_and_after_all_context_instance = execution_context(nil) - @before_and_after_all_context_instance.instance_eval(&before_all_proc(behaviour_type)) - rescue Exception => e - errors << e - location = "before(:all)" - # The easiest is to report this as an example failure. We don't have an Example - # at this point, so we'll just create a placeholder. - reporter.example_finished(Example.new(location), e, location) if reporter - end - end - errors - end - - def run_after_all(reporter, dry_run) - unless dry_run - begin - @before_and_after_all_context_instance ||= execution_context(nil) - @before_and_after_all_context_instance.instance_eval(&after_all_proc(behaviour_type)) - rescue Exception => e - location = "after(:all)" - reporter.example_finished(Example.new(location), e, location) if reporter - end - end - end - - def plugin_mock_framework - case mock_framework = Spec::Runner.configuration.mock_framework - when Module - include mock_framework - else - require Spec::Runner.configuration.mock_framework - include Spec::Plugins::MockFramework - end - end - - def description - @description.to_s - end - - def described_type - @description.described_type - end - - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/dsl/behaviour_callbacks.rb b/vendor/plugins/rspec/lib/spec/dsl/behaviour_callbacks.rb deleted file mode 100644 index 8b69ad9e5..000000000 --- a/vendor/plugins/rspec/lib/spec/dsl/behaviour_callbacks.rb +++ /dev/null @@ -1,82 +0,0 @@ -module Spec - module DSL - # See http://rspec.rubyforge.org/documentation/before_and_after.html - module BehaviourCallbacks - def prepend_before(*args, &block) - scope, options = scope_and_options(*args) - add(scope, options, :before, :unshift, &block) - end - def append_before(*args, &block) - scope, options = scope_and_options(*args) - add(scope, options, :before, :<<, &block) - end - alias_method :before, :append_before - - def prepend_after(*args, &block) - scope, options = scope_and_options(*args) - add(scope, options, :after, :unshift, &block) - end - alias_method :after, :prepend_after - def append_after(*args, &block) - scope, options = scope_and_options(*args) - add(scope, options, :after, :<<, &block) - end - - def scope_and_options(*args) - args, options = args_and_options(*args) - scope = (args[0] || :each), options - end - - def add(scope, options, where, how, &block) - scope ||= :each - options ||= {} - behaviour_type = options[:behaviour_type] - case scope - when :each; self.__send__("#{where}_each_parts", behaviour_type).__send__(how, block) - when :all; self.__send__("#{where}_all_parts", behaviour_type).__send__(how, block) - end - end - - def remove_after(scope, &block) - after_each_parts.delete(block) - end - - # Deprecated. Use before(:each) - def setup(&block) - before(:each, &block) - end - - # Deprecated. Use after(:each) - def teardown(&block) - after(:each, &block) - end - - def before_all_parts(behaviour_type=nil) # :nodoc: - @before_all_parts ||= {} - @before_all_parts[behaviour_type] ||= [] - end - - def after_all_parts(behaviour_type=nil) # :nodoc: - @after_all_parts ||= {} - @after_all_parts[behaviour_type] ||= [] - end - - def before_each_parts(behaviour_type=nil) # :nodoc: - @before_each_parts ||= {} - @before_each_parts[behaviour_type] ||= [] - end - - def after_each_parts(behaviour_type=nil) # :nodoc: - @after_each_parts ||= {} - @after_each_parts[behaviour_type] ||= [] - end - - def clear_before_and_after! # :nodoc: - @before_all_parts = nil - @after_all_parts = nil - @before_each_parts = nil - @after_each_parts = nil - end - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/dsl/behaviour_eval.rb b/vendor/plugins/rspec/lib/spec/dsl/behaviour_eval.rb deleted file mode 100644 index 9f7b8281e..000000000 --- a/vendor/plugins/rspec/lib/spec/dsl/behaviour_eval.rb +++ /dev/null @@ -1,231 +0,0 @@ -module Spec - module DSL - module BehaviourEval - module ModuleMethods - include BehaviourCallbacks - - attr_writer :behaviour - attr_accessor :description - - # RSpec runs every example in a new instance of Object, mixing in - # the behaviour necessary to run examples. Because this behaviour gets - # mixed in, it can get mixed in to an instance of any class at all. - # - # This is something that you would hardly ever use, but there is one - # common use case for it - inheriting from Test::Unit::TestCase. RSpec's - # Rails plugin uses this feature to provide access to all of the features - # that are available for Test::Unit within RSpec examples. - def inherit(klass) - raise ArgumentError.new("Shared behaviours cannot inherit from classes") if @behaviour.shared? - @behaviour_superclass = klass - derive_execution_context_class_from_behaviour_superclass - end - - # You can pass this one or many modules. Each module will subsequently - # be included in the each object in which an example is run. Use this - # to provide global helper methods to your examples. - # - # == Example - # - # module HelperMethods - # def helper_method - # ... - # end - # end - # - # describe Thing do - # include HelperMethods - # it "should do stuff" do - # helper_method - # end - # end - def include(*mods) - mods.each do |mod| - included_modules << mod - mod.send :included, self - end - end - - # Use this to pull in examples from shared behaviours. - # See Spec::Runner for information about shared behaviours. - def it_should_behave_like(behaviour_description) - behaviour = @behaviour.class.find_shared_behaviour(behaviour_description) - if behaviour.nil? - raise RuntimeError.new("Shared Behaviour '#{behaviour_description}' can not be found") - end - behaviour.copy_to(self) - end - - def copy_to(eval_module) # :nodoc: - examples.each { |e| eval_module.examples << e; } - before_each_parts.each { |p| eval_module.before_each_parts << p } - after_each_parts.each { |p| eval_module.after_each_parts << p } - before_all_parts.each { |p| eval_module.before_all_parts << p } - after_all_parts.each { |p| eval_module.after_all_parts << p } - included_modules.each { |m| eval_module.included_modules << m } - eval_module.included_modules << self - end - - # :call-seq: - # predicate_matchers[matcher_name] = method_on_object - # predicate_matchers[matcher_name] = [method1_on_object, method2_on_object] - # - # Dynamically generates a custom matcher that will match - # a predicate on your class. RSpec provides a couple of these - # out of the box: - # - # exist (or state expectations) - # File.should exist("path/to/file") - # - # an_instance_of (for mock argument constraints) - # mock.should_receive(:message).with(an_instance_of(String)) - # - # == Examples - # - # class Fish - # def can_swim? - # true - # end - # end - # - # describe Fish do - # predicate_matchers[:swim] = :can_swim? - # it "should swim" do - # Fish.new.should swim - # end - # end - def predicate_matchers - @predicate_matchers ||= {:exist => :exist?, :an_instance_of => :is_a?} - end - - def define_predicate_matchers(hash=nil) # :nodoc: - if hash.nil? - define_predicate_matchers(predicate_matchers) - define_predicate_matchers(Spec::Runner.configuration.predicate_matchers) - else - hash.each_pair do |matcher_method, method_on_object| - define_method matcher_method do |*args| - eval("be_#{method_on_object.to_s.gsub('?','')}(*args)") - end - end - end - end - - # Creates an instance of Spec::DSL::Example and adds - # it to a collection of examples of the current behaviour. - def it(description=:__generate_description, opts={}, &block) - examples << Example.new(description, opts, &block) - end - - # Alias for it. - def specify(description=:__generate_description, opts={}, &block) - it(description, opts, &block) - end - - def methods # :nodoc: - my_methods = super - my_methods |= behaviour_superclass.methods - my_methods - end - - protected - - def method_missing(method_name, *args) - if behaviour_superclass.respond_to?(method_name) - return execution_context_class.send(method_name, *args) - end - super - end - - def before_each_proc(behaviour_type, &error_handler) - parts = [] - parts.push(*Behaviour.before_each_parts(nil)) - parts.push(*Behaviour.before_each_parts(behaviour_type)) unless behaviour_type.nil? - parts.push(*before_each_parts(nil)) - parts.push(*before_each_parts(behaviour_type)) unless behaviour_type.nil? - CompositeProcBuilder.new(parts).proc(&error_handler) - end - - def before_all_proc(behaviour_type, &error_handler) - parts = [] - parts.push(*Behaviour.before_all_parts(nil)) - parts.push(*Behaviour.before_all_parts(behaviour_type)) unless behaviour_type.nil? - parts.push(*before_all_parts(nil)) - parts.push(*before_all_parts(behaviour_type)) unless behaviour_type.nil? - CompositeProcBuilder.new(parts).proc(&error_handler) - end - - def after_all_proc(behaviour_type) - parts = [] - parts.push(*after_all_parts(behaviour_type)) unless behaviour_type.nil? - parts.push(*after_all_parts(nil)) - parts.push(*Behaviour.after_all_parts(behaviour_type)) unless behaviour_type.nil? - parts.push(*Behaviour.after_all_parts(nil)) - CompositeProcBuilder.new(parts).proc - end - - def after_each_proc(behaviour_type) - parts = [] - parts.push(*after_each_parts(behaviour_type)) unless behaviour_type.nil? - parts.push(*after_each_parts(nil)) - parts.push(*Behaviour.after_each_parts(behaviour_type)) unless behaviour_type.nil? - parts.push(*Behaviour.after_each_parts(nil)) - CompositeProcBuilder.new(parts).proc - end - - private - - def execution_context_class - @execution_context_class ||= derive_execution_context_class_from_behaviour_superclass - end - - def derive_execution_context_class_from_behaviour_superclass - @execution_context_class = Class.new(behaviour_superclass) - behaviour_superclass.spec_inherited(self) if behaviour_superclass.respond_to?(:spec_inherited) - @execution_context_class - end - - def behaviour_superclass - @behaviour_superclass ||= Object - end - - protected - def included_modules - @included_modules ||= [::Spec::Matchers] - end - - def examples - @examples ||= [] - end - end - - module InstanceMethods - def initialize(*args, &block) #:nodoc: - # TODO - inheriting from TestUnit::TestCase fails without this - # - let's figure out why and move this somewhere else - end - - def violated(message="") - raise Spec::Expectations::ExpectationNotMetError.new(message) - end - - def inspect - "[RSpec example]" - end - - def pending(message) - if block_given? - begin - yield - rescue Exception => e - raise Spec::DSL::ExamplePendingError.new(message) - end - raise Spec::DSL::PendingFixedError.new("Expected pending '#{message}' to fail. No Error was raised.") - else - raise Spec::DSL::ExamplePendingError.new(message) - end - end - end - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/dsl/behaviour_factory.rb b/vendor/plugins/rspec/lib/spec/dsl/behaviour_factory.rb deleted file mode 100755 index 44b60c641..000000000 --- a/vendor/plugins/rspec/lib/spec/dsl/behaviour_factory.rb +++ /dev/null @@ -1,42 +0,0 @@ -module Spec - module DSL - class BehaviourFactory - - class << self - - BEHAVIOUR_CLASSES = {:default => Spec::DSL::Behaviour} - - # Registers a behaviour class +klass+ with the symbol - # +behaviour_type+. For example: - # - # Spec::DSL::BehaviourFactory.add_behaviour_class(:farm, Spec::Farm::DSL::FarmBehaviour) - # - # This will cause Kernel#describe from a file living in - # <tt>spec/farm</tt> to create behaviour instances of type - # Spec::Farm::DSL::FarmBehaviour. - def add_behaviour_class(behaviour_type, klass) - BEHAVIOUR_CLASSES[behaviour_type] = klass - end - - def remove_behaviour_class(behaviour_type) - BEHAVIOUR_CLASSES.delete(behaviour_type) - end - - def create(*args, &block) - opts = Hash === args.last ? args.last : {} - if opts[:shared] - behaviour_type = :default - elsif opts[:behaviour_type] - behaviour_type = opts[:behaviour_type] - elsif opts[:spec_path] =~ /spec(\\|\/)(#{BEHAVIOUR_CLASSES.keys.join('|')})/ - behaviour_type = $2.to_sym - else - behaviour_type = :default - end - return BEHAVIOUR_CLASSES[behaviour_type].new(*args, &block) - end - - end - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/dsl/composite_proc_builder.rb b/vendor/plugins/rspec/lib/spec/dsl/composite_proc_builder.rb deleted file mode 100644 index 373f44953..000000000 --- a/vendor/plugins/rspec/lib/spec/dsl/composite_proc_builder.rb +++ /dev/null @@ -1,33 +0,0 @@ -module Spec - module DSL - class CompositeProcBuilder < Array - def initialize(callbacks=[]) - push(*callbacks) - end - - def proc(&error_handler) - parts = self - errors = [] - Proc.new do - result = parts.collect do |part| - begin - if part.is_a?(UnboundMethod) - part.bind(self).call - else - instance_eval(&part) - end - rescue Exception => e - if error_handler - error_handler.call(e) - else - errors << e - end - end - end - raise errors.first unless errors.empty? - result - end - end - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/dsl/configuration.rb b/vendor/plugins/rspec/lib/spec/dsl/configuration.rb deleted file mode 100755 index 709574ded..000000000 --- a/vendor/plugins/rspec/lib/spec/dsl/configuration.rb +++ /dev/null @@ -1,135 +0,0 @@ -module Spec - module DSL - class Configuration - - # Chooses what mock framework to use. Example: - # - # Spec::Runner.configure do |config| - # config.mock_with :rspec, :mocha, :flexmock, or :rr - # end - # - # To use any other mock framework, you'll have to provide - # your own adapter. This is simply a module that responds to - # setup_mocks_for_rspec, verify_mocks_for_rspec and teardown_mocks_for_rspec. - # These are your hooks into the lifecycle of a given example. RSpec will - # call setup_mocks_for_rspec before running anything else in each Example. - # After executing the #after methods, RSpec will then call verify_mocks_for_rspec - # and teardown_mocks_for_rspec (this is guaranteed to run even if there are - # failures in verify_mocks_for_rspec). - # - # Once you've defined this module, you can pass that to mock_with: - # - # Spec::Runner.configure do |config| - # config.mock_with MyMockFrameworkAdapter - # end - # - def mock_with(mock_framework) - @mock_framework = case mock_framework - when Symbol - mock_framework_path(mock_framework.to_s) - else - mock_framework - end - end - - def mock_framework # :nodoc: - @mock_framework ||= mock_framework_path("rspec") - end - - # Declares modules to be included in all behaviours (<tt>describe</tt> blocks). - # - # config.include(My::Bottle, My::Cup) - # - # If you want to restrict the inclusion to a subset of all the behaviours then - # specify this in a Hash as the last argument: - # - # config.include(My::Pony, My::Horse, :behaviour_type => :farm) - # - # Only behaviours that have that type will get the modules included: - # - # describe "Downtown", :behaviour_type => :city do - # # Will *not* get My::Pony and My::Horse included - # end - # - # describe "Old Mac Donald", :behaviour_type => :farm do - # # *Will* get My::Pony and My::Horse included - # end - # - def include(*args) - args << {} unless Hash === args.last - modules, options = args_and_options(*args) - required_behaviour_type = options[:behaviour_type] - required_behaviour_type = required_behaviour_type.to_sym unless required_behaviour_type.nil? - @modules ||= {} - @modules[required_behaviour_type] ||= [] - @modules[required_behaviour_type] += modules - end - - def modules_for(required_behaviour_type) #:nodoc: - @modules ||= {} - modules = @modules[nil] || [] # general ones - modules << @modules[required_behaviour_type.to_sym] unless required_behaviour_type.nil? - modules.uniq.compact - end - - # This is just for cleanup in RSpec's own examples - def exclude(*modules) #:nodoc: - @modules.each do |behaviour_type, mods| - modules.each{|m| mods.delete(m)} - end - end - - # Defines global predicate matchers. Example: - # - # config.predicate_matchers[:swim] = :can_swim? - # - # This makes it possible to say: - # - # person.should swim # passes if person.should_swim? returns true - # - def predicate_matchers - @predicate_matchers ||= {} - end - - # Prepends a global <tt>before</tt> block to all behaviours. - # See #append_before for filtering semantics. - def prepend_before(*args, &proc) - Behaviour.prepend_before(*args, &proc) - end - # Appends a global <tt>before</tt> block to all behaviours. - # - # If you want to restrict the block to a subset of all the behaviours then - # specify this in a Hash as the last argument: - # - # config.prepend_before(:all, :behaviour_type => :farm) - # - # or - # - # config.prepend_before(:behaviour_type => :farm) - # - def append_before(*args, &proc) - Behaviour.append_before(*args, &proc) - end - alias_method :before, :append_before - - # Prepends a global <tt>after</tt> block to all behaviours. - # See #append_before for filtering semantics. - def prepend_after(*args, &proc) - Behaviour.prepend_after(*args, &proc) - end - alias_method :after, :prepend_after - # Appends a global <tt>after</tt> block to all behaviours. - # See #append_before for filtering semantics. - def append_after(*args, &proc) - Behaviour.append_after(*args, &proc) - end - - private - - def mock_framework_path(framework_name) - File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "plugins", "mock_frameworks", framework_name)) - end - - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/dsl/description.rb b/vendor/plugins/rspec/lib/spec/dsl/description.rb deleted file mode 100755 index fe8c9b0c9..000000000 --- a/vendor/plugins/rspec/lib/spec/dsl/description.rb +++ /dev/null @@ -1,76 +0,0 @@ -module Spec - module DSL - class Description - module ClassMethods - def generate_description(*args) - description = args.shift.to_s - unless args.empty? - suffix = args.shift.to_s - description << " " unless suffix =~ /^\s|\.|#/ - description << suffix - end - description - end - end - extend ClassMethods - - attr_reader :description, :described_type - - def initialize(*args) - args, @options = args_and_options(*args) - init_behaviour_type(@options) - init_spec_path(@options) - init_described_type(args) - init_description(*args) - end - - def [](key) - @options[key] - end - - def []=(key, value) - @options[key] = value - end - - def to_s; @description; end - - def ==(value) - case value - when Description - @description == value.description - else - @description == value - end - end - - private - def init_behaviour_type(options) - # NOTE - BE CAREFUL IF CHANGING THIS NEXT LINE: - # this line is as it is to satisfy JRuby - the original version - # read, simply: "if options[:behaviour_class]", which passed against ruby, but failed against jruby - if options[:behaviour_class] && options[:behaviour_class].ancestors.include?(Behaviour) - options[:behaviour_type] = parse_behaviour_type(@options[:behaviour_class]) - end - end - - def init_spec_path(options) - if options.has_key?(:spec_path) - options[:spec_path] = File.expand_path(@options[:spec_path]) - end - end - - def init_description(*args) - @description = self.class.generate_description(*args) - end - - def init_described_type(args) - @described_type = args.first unless args.first.is_a?(String) - end - - def parse_behaviour_type(behaviour_class) - behaviour_class.to_s.split("::").reverse[0].gsub!('Behaviour', '').downcase.to_sym - end - - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/dsl/errors.rb b/vendor/plugins/rspec/lib/spec/dsl/errors.rb deleted file mode 100644 index ba7046a89..000000000 --- a/vendor/plugins/rspec/lib/spec/dsl/errors.rb +++ /dev/null @@ -1,9 +0,0 @@ -module Spec - module DSL - class ExamplePendingError < StandardError - end - - class PendingFixedError < StandardError - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/dsl/example.rb b/vendor/plugins/rspec/lib/spec/dsl/example.rb deleted file mode 100644 index d04073f7e..000000000 --- a/vendor/plugins/rspec/lib/spec/dsl/example.rb +++ /dev/null @@ -1,135 +0,0 @@ -require 'timeout' - -module Spec - module DSL - class Example - # The global sequence number of this example - attr_accessor :number - - def initialize(description, options={}, &example_block) - @from = caller(0)[3] - @options = options - @example_block = example_block - @description = description - @description_generated_proc = lambda { |desc| @generated_description = desc } - end - - def run(reporter, before_each_block, after_each_block, dry_run, execution_context, timeout=nil) - @dry_run = dry_run - reporter.example_started(self) - return reporter.example_finished(self) if dry_run - - errors = [] - location = nil - Timeout.timeout(timeout) do - before_each_ok = before_example(execution_context, errors, &before_each_block) - example_ok = run_example(execution_context, errors) if before_each_ok - after_each_ok = after_example(execution_context, errors, &after_each_block) - location = failure_location(before_each_ok, example_ok, after_each_ok) - end - - ExampleShouldRaiseHandler.new(@from, @options).handle(errors) - reporter.example_finished(self, errors.first, location, @example_block.nil?) if reporter - end - - def matches?(matcher, specified_examples) - matcher.example_desc = description - matcher.matches?(specified_examples) - end - - def description - @description == :__generate_description ? generated_description : @description - end - - def to_s - description - end - - private - - def generated_description - return @generated_description if @generated_description - if @dry_run - "NO NAME (Because of --dry-run)" - else - if @failed - "NO NAME (Because of Error raised in matcher)" - else - "NO NAME (Because there were no expectations)" - end - end - end - - def before_example(execution_context, errors, &behaviour_before_block) - setup_mocks(execution_context) - Spec::Matchers.description_generated(@description_generated_proc) - - builder = CompositeProcBuilder.new - before_proc = builder.proc(&append_errors(errors)) - execution_context.instance_eval(&before_proc) - - execution_context.instance_eval(&behaviour_before_block) if behaviour_before_block - return errors.empty? - rescue Exception => e - @failed = true - errors << e - return false - end - - def run_example(execution_context, errors) - begin - execution_context.instance_eval(&@example_block) if @example_block - return true - rescue Exception => e - @failed = true - errors << e - return false - end - end - - def after_example(execution_context, errors, &behaviour_after_each) - execution_context.instance_eval(&behaviour_after_each) if behaviour_after_each - - begin - verify_mocks(execution_context) - ensure - teardown_mocks(execution_context) - end - - Spec::Matchers.unregister_description_generated(@description_generated_proc) - - builder = CompositeProcBuilder.new - after_proc = builder.proc(&append_errors(errors)) - execution_context.instance_eval(&after_proc) - - return errors.empty? - rescue Exception => e - @failed = true - errors << e - return false - end - - def setup_mocks(execution_context) - execution_context.setup_mocks_for_rspec if execution_context.respond_to?(:setup_mocks_for_rspec) - end - - def verify_mocks(execution_context) - execution_context.verify_mocks_for_rspec if execution_context.respond_to?(:verify_mocks_for_rspec) - end - - def teardown_mocks(execution_context) - execution_context.teardown_mocks_for_rspec if execution_context.respond_to?(:teardown_mocks_for_rspec) - end - - def append_errors(errors) - proc {|error| errors << error} - end - - def failure_location(before_each_ok, example_ok, after_each_ok) - return 'before(:each)' unless before_each_ok - return description unless example_ok - return 'after(:each)' unless after_each_ok - end - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/dsl/example_matcher.rb b/vendor/plugins/rspec/lib/spec/dsl/example_matcher.rb deleted file mode 100755 index 18cc47409..000000000 --- a/vendor/plugins/rspec/lib/spec/dsl/example_matcher.rb +++ /dev/null @@ -1,40 +0,0 @@ -module Spec - module DSL - class ExampleMatcher - - attr_writer :example_desc - def initialize(behaviour_desc, example_desc=nil) - @behaviour_desc = behaviour_desc - @example_desc = example_desc - end - - def matches?(specified_examples) - specified_examples.each do |specified_example| - return true if matches_literal_example?(specified_example) || matches_example_not_considering_modules?(specified_example) - end - false - end - - private - def matches_literal_example?(specified_example) - specified_example =~ /(^#{context_regexp} #{example_regexp}$|^#{context_regexp}$|^#{example_regexp}$)/ - end - - def matches_example_not_considering_modules?(specified_example) - specified_example =~ /(^#{context_regexp_not_considering_modules} #{example_regexp}$|^#{context_regexp_not_considering_modules}$|^#{example_regexp}$)/ - end - - def context_regexp - Regexp.escape(@behaviour_desc) - end - - def context_regexp_not_considering_modules - Regexp.escape(@behaviour_desc.split('::').last) - end - - def example_regexp - Regexp.escape(@example_desc) - end - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/dsl/example_should_raise_handler.rb b/vendor/plugins/rspec/lib/spec/dsl/example_should_raise_handler.rb deleted file mode 100644 index 942327317..000000000 --- a/vendor/plugins/rspec/lib/spec/dsl/example_should_raise_handler.rb +++ /dev/null @@ -1,74 +0,0 @@ -module Spec - module DSL - class ExampleShouldRaiseHandler - def initialize(file_and_line_number, opts) - @file_and_line_number = file_and_line_number - @options = opts - @expected_error_class = determine_error_class(opts) - @expected_error_message = determine_error_message(opts) - end - - def determine_error_class(opts) - if candidate = opts[:should_raise] - if candidate.is_a?(Class) - return candidate - elsif candidate.is_a?(Array) - return candidate[0] - else - return Exception - end - end - end - - def determine_error_message(opts) - if candidate = opts[:should_raise] - if candidate.is_a?(Array) - return candidate[1] - end - end - return nil - end - - def build_message(exception=nil) - if @expected_error_message.nil? - message = "example block expected #{@expected_error_class.to_s}" - else - message = "example block expected #{@expected_error_class.new(@expected_error_message.to_s).inspect}" - end - message << " but raised #{exception.inspect}" if exception - message << " but nothing was raised" unless exception - message << "\n" - message << @file_and_line_number - end - - def error_matches?(error) - return false unless error.kind_of?(@expected_error_class) - unless @expected_error_message.nil? - if @expected_error_message.is_a?(Regexp) - return false unless error.message =~ @expected_error_message - else - return false unless error.message == @expected_error_message - end - end - return true - end - - def handle(errors) - if @expected_error_class - if errors.empty? - errors << Spec::Expectations::ExpectationNotMetError.new(build_message) - else - error_to_remove = errors.detect do |error| - error_matches?(error) - end - if error_to_remove.nil? - errors.insert(0,Spec::Expectations::ExpectationNotMetError.new(build_message(errors[0]))) - else - errors.delete(error_to_remove) - end - end - end - end - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/expectations/differs/default.rb b/vendor/plugins/rspec/lib/spec/expectations/differs/default.rb index 87e59b3a6..a5eb1bb89 100644 --- a/vendor/plugins/rspec/lib/spec/expectations/differs/default.rb +++ b/vendor/plugins/rspec/lib/spec/expectations/differs/default.rb @@ -12,12 +12,8 @@ module Spec # TODO add some rdoc class Default - def initialize(format=:unified,context_lines=nil,colour=nil) - - context_lines ||= 3 - colour ||= false - - @format,@context_lines,@colour = format,context_lines,colour + def initialize(options) + @options = options end # This is snagged from diff/lcs/ldiff.rb (which is a commandline tool) @@ -31,17 +27,17 @@ module Spec file_length_difference = 0 diffs.each do |piece| begin - hunk = Diff::LCS::Hunk.new(data_old, data_new, piece, @context_lines, + hunk = Diff::LCS::Hunk.new(data_old, data_new, piece, context_lines, file_length_difference) file_length_difference = hunk.file_length_difference next unless oldhunk # Hunks may overlap, which is why we need to be careful when our # diff includes lines of context. Otherwise, we might print # redundant lines. - if (@context_lines > 0) and hunk.overlaps?(oldhunk) + if (context_lines > 0) and hunk.overlaps?(oldhunk) hunk.unshift(oldhunk) else - output << oldhunk.diff(@format) + output << oldhunk.diff(format) end ensure oldhunk = hunk @@ -49,12 +45,21 @@ module Spec end end #Handle the last remaining hunk - output << oldhunk.diff(@format) << "\n" + output << oldhunk.diff(format) << "\n" end def diff_as_object(target,expected) diff_as_string(PP.pp(target,""), PP.pp(expected,"")) end + + protected + def format + @options.diff_format + end + + def context_lines + @options.context_lines + end end end end diff --git a/vendor/plugins/rspec/lib/spec/expectations/errors.rb b/vendor/plugins/rspec/lib/spec/expectations/errors.rb index 03e81a064..1fabd105d 100644 --- a/vendor/plugins/rspec/lib/spec/expectations/errors.rb +++ b/vendor/plugins/rspec/lib/spec/expectations/errors.rb @@ -1,6 +1,12 @@ module Spec module Expectations - class ExpectationNotMetError < StandardError + # If Test::Unit is loaed, we'll use its error as baseclass, so that Test::Unit + # will report unmet RSpec expectations as failures rather than errors. + superclass = ['Test::Unit::AssertionFailedError', '::StandardError'].map do |c| + eval(c) rescue nil + end.compact.first + + class ExpectationNotMetError < superclass end end end diff --git a/vendor/plugins/rspec/lib/spec/expectations/extensions/object.rb b/vendor/plugins/rspec/lib/spec/expectations/extensions/object.rb index f59af722e..a3925bbee 100644 --- a/vendor/plugins/rspec/lib/spec/expectations/extensions/object.rb +++ b/vendor/plugins/rspec/lib/spec/expectations/extensions/object.rb @@ -3,7 +3,6 @@ module Spec # rspec adds #should and #should_not to every Object (and, # implicitly, every Class). module ObjectExpectations - # :call-seq: # should(matcher) # should == expected @@ -28,9 +27,12 @@ module Spec # # NOTE that this does NOT support receiver.should != expected. # Instead, use receiver.should_not == expected - def should(matcher=nil, &block) - return ExpectationMatcherHandler.handle_matcher(self, matcher, &block) if matcher - Spec::Matchers::PositiveOperatorMatcher.new(self) + def should(matcher = :default_parameter, &block) + if :default_parameter == matcher + Spec::Matchers::PositiveOperatorMatcher.new(self) + else + ExpectationMatcherHandler.handle_matcher(self, matcher, &block) + end end # :call-seq: @@ -52,9 +54,12 @@ module Spec # => Passes unless (receiver =~ regexp) # # See Spec::Matchers for more information about matchers - def should_not(matcher=nil, &block) - return NegativeExpectationMatcherHandler.handle_matcher(self, matcher, &block) if matcher - Spec::Matchers::NegativeOperatorMatcher.new(self) + def should_not(matcher = :default_parameter, &block) + if :default_parameter == matcher + Spec::Matchers::NegativeOperatorMatcher.new(self) + else + NegativeExpectationMatcherHandler.handle_matcher(self, matcher, &block) + end end end diff --git a/vendor/plugins/rspec/lib/spec/expectations/handler.rb b/vendor/plugins/rspec/lib/spec/expectations/handler.rb index 4caa321e4..e6dce0846 100644 --- a/vendor/plugins/rspec/lib/spec/expectations/handler.rb +++ b/vendor/plugins/rspec/lib/spec/expectations/handler.rb @@ -1,18 +1,23 @@ module Spec module Expectations + class InvalidMatcherError < ArgumentError; end module MatcherHandlerHelper - def describe(matcher) + def describe_matcher(matcher) matcher.respond_to?(:description) ? matcher.description : "[#{matcher.class.name} does not provide a description]" end end - class ExpectationMatcherHandler + class ExpectationMatcherHandler class << self include MatcherHandlerHelper def handle_matcher(actual, matcher, &block) + unless matcher.respond_to?(:matches?) + raise InvalidMatcherError, "Expected a matcher, got #{matcher.inspect}." + end + match = matcher.matches?(actual, &block) - ::Spec::Matchers.generated_description = "should #{describe(matcher)}" + ::Spec::Matchers.generated_description = "should #{describe_matcher(matcher)}" Spec::Expectations.fail_with(matcher.failure_message) unless match end end @@ -22,6 +27,10 @@ module Spec class << self include MatcherHandlerHelper def handle_matcher(actual, matcher, &block) + unless matcher.respond_to?(:matches?) + raise InvalidMatcherError, "Expected a matcher, got #{matcher.inspect}." + end + unless matcher.respond_to?(:negative_failure_message) Spec::Expectations.fail_with( <<-EOF @@ -32,7 +41,7 @@ EOF ) end match = matcher.matches?(actual, &block) - ::Spec::Matchers.generated_description = "should not #{describe(matcher)}" + ::Spec::Matchers.generated_description = "should not #{describe_matcher(matcher)}" Spec::Expectations.fail_with(matcher.negative_failure_message) if match end end diff --git a/vendor/plugins/rspec/lib/spec/extensions.rb b/vendor/plugins/rspec/lib/spec/extensions.rb index 824f03bfb..9a313d0e7 100755 --- a/vendor/plugins/rspec/lib/spec/extensions.rb +++ b/vendor/plugins/rspec/lib/spec/extensions.rb @@ -1 +1,3 @@ require 'spec/extensions/object' +require 'spec/extensions/class' +require 'spec/extensions/main' diff --git a/vendor/plugins/rspec/lib/spec/extensions/object.rb b/vendor/plugins/rspec/lib/spec/extensions/object.rb index 6218aa770..e9f6364e2 100755 --- a/vendor/plugins/rspec/lib/spec/extensions/object.rb +++ b/vendor/plugins/rspec/lib/spec/extensions/object.rb @@ -3,4 +3,8 @@ class Object options = Hash === args.last ? args.pop : {} return args, options end -end + + def metaclass + class << self; self; end + end +end diff --git a/vendor/plugins/rspec/lib/spec/matchers.rb b/vendor/plugins/rspec/lib/spec/matchers.rb index fd208d628..afae5ae5f 100644 --- a/vendor/plugins/rspec/lib/spec/matchers.rb +++ b/vendor/plugins/rspec/lib/spec/matchers.rb @@ -1,8 +1,10 @@ +require 'spec/matchers/simple_matcher' require 'spec/matchers/be' require 'spec/matchers/be_close' require 'spec/matchers/change' require 'spec/matchers/eql' require 'spec/matchers/equal' +require 'spec/matchers/exist' require 'spec/matchers/has' require 'spec/matchers/have' require 'spec/matchers/include' @@ -132,27 +134,15 @@ module Spec # module Matchers module ModuleMethods - def description_generated(callback) - description_generated_callbacks << callback - end - - def unregister_description_generated(callback) - description_generated_callbacks.delete(callback) - end - - def generated_description=(name) - description_generated_callbacks.each do |callback| - callback.call(name) - end - end + attr_accessor :generated_description - private - def description_generated_callbacks - @description_generated_callbacks ||= [] + def clear_generated_description + self.generated_description = nil end end + extend ModuleMethods - + def method_missing(sym, *args, &block) # :nodoc: return Matchers::Be.new(sym, *args) if sym.starts_with?("be_") return Matchers::Has.new(sym, *args) if sym.starts_with?("have_") diff --git a/vendor/plugins/rspec/lib/spec/matchers/be.rb b/vendor/plugins/rspec/lib/spec/matchers/be.rb index 0eb1629a6..2b25b11f4 100644 --- a/vendor/plugins/rspec/lib/spec/matchers/be.rb +++ b/vendor/plugins/rspec/lib/spec/matchers/be.rb @@ -3,14 +3,17 @@ module Spec class Be #:nodoc: def initialize(*args) - @expected = parse_expected(args.shift) + if args.empty? + @expected = :satisfy_if + else + @expected = parse_expected(args.shift) + end @args = args @comparison = "" end def matches?(actual) @actual = actual - return true if match_or_compare unless handling_predicate? if handling_predicate? begin return @result = actual.__send__(predicate, *@args) @@ -28,8 +31,9 @@ module Spec rescue raise predicate_error end + else + return match_or_compare end - return false end def failure_message @@ -43,6 +47,7 @@ module Spec end def expected + return "if to be satisfied" if @expected == :satisfy_if return true if @expected == :true return false if @expected == :false return "nil" if @expected == :nil @@ -50,6 +55,7 @@ module Spec end def match_or_compare + return @actual ? true : false if @expected == :satisfy_if return @actual == true if @expected == :true return @actual == false if @expected == :false return @actual.nil? if @expected == :nil @@ -63,6 +69,7 @@ module Spec end def ==(expected) + @prefix = "be " @double_equal = true @comparison = "== " @expected = expected @@ -70,6 +77,7 @@ module Spec end def ===(expected) + @prefix = "be " @triple_equal = true @comparison = "=== " @expected = expected @@ -77,6 +85,7 @@ module Spec end def <(expected) + @prefix = "be " @less_than = true @comparison = "< " @expected = expected @@ -84,6 +93,7 @@ module Spec end def <=(expected) + @prefix = "be " @less_than_or_equal = true @comparison = "<= " @expected = expected @@ -91,6 +101,7 @@ module Spec end def >=(expected) + @prefix = "be " @greater_than_or_equal = true @comparison = ">= " @expected = expected @@ -98,6 +109,7 @@ module Spec end def >(expected) + @prefix = "be " @greater_than = true @comparison = "> " @expected = expected @@ -112,11 +124,14 @@ module Spec def parse_expected(expected) if Symbol === expected @handling_predicate = true - ["be_an_","be_a_","be_"].each do |@prefix| - return "#{expected.to_s.sub(@prefix,"")}".to_sym if expected.starts_with?(@prefix) + ["be_an_","be_a_","be_"].each do |prefix| + if expected.starts_with?(prefix) + @prefix = prefix + return "#{expected.to_s.sub(@prefix,"")}".to_sym + end end end - @prefix = "be " + @prefix = "" return expected end @@ -169,6 +184,7 @@ module Spec end # :call-seq: + # should be # should be_true # should be_false # should be_nil @@ -177,7 +193,8 @@ module Spec # should_not be_arbitrary_predicate(*args) # # Given true, false, or nil, will pass if actual is - # true, false or nil (respectively). + # true, false or nil (respectively). Given no args means + # the caller should satisfy an if condition (to be or not to be). # # Predicates are any Ruby method that ends in a "?" and returns true or false. # Given be_ followed by arbitrary_predicate (without the "?"), RSpec will match @@ -189,6 +206,7 @@ module Spec # # == Examples # + # target.should be # target.should be_true # target.should be_false # target.should be_nil diff --git a/vendor/plugins/rspec/lib/spec/matchers/change.rb b/vendor/plugins/rspec/lib/spec/matchers/change.rb index 41a718aca..784e516ed 100644 --- a/vendor/plugins/rspec/lib/spec/matchers/change.rb +++ b/vendor/plugins/rspec/lib/spec/matchers/change.rb @@ -21,6 +21,8 @@ EOF return false if @from && (@from != @before) return false if @to && (@to != @after) return (@before + @amount == @after) if @amount + return ((@after - @before) >= @minimum) if @minimum + return ((@after - @before) <= @maximum) if @maximum return @before != @after end @@ -37,6 +39,10 @@ EOF "#{result} should have initially been #{@from.inspect}, but was #{@before.inspect}" elsif @amount "#{result} should have been changed by #{@amount.inspect}, but was changed by #{actual_delta.inspect}" + elsif @minimum + "#{result} should have been changed by at least #{@minimum.inspect}, but was changed by #{actual_delta.inspect}" + elsif @maximum + "#{result} should have been changed by at most #{@maximum.inspect}, but was changed by #{actual_delta.inspect}" else "#{result} should have changed, but is still #{@before.inspect}" end @@ -59,6 +65,16 @@ EOF self end + def by_at_least(minimum) + @minimum = minimum + self + end + + def by_at_most(maximum) + @maximum = maximum + self + end + def to(to) @to = to self @@ -88,6 +104,14 @@ EOF # team.add_player(player) # }.should change(roster, :count).by(1) # + # lambda { + # team.add_player(player) + # }.should change(roster, :count).by_at_least(1) + # + # lambda { + # team.add_player(player) + # }.should change(roster, :count).by_at_most(1) + # # string = "string" # lambda { # string.reverse @@ -109,7 +133,7 @@ EOF # # == Warning # +should_not+ +change+ only supports the form with no subsequent calls to - # +be+, +to+ or +from+. + # +by+, +by_at_least+, +by_at_most+, +to+ or +from+. # # blocks passed to +should+ +change+ and +should_not+ +change+ # must use the <tt>{}</tt> form (<tt>do/end</tt> is not supported) diff --git a/vendor/plugins/rspec/lib/spec/matchers/have.rb b/vendor/plugins/rspec/lib/spec/matchers/have.rb index f28b86ad3..47454e3be 100644 --- a/vendor/plugins/rspec/lib/spec/matchers/have.rb +++ b/vendor/plugins/rspec/lib/spec/matchers/have.rb @@ -17,6 +17,7 @@ module Spec def method_missing(sym, *args, &block) @collection_name = sym + @plural_collection_name = Inflector.pluralize(sym.to_s) if Object.const_defined?(:Inflector) @args = args @block = block self @@ -25,6 +26,8 @@ module Spec def matches?(collection_owner) if collection_owner.respond_to?(@collection_name) collection = collection_owner.send(@collection_name, *@args, &@block) + elsif (@plural_collection_name && collection_owner.respond_to?(@plural_collection_name)) + collection = collection_owner.send(@plural_collection_name, *@args, &@block) elsif (collection_owner.respond_to?(:length) || collection_owner.respond_to?(:size)) collection = collection_owner else diff --git a/vendor/plugins/rspec/lib/spec/matchers/operator_matcher.rb b/vendor/plugins/rspec/lib/spec/matchers/operator_matcher.rb index 2d47ea85a..dd23a0994 100755 --- a/vendor/plugins/rspec/lib/spec/matchers/operator_matcher.rb +++ b/vendor/plugins/rspec/lib/spec/matchers/operator_matcher.rb @@ -1,6 +1,7 @@ module Spec module Matchers class BaseOperatorMatcher + attr_reader :generated_description def initialize(target) @target = target diff --git a/vendor/plugins/rspec/lib/spec/matchers/throw_symbol.rb b/vendor/plugins/rspec/lib/spec/matchers/throw_symbol.rb index 6d047bc39..c74d84436 100644 --- a/vendor/plugins/rspec/lib/spec/matchers/throw_symbol.rb +++ b/vendor/plugins/rspec/lib/spec/matchers/throw_symbol.rb @@ -4,12 +4,14 @@ module Spec class ThrowSymbol #:nodoc: def initialize(expected=nil) @expected = expected + @actual = nil end def matches?(proc) begin proc.call rescue NameError => e + raise e unless e.message =~ /uncaught throw/ @actual = e.name.to_sym ensure if @expected.nil? diff --git a/vendor/plugins/rspec/lib/spec/mocks.rb b/vendor/plugins/rspec/lib/spec/mocks.rb index 66cbafb3c..9f9cd215b 100644 --- a/vendor/plugins/rspec/lib/spec/mocks.rb +++ b/vendor/plugins/rspec/lib/spec/mocks.rb @@ -170,7 +170,9 @@ module Spec # #error can be an instantiated object or a class # #if it is a class, it must be instantiable with no args # my_mock.should_receive(:sym).and_throw(:sym) - # my_mock.should_receive(:sym).and_yield([array,of,values,to,yield]) + # my_mock.should_receive(:sym).and_yield(values,to,yield) + # my_mock.should_receive(:sym).and_yield(values,to,yield).and_yield(some,other,values,this,time) + # # for methods that yield to a block multiple times # # Any of these responses can be applied to a stub as well, but stubs do # not support any qualifiers about the message received (i.e. you can't specify arguments @@ -180,7 +182,8 @@ module Spec # my_mock.stub!(:sym).and_return(value1, value2, value3) # my_mock.stub!(:sym).and_raise(error) # my_mock.stub!(:sym).and_throw(:sym) - # my_mock.stub!(:sym).and_yield([array,of,values,to,yield]) + # my_mock.stub!(:sym).and_yield(values,to,yield) + # my_mock.stub!(:sym).and_yield(values,to,yield).and_yield(some,other,values,this,time) # # == Arbitrary Handling # diff --git a/vendor/plugins/rspec/lib/spec/mocks/argument_expectation.rb b/vendor/plugins/rspec/lib/spec/mocks/argument_expectation.rb index 5da069b87..34a1d4d03 100644 --- a/vendor/plugins/rspec/lib/spec/mocks/argument_expectation.rb +++ b/vendor/plugins/rspec/lib/spec/mocks/argument_expectation.rb @@ -138,7 +138,7 @@ module Spec end def warn_deprecated(deprecated_method, instead) - STDERR.puts "The #{deprecated_method} constraint is deprecated. Use #{instead} instead." + Kernel.warn "The #{deprecated_method} constraint is deprecated. Use #{instead} instead." end def convert_constraint(constraint) diff --git a/vendor/plugins/rspec/lib/spec/mocks/message_expectation.rb b/vendor/plugins/rspec/lib/spec/mocks/message_expectation.rb index 74ade3c58..6bd2f1c32 100644 --- a/vendor/plugins/rspec/lib/spec/mocks/message_expectation.rb +++ b/vendor/plugins/rspec/lib/spec/mocks/message_expectation.rb @@ -10,8 +10,8 @@ module Spec @expected_from = expected_from @sym = sym @method_block = method_block - @return_block = lambda {} - @received_count = 0 + @return_block = nil + @actual_received_count = 0 @expected_received_count = expected_received_count @args_expectation = ArgumentExpectation.new([AnyArgsConstraint.new]) @consecutive = false @@ -20,7 +20,7 @@ module Spec @order_group = expectation_ordering @at_least = nil @at_most = nil - @args_to_yield = nil + @args_to_yield = [] end def expected_args @@ -29,17 +29,18 @@ module Spec def and_return(*values, &return_block) Kernel::raise AmbiguousReturnError unless @method_block.nil? - if values.size == 0 - value = nil - elsif values.size == 1 - value = values[0] + case values.size + when 0 then value = nil + when 1 then value = values[0] else value = values @consecutive = true - @expected_received_count = values.size if @expected_received_count != :any && + @expected_received_count = values.size if !ignoring_args? && @expected_received_count < values.size end @return_block = block_given? ? return_block : lambda { value } + # Ruby 1.9 - see where this is used below + @ignore_args = !block_given? end # :call-seq: @@ -62,7 +63,8 @@ module Spec end def and_yield(*args) - @args_to_yield = args + @args_to_yield << args + self end def matches(sym, args) @@ -73,25 +75,26 @@ module Spec @order_group.handle_order_constraint self begin - if @exception_to_raise.class == Class - @exception_instance_to_raise = @exception_to_raise.new - else - @exception_instance_to_raise = @exception_to_raise - end Kernel::raise @exception_to_raise unless @exception_to_raise.nil? Kernel::throw @symbol_to_throw unless @symbol_to_throw.nil? - + if !@method_block.nil? - return invoke_method_block(args) - elsif !@args_to_yield.nil? - return invoke_with_yield(block) - elsif @consecutive - return invoke_consecutive_return_block(args, block) + default_return_val = invoke_method_block(args) + elsif @args_to_yield.size > 0 + default_return_val = invoke_with_yield(block) else + default_return_val = nil + end + + if @consecutive + return invoke_consecutive_return_block(args, block) + elsif @return_block return invoke_return_block(args, block) + else + return default_return_val end ensure - @received_count += 1 + @actual_received_count += 1 end end @@ -109,25 +112,32 @@ module Spec if block.nil? @error_generator.raise_missing_block_error @args_to_yield end - if block.arity > -1 && @args_to_yield.length != block.arity - @error_generator.raise_wrong_arity_error @args_to_yield, block.arity + @args_to_yield.each do |args_to_yield_this_time| + if block.arity > -1 && args_to_yield_this_time.length != block.arity + @error_generator.raise_wrong_arity_error args_to_yield_this_time, block.arity + end + block.call(*args_to_yield_this_time) end - block.call(*@args_to_yield) end def invoke_consecutive_return_block(args, block) args << block unless block.nil? value = @return_block.call(*args) - index = [@received_count, value.size-1].min + index = [@actual_received_count, value.size-1].min value[index] end def invoke_return_block(args, block) args << block unless block.nil? - value = @return_block.call(*args) - - value + # Ruby 1.9 - when we set @return_block to return values + # regardless of arguments, any arguments will result in + # a "wrong number of arguments" error + if @ignore_args + @return_block.call() + else + @return_block.call(*args) + end end end @@ -138,17 +148,33 @@ module Spec end def verify_messages_received - return if @expected_received_count == :any - return if (@at_least) && (@received_count >= @expected_received_count) - return if (@at_most) && (@received_count <= @expected_received_count) - return if @expected_received_count == @received_count + return if ignoring_args? || matches_exact_count? || + matches_at_least_count? || matches_at_most_count? - begin - @error_generator.raise_expectation_error(@sym, @expected_received_count, @received_count, *@args_expectation.args) - rescue => error - error.backtrace.insert(0, @expected_from) - Kernel::raise error - end + generate_error + rescue Spec::Mocks::MockExpectationError => error + error.backtrace.insert(0, @expected_from) + Kernel::raise error + end + + def ignoring_args? + @expected_received_count == :any + end + + def matches_at_least_count? + @at_least && @actual_received_count >= @expected_received_count + end + + def matches_at_most_count? + @at_most && @actual_received_count <= @expected_received_count + end + + def matches_exact_count? + @expected_received_count == @actual_received_count + end + + def generate_error + @error_generator.raise_expectation_error(@sym, @expected_received_count, @actual_received_count, *@args_expectation.args) end def with(*args, &block) @@ -215,9 +241,14 @@ module Spec def set_expected_received_count(relativity, n) @at_least = (relativity == :at_least) @at_most = (relativity == :at_most) - @expected_received_count = 1 if n == :once - @expected_received_count = 2 if n == :twice - @expected_received_count = n if n.kind_of? Numeric + @expected_received_count = case n + when Numeric + n + when :once + 1 + when :twice + 2 + end end end @@ -232,11 +263,5 @@ module Spec end end - class MethodStub < BaseExpectation - def initialize(message, expectation_ordering, expected_from, sym, method_block) - super(message, expectation_ordering, expected_from, sym, method_block, 0) - @expected_received_count = :any - end - end end end diff --git a/vendor/plugins/rspec/lib/spec/mocks/methods.rb b/vendor/plugins/rspec/lib/spec/mocks/methods.rb index 3d898cf31..d9fa324d3 100644 --- a/vendor/plugins/rspec/lib/spec/mocks/methods.rb +++ b/vendor/plugins/rspec/lib/spec/mocks/methods.rb @@ -9,8 +9,8 @@ module Spec __mock_proxy.add_negative_message_expectation(caller(1)[0], sym.to_sym, &block) end - def stub!(sym) - __mock_proxy.add_stub(caller(1)[0], sym.to_sym) + def stub!(sym, opts={}) + __mock_proxy.add_stub(caller(1)[0], sym.to_sym, opts) end def received_message?(sym, *args, &block) #:nodoc: diff --git a/vendor/plugins/rspec/lib/spec/mocks/mock.rb b/vendor/plugins/rspec/lib/spec/mocks/mock.rb index aa380e0af..f029b1b8f 100644 --- a/vendor/plugins/rspec/lib/spec/mocks/mock.rb +++ b/vendor/plugins/rspec/lib/spec/mocks/mock.rb @@ -6,9 +6,18 @@ module Spec # Creates a new mock with a +name+ (that will be used in error messages only) # == Options: # * <tt>:null_object</tt> - if true, the mock object acts as a forgiving null object allowing any message to be sent to it. - def initialize(name, options={}) + def initialize(name, stubs_and_options={}) @name = name - @options = options + @options = parse_options(stubs_and_options) + assign_stubs(stubs_and_options) + end + + # This allows for comparing the mock to other objects that proxy + # such as ActiveRecords belongs_to proxy objects + # By making the other object run the comparison, we're sure the call gets delegated to the proxy target + # This is an unfortunate side effect from ActiveRecord, but this should be safe unless the RHS redefines == in a nonsensical manner + def ==(other) + other == __mock_proxy end def method_missing(sym, *args, &block) @@ -16,7 +25,7 @@ module Spec begin return self if __mock_proxy.null_object? super(sym, *args, &block) - rescue NoMethodError + rescue NameError __mock_proxy.raise_unexpected_message_error sym, *args end end @@ -24,6 +33,18 @@ module Spec def inspect "#<#{self.class}:#{sprintf '0x%x', self.object_id} @name=#{@name.inspect}>" end + + private + + def parse_options(options) + options.has_key?(:null_object) ? {:null_object => options.delete(:null_object)} : {} + end + + def assign_stubs(stubs) + stubs.each_pair do |message, response| + stub!(message).and_return(response) + end + end end end end diff --git a/vendor/plugins/rspec/lib/spec/mocks/proxy.rb b/vendor/plugins/rspec/lib/spec/mocks/proxy.rb index 6c79d1068..03db3b113 100644 --- a/vendor/plugins/rspec/lib/spec/mocks/proxy.rb +++ b/vendor/plugins/rspec/lib/spec/mocks/proxy.rb @@ -22,29 +22,27 @@ module Spec end def add_message_expectation(expected_from, sym, opts={}, &block) - __add sym, block + __add sym @expectations << MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil, 1, opts) @expectations.last end def add_negative_message_expectation(expected_from, sym, &block) - __add sym, block + __add sym @expectations << NegativeMessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil) @expectations.last end - def add_stub(expected_from, sym) - __add sym, nil - @stubs.unshift MethodStub.new(@error_generator, @expectation_ordering, expected_from, sym, nil) + def add_stub(expected_from, sym, opts={}) + __add sym + @stubs.unshift MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, nil, :any, opts) @stubs.first end def verify #:nodoc: - begin - verify_expectations - ensure - reset - end + verify_expectations + ensure + reset end def reset @@ -55,8 +53,7 @@ module Spec end def received_message?(sym, *args, &block) - return true if @messages_received.find {|array| array == [sym, args, block]} - return false + @messages_received.any? {|array| array == [sym, args, block]} end def has_negative_expectation?(sym) @@ -66,7 +63,7 @@ module Spec def message_received(sym, *args, &block) if expectation = find_matching_expectation(sym, *args) expectation.invoke(args, block) - elsif stub = find_matching_method_stub(sym) + elsif stub = find_matching_method_stub(sym, *args) stub.invoke([], block) elsif expectation = find_almost_matching_expectation(sym, *args) raise_unexpected_message_args_error(expectation, *args) unless has_negative_expectation?(sym) unless null_object? @@ -85,14 +82,17 @@ module Spec private - def __add(sym, block) + def __add(sym) $rspec_mocks.add(@target) unless $rspec_mocks.nil? define_expected_method(sym) end def define_expected_method(sym) - if target_responds_to?(sym) && !@proxied_methods.include?(sym) - metaclass.__send__(:alias_method, munge(sym), sym) if metaclass.instance_methods.include?(sym.to_s) + if target_responds_to?(sym) && !metaclass.method_defined?(munge(sym)) + munged_sym = munge(sym) + metaclass.instance_eval do + alias_method munged_sym, sym if method_defined?(sym.to_s) + end @proxied_methods << sym end @@ -141,11 +141,14 @@ module Spec def reset_proxied_methods @proxied_methods.each do |sym| - if metaclass.instance_methods.include?(munge(sym).to_s) - metaclass.__send__(:alias_method, sym, munge(sym)) - metaclass.__send__(:undef_method, munge(sym)) - else - metaclass.__send__(:undef_method, sym) + munged_sym = munge(sym) + metaclass.instance_eval do + if method_defined?(munged_sym.to_s) + alias_method sym, munged_sym + undef_method munged_sym + else + undef_method sym + end end end end @@ -158,8 +161,8 @@ module Spec @expectations.find {|expectation| expectation.matches_name_but_not_args(sym, args)} end - def find_matching_method_stub(sym) - @stubs.find {|stub| stub.matches(sym, [])} + def find_matching_method_stub(sym, *args) + @stubs.find {|stub| stub.matches(sym, args)} end end diff --git a/vendor/plugins/rspec/lib/spec/mocks/space.rb b/vendor/plugins/rspec/lib/spec/mocks/space.rb index e04bc5ccb..3e13224c7 100644 --- a/vendor/plugins/rspec/lib/spec/mocks/space.rb +++ b/vendor/plugins/rspec/lib/spec/mocks/space.rb @@ -2,7 +2,7 @@ module Spec module Mocks class Space def add(obj) - mocks << obj unless mocks.include?(obj) + mocks << obj unless mocks.detect {|m| m.equal? obj} end def verify_all diff --git a/vendor/plugins/rspec/lib/spec/mocks/spec_methods.rb b/vendor/plugins/rspec/lib/spec/mocks/spec_methods.rb index fd67fd210..d92a4cedd 100644 --- a/vendor/plugins/rspec/lib/spec/mocks/spec_methods.rb +++ b/vendor/plugins/rspec/lib/spec/mocks/spec_methods.rb @@ -1,30 +1,38 @@ module Spec module Mocks - module SpecMethods + module ExampleMethods include Spec::Mocks::ArgumentConstraintMatchers # Shortcut for creating an instance of Spec::Mocks::Mock. - def mock(name, options={}) - Spec::Mocks::Mock.new(name, options) - end - - # Shortcut for creating an instance of Spec::Mocks::Mock with - # predefined method stubs. + # + # +name+ is used for failure reporting, so you should use the + # role that the mock is playing in the example. + # + # +stubs_and_options+ lets you assign options and stub values + # at the same time. The only option available is :null_object. + # Anything else is treated as a stub value. # # == Examples # - # stub_thing = stub("thing", :a => "A") + # stub_thing = mock("thing", :a => "A") # stub_thing.a == "A" => true # # stub_person = stub("thing", :name => "Joe", :email => "joe@domain.com") # stub_person.name => "Joe" # stub_person.email => "joe@domain.com" - def stub(name, stubs={}) - object_stub = mock(name) - stubs.each { |key, value| object_stub.stub!(key).and_return(value) } - object_stub + def mock(name, stubs_and_options={}) + Spec::Mocks::Mock.new(name, stubs_and_options) end + alias :stub :mock + + # Shortcut for creating a mock object that will return itself in response + # to any message it receives that it hasn't been explicitly instructed + # to respond to. + def stub_everything(name = 'stub') + mock(name, :null_object => true) + end + end end end diff --git a/vendor/plugins/rspec/lib/spec/rake/spectask.rb b/vendor/plugins/rspec/lib/spec/rake/spectask.rb index f8c6809a9..c59e226f5 100644 --- a/vendor/plugins/rspec/lib/spec/rake/spectask.rb +++ b/vendor/plugins/rspec/lib/spec/rake/spectask.rb @@ -8,7 +8,7 @@ require 'rake/tasklib' module Spec module Rake - # A Rake task that runs a set of RSpec contexts. + # A Rake task that runs a set of specs. # # Example: # @@ -44,6 +44,17 @@ module Spec # Each attribute of this task may be a proc. This allows for lazy evaluation, # which is sometimes handy if you want to defer the evaluation of an attribute value # until the task is run (as opposed to when it is defined). + # + # This task can also be used to run existing Test::Unit tests and get RSpec + # output, for example like this: + # + # require 'rubygems' + # require 'spec/rake/spectask' + # Spec::Rake::SpecTask.new do |t| + # t.ruby_opts = ['-rtest/unit'] + # t.spec_files = FileList['test/**/*_test.rb'] + # end + # class SpecTask < ::Rake::TaskLib class << self def attr_accessor(*names) @@ -106,6 +117,10 @@ module Spec # used, then the list of spec files is the union of the two. # Setting the SPEC environment variable overrides this. attr_accessor :spec_files + + # Use verbose output. If this is set to true, the task will print + # the executed spec command to stdout. Defaults to false. + attr_accessor :verbose # Defines a new task, using the name +name+. def initialize(name=:spec) @@ -161,6 +176,9 @@ module Spec cmd << %Q| > "#{out}"| STDERR.puts "The Spec::Rake::SpecTask#out attribute is DEPRECATED and will be removed in a future version. Use --format FORMAT:WHERE instead." end + if verbose + puts cmd + end unless system(cmd) STDERR.puts failure_message if failure_message raise("Command #{cmd} failed") if fail_on_error diff --git a/vendor/plugins/rspec/lib/spec/rake/verify_rcov.rb b/vendor/plugins/rspec/lib/spec/rake/verify_rcov.rb index 9715744e9..3328f9e9a 100644 --- a/vendor/plugins/rspec/lib/spec/rake/verify_rcov.rb +++ b/vendor/plugins/rspec/lib/spec/rake/verify_rcov.rb @@ -38,7 +38,7 @@ module RCov total_coverage = nil File.open(index_html).each_line do |line| - if line =~ /<tt.*>(\d+\.\d+)%<\/tt> <\/td>/ + if line =~ /<tt class='coverage_total'>(\d+\.\d+)%<\/tt>/ total_coverage = eval($1) break end diff --git a/vendor/plugins/rspec/lib/spec/runner.rb b/vendor/plugins/rspec/lib/spec/runner.rb index 9d801adc3..1a9373fee 100644 --- a/vendor/plugins/rspec/lib/spec/runner.rb +++ b/vendor/plugins/rspec/lib/spec/runner.rb @@ -1,22 +1,20 @@ -require 'spec/runner/formatter' -require 'spec/runner/behaviour_runner' require 'spec/runner/options' require 'spec/runner/option_parser' +require 'spec/runner/example_group_runner' require 'spec/runner/command_line' require 'spec/runner/drb_command_line' require 'spec/runner/backtrace_tweaker' require 'spec/runner/reporter' -require 'spec/runner/extensions/object' -require 'spec/runner/extensions/kernel' require 'spec/runner/spec_parser' +require 'spec/runner/class_and_arguments_parser' module Spec - # == Behaviours and Examples + # == ExampleGroups and Examples # - # Rather than expressing examples in classes, RSpec uses a custom domain specific language to - # describe Behaviours and Examples of those behaviours. + # Rather than expressing examples in classes, RSpec uses a custom DSLL (DSL light) to + # describe groups of examples. # - # A Behaviour is the equivalent of a fixture in xUnit-speak. It is a metaphor for the context + # A ExampleGroup is the equivalent of a fixture in xUnit-speak. It is a metaphor for the context # in which you will run your executable example - a set of known objects in a known starting state. # We begin be describing # @@ -32,7 +30,7 @@ module Spec # # end # - # We use the before block to set up the Behaviour (given), and then the #it method to + # We use the before block to set up the Example (given), and then the #it method to # hold the example code that expresses the event (when) and the expected outcome (then). # # == Helper Methods @@ -47,7 +45,7 @@ module Spec # # == Setup and Teardown # - # You can use before and after within a Behaviour. Both methods take an optional + # You can use before and after within a Example. Both methods take an optional # scope argument so you can run the block before :each example or before :all examples # # describe "..." do @@ -125,11 +123,11 @@ module Spec # end # end # - # == Shared behaviour + # == Shared Example Groups # - # You can define a shared behaviour, that may be used on other behaviours + # You can define a shared Example Group, that may be used on other groups # - # describe "All Editions", :shared => true do + # share_examples_for "All Editions" do # it "all editions behaviour" ... # end # @@ -140,10 +138,35 @@ module Spec # ... # end # end + # + # You can also assign the shared group to a module and include that + # + # share_as :AllEditions do + # it "should do all editions stuff" ... + # end + # + # describe SmallEdition do + # it_should_behave_like AllEditions + # + # it "should do small edition stuff" do + # ... + # end + # end + # + # And, for those of you who prefer to use something more like Ruby, you + # can just include the module directly + # + # describe SmallEdition do + # include AllEditions + # + # it "should do small edition stuff" do + # ... + # end + # end module Runner class << self def configuration # :nodoc: - @configuration ||= Spec::DSL::Configuration.new + @configuration ||= Spec::Example::Configuration.new end # Use this to configure various configurable aspects of @@ -154,11 +177,11 @@ module Spec # end # # The yielded <tt>configuration</tt> object is a - # Spec::DSL::Configuration instance. See its RDoc + # Spec::Example::Configuration instance. See its RDoc # for details about what you can do with it. # def configure - yield configuration if @configuration.nil? + yield configuration end end end diff --git a/vendor/plugins/rspec/lib/spec/runner/backtrace_tweaker.rb b/vendor/plugins/rspec/lib/spec/runner/backtrace_tweaker.rb index aacc2c8b8..5fd2fb99f 100644 --- a/vendor/plugins/rspec/lib/spec/runner/backtrace_tweaker.rb +++ b/vendor/plugins/rspec/lib/spec/runner/backtrace_tweaker.rb @@ -7,7 +7,7 @@ module Spec end class NoisyBacktraceTweaker < BacktraceTweaker - def tweak_backtrace(error, spec_name) + def tweak_backtrace(error) return if error.backtrace.nil? error.backtrace.each do |line| clean_up_double_slashes(line) @@ -19,7 +19,7 @@ module Spec class QuietBacktraceTweaker < BacktraceTweaker unless defined?(IGNORE_PATTERNS) root_dir = File.expand_path(File.join(__FILE__, '..', '..', '..', '..')) - spec_files = Dir["#{root_dir}/lib/spec/*"].map do |path| + spec_files = Dir["#{root_dir}/lib/*"].map do |path| subpath = path[root_dir.length..-1] /#{subpath}/ end @@ -38,7 +38,7 @@ module Spec ] end - def tweak_backtrace(error, spec_name) + def tweak_backtrace(error) return if error.backtrace.nil? error.backtrace.collect! do |line| clean_up_double_slashes(line) diff --git a/vendor/plugins/rspec/lib/spec/runner/behaviour_runner.rb b/vendor/plugins/rspec/lib/spec/runner/behaviour_runner.rb deleted file mode 100644 index 1ac891f3c..000000000 --- a/vendor/plugins/rspec/lib/spec/runner/behaviour_runner.rb +++ /dev/null @@ -1,123 +0,0 @@ -module Spec - module Runner - class BehaviourRunner - - def initialize(options, arg=nil) - @behaviours = [] - @options = options - end - - def add_behaviour(behaviour) - if !specified_examples.nil? && !specified_examples.empty? - behaviour.retain_examples_matching!(specified_examples) - end - @behaviours << behaviour if behaviour.number_of_examples != 0 && !behaviour.shared? - end - - # Runs all behaviours and returns the number of failures. - def run(paths, exit_when_done) - prepare!(paths) - begin - run_behaviours - rescue Interrupt - ensure - report_end - end - failure_count = report_dump - - heckle if(failure_count == 0 && !@options.heckle_runner.nil?) - - if(exit_when_done) - exit_code = (failure_count == 0) ? 0 : 1 - exit(exit_code) - end - failure_count - end - - def report_end - @options.reporter.end - end - - def report_dump - @options.reporter.dump - end - - def prepare!(paths) - unless paths.nil? # It's nil when running single specs with ruby - paths = find_paths(paths) - sorted_paths = sort_paths(paths) - load_specs(sorted_paths) # This will populate @behaviours via callbacks to add_behaviour - end - @options.reporter.start(number_of_examples) - @behaviours.reverse! if @options.reverse - set_sequence_numbers - end - - def run_behaviours - @behaviours.each do |behaviour| - behaviour.run(@options.reporter, @options.dry_run, @options.reverse, @options.timeout) - end - end - - def number_of_examples - @behaviours.inject(0) {|sum, behaviour| sum + behaviour.number_of_examples} - end - - FILE_SORTERS = { - 'mtime' => lambda {|file_a, file_b| File.mtime(file_b) <=> File.mtime(file_a)} - } - - def sorter(paths) - FILE_SORTERS[@options.loadby] - end - - def sort_paths(paths) - sorter = sorter(paths) - paths = paths.sort(&sorter) unless sorter.nil? - paths - end - - private - - # Sets the #number on each Example - def set_sequence_numbers - number = 0 - @behaviours.each do |behaviour| - number = behaviour.set_sequence_numbers(number, @options.reverse) - end - end - - def find_paths(paths) - result = [] - paths.each do |path| - if File.directory?(path) - result += Dir["#{path}/**/*.rb"] - elsif File.file?(path) - result << path - else - raise "File or directory not found: #{path}" - end - end - result - end - - def load_specs(paths) - paths.each do |path| - load path - end - end - - def specified_examples - @options.examples - end - - def heckle - heckle_runner = @options.heckle_runner - @options.heckle_runner = nil - behaviour_runner = self.class.new(@options) - behaviour_runner.instance_variable_set(:@behaviours, @behaviours) - heckle_runner.heckle_with(behaviour_runner) - end - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/runner/command_line.rb b/vendor/plugins/rspec/lib/spec/runner/command_line.rb index 0d70337e1..9849c4853 100644 --- a/vendor/plugins/rspec/lib/spec/runner/command_line.rb +++ b/vendor/plugins/rspec/lib/spec/runner/command_line.rb @@ -4,18 +4,24 @@ module Spec module Runner # Facade to run specs without having to fork a new ruby process (using `spec ...`) class CommandLine - # Runs specs. +argv+ is the commandline args as per the spec commandline API, +err+ - # and +out+ are the streams output will be written to. +exit+ tells whether or - # not a system exit should be called after the specs are run and - # +warn_if_no_files+ tells whether or not a warning (the help message) - # should be printed to +err+ in case no files are specified. - def self.run(argv, err, out, exit=true, warn_if_no_files=true) - old_behaviour_runner = defined?($behaviour_runner) ? $behaviour_runner : nil - $behaviour_runner = OptionParser.new.create_behaviour_runner(argv, err, out, warn_if_no_files) - return if $behaviour_runner.nil? # This is the case if we use --drb - - $behaviour_runner.run(argv, exit) - $behaviour_runner = old_behaviour_runner + class << self + # Runs specs. +argv+ is the commandline args as per the spec commandline API, +err+ + # and +out+ are the streams output will be written to. + def run(instance_rspec_options) + # NOTE - this call to init_rspec_options is not spec'd, but neither is any of this + # swapping of $rspec_options. That is all here to enable rspec to run against itself + # and maintain coverage in a single process. Therefore, DO NOT mess with this stuff + # unless you know what you are doing! + init_rspec_options(instance_rspec_options) + orig_rspec_options = rspec_options + begin + $rspec_options = instance_rspec_options + return $rspec_options.run_examples + ensure + ::Spec.run = true + $rspec_options = orig_rspec_options + end + end end end end diff --git a/vendor/plugins/rspec/lib/spec/runner/drb_command_line.rb b/vendor/plugins/rspec/lib/spec/runner/drb_command_line.rb index 7e745fb71..6c340cfea 100644 --- a/vendor/plugins/rspec/lib/spec/runner/drb_command_line.rb +++ b/vendor/plugins/rspec/lib/spec/runner/drb_command_line.rb @@ -6,14 +6,13 @@ module Spec class DrbCommandLine # Runs specs on a DRB server. Note that this API is similar to that of # CommandLine - making it possible for clients to use both interchangeably. - def self.run(argv, stderr, stdout, exit=true, warn_if_no_files=true) + def self.run(options) begin DRb.start_service spec_server = DRbObject.new_with_uri("druby://localhost:8989") - spec_server.run(argv, stderr, stdout) - rescue DRb::DRbConnError - stderr.puts "No server is running" - exit 1 if exit + spec_server.run(options.argv, options.error_stream, options.output_stream) + rescue DRb::DRbConnError => e + options.error_stream.puts "No server is running" end end end diff --git a/vendor/plugins/rspec/lib/spec/runner/extensions/kernel.rb b/vendor/plugins/rspec/lib/spec/runner/extensions/kernel.rb deleted file mode 100644 index 75f2c335e..000000000 --- a/vendor/plugins/rspec/lib/spec/runner/extensions/kernel.rb +++ /dev/null @@ -1,50 +0,0 @@ -module Kernel - # Creates and registers an instance of a Spec::DSL::Behaviour (or a subclass). - # The instantiated behaviour class depends on the directory of the file - # calling this method. For example, Spec::Rails will use different - # classes for specs living in <tt>spec/models</tt>, <tt>spec/helpers</tt>, - # <tt>spec/views</tt> and <tt>spec/controllers</tt>. - # - # It is also possible to override autodiscovery of the behaviour class - # with an options Hash as the last argument: - # - # describe "name", :behaviour_type => :something_special do ... - # - # The reason for using different behaviour classes is to have - # different matcher methods available from within the <tt>describe</tt> - # block. - # - # See Spec::DSL::BehaviourFactory#add_behaviour_class for details about - # how to register special Spec::DSL::Behaviour implementations. - # - def describe(*args, &block) - raise ArgumentError if args.empty? - args << {} unless Hash === args.last - args.last[:spec_path] = caller(0)[1] - register_behaviour(Spec::DSL::BehaviourFactory.create(*args, &block)) - end - alias :context :describe - - def respond_to(*names) - Spec::Matchers::RespondTo.new(*names) - end - -private - - def register_behaviour(behaviour) - if behaviour.shared? - Spec::DSL::Behaviour.add_shared_behaviour(behaviour) - else - behaviour_runner.add_behaviour(behaviour) - end - end - - def behaviour_runner - # TODO: Figure out a better way to get this considered "covered" and keep this statement on multiple lines - unless $behaviour_runner; \ - $behaviour_runner = ::Spec::Runner::OptionParser.new.create_behaviour_runner(ARGV.dup, STDERR, STDOUT, false); \ - at_exit { $behaviour_runner.run(nil, false) }; \ - end - $behaviour_runner - end -end diff --git a/vendor/plugins/rspec/lib/spec/runner/extensions/object.rb b/vendor/plugins/rspec/lib/spec/runner/extensions/object.rb deleted file mode 100644 index 49745352f..000000000 --- a/vendor/plugins/rspec/lib/spec/runner/extensions/object.rb +++ /dev/null @@ -1,32 +0,0 @@ -# The following copyright applies to Object#copy_instance_variables_from, -# which we borrowed from active_support. -# -# Copyright (c) 2004 David Heinemeier Hansson -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -class Object - # From active_support - def copy_instance_variables_from(object, exclude = []) # :nodoc: - exclude += object.protected_instance_variables if object.respond_to? :protected_instance_variables - - instance_variables = object.instance_variables - exclude.map { |name| name.to_s } - instance_variables.each { |name| instance_variable_set(name, object.instance_variable_get(name)) } - end -end diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter.rb deleted file mode 100644 index 17512d958..000000000 --- a/vendor/plugins/rspec/lib/spec/runner/formatter.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'spec/runner/formatter/base_formatter' -require 'spec/runner/formatter/base_text_formatter' -require 'spec/runner/formatter/progress_bar_formatter' -require 'spec/runner/formatter/rdoc_formatter' -require 'spec/runner/formatter/specdoc_formatter' -require 'spec/runner/formatter/html_formatter' -require 'spec/runner/formatter/failing_examples_formatter' -require 'spec/runner/formatter/failing_behaviours_formatter' -require 'spec/runner/formatter/snippet_extractor' diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/base_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/base_formatter.rb index 7cc43ef0e..c8647cf50 100644 --- a/vendor/plugins/rspec/lib/spec/runner/formatter/base_formatter.rb +++ b/vendor/plugins/rspec/lib/spec/runner/formatter/base_formatter.rb @@ -3,7 +3,9 @@ module Spec module Formatter # Baseclass for formatters that implements all required methods as no-ops. class BaseFormatter - def initialize(where) + attr_accessor :example_group, :options, :where + def initialize(options, where) + @options = options @where = where end @@ -12,16 +14,17 @@ module Spec # formatters that need to provide progress on feedback (graphical ones) # # This method will only be invoked once, and the next one to be invoked - # is #add_behaviour + # is #add_example_group def start(example_count) end - # This method is invoked at the beginning of the execution of each behaviour. - # +name+ is the name of the behaviour and +first+ is true if it is the - # first behaviour - otherwise it's false. + # This method is invoked at the beginning of the execution of each example_group. + # +name+ is the name of the example_group and +first+ is true if it is the + # first example_group - otherwise it's false. # # The next method to be invoked after this is #example_failed or #example_finished - def add_behaviour(name) + def add_example_group(example_group) + @example_group = example_group end # This method is invoked when an +example+ starts. @@ -41,10 +44,9 @@ module Spec # This method is invoked when an example is not yet implemented (i.e. has not # been provided a block), or when an ExamplePendingError is raised. - # +name+ is the name of the example. # +message+ is the message from the ExamplePendingError, if it exists, or the # default value of "Not Yet Implemented" - def example_pending(behaviour_name, example_name, message) + def example_pending(example_group_description, example, message) end # This method is invoked after all of the examples have executed. The next method diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/base_text_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/base_text_formatter.rb index c3cf01b76..859b2641d 100644 --- a/vendor/plugins/rspec/lib/spec/runner/formatter/base_text_formatter.rb +++ b/vendor/plugins/rspec/lib/spec/runner/formatter/base_text_formatter.rb @@ -1,3 +1,5 @@ +require 'spec/runner/formatter/base_formatter' + module Spec module Runner module Formatter @@ -5,13 +7,12 @@ module Spec # non-text based ones too - just ignore the +output+ constructor # argument. class BaseTextFormatter < BaseFormatter - attr_writer :dry_run - + attr_reader :output, :pending_examples # Creates a new instance that will write to +where+. If +where+ is a # String, output will be written to the File with that name, otherwise # +where+ is exected to be an IO (or an object that responds to #puts and #write). - def initialize(where) - super(where) + def initialize(options, where) + super if where.is_a?(String) @output = File.open(where, 'w') elsif where == STDOUT @@ -22,21 +23,13 @@ module Spec else @output = where end - @colour = false - @dry_run = false - @snippet_extractor = SnippetExtractor.new @pending_examples = [] end - def example_pending(behaviour_name, example_name, message) - @pending_examples << ["#{behaviour_name} #{example_name}", message] + def example_pending(example_group_description, example, message) + @pending_examples << ["#{example_group_description} #{example.description}", message] end - def colour=(colour) - @colour = colour - begin ; require 'Win32/Console/ANSI' if @colour && PLATFORM =~ /win32/ ; rescue LoadError ; raise "You must gem install win32console to use colour on Windows" ; end - end - def dump_failure(counter, failure) @output.puts @output.puts "#{counter.to_s})" @@ -56,7 +49,7 @@ module Spec end def dump_summary(duration, example_count, failure_count, pending_count) - return if @dry_run + return if dry_run? @output.puts @output.puts "Finished in #{duration} seconds" @output.puts @@ -74,7 +67,6 @@ module Spec @output.puts red(summary) end @output.flush - dump_pending end def dump_pending @@ -100,13 +92,21 @@ module Spec end protected - + + def colour? + @options.colour ? true : false + end + + def dry_run? + @options.dry_run ? true : false + end + def backtrace_line(line) line.sub(/\A([^:]+:\d+)$/, '\\1:') end def colour(text, colour_code) - return text unless @colour && output_to_tty? + return text unless colour? && output_to_tty? "#{colour_code}#{text}\e[0m" end diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/failing_behaviours_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/failing_behaviours_formatter.rb deleted file mode 100644 index 2b3940fd3..000000000 --- a/vendor/plugins/rspec/lib/spec/runner/formatter/failing_behaviours_formatter.rb +++ /dev/null @@ -1,29 +0,0 @@ -module Spec - module Runner - module Formatter - class FailingBehavioursFormatter < BaseTextFormatter - def add_behaviour(behaviour_name) - if behaviour_name =~ /(.*) \(druby.*\)$/ - @behaviour_name = $1 - else - @behaviour_name = behaviour_name - end - end - - def example_failed(example, counter, failure) - unless @behaviour_name.nil? - @output.puts @behaviour_name - @behaviour_name = nil - @output.flush - end - end - - def dump_failure(counter, failure) - end - - def dump_summary(duration, example_count, failure_count, pending_count) - end - end - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/failing_examples_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/failing_examples_formatter.rb index 9728deaf0..e3a271c8b 100644 --- a/vendor/plugins/rspec/lib/spec/runner/formatter/failing_examples_formatter.rb +++ b/vendor/plugins/rspec/lib/spec/runner/formatter/failing_examples_formatter.rb @@ -1,13 +1,11 @@ +require 'spec/runner/formatter/base_text_formatter' + module Spec module Runner module Formatter class FailingExamplesFormatter < BaseTextFormatter - def add_behaviour(behaviour_name) - @behaviour_name = behaviour_name - end - def example_failed(example, counter, failure) - @output.puts "#{@behaviour_name} #{example.description}" + @output.puts "#{example_group.description} #{example.description}" @output.flush end diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/html_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/html_formatter.rb index d9c422e55..ad153c8dc 100644 --- a/vendor/plugins/rspec/lib/spec/runner/formatter/html_formatter.rb +++ b/vendor/plugins/rspec/lib/spec/runner/formatter/html_formatter.rb @@ -1,4 +1,5 @@ require 'erb' +require 'spec/runner/formatter/base_text_formatter' module Spec module Runner @@ -6,15 +7,15 @@ module Spec class HtmlFormatter < BaseTextFormatter include ERB::Util # for the #h method - def initialize(output) + def initialize(options, output) super - @current_behaviour_number = 0 + @current_example_group_number = 0 @current_example_number = 0 end - # The number of the currently running behaviour - def current_behaviour_number - @current_behaviour_number + # The number of the currently running example_group + def current_example_group_number + @current_example_group_number end # The number of the currently running example (a global counter) @@ -30,17 +31,18 @@ module Spec @output.flush end - def add_behaviour(name) - @behaviour_red = false - @behaviour_red = false - @current_behaviour_number += 1 - unless current_behaviour_number == 1 + def add_example_group(example_group) + super + @example_group_red = false + @example_group_red = false + @current_example_group_number += 1 + unless current_example_group_number == 1 @output.puts " </dl>" @output.puts "</div>" end - @output.puts "<div class=\"behaviour\">" + @output.puts "<div class=\"example_group\">" @output.puts " <dl>" - @output.puts " <dt id=\"behaviour_#{current_behaviour_number}\">#{h(name)}</dt>" + @output.puts " <dt id=\"example_group_#{current_example_group_number}\">#{h(example_group.description)}</dt>" @output.flush end @@ -51,7 +53,7 @@ module Spec end def example_started(example) - @current_example_number = example.number + @current_example_number += 1 end def example_passed(example) @@ -65,8 +67,8 @@ module Spec failure_style = failure.pending_fixed? ? 'pending_fixed' : 'failed' @output.puts " <script type=\"text/javascript\">makeRed('rspec-header');</script>" unless @header_red @header_red = true - @output.puts " <script type=\"text/javascript\">makeRed('behaviour_#{current_behaviour_number}');</script>" unless @behaviour_red - @behaviour_red = true + @output.puts " <script type=\"text/javascript\">makeRed('example_group_#{current_example_group_number}');</script>" unless @example_group_red + @example_group_red = true move_progress @output.puts " <dd class=\"spec #{failure_style}\">" @output.puts " <span class=\"failed_spec_name\">#{h(example.description)}</span>" @@ -79,11 +81,11 @@ module Spec @output.flush end - def example_pending(behaviour_name, example_name, message) + def example_pending(example_group_description, example, message) @output.puts " <script type=\"text/javascript\">makeYellow('rspec-header');</script>" unless @header_red - @output.puts " <script type=\"text/javascript\">makeYellow('behaviour_#{current_behaviour_number}');</script>" unless @behaviour_red + @output.puts " <script type=\"text/javascript\">makeYellow('example_group_#{current_example_group_number}');</script>" unless @example_group_red move_progress - @output.puts " <dd class=\"spec not_implemented\"><span class=\"not_implemented_spec_name\">#{h(example_name)}</span></dd>" + @output.puts " <dd class=\"spec not_implemented\"><span class=\"not_implemented_spec_name\">#{h(example.description)} (PENDING: #{h(message)})</span></dd>" @output.flush end @@ -91,20 +93,29 @@ module Spec # could output links to images or other files produced during the specs. # def extra_failure_content(failure) + require 'spec/runner/formatter/snippet_extractor' + @snippet_extractor ||= SnippetExtractor.new " <pre class=\"ruby\"><code>#{@snippet_extractor.snippet(failure.exception)}</code></pre>" end def move_progress - percent_done = @example_count == 0 ? 100.0 : ((current_example_number + 1).to_f / @example_count.to_f * 1000).to_i / 10.0 @output.puts " <script type=\"text/javascript\">moveProgressBar('#{percent_done}');</script>" @output.flush end + def percent_done + result = 100.0 + if @example_count != 0 + result = ((current_example_number).to_f / @example_count.to_f * 1000).to_i / 10.0 + end + result + end + def dump_failure(counter, failure) end def dump_summary(duration, example_count, failure_count, pending_count) - if @dry_run + if dry_run? totals = "This was a dry-run" else totals = "#{example_count} example#{'s' unless example_count == 1}, #{failure_count} failure#{'s' unless failure_count == 1}" @@ -121,15 +132,14 @@ module Spec def html_header <<-EOF -<?xml version="1.0" encoding="iso-8859-1"?> -<!DOCTYPE html - PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>RSpec results</title> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Expires" content="-1" /> <meta http-equiv="Pragma" content="no-cache" /> <style type="text/css"> @@ -225,7 +235,7 @@ EOF font-size: 1.2em; } -.behaviour { +.example_group { margin: 0 10px 5px; background: #fff; } diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb index 624f06e7c..8d0e50432 100644 --- a/vendor/plugins/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb +++ b/vendor/plugins/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb @@ -1,10 +1,9 @@ +require 'spec/runner/formatter/base_text_formatter' + module Spec module Runner module Formatter class ProgressBarFormatter < BaseTextFormatter - def add_behaviour(name) - end - def example_failed(example, counter, failure) @output.print colourise('F', failure) @output.flush @@ -15,7 +14,7 @@ module Spec @output.flush end - def example_pending(behaviour_name, example_name, message) + def example_pending(example_group_description, example, message) super @output.print yellow('P') @output.flush diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/rdoc_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/rdoc_formatter.rb deleted file mode 100644 index 0fd22ba6c..000000000 --- a/vendor/plugins/rspec/lib/spec/runner/formatter/rdoc_formatter.rb +++ /dev/null @@ -1,24 +0,0 @@ -module Spec - module Runner - module Formatter - class RdocFormatter < BaseTextFormatter - def add_behaviour(name) - @output.puts "# #{name}" - end - - def example_passed(example) - @output.puts "# * #{example.description}" - @output.flush - end - - def example_failed(example, counter, failure) - @output.puts "# * #{example.description} [#{counter} - FAILED]" - end - - def example_pending(behaviour_name, example_name, message) - @output.puts "# * #{behaviour_name} #{example_name} [PENDING: #{message}]" - end - end - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/specdoc_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/specdoc_formatter.rb index ad794b238..f426dc948 100644 --- a/vendor/plugins/rspec/lib/spec/runner/formatter/specdoc_formatter.rb +++ b/vendor/plugins/rspec/lib/spec/runner/formatter/specdoc_formatter.rb @@ -1,27 +1,37 @@ +require 'spec/runner/formatter/base_text_formatter' + module Spec module Runner module Formatter - class SpecdocFormatter < BaseTextFormatter - def add_behaviour(name) - @output.puts - @output.puts name - @output.flush + class SpecdocFormatter < BaseTextFormatter + def add_example_group(example_group) + super + output.puts + output.puts example_group.description + output.flush end def example_failed(example, counter, failure) - @output.puts failure.expectation_not_met? ? red("- #{example.description} (FAILED - #{counter})") : magenta("- #{example.description} (ERROR - #{counter})") - @output.flush + message = if failure.expectation_not_met? + "- #{example.description} (FAILED - #{counter})" + else + "- #{example.description} (ERROR - #{counter})" + end + + output.puts(failure.expectation_not_met? ? red(message) : magenta(message)) + output.flush end - + def example_passed(example) - @output.puts green("- #{example.description}") - @output.flush + message = "- #{example.description}" + output.puts green(message) + output.flush end - def example_pending(behaviour_name, example_name, message) + def example_pending(example_group_description, example, message) super - @output.puts yellow("- #{example_name} (PENDING: #{message})") - @output.flush + output.puts yellow("- #{example.description} (PENDING: #{message})") + output.flush end end end diff --git a/vendor/plugins/rspec/lib/spec/runner/heckle_runner.rb b/vendor/plugins/rspec/lib/spec/runner/heckle_runner.rb index b6de4ef73..7695fe794 100644 --- a/vendor/plugins/rspec/lib/spec/runner/heckle_runner.rb +++ b/vendor/plugins/rspec/lib/spec/runner/heckle_runner.rb @@ -13,9 +13,9 @@ module Spec @heckle_class = heckle_class end - # Runs all the contexts held by +behaviour_runner+ once for each of the + # Runs all the example groups held by +rspec_options+ once for each of the # methods in the matched classes. - def heckle_with(behaviour_runner) + def heckle_with if @filter =~ /(.*)[#\.](.*)/ heckle_method($1, $2) else @@ -25,7 +25,7 @@ module Spec def heckle_method(class_name, method_name) verify_constant(class_name) - heckle = @heckle_class.new(class_name, method_name, behaviour_runner) + heckle = @heckle_class.new(class_name, method_name, rspec_options) heckle.validate end @@ -39,7 +39,7 @@ module Spec classes.each do |klass| klass.instance_methods(false).each do |method_name| - heckle = @heckle_class.new(klass.name, method_name, behaviour_runner) + heckle = @heckle_class.new(klass.name, method_name, rspec_options) heckle.validate end end @@ -57,16 +57,16 @@ module Spec #Supports Heckle 1.2 and prior (earlier versions used Heckle::Base) class Heckler < (Heckle.const_defined?(:Base) ? Heckle::Base : Heckle) - def initialize(klass_name, method_name, behaviour_runner) + def initialize(klass_name, method_name, rspec_options) super(klass_name, method_name) - @behaviour_runner = behaviour_runner + @rspec_options = rspec_options end def tests_pass? - paths = [] # We can pass an empty array of paths - our specs are already loaded. - failure_count = @behaviour_runner.run(paths, false) - failure_count == 0 + success = @rspec_options.run_examples + success end + end end end diff --git a/vendor/plugins/rspec/lib/spec/runner/option_parser.rb b/vendor/plugins/rspec/lib/spec/runner/option_parser.rb index 1facb85a8..09cedccac 100644 --- a/vendor/plugins/rspec/lib/spec/runner/option_parser.rb +++ b/vendor/plugins/rspec/lib/spec/runner/option_parser.rb @@ -3,23 +3,18 @@ require 'stringio' module Spec module Runner - class OptionParser - BUILT_IN_FORMATTERS = { - 'specdoc' => Formatter::SpecdocFormatter, - 's' => Formatter::SpecdocFormatter, - 'html' => Formatter::HtmlFormatter, - 'h' => Formatter::HtmlFormatter, - 'rdoc' => Formatter::RdocFormatter, - 'r' => Formatter::RdocFormatter, - 'progress' => Formatter::ProgressBarFormatter, - 'p' => Formatter::ProgressBarFormatter, - 'failing_examples' => Formatter::FailingExamplesFormatter, - 'e' => Formatter::FailingExamplesFormatter, - 'failing_behaviours' => Formatter::FailingBehavioursFormatter, - 'b' => Formatter::FailingBehavioursFormatter - } + class OptionParser < ::OptionParser + class << self + def parse(args, err, out) + parser = new(err, out) + parser.parse(args) + parser.options + end + end + + attr_reader :options - COMMAND_LINE = { + OPTIONS = { :diff => ["-D", "--diff [FORMAT]", "Show diff of objects that are expected to be equal when they are not", "Builtin formats: unified|u|context|c", "You can also specify a custom differ class", @@ -43,13 +38,17 @@ module Spec "not specified. The --format option may be specified several times", "if you want several outputs", " ", - "Builtin formats: ", - "progress|p : Text progress", - "specdoc|s : Behaviour doc as text", - "rdoc|r : Behaviour doc as RDoc", + "Builtin formats for examples: ", + "progress|p : Text progress", + "profile|o : Text progress with profiling of 10 slowest examples", + "specdoc|s : Example doc as text", + "html|h : A nice HTML report", + "failing_examples|e : Write all failing examples - input for --example", + "failing_example_groups|g : Write all failing example groups - input for --example", + " ", + "Builtin formats for stories: ", + "plain|p : Plain Text", "html|h : A nice HTML report", - "failing_examples|e : Write all failing examples - input for --example", - "failing_behaviours|b : Write all failing behaviours - input for --example", " ", "FORMAT can also be the name of a custom formatter class", "(in which case you should also specify --require to load it)"], @@ -73,155 +72,158 @@ module Spec :dry_run => ["-d", "--dry-run", "Invokes formatters without executing the examples."], :options_file => ["-O", "--options PATH", "Read options from a file"], :generate_options => ["-G", "--generate-options PATH", "Generate an options file for --options"], - :runner => ["-U", "--runner RUNNER", "Use a custom BehaviourRunner."], + :runner => ["-U", "--runner RUNNER", "Use a custom Runner."], :drb => ["-X", "--drb", "Run examples via DRb. (For example against script/spec_server)"], :version => ["-v", "--version", "Show version"], :help => ["-h", "--help", "You're looking at it"] } - def initialize + def initialize(err, out) + super() + @error_stream = err + @out_stream = out + @options = Options.new(@error_stream, @out_stream) + @spec_parser = SpecParser.new @file_factory = File - end - - def create_behaviour_runner(args, err, out, warn_if_no_files) - options = parse(args, err, out, warn_if_no_files) - # Some exit points in parse (--generate-options, --drb) don't return the options, - # but hand over control. In that case we don't want to continue. - return nil unless options.is_a?(Options) - options.configure - options.behaviour_runner - end - - def parse(args, err, out, warn_if_no_files) - options_file = nil - args_copy = args.dup - options = Options.new(err, out) - - opts = ::OptionParser.new do |opts| - opts.banner = "Usage: spec (FILE|DIRECTORY|GLOB)+ [options]" - opts.separator "" - - def opts.rspec_on(name, &block) - on(*COMMAND_LINE[name], &block) - end - - opts.rspec_on(:diff) {|diff| options.parse_diff(diff)} - - opts.rspec_on(:colour) {options.colour = true} - - opts.rspec_on(:example) {|example| options.parse_example(example)} - - opts.rspec_on(:specification) {|example| options.parse_example(example)} - - opts.rspec_on(:line) {|line_number| options.line_number = line_number.to_i} - - opts.rspec_on(:format) {|format| options.parse_format(format)} - - opts.rspec_on(:require) {|req| options.parse_require(req)} - - opts.rspec_on(:backtrace) {options.backtrace_tweaker = NoisyBacktraceTweaker.new} - - opts.rspec_on(:loadby) {|loadby| options.loadby = loadby} - - opts.rspec_on(:reverse) {options.reverse = true} - - opts.rspec_on(:timeout) {|timeout| options.timeout = timeout.to_f} - - opts.rspec_on(:heckle) {|heckle| options.parse_heckle(heckle)} - - opts.rspec_on(:dry_run) {options.dry_run = true} - opts.rspec_on(:options_file) do |options_file| - return parse_options_file(options_file, out, err, args_copy, warn_if_no_files) - end - - opts.rspec_on(:generate_options) do |options_file| - options.parse_generate_options(options_file, args_copy, out) - end - - opts.rspec_on(:runner) do |runner| - options.runner_arg = runner - end - - opts.rspec_on(:drb) do - return parse_drb(args_copy, out, err, warn_if_no_files) - end - - opts.rspec_on(:version) {parse_version(out)} - - opts.on_tail(*COMMAND_LINE[:help]) {parse_help(opts, out)} + self.banner = "Usage: spec (FILE|DIRECTORY|GLOB)+ [options]" + self.separator "" + on(*OPTIONS[:diff]) {|diff| @options.parse_diff(diff)} + on(*OPTIONS[:colour]) {@options.colour = true} + on(*OPTIONS[:example]) {|example| @options.parse_example(example)} + on(*OPTIONS[:specification]) {|example| @options.parse_example(example)} + on(*OPTIONS[:line]) {|line_number| @options.line_number = line_number.to_i} + on(*OPTIONS[:format]) {|format| @options.parse_format(format)} + on(*OPTIONS[:require]) {|requires| invoke_requires(requires)} + on(*OPTIONS[:backtrace]) {@options.backtrace_tweaker = NoisyBacktraceTweaker.new} + on(*OPTIONS[:loadby]) {|loadby| @options.loadby = loadby} + on(*OPTIONS[:reverse]) {@options.reverse = true} + on(*OPTIONS[:timeout]) {|timeout| @options.timeout = timeout.to_f} + on(*OPTIONS[:heckle]) {|heckle| @options.load_heckle_runner(heckle)} + on(*OPTIONS[:dry_run]) {@options.dry_run = true} + on(*OPTIONS[:options_file]) {|options_file| parse_options_file(options_file)} + on(*OPTIONS[:generate_options]) do |options_file| end - opts.parse!(args) - - if args.empty? && warn_if_no_files - err.puts "No files specified." - err.puts opts - exit(6) if err == $stderr + on(*OPTIONS[:runner]) do |runner| + @options.user_input_for_runner = runner end + on(*OPTIONS[:drb]) {} + on(*OPTIONS[:version]) {parse_version} + on_tail(*OPTIONS[:help]) {parse_help} + end - if options.line_number - set_spec_from_line_number(options, args, err) + def order!(argv, &blk) + @argv = argv + @options.argv = @argv.dup + return if parse_generate_options + return if parse_drb + + super(@argv) do |file| + @options.files << file + blk.call(file) if blk end - if options.formatters.empty? - options.formatters << Formatter::ProgressBarFormatter.new(out) + if @options.line_number + set_spec_from_line_number end - options + @options end - def parse_options_file(options_file, out_stream, error_stream, args_copy, warn_if_no_files) - # Remove the --options option and the argument before writing to file - index = args_copy.index("-O") || args_copy.index("--options") - args_copy.delete_at(index) - args_copy.delete_at(index) - - new_args = args_copy + IO.readlines(options_file).map {|l| l.chomp.split " "}.flatten - return CommandLine.run(new_args, error_stream, out_stream, true, warn_if_no_files) + protected + def invoke_requires(requires) + requires.split(",").each do |file| + require file + end + end + + def parse_options_file(options_file) + option_file_args = IO.readlines(options_file).map {|l| l.chomp.split " "}.flatten + @argv.push(*option_file_args) end - def parse_drb(args_copy, out_stream, error_stream, warn_if_no_files) - # Remove the --drb option - index = args_copy.index("-X") || args_copy.index("--drb") - args_copy.delete_at(index) + def parse_generate_options + # Remove the --generate-options option and the argument before writing to file + options_file = nil + ['-G', '--generate-options'].each do |option| + if index = @argv.index(option) + @argv.delete_at(index) + options_file = @argv.delete_at(index) + end + end + + if options_file + write_generated_options(options_file) + return true + else + return false + end + end + + def write_generated_options(options_file) + File.open(options_file, 'w') do |io| + io.puts @argv.join("\n") + end + @out_stream.puts "\nOptions written to #{options_file}. You can now use these options with:" + @out_stream.puts "spec --options #{options_file}" + @options.examples_should_not_be_run + end - return DrbCommandLine.run(args_copy, error_stream, out_stream, true, warn_if_no_files) + def parse_drb + is_drb = false + argv = @options.argv + is_drb ||= argv.delete(OPTIONS[:drb][0]) + is_drb ||= argv.delete(OPTIONS[:drb][1]) + return nil unless is_drb + @options.examples_should_not_be_run + DrbCommandLine.run( + self.class.parse(argv, @error_stream, @out_stream) + ) + true end - def parse_version(out_stream) - out_stream.puts ::Spec::VERSION::DESCRIPTION - exit if out_stream == $stdout + def parse_version + @out_stream.puts ::Spec::VERSION::DESCRIPTION + exit if stdout? end - def parse_help(opts, out_stream) - out_stream.puts opts - exit if out_stream == $stdout + def parse_help + @out_stream.puts self + exit if stdout? end - def set_spec_from_line_number(options, args, err) - if options.examples.empty? - if args.length == 1 - if @file_factory.file?(args[0]) - source = @file_factory.open(args[0]) - example = @spec_parser.spec_name_for(source, options.line_number) - options.parse_example(example) - elsif @file_factory.directory?(args[0]) - err.puts "You must specify one file, not a directory when using the --line option" - exit(1) if err == $stderr + def set_spec_from_line_number + if @options.examples.empty? + if @options.files.length == 1 + if @file_factory.file?(@options.files[0]) + source = @file_factory.open(@options.files[0]) + example = @spec_parser.spec_name_for(source, @options.line_number) + @options.parse_example(example) + elsif @file_factory.directory?(@options.files[0]) + @error_stream.puts "You must specify one file, not a directory when using the --line option" + exit(1) if stderr? else - err.puts "#{args[0]} does not exist" - exit(2) if err == $stderr + @error_stream.puts "#{@options.files[0]} does not exist" + exit(2) if stderr? end else - err.puts "Only one file can be specified when using the --line option: #{args.inspect}" - exit(3) if err == $stderr + @error_stream.puts "Only one file can be specified when using the --line option: #{@options.files.inspect}" + exit(3) if stderr? end else - err.puts "You cannot use both --line and --example" - exit(4) if err == $stderr + @error_stream.puts "You cannot use both --line and --example" + exit(4) if stderr? end end + + def stdout? + @out_stream == $stdout + end + + def stderr? + @error_stream == $stderr + end end end end diff --git a/vendor/plugins/rspec/lib/spec/runner/options.rb b/vendor/plugins/rspec/lib/spec/runner/options.rb index a940133eb..a5a07548d 100644 --- a/vendor/plugins/rspec/lib/spec/runner/options.rb +++ b/vendor/plugins/rspec/lib/spec/runner/options.rb @@ -1,32 +1,40 @@ module Spec module Runner class Options - BUILT_IN_FORMATTERS = { - 'specdoc' => Formatter::SpecdocFormatter, - 's' => Formatter::SpecdocFormatter, - 'html' => Formatter::HtmlFormatter, - 'h' => Formatter::HtmlFormatter, - 'rdoc' => Formatter::RdocFormatter, - 'r' => Formatter::RdocFormatter, - 'progress' => Formatter::ProgressBarFormatter, - 'p' => Formatter::ProgressBarFormatter, - 'failing_examples' => Formatter::FailingExamplesFormatter, - 'e' => Formatter::FailingExamplesFormatter, - 'failing_behaviours' => Formatter::FailingBehavioursFormatter, - 'b' => Formatter::FailingBehavioursFormatter + FILE_SORTERS = { + 'mtime' => lambda {|file_a, file_b| File.mtime(file_b) <=> File.mtime(file_a)} } - + + EXAMPLE_FORMATTERS = { # Load these lazily for better speed + 'specdoc' => ['spec/runner/formatter/specdoc_formatter', 'Formatter::SpecdocFormatter'], + 's' => ['spec/runner/formatter/specdoc_formatter', 'Formatter::SpecdocFormatter'], + 'html' => ['spec/runner/formatter/html_formatter', 'Formatter::HtmlFormatter'], + 'h' => ['spec/runner/formatter/html_formatter', 'Formatter::HtmlFormatter'], + 'progress' => ['spec/runner/formatter/progress_bar_formatter', 'Formatter::ProgressBarFormatter'], + 'p' => ['spec/runner/formatter/progress_bar_formatter', 'Formatter::ProgressBarFormatter'], + 'failing_examples' => ['spec/runner/formatter/failing_examples_formatter', 'Formatter::FailingExamplesFormatter'], + 'e' => ['spec/runner/formatter/failing_examples_formatter', 'Formatter::FailingExamplesFormatter'], +'failing_example_groups' => ['spec/runner/formatter/failing_example_groups_formatter', 'Formatter::FailingExampleGroupsFormatter'], + 'g' => ['spec/runner/formatter/failing_example_groups_formatter', 'Formatter::FailingExampleGroupsFormatter'], + 'profile' => ['spec/runner/formatter/profile_formatter', 'Formatter::ProfileFormatter'], + 'o' => ['spec/runner/formatter/profile_formatter', 'Formatter::ProfileFormatter'], + 'textmate' => ['spec/runner/formatter/text_mate_formatter', 'Formatter::TextMateFormatter'] + } + + STORY_FORMATTERS = { + 'plain' => ['spec/runner/formatter/story/plain_text_formatter', 'Formatter::Story::PlainTextFormatter'], + 'p' => ['spec/runner/formatter/story/plain_text_formatter', 'Formatter::Story::PlainTextFormatter'], + 'html' => ['spec/runner/formatter/story/html_formatter', 'Formatter::Story::HtmlFormatter'], + 'h' => ['spec/runner/formatter/story/html_formatter', 'Formatter::Story::HtmlFormatter'] + } + attr_accessor( :backtrace_tweaker, - :colour, :context_lines, :diff_format, - :differ_class, :dry_run, + :profile, :examples, - :failure_file, - :formatters, - :generate, :heckle_runner, :line_number, :loadby, @@ -34,69 +42,83 @@ module Spec :reverse, :timeout, :verbose, - :runner_arg, - :behaviour_runner + :user_input_for_runner, + :error_stream, + :output_stream, + # TODO: BT - Figure out a better name + :argv ) + attr_reader :colour, :differ_class, :files, :example_groups - def initialize(err, out) - @err, @out = err, out + def initialize(error_stream, output_stream) + @error_stream = error_stream + @output_stream = output_stream @backtrace_tweaker = QuietBacktraceTweaker.new @examples = [] - @formatters = [] @colour = false + @profile = false @dry_run = false + @reporter = Reporter.new(self) + @context_lines = 3 + @diff_format = :unified + @files = [] + @example_groups = [] + @examples_run = false + @examples_should_be_run = nil + @user_input_for_runner = nil end - def configure - configure_formatters - create_reporter - configure_differ - create_behaviour_runner + def add_example_group(example_group) + @example_groups << example_group end - def create_behaviour_runner - return nil if @generate - @behaviour_runner = if @runner_arg - klass_name, arg = split_at_colon(@runner_arg) - runner_type = load_class(klass_name, 'behaviour runner', '--runner') - runner_type.new(self, arg) - else - BehaviourRunner.new(self) - end + def remove_example_group(example_group) + @example_groups.delete(example_group) end - def configure_formatters - @formatters.each do |formatter| - formatter.colour = @colour if formatter.respond_to?(:colour=) - formatter.dry_run = @dry_run if formatter.respond_to?(:dry_run=) + def run_examples + return true unless examples_should_be_run? + runner = custom_runner || ExampleGroupRunner.new(self) + + runner.load_files(files_to_load) + if example_groups.empty? + true + else + success = runner.run + @examples_run = true + heckle if heckle_runner + success end end - def create_reporter - @reporter = Reporter.new(@formatters, @backtrace_tweaker) + def examples_run? + @examples_run end - def configure_differ - if @differ_class - Spec::Expectations.differ = @differ_class.new(@diff_format, @context_lines, @colour) + def examples_should_not_be_run + @examples_should_be_run = false + end + + def colour=(colour) + @colour = colour + begin; \ + require 'Win32/Console/ANSI' if @colour && PLATFORM =~ /win32/; \ + rescue LoadError ; \ + raise "You must gem install win32console to use colour on Windows" ; \ end end def parse_diff(format) - @context_lines = 3 case format - when :context, 'context', 'c' - @diff_format = :context - when :unified, 'unified', 'u', '', nil - @diff_format = :unified - end - - if [:context,:unified].include? @diff_format - require 'spec/expectations/differs/default' - @differ_class = Spec::Expectations::Differs::Default + when :context, 'context', 'c' + @diff_format = :context + default_differ + when :unified, 'unified', 'u', '', nil + @diff_format = :unified + default_differ else @diff_format = :custom - @differ_class = load_class(format, 'differ', '--diff') + self.differ_class = load_class(format, 'differ', '--diff') end end @@ -109,67 +131,123 @@ module Spec end def parse_format(format_arg) - format, where = split_at_colon(format_arg) - # This funky regexp checks whether we have a FILE_NAME or not - if where.nil? + format, where = ClassAndArgumentsParser.parse(format_arg) + unless where raise "When using several --format options only one of them can be without a file" if @out_used - where = @out + where = @output_stream @out_used = true end - - formatter_type = BUILT_IN_FORMATTERS[format] || load_class(format, 'formatter', '--format') - @formatters << formatter_type.new(where) + @format_options ||= [] + @format_options << [format, where] + end + + def formatters + @format_options ||= [['progress', @output_stream]] + @formatters ||= load_formatters(@format_options, EXAMPLE_FORMATTERS) end - def parse_require(req) - req.split(",").each{|file| require file} + def story_formatters + @format_options ||= [['plain', @output_stream]] + @formatters ||= load_formatters(@format_options, STORY_FORMATTERS) + end + + def load_formatters(format_options, formatters) + format_options.map do |format, where| + formatter_type = if formatters[format] + require formatters[format][0] + eval(formatters[format][1], binding, __FILE__, __LINE__) + else + load_class(format, 'formatter', '--format') + end + formatter_type.new(self, where) + end end - def parse_heckle(heckle) - heckle_require = [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} ? 'spec/runner/heckle_runner_unsupported' : 'spec/runner/heckle_runner' - require heckle_require + def load_heckle_runner(heckle) + suffix = [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} ? '_unsupported' : '' + require "spec/runner/heckle_runner#{suffix}" @heckle_runner = HeckleRunner.new(heckle) end - def parse_generate_options(options_file, args_copy, out_stream) - # Remove the --generate-options option and the argument before writing to file - index = args_copy.index("-G") || args_copy.index("--generate-options") - args_copy.delete_at(index) - args_copy.delete_at(index) - File.open(options_file, 'w') do |io| - io.puts args_copy.join("\n") + def number_of_examples + @example_groups.inject(0) do |sum, example_group| + sum + example_group.number_of_examples end - out_stream.puts "\nOptions written to #{options_file}. You can now use these options with:" - out_stream.puts "spec --options #{options_file}" - @generate = true end - def split_at_colon(s) - if s =~ /([a-zA-Z_]+(?:::[a-zA-Z_]+)*):?(.*)/ - arg = $2 == "" ? nil : $2 - [$1, arg] - else - raise "Couldn't parse #{s.inspect}" - end + protected + def examples_should_be_run? + return @examples_should_be_run unless @examples_should_be_run.nil? + @examples_should_be_run = true end + def differ_class=(klass) + return unless klass + @differ_class = klass + Spec::Expectations.differ = self.differ_class.new(self) + end + def load_class(name, kind, option) if name =~ /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ arg = $2 == "" ? nil : $2 [$1, arg] else m = "#{name.inspect} is not a valid class name" - @err.puts m + @error_stream.puts m raise m end begin eval(name, binding, __FILE__, __LINE__) rescue NameError => e - @err.puts "Couldn't find #{kind} class #{name}" - @err.puts "Make sure the --require option is specified *before* #{option}" + @error_stream.puts "Couldn't find #{kind} class #{name}" + @error_stream.puts "Make sure the --require option is specified *before* #{option}" if $_spec_spec ; raise e ; else exit(1) ; end end end + + def files_to_load + result = [] + sorted_files.each do |file| + if test ?d, file + result += Dir[File.expand_path("#{file}/**/*.rb")] + elsif test ?f, file + result << file + else + raise "File or directory not found: #{file}" + end + end + result + end + + def custom_runner + return nil unless custom_runner? + klass_name, arg = ClassAndArgumentsParser.parse(user_input_for_runner) + runner_type = load_class(klass_name, 'behaviour runner', '--runner') + return runner_type.new(self, arg) + end + + def custom_runner? + return user_input_for_runner ? true : false + end + + def heckle + returns = self.heckle_runner.heckle_with + self.heckle_runner = nil + returns + end + + def sorted_files + return sorter ? files.sort(&sorter) : files + end + + def sorter + FILE_SORTERS[loadby] + end + + def default_differ + require 'spec/expectations/differs/default' + self.differ_class = Spec::Expectations::Differs::Default + end end end end diff --git a/vendor/plugins/rspec/lib/spec/runner/reporter.rb b/vendor/plugins/rspec/lib/spec/runner/reporter.rb index b1dc2a27a..cfc511baf 100644 --- a/vendor/plugins/rspec/lib/spec/runner/reporter.rb +++ b/vendor/plugins/rspec/lib/spec/runner/reporter.rb @@ -1,40 +1,52 @@ module Spec module Runner class Reporter + attr_reader :options, :example_groups - def initialize(formatters, backtrace_tweaker) - @formatters = formatters - @backtrace_tweaker = backtrace_tweaker - clear! + def initialize(options) + @options = options + @options.reporter = self + clear end - def add_behaviour(name) - @formatters.each{|f| f.add_behaviour(name)} - @behaviour_names << name + def add_example_group(example_group) + formatters.each do |f| + f.add_example_group(example_group) + end + example_groups << example_group end - def example_started(name) - @formatters.each{|f| f.example_started(name)} + def example_started(example) + formatters.each{|f| f.example_started(example)} end - def example_finished(name, error=nil, failure_location=nil, not_implemented = false) - @example_names << name + def example_finished(example, error=nil) + @examples << example - if not_implemented - example_pending(@behaviour_names.last, name) - elsif error.nil? - example_passed(name) - elsif Spec::DSL::ExamplePendingError === error - example_pending(@behaviour_names.last, name, error.message) + if error.nil? + example_passed(example) + elsif Spec::Example::ExamplePendingError === error + example_pending(example_groups.last, example, error.message) else - example_failed(name, error, failure_location) + example_failed(example, error) + end + end + + def failure(example, error) + backtrace_tweaker.tweak_backtrace(error) + example_name = "#{example_groups.last.description} #{example.description}" + failure = Failure.new(example_name, error) + @failures << failure + formatters.each do |f| + f.example_failed(example, @failures.length, failure) end end + alias_method :example_failed, :failure def start(number_of_examples) - clear! + clear @start_time = Time.new - @formatters.each{|f| f.start(number_of_examples)} + formatters.each{|f| f.start(number_of_examples)} end def end @@ -43,22 +55,31 @@ module Spec # Dumps the summary and returns the total number of failures def dump - @formatters.each{|f| f.start_dump} + formatters.each{|f| f.start_dump} + dump_pending dump_failures - @formatters.each do |f| - f.dump_summary(duration, @example_names.length, @failures.length, @pending_count) + formatters.each do |f| + f.dump_summary(duration, @examples.length, @failures.length, @pending_count) f.close end @failures.length end private + + def formatters + @options.formatters + end + + def backtrace_tweaker + @options.backtrace_tweaker + end - def clear! - @behaviour_names = [] + def clear + @example_groups = [] @failures = [] @pending_count = 0 - @example_names = [] + @examples = [] @start_time = nil @end_time = nil end @@ -66,31 +87,28 @@ module Spec def dump_failures return if @failures.empty? @failures.inject(1) do |index, failure| - @formatters.each{|f| f.dump_failure(index, failure)} + formatters.each{|f| f.dump_failure(index, failure)} index + 1 end end + def dump_pending + formatters.each{|f| f.dump_pending} + end def duration return @end_time - @start_time unless (@end_time.nil? or @start_time.nil?) return "0.0" end - def example_passed(name) - @formatters.each{|f| f.example_passed(name)} - end - - def example_failed(name, error, failure_location) - @backtrace_tweaker.tweak_backtrace(error, failure_location) - example_name = "#{@behaviour_names.last} #{name}" - failure = Failure.new(example_name, error) - @failures << failure - @formatters.each{|f| f.example_failed(name, @failures.length, failure)} + def example_passed(example) + formatters.each{|f| f.example_passed(example)} end - def example_pending(behaviour_name, example_name, message="Not Yet Implemented") + def example_pending(example_group, example, message="Not Yet Implemented") @pending_count += 1 - @formatters.each{|f| f.example_pending(behaviour_name, example_name, message)} + formatters.each do |f| + f.example_pending(example_group.description, example, message) + end end class Failure @@ -112,7 +130,7 @@ module Spec end def pending_fixed? - @exception.is_a?(Spec::DSL::PendingFixedError) + @exception.is_a?(Spec::Example::PendingExampleFixedError) end def expectation_not_met? diff --git a/vendor/plugins/rspec/lib/spec/runner/spec_parser.rb b/vendor/plugins/rspec/lib/spec/runner/spec_parser.rb index bc9170065..5ce51e3b2 100644 --- a/vendor/plugins/rspec/lib/spec/runner/spec_parser.rb +++ b/vendor/plugins/rspec/lib/spec/runner/spec_parser.rb @@ -4,12 +4,12 @@ module Spec class SpecParser def spec_name_for(io, line_number) source = io.read - behaviour, behaviour_line = behaviour_at_line(source, line_number) + example_group, example_group_line = example_group_at_line(source, line_number) example, example_line = example_at_line(source, line_number) - if behaviour && example && (behaviour_line < example_line) - "#{behaviour} #{example}" - elsif behaviour - behaviour + if example_group && example && (example_group_line < example_line) + "#{example_group} #{example}" + elsif example_group + example_group else nil end @@ -17,7 +17,7 @@ module Spec protected - def behaviour_at_line(source, line_number) + def example_group_at_line(source, line_number) find_above(source, line_number, /^\s*(context|describe)\s+(.*)\s+do/) end @@ -40,8 +40,11 @@ module Spec def parse_description(str) return str[1..-2] if str =~ /^['"].*['"]$/ - if matches = /^(.*)\s*,\s*['"](.*)['"]$/.match(str) - return ::Spec::DSL::Description.generate_description(matches[1], matches[2]) + if matches = /^['"](.*)['"](,.*)?$/.match(str) + return ::Spec::Example::ExampleGroupMethods.description_text(matches[1]) + end + if matches = /^(.*)\s*,\s*['"](.*)['"](,.*)?$/.match(str) + return ::Spec::Example::ExampleGroupMethods.description_text(matches[1], matches[2]) end return str end diff --git a/vendor/plugins/rspec/lib/spec/test_case_adapter.rb b/vendor/plugins/rspec/lib/spec/test_case_adapter.rb deleted file mode 100755 index 992e098fd..000000000 --- a/vendor/plugins/rspec/lib/spec/test_case_adapter.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'spec/expectations' -require 'spec/matchers' - -module Test - module Unit - class TestCase - include Spec::Matchers - end - end -end diff --git a/vendor/plugins/rspec/lib/spec/version.rb b/vendor/plugins/rspec/lib/spec/version.rb index 5b1db9b37..f83a4c697 100644 --- a/vendor/plugins/rspec/lib/spec/version.rb +++ b/vendor/plugins/rspec/lib/spec/version.rb @@ -2,16 +2,15 @@ module Spec module VERSION unless defined? MAJOR MAJOR = 1 - MINOR = 0 - TINY = 8 + MINOR = 1 + TINY = 2 RELEASE_CANDIDATE = nil - # RANDOM_TOKEN: 0.510454315029681 - REV = "$LastChangedRevision: 2338 $".match(/LastChangedRevision: (\d+)/)[1] + BUILD_TIME_UTC = 20080114022430 STRING = [MAJOR, MINOR, TINY].join('.') TAG = "REL_#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('_')}".upcase.gsub(/\.|-/, '_') - FULL_VERSION = "#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('.')} (r#{REV})" + FULL_VERSION = "#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('.')} (build #{BUILD_TIME_UTC})" NAME = "RSpec" URL = "http://rspec.rubyforge.org/" diff --git a/vendor/plugins/rspec/plugins/mock_frameworks/rspec.rb b/vendor/plugins/rspec/plugins/mock_frameworks/rspec.rb index e606c3089..ce215ace2 100644 --- a/vendor/plugins/rspec/plugins/mock_frameworks/rspec.rb +++ b/vendor/plugins/rspec/plugins/mock_frameworks/rspec.rb @@ -3,7 +3,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "lib", "s module Spec module Plugins module MockFramework - include Spec::Mocks::SpecMethods + include Spec::Mocks::ExampleMethods def setup_mocks_for_rspec $rspec_mocks ||= Spec::Mocks::Space.new end diff --git a/vendor/plugins/rspec/rake_tasks/examples_specdoc.rake b/vendor/plugins/rspec/rake_tasks/examples_specdoc.rake deleted file mode 100644 index 2e90dae8f..000000000 --- a/vendor/plugins/rspec/rake_tasks/examples_specdoc.rake +++ /dev/null @@ -1,8 +0,0 @@ -require 'rake' -require 'spec/rake/spectask' - -desc "Generate specdocs for examples for inclusion in RDoc" -Spec::Rake::SpecTask.new('examples_specdoc') do |t| - t.spec_files = FileList['examples/**/*.rb'] - t.spec_opts = ["--format", "rdoc:EXAMPLES.rd"] -end
\ No newline at end of file diff --git a/vendor/plugins/rspec/spec.opts b/vendor/plugins/rspec/spec.opts index 50350caf1..48e51f93b 100644 --- a/vendor/plugins/rspec/spec.opts +++ b/vendor/plugins/rspec/spec.opts @@ -1,13 +1,6 @@ --colour --format -progress ---format -failing_examples:previous_failures.txt ---example -previous_failures.txt ---loadby -mtime ---reverse +profile --timeout 20 --diff
\ No newline at end of file diff --git a/vendor/plugins/rspec/spec/autotest/rspec_spec.rb b/vendor/plugins/rspec/spec/autotest/rspec_spec.rb index 52b5b4885..64c020de9 100644 --- a/vendor/plugins/rspec/spec/autotest/rspec_spec.rb +++ b/vendor/plugins/rspec/spec/autotest/rspec_spec.rb @@ -39,7 +39,10 @@ HERE describe Rspec, "rspec_commands" do it "should contain the various commands, ordered by preference" do - Rspec.new.spec_commands.should == ["bin/spec", "#{Config::CONFIG['bindir']}/spec"] + Rspec.new.spec_commands.should == [ + File.expand_path("#{File.dirname(__FILE__)}/../../bin/spec"), + "#{Config::CONFIG['bindir']}/spec" + ] end end @@ -48,14 +51,15 @@ HERE before :each do common_setup - @rspec_autotest = Rspec.new(@kernel) + @rspec_autotest = Rspec.new end it "should try to find the spec command if it exists in ./bin and use it above everything else" do File.stub!(:exists?).and_return true - File.should_receive(:exists?).with("bin/spec").and_return true - @rspec_autotest.spec_command.should == "bin/spec" + spec_path = File.expand_path("#{File.dirname(__FILE__)}/../../bin/spec") + File.should_receive(:exists?).with(spec_path).and_return true + @rspec_autotest.spec_command.should == spec_path end it "should otherwise select the default spec command in gem_dir/bin/spec" do @@ -84,16 +88,19 @@ HERE end it "should use the ALT_SEPARATOR if it is non-nil" do - @rspec_autotest = Rspec.new(@kernel, @posix_separator, @windows_alt_separator) - @rspec_autotest.stub!(:spec_commands).and_return [File.join('bin', 'spec')] - @rspec_autotest.spec_command.should == "bin\\spec" + pending("autotest got re-worked so this is failing for the moment") + @rspec_autotest = Rspec.new + spec_command = File.expand_path("#{File.dirname(__FILE__)}/../../bin/spec") + @rspec_autotest.stub!(:spec_commands).and_return [spec_command] + @rspec_autotest.spec_command.should == spec_command.gsub('/', '\\') end it "should not use the ALT_SEPATOR if it is nil" do @windows_alt_separator = nil - @rspec_autotest = Rspec.new(@kernel, @posix_separator, @windows_alt_separator) - @rspec_autotest.stub!(:spec_commands).and_return [File.join('bin', 'spec')] - @rspec_autotest.spec_command.should == "bin/spec" + @rspec_autotest = Rspec.new + spec_command = File.expand_path("#{File.dirname(__FILE__)}/../../bin/spec") + @rspec_autotest.stub!(:spec_commands).and_return [spec_command] + @rspec_autotest.spec_command.should == spec_command end end @@ -138,22 +145,20 @@ HERE describe Rspec, "test mappings" do before :each do - @proc = mock Proc - @kernel = mock Kernel - @kernel.stub!(:proc).and_return @proc - @rspec_autotest = Rspec.new(@kernel) + @rspec_autotest = Rspec.new + @rspec_autotest.hook :initialize end it "should map all filenames in spec/ which end in .rb" do - @rspec_autotest.test_mappings[%r%^spec/.*\.rb$%].should == @proc + @rspec_autotest.instance_eval{@test_mappings}.should have_key(%r%^spec/.*\.rb$%) end it "should map all names in lib which end in .rb to the corresponding ones in spec/" do - @rspec_autotest.test_mappings[%r%^lib/(.*)\.rb$%].should == @proc + @rspec_autotest.instance_eval{@test_mappings}.should have_key(%r%^lib/(.*)\.rb$%) end it "should find all files in spec/shares/* and the spec helper in spec/spec_helper" do - @rspec_autotest.test_mappings[%r%^spec/(spec_helper|shared/.*)\.rb$%].should == @proc + @rspec_autotest.instance_eval{@test_mappings}.should have_key(%r%^spec/(spec_helper|shared/.*)\.rb$%) end end @@ -162,7 +167,7 @@ HERE before :each do common_setup - @rspec_autotest = Rspec.new(@kernel, @posix_separator, @windows_alt_separator) + @rspec_autotest = Rspec.new @rspec_autotest.stub!(:hook) @results = mock String @@ -208,6 +213,7 @@ HERE @lib_file = "lib/something.rb" @spec_file = "spec/something_spec.rb" @rspec_autotest = Rspec.new + @rspec_autotest.hook :initialize @rspec_autotest.instance_variable_set("@files", {@lib_file => Time.now, @spec_file => Time.now}) @rspec_autotest.stub!(:find_files_to_test).and_return true diff --git a/vendor/plugins/rspec/spec/autotest_helper.rb b/vendor/plugins/rspec/spec/autotest_helper.rb index 172bb3a4a..6d994eaa2 100644 --- a/vendor/plugins/rspec/spec/autotest_helper.rb +++ b/vendor/plugins/rspec/spec/autotest_helper.rb @@ -1,4 +1,5 @@ +require "rubygems" require 'autotest' -require File.dirname(__FILE__) + "/../lib/autotest/rspec" - - +dir = File.dirname(__FILE__) +require "#{dir}/spec_helper" +require File.expand_path("#{dir}/../lib/autotest/rspec")
\ No newline at end of file diff --git a/vendor/plugins/rspec/spec/spec/dsl/behaviour_eval_spec.rb b/vendor/plugins/rspec/spec/spec/dsl/behaviour_eval_spec.rb deleted file mode 100644 index c3ed4e282..000000000 --- a/vendor/plugins/rspec/spec/spec/dsl/behaviour_eval_spec.rb +++ /dev/null @@ -1,79 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module DSL - describe BehaviourEval do - def count - @count ||= 0 - @count = @count + 1 - @count - end - - before(:all) do - count.should == 1 - end - - before(:all) do - count.should == 2 - end - - before(:each) do - count.should == 3 - end - - before(:each) do - count.should == 4 - end - - it "should run before(:all), before(:each), example, after(:each), after(:all) in order" do - count.should == 5 - end - - after(:each) do - count.should == 7 - end - - after(:each) do - count.should == 6 - end - - after(:all) do - count.should == 9 - end - - after(:all) do - count.should == 8 - end - end - - describe BehaviourEval, "instance methods" do - it "should support pending" do - lambda { - pending("something") - }.should raise_error(Spec::DSL::ExamplePendingError, "something") - end - - it "should have #pending raise a Pending error when its block fails" do - block_ran = false - lambda { - pending("something") do - block_ran = true - raise "something wrong with my example" - end - }.should raise_error(Spec::DSL::ExamplePendingError, "something") - block_ran.should == true - end - - it "should have #pending raise Spec::DSL::PendingFixedError when its block does not fail" do - block_ran = false - lambda { - pending("something") do - block_ran = true - end - }.should raise_error(Spec::DSL::PendingFixedError, "Expected pending 'something' to fail. No Error was raised.") - block_ran.should == true - end - - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/dsl/behaviour_factory_spec.rb b/vendor/plugins/rspec/spec/spec/dsl/behaviour_factory_spec.rb deleted file mode 100644 index 91008a660..000000000 --- a/vendor/plugins/rspec/spec/spec/dsl/behaviour_factory_spec.rb +++ /dev/null @@ -1,48 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module DSL - describe BehaviourFactory do - it "should create a Spec::DSL::Behaviour by default" do - Spec::DSL::BehaviourFactory.create("behaviour") { - }.should be_an_instance_of(Spec::DSL::Behaviour) - end - - it "should create a Spec::DSL::Behaviour when :behaviour_type => :default" do - Spec::DSL::BehaviourFactory.create("behaviour", :behaviour_type => :default) { - }.should be_an_instance_of(Spec::DSL::Behaviour) - end - - it "should create specified type when :behaviour_type => :something_other_than_default" do - behaviour_class = Class.new do - def initialize(*args, &block); end - end - Spec::DSL::BehaviourFactory.add_behaviour_class(:something_other_than_default, behaviour_class) - Spec::DSL::BehaviourFactory.create("behaviour", :behaviour_type => :something_other_than_default) { - }.should be_an_instance_of(behaviour_class) - end - - it "should type indicated by spec_path" do - behaviour_class = Class.new do - def initialize(*args, &block); end - end - Spec::DSL::BehaviourFactory.add_behaviour_class(:something_other_than_default, behaviour_class) - Spec::DSL::BehaviourFactory.create("behaviour", :spec_path => "./spec/something_other_than_default/some_spec.rb") { - }.should be_an_instance_of(behaviour_class) - end - - it "should type indicated by spec_path (with spec_path generated by caller on windows)" do - behaviour_class = Class.new do - def initialize(*args, &block); end - end - Spec::DSL::BehaviourFactory.add_behaviour_class(:something_other_than_default, behaviour_class) - Spec::DSL::BehaviourFactory.create("behaviour", :spec_path => "./spec\\something_other_than_default\\some_spec.rb") { - }.should be_an_instance_of(behaviour_class) - end - - after(:each) do - Spec::DSL::BehaviourFactory.remove_behaviour_class(:something_other_than_default) - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/dsl/behaviour_spec.rb b/vendor/plugins/rspec/spec/spec/dsl/behaviour_spec.rb deleted file mode 100644 index fa6774c65..000000000 --- a/vendor/plugins/rspec/spec/spec/dsl/behaviour_spec.rb +++ /dev/null @@ -1,661 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module DSL - class FakeReporter < Spec::Runner::Reporter - attr_reader :added_behaviour - def add_behaviour(description) - @added_behaviour = description - end - end - - describe Behaviour, "class methods" do - before :each do - @reporter = FakeReporter.new(mock("formatter", :null_object => true), mock("backtrace_tweaker", :null_object => true)) - @behaviour = Behaviour.new("example") {} - end - - after :each do - Behaviour.clear_before_and_after! - end - - it "should not run before(:all) or after(:all) on dry run" do - before_all_ran = false - after_all_ran = false - Behaviour.before(:all) { before_all_ran = true } - Behaviour.after(:all) { after_all_ran = true } - @behaviour.it("should") {} - @behaviour.run(@reporter, true) - before_all_ran.should be_false - after_all_ran.should be_false - end - - it "should not run any example if before(:all) fails" do - spec_ran = false - Behaviour.before(:all) { raise NonStandardError } - @behaviour.it("test") {spec_ran = true} - @behaviour.run(@reporter) - spec_ran.should be_false - end - - it "should run after(:all) if before(:all) fails" do - after_all_ran = false - Behaviour.before(:all) { raise NonStandardError } - Behaviour.after(:all) { after_all_ran = true } - @behaviour.run(@reporter) - after_all_ran.should be_true - end - - it "should run after(:all) if before(:each) fails" do - after_all_ran = false - Behaviour.before(:each) { raise NonStandardError } - Behaviour.after(:all) { after_all_ran = true } - @behaviour.run(@reporter) - after_all_ran.should be_true - end - - it "should run after(:all) if any example fails" do - after_all_ran = false - @behaviour.it("should") { raise NonStandardError } - Behaviour.after(:all) { after_all_ran = true } - @behaviour.run(@reporter) - after_all_ran.should be_true - end - - - it "should unregister a given after(:each) block" do - after_all_ran = false - @behaviour.it("example") {} - proc = Proc.new { after_all_ran = true } - Behaviour.after(:each, &proc) - @behaviour.run(@reporter) - after_all_ran.should be_true - - after_all_ran = false - Behaviour.remove_after(:each, &proc) - @behaviour.run(@reporter) - after_all_ran.should be_false - end - - it "should run second after(:each) block even if the first one fails" do - example = @behaviour.it("example") {} - second_after_ran = false - @behaviour.after(:each) do - second_after_ran = true - raise "second" - end - first_after_ran = false - @behaviour.after(:each) do - first_after_ran = true - raise "first" - end - - @reporter.should_receive(:example_finished) do |example, error, location, example_not_implemented| - example.should equal(example) - error.message.should eql("first") - location.should eql("after(:each)") - example_not_implemented.should be_false - end - @behaviour.run(@reporter) - first_after_ran.should be_true - second_after_ran.should be_true - end - - it "should not run second before(:each) if the first one fails" do - @behaviour.it("example") {} - first_before_ran = false - @behaviour.before(:each) do - first_before_ran = true - raise "first" - end - second_before_ran = false - @behaviour.before(:each) do - second_before_ran = true - raise "second" - end - - @reporter.should_receive(:example_finished) do |name, error, location, example_not_implemented| - name.should eql("example") - error.message.should eql("first") - location.should eql("before(:each)") - example_not_implemented.should be_false - end - @behaviour.run(@reporter) - first_before_ran.should be_true - second_before_ran.should be_false - end - - it "should supply before(:all) as description if failure in before(:all)" do - @reporter.should_receive(:example_finished) do |example, error, location| - example.description.should eql("before(:all)") - error.message.should == "in before(:all)" - location.should eql("before(:all)") - end - - Behaviour.before(:all) { raise NonStandardError.new("in before(:all)") } - @behaviour.it("test") {true} - @behaviour.run(@reporter) - end - - it "should provide after(:all) as description if failure in after(:all)" do - @reporter.should_receive(:example_finished) do |example, error, location| - example.description.should eql("after(:all)") - error.message.should eql("in after(:all)") - location.should eql("after(:all)") - end - - Behaviour.after(:all) { raise NonStandardError.new("in after(:all)") } - @behaviour.run(@reporter) - end - end - - describe Behaviour do - before :each do - @reporter = FakeReporter.new(mock("formatter", :null_object => true), mock("backtrace_tweaker", :null_object => true)) - @behaviour = Behaviour.new("example") {} - end - - after :each do - Behaviour.clear_before_and_after! - end - - it "should send reporter add_behaviour" do - @behaviour.run(@reporter) - @reporter.added_behaviour.should == "example" - end - - it "should run example on run" do - example_ran = false - @behaviour.it("should") {example_ran = true} - @behaviour.run(@reporter) - example_ran.should be_true - end - - it "should not run example on dry run" do - example_ran = false - @behaviour.it("should") {example_ran = true} - @behaviour.run(@reporter, true) - example_ran.should be_false - end - - it "should not run before(:all) or after(:all) on dry run" do - before_all_ran = false - after_all_ran = false - @behaviour.before(:all) { before_all_ran = true } - @behaviour.after(:all) { after_all_ran = true } - @behaviour.it("should") {} - @behaviour.run(@reporter, true) - before_all_ran.should be_false - after_all_ran.should be_false - end - - it "should not run any example if before(:all) fails" do - spec_ran = false - @behaviour.before(:all) { raise "help" } - @behaviour.it("test") {spec_ran = true} - @behaviour.run(@reporter) - spec_ran.should be_false - end - - it "should run after(:all) if before(:all) fails" do - after_all_ran = false - @behaviour.before(:all) { raise } - @behaviour.after(:all) { after_all_ran = true } - @behaviour.run(@reporter) - after_all_ran.should be_true - end - - it "should run after(:all) if before(:each) fails" do - after_all_ran = false - @behaviour.before(:each) { raise } - @behaviour.after(:all) { after_all_ran = true } - @behaviour.run(@reporter) - after_all_ran.should be_true - end - - it "should run after(:all) if any example fails" do - after_all_ran = false - @behaviour.it("should") { raise "before all error" } - @behaviour.after(:all) { after_all_ran = true } - @behaviour.run(@reporter) - after_all_ran.should be_true - end - - it "should supply before(:all) as description if failure in before(:all)" do - @reporter.should_receive(:example_finished) do |example, error, location| - example.description.should eql("before(:all)") - error.message.should eql("in before(:all)") - location.should eql("before(:all)") - end - - @behaviour.before(:all) { raise "in before(:all)" } - @behaviour.it("test") {true} - @behaviour.run(@reporter) - end - - it "should provide after(:all) as description if failure in after(:all)" do - @reporter.should_receive(:example_finished) do |example, error, location| - example.description.should eql("after(:all)") - error.message.should eql("in after(:all)") - location.should eql("after(:all)") - end - - @behaviour.after(:all) { raise "in after(:all)" } - @behaviour.run(@reporter) - end - - it "should run before(:all) block only once" do - before_all_run_count_run_count = 0 - @behaviour.before(:all) {before_all_run_count_run_count += 1} - @behaviour.it("test") {true} - @behaviour.it("test2") {true} - @behaviour.run(@reporter) - before_all_run_count_run_count.should == 1 - end - - it "calls spec_inherited class method" do - super_class_before_ran = false - super_class = Class.new do - def self.spec_inherited(mod) - mod.before {setup} - end - - define_method :setup do - super_class_before_ran = true - end - end - @behaviour.inherit super_class - - before_ran = false - @behaviour.before {before_ran = true} - @behaviour.it("test") {true} - @behaviour.run(@reporter) - super_class_before_ran.should be_true - before_ran.should be_true - end - - it "should run after(:all) block only once" do - after_all_run_count = 0 - @behaviour.after(:all) {after_all_run_count += 1} - @behaviour.it("test") {true} - @behaviour.it("test2") {true} - @behaviour.run(@reporter) - after_all_run_count.should == 1 - @reporter.rspec_verify - end - - it "after(:all) should have access to all instance variables defined in before(:all)" do - context_instance_value_in = "Hello there" - context_instance_value_out = "" - @behaviour.before(:all) { @instance_var = context_instance_value_in } - @behaviour.after(:all) { context_instance_value_out = @instance_var } - @behaviour.it("test") {true} - @behaviour.run(@reporter) - context_instance_value_in.should == context_instance_value_out - end - - it "should copy instance variables from before(:all)'s execution context into spec's execution context" do - context_instance_value_in = "Hello there" - context_instance_value_out = "" - @behaviour.before(:all) { @instance_var = context_instance_value_in } - @behaviour.it("test") {context_instance_value_out = @instance_var} - @behaviour.run(@reporter) - context_instance_value_in.should == context_instance_value_out - end - - it "should not add global before callbacks for untargetted behaviours" do - fiddle = [] - - Behaviour.before(:all) { fiddle << "Behaviour.before(:all)" } - Behaviour.prepend_before(:all) { fiddle << "Behaviour.prepend_before(:all)" } - Behaviour.before(:each, :behaviour_type => :special) { fiddle << "Behaviour.before(:each, :behaviour_type => :special)" } - Behaviour.prepend_before(:each, :behaviour_type => :special) { fiddle << "Behaviour.prepend_before(:each, :behaviour_type => :special)" } - Behaviour.before(:all, :behaviour_type => :special) { fiddle << "Behaviour.before(:all, :behaviour_type => :special)" } - Behaviour.prepend_before(:all, :behaviour_type => :special) { fiddle << "Behaviour.prepend_before(:all, :behaviour_type => :special)" } - - behaviour = Behaviour.new("I'm not special", :behaviour_type => :not_special) {} - behaviour.run(@reporter) - fiddle.should == [ - 'Behaviour.prepend_before(:all)', - 'Behaviour.before(:all)', - ] - end - - it "should add global before callbacks for targetted behaviours" do - fiddle = [] - - Behaviour.before(:all) { fiddle << "Behaviour.before(:all)" } - Behaviour.prepend_before(:all) { fiddle << "Behaviour.prepend_before(:all)" } - Behaviour.before(:each, :behaviour_type => :special) { fiddle << "Behaviour.before(:each, :behaviour_type => :special)" } - Behaviour.prepend_before(:each, :behaviour_type => :special) { fiddle << "Behaviour.prepend_before(:each, :behaviour_type => :special)" } - Behaviour.before(:all, :behaviour_type => :special) { fiddle << "Behaviour.before(:all, :behaviour_type => :special)" } - Behaviour.prepend_before(:all, :behaviour_type => :special) { fiddle << "Behaviour.prepend_before(:all, :behaviour_type => :special)" } - - Behaviour.append_before(:behaviour_type => :special) { fiddle << "Behaviour.append_before(:each, :behaviour_type => :special)" } - - behaviour = Behaviour.new("I'm not special", :behaviour_type => :special) {} - behaviour.it("test") {true} - behaviour.run(@reporter) - fiddle.should == [ - 'Behaviour.prepend_before(:all)', - 'Behaviour.before(:all)', - 'Behaviour.prepend_before(:all, :behaviour_type => :special)', - 'Behaviour.before(:all, :behaviour_type => :special)', - 'Behaviour.prepend_before(:each, :behaviour_type => :special)', - 'Behaviour.before(:each, :behaviour_type => :special)', - 'Behaviour.append_before(:each, :behaviour_type => :special)', - ] - end - - it "before callbacks are ordered from global to local" do - fiddle = [] - super_class = Class.new do - define_method :setup do - fiddle << "superclass setup" - end - end - @behaviour.inherit super_class - - Behaviour.prepend_before(:all) { fiddle << "Behaviour.prepend_before(:all)" } - Behaviour.before(:all) { fiddle << "Behaviour.before(:all)" } - @behaviour.prepend_before(:all) { fiddle << "prepend_before(:all)" } - @behaviour.before(:all) { fiddle << "before(:all)" } - @behaviour.prepend_before(:each) { fiddle << "prepend_before(:each)" } - @behaviour.before(:each) { fiddle << "before(:each)" } - @behaviour.it("test") {true} - @behaviour.run(@reporter) - fiddle.should == [ - 'Behaviour.prepend_before(:all)', - 'Behaviour.before(:all)', - 'prepend_before(:all)', - 'before(:all)', - 'prepend_before(:each)', - 'before(:each)' - ] - end - - it "after callbacks are ordered from local to global" do - @reporter.should_receive(:add_behaviour).with any_args() - @reporter.should_receive(:example_finished).with any_args() - - fiddle = [] - super_class = Class.new do - define_method :teardown do - fiddle << "superclass teardown" - end - end - @behaviour.inherit super_class - - @behaviour.after(:each) { fiddle << "after(:each)" } - @behaviour.append_after(:each) { fiddle << "append_after(:each)" } - @behaviour.after(:all) { fiddle << "after(:all)" } - @behaviour.append_after(:all) { fiddle << "append_after(:all)" } - Behaviour.after(:all) { fiddle << "Behaviour.after(:all)" } - Behaviour.append_after(:all) { fiddle << "Behaviour.append_after(:all)" } - @behaviour.it("test") {true} - @behaviour.run(@reporter) - fiddle.should == [ - 'after(:each)', - 'append_after(:each)', - 'after(:all)', - 'append_after(:all)', - 'Behaviour.after(:all)', - 'Behaviour.append_after(:all)' - ] - end - - it "should run superclass teardown method and after block" do - super_class_teardown_ran = false - super_class = Class.new do - define_method :teardown do - super_class_teardown_ran = true - end - end - @behaviour.inherit super_class - - teardown_ran = false - @behaviour.after {teardown_ran = true} - @behaviour.it("test") {true} - @behaviour.run(@reporter) - super_class_teardown_ran.should be_false - teardown_ran.should be_true - @reporter.rspec_verify - end - - it "should have accessible methods from inherited superclass" do - helper_method_ran = false - super_class = Class.new do - define_method :helper_method do - helper_method_ran = true - end - end - @behaviour.inherit super_class - - @behaviour.it("test") {helper_method} - @behaviour.run(@reporter) - helper_method_ran.should be_true - end - - it "should have accessible class methods from inherited superclass" do - class_method_ran = false - super_class = Class.new - (class << super_class; self; end).class_eval do - define_method :class_method do - class_method_ran = true - end - end - @behaviour.inherit super_class - @behaviour.class_method - class_method_ran.should be_true - - lambda {@behaviour.foobar}.should raise_error(NoMethodError) - end - - it "should include inherited class methods" do - class_method_ran = false - super_class = Class.new - class << super_class - def super_class_class_method; end - end - @behaviour.inherit super_class - - @behaviour.methods.should include("super_class_class_method") - end - - it "should have accessible instance methods from included module" do - @reporter.should_receive(:add_behaviour).with any_args() - @reporter.should_receive(:example_finished).with any_args() - - mod1_method_called = false - mod1 = Module.new do - define_method :mod1_method do - mod1_method_called = true - end - end - - mod2_method_called = false - mod2 = Module.new do - define_method :mod2_method do - mod2_method_called = true - end - end - - @behaviour.include mod1, mod2 - - @behaviour.it("test") do - mod1_method - mod2_method - end - @behaviour.run(@reporter) - mod1_method_called.should be_true - mod2_method_called.should be_true - end - - it "should have accessible class methods from included module" do - mod1_method_called = false - mod1 = Module.new do - class_methods = Module.new do - define_method :mod1_method do - mod1_method_called = true - end - end - - metaclass.class_eval do - define_method(:included) do |receiver| - receiver.extend class_methods - end - end - end - - mod2_method_called = false - mod2 = Module.new do - class_methods = Module.new do - define_method :mod2_method do - mod2_method_called = true - end - end - - metaclass.class_eval do - define_method(:included) do |receiver| - receiver.extend class_methods - end - end - end - - @behaviour.include mod1, mod2 - - @behaviour.mod1_method - @behaviour.mod2_method - mod1_method_called.should be_true - mod2_method_called.should be_true - end - - it "should count number of specs" do - @behaviour.it("one") {} - @behaviour.it("two") {} - @behaviour.it("three") {} - @behaviour.it("four") {} - @behaviour.number_of_examples.should == 4 - end - - it "should not match anything when there are no examples" do - @behaviour.should_not be_matches(['context']) - end - - it "should match when one of the examples match" do - example = mock('my example') - example.should_receive(:matches?).and_return(true) - @behaviour.stub!(:examples).and_return([example]) - @behaviour.should be_matches(['jalla']) - end - - it "should include targetted modules included using configuration" do - $included_modules = [] - - mod1 = Module.new do - class << self - def included(mod) - $included_modules << self - end - end - end - - mod2 = Module.new do - class << self - def included(mod) - $included_modules << self - end - end - end - - mod3 = Module.new do - class << self - def included(mod) - $included_modules << self - end - end - end - - begin - Spec::Runner.configuration.include(mod1, mod2) - Spec::Runner.configuration.include(mod3, :behaviour_type => :cat) - - behaviour = Behaviour.new("I'm special", :behaviour_type => :dog) do - end.run(@reporter) - - $included_modules.should include(mod1) - $included_modules.should include(mod2) - $included_modules.should_not include(mod3) - ensure - Spec::Runner.configuration.exclude(mod1, mod2, mod3) - end - end - - it "should include any predicate_matchers included using configuration" do - $included_predicate_matcher_found = false - Spec::Runner.configuration.predicate_matchers[:do_something] = :does_something? - Behaviour.new('example') do - it "should respond to do_something" do - $included_predicate_matcher_found = respond_to?(:do_something) - end - end.run(@reporter) - $included_predicate_matcher_found.should be(true) - end - - it "should use a mock framework set up in config" do - mod = Module.new do - class << self - def included(mod) - $included_module = mod - end - end - end - - begin - $included_module = nil - Spec::Runner.configuration.mock_with mod - - behaviour = Behaviour.new('example') do - end.run(@reporter) - - $included_module.should_not be_nil - ensure - Spec::Runner.configuration.mock_with :rspec - end - end - - end - - class BehaviourSubclass < Behaviour - public :described_type - end - - describe Behaviour, " subclass" do - it "should have access to the described_type" do - BehaviourSubclass.new(Example){}.described_type.should == Example - end - - it "should figure out its behaviour_type based on its name ()" do - BehaviourSubclass.new(Object){}.behaviour_type.should == :subclass - end - - # TODO - add an example about shared behaviours - end - - describe Enumerable do - def each(&block) - ["4", "2", "1"].each(&block) - end - - it "should be included in examples because it is a module" do - map{|e| e.to_i}.should == [4,2,1] - end - end - - describe String do - it "should not be included in examples because it is not a module" do - lambda{self.map}.should raise_error(NoMethodError, /undefined method `map' for/) - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/dsl/composite_proc_builder_spec.rb b/vendor/plugins/rspec/spec/spec/dsl/composite_proc_builder_spec.rb deleted file mode 100644 index 487677828..000000000 --- a/vendor/plugins/rspec/spec/spec/dsl/composite_proc_builder_spec.rb +++ /dev/null @@ -1,44 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module DSL - describe CompositeProcBuilder do - before(:each) do - @klass = Class.new do - attr_reader :an_attribute - - def an_attribute_setter - @an_attribute = :the_value - end - end - - @parent = @klass.new - @builder = CompositeProcBuilder.new {} - end - - it "calls all of its child procs" do - @builder << proc {:proc1} - @builder << proc {:proc2} - @builder.proc.call.should == [:proc1, :proc2] - end - - it "evals procs in the caller's instance" do - the_proc = proc do - @an_attribute = :the_value - end - the_proc.class.should == Proc - @builder << the_proc - @parent.instance_eval &@builder.proc - @parent.an_attribute.should == :the_value - end - - it "binds unbound methods to the parent" do - unbound_method = @klass.instance_method(:an_attribute_setter) - unbound_method.class.should == UnboundMethod - @builder << unbound_method - @parent.instance_eval &@builder.proc - @parent.an_attribute.should == :the_value - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/dsl/configuration_spec.rb b/vendor/plugins/rspec/spec/spec/dsl/configuration_spec.rb deleted file mode 100755 index d0377d068..000000000 --- a/vendor/plugins/rspec/spec/spec/dsl/configuration_spec.rb +++ /dev/null @@ -1,55 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module DSL - describe Configuration do - before(:each) do - @config = Configuration.new - @behaviour = mock("behaviour") - end - - it "should default mock framework to rspec" do - @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rspec$/ - end - - it "should let you set rspec mocking explicitly" do - @config.mock_with(:rspec) - @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rspec$/ - end - - it "should let you set mocha" do - @config.mock_with(:mocha) - @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/mocha$/ - end - - it "should let you set flexmock" do - @config.mock_with(:flexmock) - @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/flexmock$/ - end - - it "should let you set rr" do - @config.mock_with(:rr) - @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rr$/ - end - - it "should let you set an arbitrary adapter module" do - adapter = Module.new - @config.mock_with(adapter) - @config.mock_framework.should == adapter - end - - it "should let you define modules to be included" do - mod = Module.new - @config.include mod - @config.modules_for(nil).should include(mod) - end - - [:prepend_before, :append_before, :prepend_after, :append_after].each do |m| - it "should delegate ##{m} to Behaviour class" do - Behaviour.should_receive(m).with(:whatever) - @config.__send__(m, :whatever) - end - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/dsl/description_spec.rb b/vendor/plugins/rspec/spec/spec/dsl/description_spec.rb deleted file mode 100755 index d9fe4100f..000000000 --- a/vendor/plugins/rspec/spec/spec/dsl/description_spec.rb +++ /dev/null @@ -1,89 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module DSL - describe Description, " constructed with a single String" do - before(:each) {@description = Description.new("abc")} - - it "should provide that string as its name" do - @description.description.should == "abc" - end - it "should provide nil as its type" do - @description.described_type.should be_nil - end - it "should respond to []" do - @description[:key].should be_nil - end - it "should respond to []=" do - @description[:key] = :value - @description[:key].should == :value - end - it "should return for == when value matches description" do - @description.should == "abc" - end - it "should return for == when value is other description that matches description" do - @description.should == Description.new("abc") - end - end - - describe Description, " constructed with a Type" do - before(:each) {@description = Description.new(Behaviour)} - - it "should provide a String representation of that type (fully qualified) as its name" do - @description.description.should == "Spec::DSL::Behaviour" - end - it "should provide that type (fully qualified) as its type" do - @description.described_type.should == Spec::DSL::Behaviour - end - end - - describe Description, " constructed with a Type and a String" do - before(:each) {@description = Description.new(Behaviour, " behaving")} - - it "should include the type and second String in its name" do - @description.description.should == "Spec::DSL::Behaviour behaving" - end - it "should provide that type (fully qualified) as its type" do - @description.described_type.should == Spec::DSL::Behaviour - end - end - - describe Description, "constructed with a Type and a String not starting with a space" do - before(:each) {@description = Description.new(Behaviour, "behaving")} - - it "should include the type and second String with a space in its name" do - @description.description.should == "Spec::DSL::Behaviour behaving" - end - end - - describe Description, "constructed with a Type and a String starting with a ." do - before(:each) {@description = Description.new(Behaviour, ".behaving")} - - it "should include the type and second String with a space in its name" do - @description.description.should == "Spec::DSL::Behaviour.behaving" - end - end - - describe Description, "constructed with a Type and a String starting with a #" do - before(:each) {@description = Description.new(Behaviour, "#behaving")} - - it "should include the type and second String with a space in its name" do - @description.description.should == "Spec::DSL::Behaviour#behaving" - end - end - - describe Description, " constructed with options" do - before(:each) do - @description = Description.new(Behaviour, :a => "b", :spec_path => "blah") - end - - it "should provide its options" do - @description[:a].should == "b" - end - - it "should wrap spec path using File.expand_path" do - @description[:spec_path].should == File.expand_path("blah") - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/dsl/example_class_spec.rb b/vendor/plugins/rspec/spec/spec/dsl/example_class_spec.rb deleted file mode 100644 index 474d24e44..000000000 --- a/vendor/plugins/rspec/spec/spec/dsl/example_class_spec.rb +++ /dev/null @@ -1,24 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module DSL - describe Example, " class" do - - def run(example) - example.run(@reporter, nil, nil, nil, Object.new) - end - - before do - @reporter = stub("reporter", :example_started => nil, :example_finished => nil) - @example_class = Example.dup - end - - it "should report errors in example" do - error = Exception.new - example = @example_class.new("example") {raise(error)} - @reporter.should_receive(:example_finished).with(equal(example), error, "example", false) - run(example) - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/dsl/example_instance_spec.rb b/vendor/plugins/rspec/spec/spec/dsl/example_instance_spec.rb deleted file mode 100644 index 67b19604c..000000000 --- a/vendor/plugins/rspec/spec/spec/dsl/example_instance_spec.rb +++ /dev/null @@ -1,160 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module DSL - describe Example, " instance" do - predicate_matchers[:is_a] = [:is_a?] - - before(:each) do - @reporter = stub("reporter", :example_started => nil, :example_finished => nil) - end - - it "should send reporter example_started" do - example=Example.new("example") {} - @reporter.should_receive(:example_started).with(equal(example)) - example.run(@reporter, nil, nil, false, nil) - end - - it "should report its name for dry run" do - example=Example.new("example") {} - @reporter.should_receive(:example_finished).with(equal(example)) - example.run(@reporter, nil, nil, true, nil) #4th arg indicates dry run - end - - it "should report success" do - example=Example.new("example") {} - @reporter.should_receive(:example_finished).with(equal(example), nil, nil, false) - example.run(@reporter, nil, nil, nil, nil) - end - - it "should report failure due to failure" do - example=Example.new("example") do - (2+2).should == 5 - end - @reporter.should_receive(:example_finished).with(equal(example), is_a(Spec::Expectations::ExpectationNotMetError), "example", false) - example.run(@reporter, nil, nil, nil, nil) - end - - it "should report failure due to error" do - error=NonStandardError.new - example=Example.new("example") do - raise(error) - end - @reporter.should_receive(:example_finished).with(equal(example), error, "example", false) - example.run(@reporter, nil, nil, nil, nil) - end - - it "should run example in scope of supplied object" do - scope_class = Class.new - example=Example.new("should pass") do - self.instance_of?(Example).should == false - self.instance_of?(scope_class).should == true - end - @reporter.should_receive(:example_finished).with(equal(example), nil, nil, false) - example.run(@reporter, nil, nil, nil, scope_class.new) - end - - it "should not run example block if before_each fails" do - example_ran = false - example=Example.new("should pass") {example_ran = true} - before_each = lambda {raise NonStandardError} - example.run(@reporter, before_each, nil, nil, Object.new) - example_ran.should == false - end - - it "should run after_each block if before_each fails" do - after_each_ran = false - example=Example.new("should pass") {} - before_each = lambda {raise NonStandardError} - after_each = lambda {after_each_ran = true} - example.run(@reporter, before_each, after_each, nil, Object.new) - after_each_ran.should == true - end - - it "should run after_each block when example fails" do - example=Example.new("example") do - raise(NonStandardError.new("in body")) - end - after_each=lambda do - raise("in after_each") - end - @reporter.should_receive(:example_finished) do |example, error, location| - example.should equal(example) - location.should eql("example") - error.message.should eql("in body") - end - example.run(@reporter, nil, after_each, nil, nil) - end - - it "should report failure location when in before_each" do - example=Example.new("example") {} - before_each=lambda { raise(NonStandardError.new("in before_each")) } - @reporter.should_receive(:example_finished) do |name, error, location| - name.should equal(example) - error.message.should eql("in before_each") - location.should eql("before(:each)") - end - example.run(@reporter, before_each, nil, nil, nil) - end - - it "should report failure location when in after_each" do - example = Example.new("example") {} - after_each = lambda { raise(NonStandardError.new("in after_each")) } - @reporter.should_receive(:example_finished) do |name, error, location| - name.should equal(example) - error.message.should eql("in after_each") - location.should eql("after(:each)") - end - example.run(@reporter, nil, after_each, nil, nil) - end - - it "should accept an options hash following the example name" do - example = Example.new("name", :key => 'value') - end - - it "should report NO NAME when told to use generated description with --dry-run" do - example = Example.new(:__generate_description) { - 5.should == 5 - } - @reporter.should_receive(:example_finished) do |example, error, location| - example.description.should == "NO NAME (Because of --dry-run)" - end - example.run(@reporter, lambda{}, lambda{}, true, Object.new) - end - - it "should report NO NAME when told to use generated description with no expectations" do - example = Example.new(:__generate_description) {} - @reporter.should_receive(:example_finished) do |example, error, location| - example.description.should == "NO NAME (Because there were no expectations)" - end - example.run(@reporter, lambda{}, lambda{}, false, Object.new) - end - - it "should report NO NAME when told to use generated description and matcher fails" do - example = Example.new(:__generate_description) do - 5.should "" # Has no matches? method.. - end - @reporter.should_receive(:example_finished) do |example, error, location| - example.description.should == "NO NAME (Because of Error raised in matcher)" - end - example.run(@reporter, nil, nil, nil, Object.new) - end - - it "should report generated description when told to and it is available" do - example = Example.new(:__generate_description) { - 5.should == 5 - } - @reporter.should_receive(:example_finished) do |example, error, location| - example.description.should == "should == 5" - end - example.run(@reporter, nil, nil, nil, Object.new) - end - - it "should unregister description_generated callback (lest a memory leak should build up)" do - example = Example.new("something") - Spec::Matchers.should_receive(:unregister_description_generated).with(is_a(Proc)) - example.run(@reporter, nil, nil, nil, Object.new) - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/dsl/example_matcher_spec.rb b/vendor/plugins/rspec/spec/spec/dsl/example_matcher_spec.rb deleted file mode 100644 index ea2f2a787..000000000 --- a/vendor/plugins/rspec/spec/spec/dsl/example_matcher_spec.rb +++ /dev/null @@ -1,91 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module DSL - module ExampleMatcherSpecHelper - class MatchDescription - def initialize(description) - @description = description - end - - def matches?(matcher) - matcher.matches?(@description) - end - - def failure_message - "expected matcher.matches?(#{@description.inspect}) to return true, got false" - end - - def negative_failure_message - "expected matcher.matches?(#{@description.inspect}) to return false, got true" - end - end - def match_description(description) - MatchDescription.new(description) - end - end - - describe ExampleMatcher do - include ExampleMatcherSpecHelper - - it "should match correct behaviour and example" do - matcher = ExampleMatcher.new("behaviour", "example") - matcher.should match_description("behaviour example") - end - - it "should not match wrong example" do - matcher = ExampleMatcher.new("behaviour", "other example") - matcher.should_not match_description("behaviour example") - end - - it "should not match wrong behaviour" do - matcher = ExampleMatcher.new("other behaviour", "example") - matcher.should_not match_description("behaviour example") - end - - it "should match example only" do - matcher = ExampleMatcher.new("behaviour", "example") - matcher.should match_description("example") - end - - it "should match behaviour only" do - matcher = ExampleMatcher.new("behaviour", "example") - matcher.should match_description("behaviour") - end - - it "should escape regexp chars" do - matcher = ExampleMatcher.new("(con|text)", "[example]") - matcher.should_not match_description("con p") - end - - it "should match when behaviour is modularized" do - matcher = ExampleMatcher.new("MyModule::MyClass", "example") - matcher.should match_description("MyClass example") - end - end - - describe ExampleMatcher, "normal case" do - it "matches when passed in example matches" do - matcher = ExampleMatcher.new("Foo", "bar") - matcher.matches?(["no match", "Foo bar"]).should == true - end - - it "does not match when no passed in examples match" do - matcher = ExampleMatcher.new("Foo", "bar") - matcher.matches?(["no match1", "no match2"]).should == false - end - end - - describe ExampleMatcher, "where description has '::' in it" do - it "matches when passed in example matches" do - matcher = ExampleMatcher.new("Foo::Bar", "baz") - matcher.matches?(["no match", "Foo::Bar baz"]).should == true - end - - it "does not match when no passed in examples match" do - matcher = ExampleMatcher.new("Foo::Bar", "baz") - matcher.matches?(["no match1", "no match2"]).should == false - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/dsl/example_should_raise_spec.rb b/vendor/plugins/rspec/spec/spec/dsl/example_should_raise_spec.rb deleted file mode 100644 index a6d582068..000000000 --- a/vendor/plugins/rspec/spec/spec/dsl/example_should_raise_spec.rb +++ /dev/null @@ -1,137 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module DSL - describe Example, " declared with {:should_raise => ...}" do - before(:each) do - @reporter = mock("reporter") - @reporter.stub!(:example_started) - end - - def verify_error(error, message=nil) - error.should be_an_instance_of(Spec::Expectations::ExpectationNotMetError) - unless message.nil? - return error.message.should =~ message if Regexp === message - return error.message.should == message - end - end - - it "true} should pass when there is an ExpectationNotMetError" do - example = Spec::DSL:: Example.new("example", :should_raise => true) do - raise Spec::Expectations::ExpectationNotMetError - end - @reporter.should_receive(:example_finished) do |description, error| - error.should be_nil - end - example.run(@reporter, nil, nil, nil, nil) - end - - it "true} should fail if nothing is raised" do - example = Spec::DSL:: Example.new("example", :should_raise => true) {} - @reporter.should_receive(:example_finished) do |example_name, error| - verify_error(error, /example block expected Exception but nothing was raised/) - end - example.run(@reporter, nil, nil, nil, nil) - end - - it "NameError} should pass when there is a NameError" do - example = Spec::DSL:: Example.new("example", :should_raise => NameError) do - raise NameError - end - @reporter.should_receive(:example_finished) do |example_name, error| - error.should be_nil - end - example.run(@reporter, nil, nil, nil, nil) - end - - it "NameError} should fail when there is no error" do - example = Spec::DSL:: Example.new("example", :should_raise => NameError) do - #do nothing - end - @reporter.should_receive(:example_finished) do |example_name, error| - verify_error(error,/example block expected NameError but nothing was raised/) - end - example.run(@reporter, nil, nil, nil, nil) - end - - it "NameError} should fail when there is the wrong error" do - example = Spec::DSL:: Example.new("example", :should_raise => NameError) do - raise RuntimeError - end - @reporter.should_receive(:example_finished) do |example_name, error| - verify_error(error, /example block expected NameError but raised.+RuntimeError/) - end - example.run(@reporter, nil, nil, nil, nil) - end - - it "[NameError]} should pass when there is a NameError" do - example = Spec::DSL:: Example.new("spec", :should_raise => [NameError]) do - raise NameError - end - @reporter.should_receive(:example_finished) do |description, error| - error.should be_nil - end - example.run(@reporter, nil, nil, nil, nil) - end - - it "[NameError]} should fail when there is no error" do - example = Spec::DSL:: Example.new("spec", :should_raise => [NameError]) do - end - @reporter.should_receive(:example_finished) do |description, error| - verify_error(error, /example block expected NameError but nothing was raised/) - end - example.run(@reporter, nil, nil, nil, nil) - end - - it "[NameError]} should fail when there is the wrong error" do - example = Spec::DSL:: Example.new("spec", :should_raise => [NameError]) do - raise RuntimeError - end - @reporter.should_receive(:example_finished) do |description, error| - verify_error(error, /example block expected NameError but raised.+RuntimeError/) - end - example.run(@reporter, nil, nil, nil, nil) - end - - it "[NameError, 'message'} should pass when there is a NameError with the right message" do - example = Spec::DSL:: Example.new("spec", :should_raise => [NameError, 'expected']) do - raise NameError, 'expected' - end - @reporter.should_receive(:example_finished) do |description, error| - error.should be_nil - end - example.run(@reporter, nil, nil, nil, nil) - end - - it "[NameError, 'message'} should pass when there is a NameError with a message matching a regex" do - example = Spec::DSL:: Example.new("spec", :should_raise => [NameError, /xpec/]) do - raise NameError, 'expected' - end - @reporter.should_receive(:example_finished) do |description, error| - error.should be_nil - end - example.run(@reporter, nil, nil, nil, nil) - end - - it "[NameError, 'message'} should fail when there is a NameError with the wrong message" do - example = Spec::DSL:: Example.new("spec", :should_raise => [NameError, 'expected']) do - raise NameError, 'wrong message' - end - @reporter.should_receive(:example_finished) do |description, error| - verify_error(error, /example block expected #<NameError: expected> but raised #<NameError: wrong message>/) - end - example.run(@reporter, nil, nil, nil, nil) - end - - it "[NameError, 'message'} should fail when there is a NameError with a message not matching regexp" do - example = Spec::DSL:: Example.new("spec", :should_raise => [NameError, /exp/]) do - raise NameError, 'wrong message' - end - @reporter.should_receive(:example_finished) do |description, error| - verify_error(error, /example block expected #<NameError: \(\?-mix:exp\)> but raised #<NameError: wrong message>/) - end - example.run(@reporter, nil, nil, nil, nil) - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/dsl/predicate_matcher_spec.rb b/vendor/plugins/rspec/spec/spec/dsl/predicate_matcher_spec.rb deleted file mode 100755 index 02cd89399..000000000 --- a/vendor/plugins/rspec/spec/spec/dsl/predicate_matcher_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module DSL - class Fish - def can_swim?(distance_in_yards) - distance_in_yards < 1000 - end - end - - describe "predicate_matcher[method_on_object] = matcher_method" do - predicate_matchers[:swim] = :can_swim? - it "should match matcher_method if method_on_object returns true" do - swim(100).matches?(Fish.new).should be_true - end - it "should not match matcher_method if method_on_object returns false" do - swim(10000).matches?(Fish.new).should be_false - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/dsl/shared_behaviour_spec.rb b/vendor/plugins/rspec/spec/spec/dsl/shared_behaviour_spec.rb deleted file mode 100644 index a4288360c..000000000 --- a/vendor/plugins/rspec/spec/spec/dsl/shared_behaviour_spec.rb +++ /dev/null @@ -1,252 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module DSL - describe Behaviour, ", with :shared => true" do - - before(:each) do - @formatter = Spec::Mocks::Mock.new("formatter", :null_object => true) - @behaviour = behaviour_class.new("behaviour") {} - end - - after(:each) do - @formatter.rspec_verify - @behaviour_class = nil - $shared_behaviours.clear unless $shared_behaviours.nil? - end - - def behaviour_class - unless @behaviour_class - @behaviour_class = Behaviour.dup - # dup copies the class instance vars - @behaviour_class.instance_variable_set(:@shared_behaviours, nil) - end - @behaviour_class - end - - def make_shared_behaviour(name, opts=nil, &block) - behaviour = behaviour_class.new(name, :shared => true, &block) - behaviour_class.add_shared_behaviour(behaviour) - behaviour - end - - def non_shared_behaviour() - @non_shared_behaviour ||= behaviour_class.new("behaviour") {} - end - - it "should accept an optional options hash" do - lambda { behaviour_class.new("context") {} }.should_not raise_error(Exception) - lambda { behaviour_class.new("context", :shared => true) {} }.should_not raise_error(Exception) - end - - it "should return all shared behaviours" do - b1 = make_shared_behaviour("b1", :shared => true) {} - b2 = make_shared_behaviour("b2", :shared => true) {} - - b1.should_not be(nil) - b2.should_not be(nil) - - behaviour_class.find_shared_behaviour("b1").should equal(b1) - behaviour_class.find_shared_behaviour("b2").should equal(b2) - end - - it "should be shared when configured as shared" do - behaviour = make_shared_behaviour("behaviour") {} - behaviour.should be_shared - end - - it "should not be shared when not configured as shared" do - non_shared_behaviour.should_not be_shared - end - - it "should raise if run when shared" do - behaviour = make_shared_behaviour("context") {} - $example_ran = false - behaviour.it("test") {$example_ran = true} - lambda { behaviour.run(@formatter) }.should raise_error - $example_ran.should be_false - end - - it "should contain examples when shared" do - shared_behaviour = make_shared_behaviour("shared behaviour") {} - shared_behaviour.it("shared example") {} - shared_behaviour.number_of_examples.should == 1 - end - - it "should complain when adding a second shared behaviour with the same description" do - describe "shared behaviour", :shared => true do - end - lambda do - describe "shared behaviour", :shared => true do - end - end.should raise_error(ArgumentError) - end - - it "should NOT complain when adding the same shared behaviour instance again" do - shared_behaviour = behaviour_class.new("shared behaviour", :shared => true) {} - behaviour_class.add_shared_behaviour(shared_behaviour) - behaviour_class.add_shared_behaviour(shared_behaviour) - end - - it "should NOT complain when adding the same shared behaviour again (i.e. file gets reloaded)" do - lambda do - 2.times do - describe "shared behaviour which gets loaded twice", :shared => true do - end - end - end.should_not raise_error(ArgumentError) - end - - it "should NOT complain when adding the same shared behaviour in same file with different absolute path" do - shared_behaviour_1 = behaviour_class.new("shared behaviour", :shared => true) {} - shared_behaviour_2 = behaviour_class.new("shared behaviour", :shared => true) {} - - shared_behaviour_1.description[:spec_path] = "/my/spec/a/../shared.rb" - shared_behaviour_2.description[:spec_path] = "/my/spec/b/../shared.rb" - - behaviour_class.add_shared_behaviour(shared_behaviour_1) - behaviour_class.add_shared_behaviour(shared_behaviour_2) - end - - it "should complain when adding a different shared behaviour with the same name in a different file with the same basename" do - shared_behaviour_1 = behaviour_class.new("shared behaviour", :shared => true) {} - shared_behaviour_2 = behaviour_class.new("shared behaviour", :shared => true) {} - - shared_behaviour_1.description[:spec_path] = "/my/spec/a/shared.rb" - shared_behaviour_2.description[:spec_path] = "/my/spec/b/shared.rb" - - behaviour_class.add_shared_behaviour(shared_behaviour_1) - lambda do - behaviour_class.add_shared_behaviour(shared_behaviour_2) - end.should raise_error(ArgumentError, /already exists/) - end - - it "should add examples to current behaviour when calling it_should_behave_like" do - shared_behaviour = make_shared_behaviour("shared behaviour") {} - shared_behaviour.it("shared example") {} - shared_behaviour.it("shared example 2") {} - - @behaviour.it("example") {} - @behaviour.number_of_examples.should == 1 - @behaviour.it_should_behave_like("shared behaviour") - @behaviour.number_of_examples.should == 3 - end - - it "should run shared examples" do - shared_example_ran = false - shared_behaviour = make_shared_behaviour("shared behaviour") {} - shared_behaviour.it("shared example") { shared_example_ran = true } - - example_ran = false - - @behaviour.it_should_behave_like("shared behaviour") - @behaviour.it("example") {example_ran = true} - @behaviour.run(@formatter) - example_ran.should be_true - shared_example_ran.should be_true - end - - it "should run setup and teardown from shared behaviour" do - shared_setup_ran = false - shared_teardown_ran = false - shared_behaviour = make_shared_behaviour("shared behaviour") {} - shared_behaviour.before { shared_setup_ran = true } - shared_behaviour.after { shared_teardown_ran = true } - shared_behaviour.it("shared example") { shared_example_ran = true } - - example_ran = false - - @behaviour.it_should_behave_like("shared behaviour") - @behaviour.it("example") {example_ran = true} - @behaviour.run(@formatter) - example_ran.should be_true - shared_setup_ran.should be_true - shared_teardown_ran.should be_true - end - - it "should run before(:all) and after(:all) only once from shared behaviour" do - shared_before_all_run_count = 0 - shared_after_all_run_count = 0 - shared_behaviour = make_shared_behaviour("shared behaviour") {} - shared_behaviour.before(:all) { shared_before_all_run_count += 1} - shared_behaviour.after(:all) { shared_after_all_run_count += 1} - shared_behaviour.it("shared example") { shared_example_ran = true } - - example_ran = false - - @behaviour.it_should_behave_like("shared behaviour") - @behaviour.it("example") {example_ran = true} - @behaviour.run(@formatter) - example_ran.should be_true - shared_before_all_run_count.should == 1 - shared_after_all_run_count.should == 1 - end - - it "should include modules, included into shared behaviour, into current behaviour" do - @formatter.should_receive(:add_behaviour).with(any_args) - @formatter.should_receive(:example_finished).twice.with(any_args) - - shared_behaviour = make_shared_behaviour("shared behaviour") {} - shared_behaviour.it("shared example") { shared_example_ran = true } - - mod1_method_called = false - mod1 = Module.new do - define_method :mod1_method do - mod1_method_called = true - end - end - - mod2_method_called = false - mod2 = Module.new do - define_method :mod2_method do - mod2_method_called = true - end - end - - shared_behaviour.include mod2 - - @behaviour.it_should_behave_like("shared behaviour") - @behaviour.include mod1 - - @behaviour.it("test") do - mod1_method - mod2_method - end - @behaviour.run(@formatter) - mod1_method_called.should be_true - mod2_method_called.should be_true - end - - it "should make methods defined in the shared behaviour available in consuming behaviour" do - shared_behaviour = make_shared_behaviour("shared behaviour xyz") do - def a_shared_helper_method - "this got defined in a shared behaviour" - end - end - @behaviour.it_should_behave_like("shared behaviour xyz") - success = false - @behaviour.it("should access a_shared_helper_method") do - a_shared_helper_method - success = true - end - @behaviour.run(@formatter) - success.should be_true - end - - it "should error if told to inherit from a class" do - shared_behaviour = make_shared_behaviour("shared behaviour") {} - shared_behaviour.it("shared example") { shared_example_ran = true } - lambda { shared_behaviour.inherit Object }.should raise_error(ArgumentError) - end - - it "should raise when named shared behaviour can not be found" do - begin - @behaviour.it_should_behave_like("non-existent shared behaviour") - violated - rescue => e - e.message.should == "Shared Behaviour 'non-existent shared behaviour' can not be found" - end - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/expectations/differs/default_spec.rb b/vendor/plugins/rspec/spec/spec/expectations/differs/default_spec.rb index ae5551aaf..ea720846b 100644 --- a/vendor/plugins/rspec/spec/spec/expectations/differs/default_spec.rb +++ b/vendor/plugins/rspec/spec/spec/expectations/differs/default_spec.rb @@ -1,5 +1,4 @@ require File.dirname(__FILE__) + '/../../../spec_helper.rb' -require File.dirname(__FILE__) + '/../../../../lib/spec/expectations/differs/default' module Spec module Fixtures @@ -22,7 +21,8 @@ end describe "Diff" do before(:each) do - @differ = Spec::Expectations::Differs::Default.new + @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new) + @differ = Spec::Expectations::Differs::Default.new(@options) end it "should output unified diff of two strings" do @@ -79,7 +79,9 @@ end describe "Diff in context format" do before(:each) do - @differ = Spec::Expectations::Differs::Default.new(:context) + @options = Spec::Runner::Options.new(StringIO.new, StringIO.new) + @options.diff_format = :context + @differ = Spec::Expectations::Differs::Default.new(@options) end it "should output unified diff message of two objects" do diff --git a/vendor/plugins/rspec/spec/spec/expectations/extensions/object_spec.rb b/vendor/plugins/rspec/spec/spec/expectations/extensions/object_spec.rb index 587053293..0d9335bdb 100644 --- a/vendor/plugins/rspec/spec/spec/expectations/extensions/object_spec.rb +++ b/vendor/plugins/rspec/spec/spec/expectations/extensions/object_spec.rb @@ -9,8 +9,7 @@ describe Object, "#should" do end it "should accept and interact with a matcher" do - @matcher.should_receive(:matches?).with(@target).and_return(true) - + @matcher.should_receive(:matches?).with(@target).and_return(true) @target.should @matcher end @@ -21,6 +20,37 @@ describe Object, "#should" do @target.should @matcher }.should fail_with("the failure message") end + + it "should raise error if it receives false directly" do + lambda { + @target.should false + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives false (evaluated)" do + lambda { + @target.should eql?("foo") + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives true" do + lambda { + @target.should true + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives nil" do + lambda { + @target.should nil + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives no argument and it is not used as a left side of an operator" do + pending "Is it even possible to catch this?" + lambda { + @target.should + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end end describe Object, "#should_not" do @@ -43,4 +73,35 @@ describe Object, "#should_not" do @target.should_not @matcher }.should fail_with("the negative failure message") end + + it "should raise error if it receives false directly" do + lambda { + @target.should_not false + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives false (evaluated)" do + lambda { + @target.should_not eql?("foo") + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives true" do + lambda { + @target.should_not true + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives nil" do + lambda { + @target.should_not nil + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives no argument and it is not used as a left side of an operator" do + pending "Is it even possible to catch this?" + lambda { + @target.should_not + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end end diff --git a/vendor/plugins/rspec/spec/spec/matchers/be_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/be_spec.rb index 84653873c..d40036c79 100644 --- a/vendor/plugins/rspec/spec/spec/matchers/be_spec.rb +++ b/vendor/plugins/rspec/spec/spec/matchers/be_spec.rb @@ -199,6 +199,21 @@ describe "should be ===" do end end +describe "should be" do + it "should pass if actual is true or a set value" do + true.should be + 1.should be + end + + it "should fail if actual is false" do + lambda {false.should be}.should fail_with("expected if to be satisfied, got false") + end + + it "should fail if actual is nil" do + lambda {nil.should be}.should fail_with("expected if to be satisfied, got nil") + end +end + describe "should be(value)" do it "should pass if actual.equal?(value)" do 5.should be(5) diff --git a/vendor/plugins/rspec/spec/spec/matchers/change_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/change_spec.rb index 70e55328e..d95aa6da4 100644 --- a/vendor/plugins/rspec/spec/spec/matchers/change_spec.rb +++ b/vendor/plugins/rspec/spec/spec/matchers/change_spec.rb @@ -133,6 +133,93 @@ describe "should change{ block }.by(expected)" do end end +describe "should change(actual, message).by_at_least(expected)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 5 + end + + it "should pass when attribute is changed by greater than the expected amount" do + lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_least(1) + end + + it "should pass when attribute is changed by the expected amount" do + lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_least(2) + end + + it "should fail when the attribute is changed by less than the expected amount" do + lambda do + lambda { @instance.some_value += 1 }.should change(@instance, :some_value).by_at_least(2) + end.should fail_with("some_value should have been changed by at least 2, but was changed by 1") + end + +end + +describe "should change{ block }.by_at_least(expected)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 5 + end + + it "should pass when attribute is changed by greater than expected amount" do + lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_least(1) + end + + it "should pass when attribute is changed by the expected amount" do + lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_least(2) + end + + it "should fail when the attribute is changed by less than the unexpected amount" do + lambda do + lambda { @instance.some_value += 1 }.should change{@instance.some_value}.by_at_least(2) + end.should fail_with("result should have been changed by at least 2, but was changed by 1") + end +end + + +describe "should change(actual, message).by_at_most(expected)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 5 + end + + it "should pass when attribute is changed by less than the expected amount" do + lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(3) + end + + it "should pass when attribute is changed by the expected amount" do + lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(2) + end + + it "should fail when the attribute is changed by greater than the expected amount" do + lambda do + lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(1) + end.should fail_with("some_value should have been changed by at most 1, but was changed by 2") + end + +end + +describe "should change{ block }.by_at_most(expected)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 5 + end + + it "should pass when attribute is changed by less than expected amount" do + lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(3) + end + + it "should pass when attribute is changed by the expected amount" do + lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(2) + end + + it "should fail when the attribute is changed by greater than the unexpected amount" do + lambda do + lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(1) + end.should fail_with("result should have been changed by at most 1, but was changed by 2") + end +end + describe "should change(actual, message).from(old)" do before(:each) do @instance = SomethingExpected.new diff --git a/vendor/plugins/rspec/spec/spec/matchers/description_generation_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/description_generation_spec.rb index d1246ad04..c494e2165 100644 --- a/vendor/plugins/rspec/spec/spec/matchers/description_generation_spec.rb +++ b/vendor/plugins/rspec/spec/spec/matchers/description_generation_spec.rb @@ -1,148 +1,146 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb' describe "Matchers should be able to generate their own descriptions" do - before(:each) do - @desc = nil - @callback = lambda { |desc| @desc = desc } - Spec::Matchers.description_generated(@callback) + after(:each) do + Spec::Matchers.clear_generated_description end - + it "should == expected" do "this".should == "this" - @desc.should == "should == \"this\"" + Spec::Matchers.generated_description.should == "should == \"this\"" end it "should not == expected" do "this".should_not == "that" - @desc.should == "should not == \"that\"" + Spec::Matchers.generated_description.should == "should not == \"that\"" end it "should be empty (arbitrary predicate)" do [].should be_empty - @desc.should == "should be empty" + Spec::Matchers.generated_description.should == "should be empty" end it "should not be empty (arbitrary predicate)" do [1].should_not be_empty - @desc.should == "should not be empty" + Spec::Matchers.generated_description.should == "should not be empty" end it "should be true" do true.should be_true - @desc.should == "should be true" + Spec::Matchers.generated_description.should == "should be true" end it "should be false" do false.should be_false - @desc.should == "should be false" + Spec::Matchers.generated_description.should == "should be false" end it "should be nil" do nil.should be_nil - @desc.should == "should be nil" + Spec::Matchers.generated_description.should == "should be nil" end it "should be > n" do 5.should be > 3 - @desc.should == "should be > 3" + Spec::Matchers.generated_description.should == "should be > 3" end it "should be predicate arg1, arg2 and arg3" do 5.0.should be_between(0,10) - @desc.should == "should be between 0 and 10" + Spec::Matchers.generated_description.should == "should be between 0 and 10" end it "should be_few_words predicate should be transformed to 'be few words'" do 5.should be_kind_of(Fixnum) - @desc.should == "should be kind of Fixnum" + Spec::Matchers.generated_description.should == "should be kind of Fixnum" end it "should preserve a proper prefix for be predicate" do 5.should be_a_kind_of(Fixnum) - @desc.should == "should be a kind of Fixnum" + Spec::Matchers.generated_description.should == "should be a kind of Fixnum" 5.should be_an_instance_of(Fixnum) - @desc.should == "should be an instance of Fixnum" + Spec::Matchers.generated_description.should == "should be an instance of Fixnum" end it "should equal" do expected = "expected" expected.should equal(expected) - @desc.should == "should equal \"expected\"" + Spec::Matchers.generated_description.should == "should equal \"expected\"" end it "should_not equal" do 5.should_not equal(37) - @desc.should == "should not equal 37" + Spec::Matchers.generated_description.should == "should not equal 37" end it "should eql" do "string".should eql("string") - @desc.should == "should eql \"string\"" + Spec::Matchers.generated_description.should == "should eql \"string\"" end it "should not eql" do "a".should_not eql(:a) - @desc.should == "should not eql :a" + Spec::Matchers.generated_description.should == "should not eql :a" end it "should have_key" do {:a => "a"}.should have_key(:a) - @desc.should == "should have key :a" + Spec::Matchers.generated_description.should == "should have key :a" end it "should have n items" do team.should have(3).players - @desc.should == "should have 3 players" + Spec::Matchers.generated_description.should == "should have 3 players" end it "should have at least n items" do team.should have_at_least(2).players - @desc.should == "should have at least 2 players" + Spec::Matchers.generated_description.should == "should have at least 2 players" end it "should have at most n items" do team.should have_at_most(4).players - @desc.should == "should have at most 4 players" + Spec::Matchers.generated_description.should == "should have at most 4 players" end it "should include" do [1,2,3].should include(3) - @desc.should == "should include 3" + Spec::Matchers.generated_description.should == "should include 3" end it "should match" do "this string".should match(/this string/) - @desc.should == "should match /this string/" + Spec::Matchers.generated_description.should == "should match /this string/" end it "should raise_error" do lambda { raise }.should raise_error - @desc.should == "should raise Exception" + Spec::Matchers.generated_description.should == "should raise Exception" end it "should raise_error with type" do lambda { raise }.should raise_error(RuntimeError) - @desc.should == "should raise RuntimeError" + Spec::Matchers.generated_description.should == "should raise RuntimeError" end it "should raise_error with type and message" do lambda { raise "there was an error" }.should raise_error(RuntimeError, "there was an error") - @desc.should == "should raise RuntimeError with \"there was an error\"" + Spec::Matchers.generated_description.should == "should raise RuntimeError with \"there was an error\"" end it "should respond_to" do [].should respond_to(:insert) - @desc.should == "should respond to #insert" + Spec::Matchers.generated_description.should == "should respond to #insert" end it "should throw symbol" do lambda { throw :what_a_mess }.should throw_symbol - @desc.should == "should throw a Symbol" + Spec::Matchers.generated_description.should == "should throw a Symbol" end it "should throw symbol (with named symbol)" do lambda { throw :what_a_mess }.should throw_symbol(:what_a_mess) - @desc.should == "should throw :what_a_mess" + Spec::Matchers.generated_description.should == "should throw :what_a_mess" end def team @@ -152,8 +150,4 @@ describe "Matchers should be able to generate their own descriptions" do end end.new end - - after(:each) do - Spec::Matchers.unregister_description_generated(@callback) - end end diff --git a/vendor/plugins/rspec/spec/spec/matchers/exist_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/exist_spec.rb index fcbdd9556..0a509726e 100644 --- a/vendor/plugins/rspec/spec/spec/matchers/exist_spec.rb +++ b/vendor/plugins/rspec/spec/spec/matchers/exist_spec.rb @@ -1,8 +1,5 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb' -# NOTE - this was initially handled by an explicit matcher, but is now -# handled by a default set of predicate_matchers. - class Substance def initialize exists, description @exists = exists @@ -16,33 +13,45 @@ class Substance end end -describe "should exist" do - before(:each) do - @real = Substance.new true, 'something real' - @imaginary = Substance.new false, 'something imaginary' +class SubstanceTester + include Spec::Matchers + def initialize substance + @substance = substance end - - it "should pass if target exists" do - @real.should exist - end - - it "should fail if target does not exist" do - lambda { @imaginary.should exist }. - should fail + def should_exist + @substance.should exist end end -describe "should_not exist" do +describe "should exist," do + before(:each) do @real = Substance.new true, 'something real' @imaginary = Substance.new false, 'something imaginary' end - it "should pass if target doesn't exist" do - @imaginary.should_not exist + + describe "within an example group" do + + it "should pass if target exists" do + @real.should exist + end + + it "should fail if target does not exist" do + lambda { @imaginary.should exist }.should fail + end + + it "should pass if target doesn't exist" do + lambda { @real.should_not exist }.should fail + end end - it "should fail if target does exist" do - lambda { @real.should_not exist }. - should fail + + describe "outside of an example group" do + + it "should pass if target exists" do + real_tester = SubstanceTester.new @real + real_tester.should_exist + end + end + end - diff --git a/vendor/plugins/rspec/spec/spec/matchers/handler_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/handler_spec.rb index 9f04c6bed..ad4fe6f85 100644 --- a/vendor/plugins/rspec/spec/spec/matchers/handler_spec.rb +++ b/vendor/plugins/rspec/spec/spec/matchers/handler_spec.rb @@ -33,7 +33,7 @@ module ExampleExpectations end class PositiveOnlyMatcher < ArbitraryMatcher - undef negative_failure_message + undef negative_failure_message rescue nil end def arbitrary_matcher(*args, &block) @@ -55,6 +55,47 @@ module Spec matcher.should_receive(:matches?).with(actual).and_return(true) ExpectationMatcherHandler.handle_matcher(actual, matcher) end + + it "should explain when the matcher parameter is not a matcher" do + begin + nonmatcher = mock("nonmatcher") + actual = Object.new + ExpectationMatcherHandler.handle_matcher(actual, nonmatcher) + rescue Spec::Expectations::InvalidMatcherError => e + end + + e.message.should =~ /^Expected a matcher, got / + end + end + + describe NegativeExpectationMatcherHandler, ".handle_matcher" do + it "should explain when matcher does not support should_not" do + matcher = mock("matcher") + matcher.stub!(:matches?) + actual = Object.new + lambda { + NegativeExpectationMatcherHandler.handle_matcher(actual, matcher) + }.should fail_with(/Matcher does not support should_not.\n/) + end + + it "should ask the matcher if it matches" do + matcher = mock("matcher") + actual = Object.new + matcher.stub!(:negative_failure_message) + matcher.should_receive(:matches?).with(actual).and_return(false) + NegativeExpectationMatcherHandler.handle_matcher(actual, matcher) + end + + it "should explain when the matcher parameter is not a matcher" do + begin + nonmatcher = mock("nonmatcher") + actual = Object.new + NegativeExpectationMatcherHandler.handle_matcher(actual, nonmatcher) + rescue Spec::Expectations::InvalidMatcherError => e + end + + e.message.should =~ /^Expected a matcher, got / + end end describe ExpectationMatcherHandler do diff --git a/vendor/plugins/rspec/spec/spec/matchers/have_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/have_spec.rb index 84a75d98e..27083c294 100644 --- a/vendor/plugins/rspec/spec/spec/matchers/have_spec.rb +++ b/vendor/plugins/rspec/spec/spec/matchers/have_spec.rb @@ -47,6 +47,25 @@ describe "should have(n).items" do end end +describe 'should have(1).item when Inflector is defined' do + include HaveSpecHelper + + before do + unless Object.const_defined?(:Inflector) + class Inflector + def self.pluralize(string) + string.to_s + 's' + end + end + end + end + + it 'should pluralize the collection name' do + owner = create_collection_owner_with(1) + owner.should have(1).item + end +end + describe "should have(n).items where result responds to items but returns something other than a collection" do it "should provide a meaningful error" do owner = Class.new do @@ -250,7 +269,7 @@ describe "have(n).items where target IS a collection" do [1,2,3].should have(3).items end - it "should reference the number of items IN the collection" do + it "should fail when the number of items IN the collection is not as expected" do lambda { [1,2,3].should have(7).items }.should fail_with("expected 7 items, got 3") end end diff --git a/vendor/plugins/rspec/spec/spec/matchers/match_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/match_spec.rb index b8aa06b07..f69f7efad 100644 --- a/vendor/plugins/rspec/spec/spec/matchers/match_spec.rb +++ b/vendor/plugins/rspec/spec/spec/matchers/match_spec.rb @@ -5,12 +5,12 @@ describe "should match(expected)" do "string".should match(/tri/) end - it "should fail when target (String) matches expected (Regexp)" do + it "should fail when target (String) does not match expected (Regexp)" do lambda { "string".should match(/rings/) }.should fail end - + it "should provide message, expected and actual on failure" do matcher = match(/rings/) matcher.matches?("string") @@ -19,7 +19,7 @@ describe "should match(expected)" do end describe "should_not match(expected)" do - it "should pass when target (String) matches expected (Regexp)" do + it "should pass when target (String) matches does not match (Regexp)" do "string".should_not match(/rings/) end diff --git a/vendor/plugins/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb index bde48686a..1292918c7 100644 --- a/vendor/plugins/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb +++ b/vendor/plugins/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb @@ -19,6 +19,6 @@ describe "The boolean() mock argument constraint matcher" do end describe "The an_instance_of() mock argument constraint matcher" do - # NOTE - this is implemented as a predicate_matcher - see behaviour.rb + # NOTE - this is implemented as a predicate_matcher - see example_group_methods.rb specify { an_instance_of(String).should == "string" } end diff --git a/vendor/plugins/rspec/spec/spec/matchers/operator_matcher_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/operator_matcher_spec.rb index eaadc8fc8..1985df0d9 100644 --- a/vendor/plugins/rspec/spec/spec/matchers/operator_matcher_spec.rb +++ b/vendor/plugins/rspec/spec/spec/matchers/operator_matcher_spec.rb @@ -48,7 +48,7 @@ describe "should ===" do Spec::Expectations.should_receive(:fail_with).with(%[expected: "orange",\n got: "apple" (using ===)], "orange", "apple") subject.should === "orange" end - + end describe "should_not ===" do diff --git a/vendor/plugins/rspec/spec/spec/matchers/throw_symbol_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/throw_symbol_spec.rb index 1548ec6f0..74595659a 100644 --- a/vendor/plugins/rspec/spec/spec/matchers/throw_symbol_spec.rb +++ b/vendor/plugins/rspec/spec/spec/matchers/throw_symbol_spec.rb @@ -27,7 +27,7 @@ module Spec it "should match if correct Symbol is thrown" do @matcher.matches?(lambda{ throw :sym }).should be_true end - it "should not match no Symbol is thrown" do + it "should not match if no Symbol is thrown" do @matcher.matches?(lambda{ }).should be_false end it "should not match if correct Symbol is thrown" do @@ -46,6 +46,9 @@ module Spec @matcher.matches?(lambda{ throw :sym }) @matcher.negative_failure_message.should == "expected :sym not to be thrown" end + it "should only match NameErrors raised by uncaught throws" do + @matcher.matches?(lambda{ sym }).should be_false + end end end end diff --git a/vendor/plugins/rspec/spec/spec/mocks/bug_report_8165_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/bug_report_8165_spec.rb index 785546dca..7edc3c076 100644 --- a/vendor/plugins/rspec/spec/spec/mocks/bug_report_8165_spec.rb +++ b/vendor/plugins/rspec/spec/spec/mocks/bug_report_8165_spec.rb @@ -12,7 +12,7 @@ describe "An object where respond_to? is true and does not have method" do # The fix was to keep track of whether :respond_to? had been proxied and, if # so, call the munged copy of :respond_to? on the object. - it "should not raise an exception" do + it "should not raise an exception for Object" do obj = Object.new obj.should_receive(:respond_to?).with(:foobar).and_return(true) obj.should_receive(:foobar).and_return(:baz) @@ -20,7 +20,7 @@ describe "An object where respond_to? is true and does not have method" do obj.foobar.should == :baz end - it "should not raise an exception" do + it "should not raise an exception for mock" do obj = mock("obj") obj.should_receive(:respond_to?).with(:foobar).and_return(true) obj.should_receive(:foobar).and_return(:baz) diff --git a/vendor/plugins/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb index f3c396283..db6dcea34 100644 --- a/vendor/plugins/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +++ b/vendor/plugins/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb @@ -81,6 +81,7 @@ module Spec before(:each) do @mock = mock("test mock") @reporter = Mock.new("reporter", :null_object => true) + Kernel.stub!(:warn) end after(:each) do diff --git a/vendor/plugins/rspec/spec/spec/mocks/mock_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/mock_spec.rb index bfe36ed57..85a71e327 100644 --- a/vendor/plugins/rspec/spec/spec/mocks/mock_spec.rb +++ b/vendor/plugins/rspec/spec/spec/mocks/mock_spec.rb @@ -2,107 +2,96 @@ require File.dirname(__FILE__) + '/../../spec_helper' module Spec module Mocks - describe "a Mock expectation" do + describe Mock do - before do + before(:each) do @mock = mock("test mock") end - after do + after(:each) do @mock.rspec_reset end it "should report line number of expectation of unreceived message" do - @mock.should_receive(:wont_happen).with("x", 3) - #NOTE - this test is quite ticklish because it specifies that - #the above statement appears on line 12 of this file. - + expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3) begin @mock.rspec_verify violated rescue MockExpectationError => e - e.backtrace[0].should match(/mock_spec\.rb:16/) + # NOTE - this regexp ended w/ $, but jruby adds extra info at the end of the line + e.backtrace[0].should match(/#{File.basename(__FILE__)}:#{expected_error_line}/) end - end it "should pass when not receiving message specified as not to be received" do @mock.should_not_receive(:not_expected) @mock.rspec_verify end - + it "should pass when receiving message specified as not to be received with different args" do @mock.should_not_receive(:message).with("unwanted text") @mock.should_receive(:message).with("other text") @mock.message "other text" @mock.rspec_verify end - + it "should fail when receiving message specified as not to be received" do @mock.should_not_receive(:not_expected) @mock.not_expected - begin + lambda { @mock.rspec_verify violated - rescue MockExpectationError => e - e.message.should == "Mock 'test mock' expected :not_expected with (any args) 0 times, but received it once" - end + }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (any args) 0 times, but received it once") end - + it "should fail when receiving message specified as not to be received with args" do @mock.should_not_receive(:not_expected).with("unexpected text") @mock.not_expected("unexpected text") - begin + lambda { @mock.rspec_verify violated - rescue MockExpectationError => e - e.message.should == "Mock 'test mock' expected :not_expected with (\"unexpected text\") 0 times, but received it once" - end + }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (\"unexpected text\") 0 times, but received it once") end - + it "should pass when receiving message specified as not to be received with wrong args" do @mock.should_not_receive(:not_expected).with("unexpected text") @mock.not_expected "really unexpected text" @mock.rspec_verify end - + it "should allow block to calculate return values" do @mock.should_receive(:something).with("a","b","c").and_return { |a,b,c| c+b+a } @mock.something("a","b","c").should == "cba" @mock.rspec_verify end - + it "should allow parameter as return value" do @mock.should_receive(:something).with("a","b","c").and_return("booh") @mock.something("a","b","c").should == "booh" @mock.rspec_verify end - + it "should return nil if no return value set" do @mock.should_receive(:something).with("a","b","c") @mock.something("a","b","c").should be_nil @mock.rspec_verify end - + it "should raise exception if args dont match when method called" do @mock.should_receive(:something).with("a","b","c").and_return("booh") - begin + lambda { @mock.something("a","d","c") violated - rescue MockExpectationError => e - e.message.should == "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")" - end + }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")") end - + it "should fail if unexpected method called" do - begin + lambda { @mock.something("a","b","c") violated - rescue MockExpectationError => e - e.message.should == "Mock 'test mock' received unexpected message :something with (\"a\", \"b\", \"c\")" - end + }.should raise_error(MockExpectationError, "Mock 'test mock' received unexpected message :something with (\"a\", \"b\", \"c\")") end - + it "should use block for expectation if provided" do @mock.should_receive(:something) do | a, b | a.should == "a" @@ -112,71 +101,74 @@ module Spec @mock.something("a", "b").should == "booh" @mock.rspec_verify end - + it "should fail if expectation block fails" do @mock.should_receive(:something) {| bool | bool.should be_true} - begin + lambda { @mock.something false - rescue MockExpectationError => e - e.message.should match(/Mock 'test mock' received :something but passed block failed with: expected true, got false/) - end + }.should raise_error(MockExpectationError, /Mock 'test mock' received :something but passed block failed with: expected true, got false/) end - - it "should fail when method defined as never is received" do + + it "should fail right away when method defined as never is received" do + pending "Used to pass (false positive). Which one is wrong, the spec or the actual behavior?" + @mock.should_receive(:not_expected).never - begin + lambda { @mock.not_expected - rescue MockExpectationError => e - e.message.should == "Mock 'test mock' expected :not_expected 0 times, but received it 1 times" - end + }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected 0 times, but received it 1 times") end + it "should eventually fail when method defined as never is received" do + @mock.should_receive(:not_expected).never + @mock.not_expected + + lambda { + @mock.rspec_verify + }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (any args) 0 times, but received it once") + end + it "should raise when told to" do @mock.should_receive(:something).and_raise(RuntimeError) lambda do @mock.something end.should raise_error(RuntimeError) end - + it "should raise passed an Exception instance" do error = RuntimeError.new("error message") @mock.should_receive(:something).and_raise(error) - begin + lambda { @mock.something - rescue RuntimeError => e - e.message.should eql("error message") - end + }.should raise_error(RuntimeError, "error message") end - + it "should raise RuntimeError with passed message" do @mock.should_receive(:something).and_raise("error message") - begin + lambda { @mock.something - rescue RuntimeError => e - e.message.should eql("error message") - end + }.should raise_error(RuntimeError, "error message") end - + it "should not raise when told to if args dont match" do @mock.should_receive(:something).with(2).and_raise(RuntimeError) - lambda do + lambda { @mock.something 1 - end.should raise_error(MockExpectationError) + }.should raise_error(MockExpectationError) end - + it "should throw when told to" do @mock.should_receive(:something).and_throw(:blech) - lambda do + lambda { @mock.something - end.should throw_symbol(:blech) + }.should throw_symbol(:blech) end - + it "should raise when explicit return and block constrained" do - lambda do + lambda { @mock.should_receive(:fruit) do |colour| :strawberry end.and_return :apple - end.should raise_error(AmbiguousReturnError) + }.should raise_error(AmbiguousReturnError) end it "should ignore args on any args" do @@ -190,22 +182,18 @@ module Spec it "should fail on no args if any args received" do @mock.should_receive(:something).with(no_args()) - begin + lambda { @mock.something 1 - rescue MockExpectationError => e - e.message.should == "Mock 'test mock' expected :something with (no args) but received it with (1)" - end + }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (no args) but received it with (1)") end - + it "should fail when args are expected but none are received" do @mock.should_receive(:something).with(1) - begin + lambda { @mock.something - rescue MockExpectationError => e - e.message.should == "Mock 'test mock' expected :something with (1) but received it with (no args)" - end + }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (1) but received it with (no args)") end - + it "should yield 0 args to blocks that take a variable number of arguments" do @mock.should_receive(:yield_back).with(no_args()).once.and_yield a = nil @@ -213,7 +201,17 @@ module Spec a.should == [] @mock.rspec_verify end - + + it "should yield 0 args multiple times to blocks that take a variable number of arguments" do + @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield. + and_yield + a = nil + b = [] + @mock.yield_back {|*a| b << a} + b.should == [ [], [] ] + @mock.rspec_verify + end + it "should yield one arg to blocks that take a variable number of arguments" do @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99) a = nil @@ -221,7 +219,18 @@ module Spec a.should == [99] @mock.rspec_verify end - + + it "should yield one arg 3 times consecutively to blocks that take a variable number of arguments" do + @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99). + and_yield(43). + and_yield("something fruity") + a = nil + b = [] + @mock.yield_back {|*a| b << a} + b.should == [[99], [43], ["something fruity"]] + @mock.rspec_verify + end + it "should yield many args to blocks that take a variable number of arguments" do @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99, 27, "go") a = nil @@ -230,6 +239,17 @@ module Spec @mock.rspec_verify end + it "should yield many args 3 times consecutively to blocks that take a variable number of arguments" do + @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99, :green, "go"). + and_yield("wait", :amber). + and_yield("stop", 12, :red) + a = nil + b = [] + @mock.yield_back {|*a| b << a} + b.should == [[99, :green, "go"], ["wait", :amber], ["stop", 12, :red]] + @mock.rspec_verify + end + it "should yield single value" do @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99) a = nil @@ -237,7 +257,18 @@ module Spec a.should == 99 @mock.rspec_verify end - + + it "should yield single value 3 times consecutively" do + @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99). + and_yield(43). + and_yield("something fruity") + a = nil + b = [] + @mock.yield_back {|a| b << a} + b.should == [99, 43, "something fruity"] + @mock.rspec_verify + end + it "should yield two values" do @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup') a, b = nil @@ -246,23 +277,41 @@ module Spec b.should == 'zup' @mock.rspec_verify end - + + it "should yield two values 3 times consecutively" do + @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup'). + and_yield('not', 'down'). + and_yield(14, 65) + a, b = nil + c = [] + @mock.yield_back {|a,b| c << [a, b]} + c.should == [['wha', 'zup'], ['not', 'down'], [14, 65]] + @mock.rspec_verify + end + it "should fail when calling yielding method with wrong arity" do @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup') - begin + lambda { @mock.yield_back {|a|} - rescue MockExpectationError => e - e.message.should == "Mock 'test mock' yielded |\"wha\", \"zup\"| to block with arity of 1" - end + }.should raise_error(MockExpectationError, "Mock 'test mock' yielded |\"wha\", \"zup\"| to block with arity of 1") end - + + it "should fail when calling yielding method consecutively with wrong arity" do + @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup'). + and_yield('down'). + and_yield(14, 65) + lambda { + a, b = nil + c = [] + @mock.yield_back {|a,b| c << [a, b]} + }.should raise_error(MockExpectationError, "Mock 'test mock' yielded |\"down\"| to block with arity of 2") + end + it "should fail when calling yielding method without block" do @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup') - begin + lambda { @mock.yield_back - rescue MockExpectationError => e - e.message.should == "Mock 'test mock' asked to yield |\"wha\", \"zup\"| but no block was passed" - end + }.should raise_error(MockExpectationError, "Mock 'test mock' asked to yield |[\"wha\", \"zup\"]| but no block was passed") end it "should be able to mock send" do @@ -274,26 +323,23 @@ module Spec it "should be able to raise from method calling yielding mock" do @mock.should_receive(:yield_me).and_yield 44 - lambda do + lambda { @mock.yield_me do |x| raise "Bang" end - end.should raise_error(StandardError) - + }.should raise_error(StandardError, "Bang") + @mock.rspec_verify end - # TODO - this is failing, but not if you run the file w/ --reverse - weird!!!!!! - # specify "should clear expectations after verify" do - # @mock.should_receive(:foobar) - # @mock.foobar - # @mock.rspec_verify - # begin - # @mock.foobar - # rescue MockExpectationError => e - # e.message.should == "Mock 'test mock' received unexpected message :foobar with (no args)" - # end - # end + it "should clear expectations after verify" do + @mock.should_receive(:foobar) + @mock.foobar + @mock.rspec_verify + lambda { + @mock.foobar + }.should raise_error(MockExpectationError, "Mock 'test mock' received unexpected message :foobar with (no args)") + end it "should restore objects to their original state on rspec_reset" do mock = mock("this is a mock") @@ -302,6 +348,58 @@ module Spec mock.rspec_verify #should throw if reset didn't work end + it "should work even after method_missing starts raising NameErrors instead of NoMethodErrors" do + # Object#method_missing throws either NameErrors or NoMethodErrors. + # + # On a fresh ruby program Object#method_missing: + # * raises a NoMethodError when called directly + # * raises a NameError when called indirectly + # + # Once Object#method_missing has been called at least once (on any object) + # it starts behaving differently: + # * raises a NameError when called directly + # * raises a NameError when called indirectly + # + # There was a bug in Mock#method_missing that relied on the fact + # that calling Object#method_missing directly raises a NoMethodError. + # This example tests that the bug doesn't exist anymore. + + + # Ensures that method_missing always raises NameErrors. + a_method_that_doesnt_exist rescue + + + @mock.should_receive(:foobar) + @mock.foobar + @mock.rspec_verify + + lambda { @mock.foobar }.should_not raise_error(NameError) + lambda { @mock.foobar }.should raise_error(MockExpectationError) + end + + it "should temporarily replace a method stub on a mock" do + @mock.stub!(:msg).and_return(:stub_value) + @mock.should_receive(:msg).with(:arg).and_return(:mock_value) + @mock.msg(:arg).should equal(:mock_value) + @mock.msg.should equal(:stub_value) + @mock.msg.should equal(:stub_value) + @mock.rspec_verify + end + + it "should temporarily replace a method stub on a non-mock" do + non_mock = Object.new + non_mock.stub!(:msg).and_return(:stub_value) + non_mock.should_receive(:msg).with(:arg).and_return(:mock_value) + non_mock.msg(:arg).should equal(:mock_value) + non_mock.msg.should equal(:stub_value) + non_mock.msg.should equal(:stub_value) + non_mock.rspec_verify + end + + it "should assign stub return values" do + mock = Mock.new('name', :message => :response) + mock.message.should == :response + end end describe "a mock message receiving a block" do diff --git a/vendor/plugins/rspec/spec/spec/mocks/multiple_return_value_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/multiple_return_value_spec.rb index 6e082abba..3e26b73f4 100644 --- a/vendor/plugins/rspec/spec/spec/mocks/multiple_return_value_spec.rb +++ b/vendor/plugins/rspec/spec/spec/mocks/multiple_return_value_spec.rb @@ -67,7 +67,7 @@ module Spec describe "a Mock expectation with multiple return values specifying at_least less than the number of values" do before(:each) do @mock = Mock.new("mock") - @mock.should_receive(:message).at_least(:twice).with(:no_args).and_return(11, 22) + @mock.should_receive(:message).at_least(:twice).with(no_args).and_return(11, 22) end it "should use last return value for subsequent calls" do diff --git a/vendor/plugins/rspec/spec/spec/mocks/options_hash_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/options_hash_spec.rb index a1ec9ddf4..0bfab26d7 100644 --- a/vendor/plugins/rspec/spec/spec/mocks/options_hash_spec.rb +++ b/vendor/plugins/rspec/spec/spec/mocks/options_hash_spec.rb @@ -3,30 +3,42 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb' module Spec module Mocks describe "calling :should_receive with an options hash" do + it_should_behave_like "sandboxed rspec_options" + attr_reader :reporter, :example_group + before do + @reporter = ::Spec::Runner::Reporter.new(options) + @example_group = Class.new(::Spec::Example::ExampleGroup) do + plugin_mock_framework + describe("Some Examples") + end + reporter.add_example_group example_group + end + it "should report the file and line submitted with :expected_from" do - spec = Spec::DSL::Example.new "spec" do + example_definition = example_group.it "spec" do mock = Spec::Mocks::Mock.new("a mock") mock.should_receive(:message, :expected_from => "/path/to/blah.ext:37") mock.rspec_verify end - reporter = mock("reporter", :null_object => true) + example = example_group.new(example_definition) + reporter.should_receive(:example_finished) do |spec, error| error.backtrace.detect {|line| line =~ /\/path\/to\/blah.ext:37/}.should_not be_nil end - spec.run(reporter, nil, nil, nil, Object.new) + example.execute(options, {}) end it "should use the message supplied with :message" do - spec = Spec::DSL::Example.new "spec" do + example_definition = @example_group.it "spec" do mock = Spec::Mocks::Mock.new("a mock") mock.should_receive(:message, :message => "recebi nada") mock.rspec_verify end - reporter = mock("reporter", :null_object => true) - reporter.should_receive(:example_finished) do |spec, error| + example = @example_group.new(example_definition) + @reporter.should_receive(:example_finished) do |spec, error| error.message.should == "recebi nada" end - spec.run(reporter, nil, nil, nil, Object.new) + example.execute(@options, {}) end end end diff --git a/vendor/plugins/rspec/spec/spec/mocks/partial_mock_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/partial_mock_spec.rb index c45b9054c..d7e5944c4 100644 --- a/vendor/plugins/rspec/spec/spec/mocks/partial_mock_spec.rb +++ b/vendor/plugins/rspec/spec/spec/mocks/partial_mock_spec.rb @@ -6,14 +6,14 @@ module Spec before(:each) do @object = Object.new end - + it "should name the class in the failure message" do @object.should_receive(:foo) lambda do @object.rspec_verify end.should raise_error(Spec::Mocks::MockExpectationError, /Object/) end - + it "should not conflict with @options in the object" do @object.instance_eval { @options = Object.new } @object.should_receive(:blah) @@ -27,39 +27,39 @@ module Spec @object.rspec_verify end.should raise_error(Spec::Mocks::MockExpectationError) end - + it "should_not_receive should return a negative message expectation" do @object.should_not_receive(:foobar).should be_kind_of(NegativeMessageExpectation) end - + it "should_receive should mock out the method" do @object.should_receive(:foobar).with(:test_param).and_return(1) @object.foobar(:test_param).should equal(1) end - + it "should_receive should handle a hash" do @object.should_receive(:foobar).with(:key => "value").and_return(1) @object.foobar(:key => "value").should equal(1) end - + it "should_receive should handle an inner hash" do hash = {:a => {:key => "value"}} @object.should_receive(:foobar).with(:key => "value").and_return(1) @object.foobar(hash[:a]).should equal(1) end - + it "should_receive should return a message expectation" do @object.should_receive(:foobar).should be_kind_of(MessageExpectation) @object.foobar end - + it "should_receive should verify method was called" do @object.should_receive(:foobar).with(:test_param).and_return(1) lambda do @object.rspec_verify end.should raise_error(Spec::Mocks::MockExpectationError) end - + it "should_receive should also take a String argument" do @object.should_receive('foobar') @object.foobar @@ -80,5 +80,27 @@ module Spec end.should raise_error(Spec::Mocks::MockExpectationError, /NilClass.*expected :foobar with/) end end + + describe "Partially mocking an object that defines ==, after another mock has been defined" do + before(:each) do + stub("existing mock", :foo => :foo) + end + + class PartiallyMockedEquals + attr_reader :val + def initialize(val) + @val = val + end + + def ==(other) + @val == other.val + end + end + + it "should not raise an error when stubbing the object" do + o = PartiallyMockedEquals.new :foo + lambda { o.stub!(:bar) }.should_not raise_error(NoMethodError) + end + end end end diff --git a/vendor/plugins/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb index 2d631bde5..6de0a58f4 100644 --- a/vendor/plugins/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +++ b/vendor/plugins/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb @@ -5,6 +5,7 @@ module Spec describe "mock argument constraints", :shared => true do before(:each) do @mock = Mock.new("test mock") + Kernel.stub!(:warn) end after(:each) do @@ -49,6 +50,11 @@ module Spec @mock.should_receive(:random_call).with(:any_args) @mock.random_call("a string") end + + it "should match no args against no_args" do + @mock.should_receive(:random_call).with(:no_args) + @mock.random_call + end end describe Methods, "handling argument constraints" do diff --git a/vendor/plugins/rspec/spec/spec/mocks/stub_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/stub_spec.rb index dc6fff89b..d6e23d71e 100644 --- a/vendor/plugins/rspec/spec/spec/mocks/stub_spec.rb +++ b/vendor/plugins/rspec/spec/spec/mocks/stub_spec.rb @@ -13,112 +13,74 @@ module Spec :original_value end end - @obj = @class.new + @instance = @class.new end - it "should allow for a mock expectation to temporarily replace a method stub on a mock" do - mock = Spec::Mocks::Mock.new("a mock") - mock.stub!(:msg).and_return(:stub_value) - mock.should_receive(:msg).with(:arg).and_return(:mock_value) - mock.msg(:arg).should equal(:mock_value) - mock.msg.should equal(:stub_value) - mock.msg.should equal(:stub_value) - mock.rspec_verify - end - - it "should allow for a mock expectation to temporarily replace a method stub on a non-mock" do - @obj.stub!(:msg).and_return(:stub_value) - @obj.should_receive(:msg).with(:arg).and_return(:mock_value) - @obj.msg(:arg).should equal(:mock_value) - @obj.msg.should equal(:stub_value) - @obj.msg.should equal(:stub_value) - @obj.rspec_verify + it "should return expected value when expected message is received" do + @instance.stub!(:msg).and_return(:return_value) + @instance.msg.should equal(:return_value) + @instance.rspec_verify end - it "should ignore when expected message is not received" do - @obj.stub!(:msg) + it "should ignore when expected message is received" do + @instance.stub!(:msg) + @instance.msg lambda do - @obj.rspec_verify + @instance.rspec_verify end.should_not raise_error end - - it "should clear itself on rspec_verify" do - @obj.stub!(:this_should_go).and_return(:blah) - @obj.this_should_go.should == :blah - @obj.rspec_verify - lambda do - @obj.this_should_go - end.should raise_error - end - - it "should ignore when expected message is received" do - @obj.stub!(:msg) - @obj.msg - @obj.rspec_verify - end it "should ignore when message is received with args" do - @obj.stub!(:msg) - @obj.msg(:an_arg) - @obj.rspec_verify + @instance.stub!(:msg) + @instance.msg(:an_arg) + lambda do + @instance.rspec_verify + end.should_not raise_error end - it "should not support with" do + it "should ignore when expected message is not received" do + @instance.stub!(:msg) lambda do - Spec::Mocks::Mock.new("a mock").stub!(:msg).with(:arg) - end.should raise_error(NoMethodError) + @instance.rspec_verify + end.should_not raise_error end - it "should return expected value when expected message is received" do - @obj.stub!(:msg).and_return(:return_value) - @obj.msg.should equal(:return_value) - @obj.rspec_verify + it "should clear itself when verified" do + @instance.stub!(:this_should_go).and_return(:blah) + @instance.this_should_go.should == :blah + @instance.rspec_verify + lambda do + @instance.this_should_go + end.should raise_error(NameError) end it "should return values in order to consecutive calls" do return_values = ["1",2,Object.new] - @obj.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2]) - @obj.msg.should == return_values[0] - @obj.msg.should == return_values[1] - @obj.msg.should == return_values[2] + @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2]) + @instance.msg.should == return_values[0] + @instance.msg.should == return_values[1] + @instance.msg.should == return_values[2] end it "should keep returning last value in consecutive calls" do return_values = ["1",2,Object.new] - @obj.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2]) - @obj.msg.should == return_values[0] - @obj.msg.should == return_values[1] - @obj.msg.should == return_values[2] - @obj.msg.should == return_values[2] - @obj.msg.should == return_values[2] - end - - it "should revert to original instance method if existed" do - @obj.existing_instance_method.should equal(:original_value) - @obj.stub!(:existing_instance_method).and_return(:mock_value) - @obj.existing_instance_method.should equal(:mock_value) - @obj.rspec_verify - # TODO JRUBY: This causes JRuby to fail with: - # NativeException in 'Stub should revert to original instance method if existed' - # java.lang.ArrayIndexOutOfBoundsException: 0 - # org.jruby.internal.runtime.methods.IterateCallable.internalCall(IterateCallable.java:63) - # org.jruby.internal.runtime.methods.AbstractCallable.call(AbstractCallable.java:64) - # org.jruby.runtime.ThreadContext.yieldInternal(ThreadContext.java:574) - # org.jruby.runtime.ThreadContext.yieldSpecificBlock(ThreadContext.java:549) - # org.jruby.runtime.Block.call(Block.java:158) - # org.jruby.RubyProc.call(RubyProc.java:118) - # org.jruby.internal.runtime.methods.ProcMethod.internalCall(ProcMethod.java:69) - # org.jruby.internal.runtime.methods.AbstractMethod.call(AbstractMethod.java:58) - # org.jruby.RubyObject.callMethod(RubyObject.java:379) - # org.jruby.RubyObject.callMethod(RubyObject.java:331) - # org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:472) - # org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:462) - # org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:390) - # org.jruby.evaluator.EvaluationState.eval(EvaluationState.java:133) - @obj.existing_instance_method.should equal(:original_value) + @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2]) + @instance.msg.should == return_values[0] + @instance.msg.should == return_values[1] + @instance.msg.should == return_values[2] + @instance.msg.should == return_values[2] + @instance.msg.should == return_values[2] + end + + it "should revert to original instance method if there is one" do + @instance.existing_instance_method.should equal(:original_value) + @instance.stub!(:existing_instance_method).and_return(:mock_value) + @instance.existing_instance_method.should equal(:mock_value) + @instance.rspec_verify + @instance.existing_instance_method.should equal(:original_value) end - it "should revert to original class method if existed" do + it "should revert to original class method if there is one" do @class.existing_class_method.should equal(:original_value) @class.stub!(:existing_class_method).and_return(:mock_value) @class.existing_class_method.should equal(:mock_value) @@ -126,34 +88,94 @@ module Spec @class.existing_class_method.should equal(:original_value) end - it "should clear itself on rspec_verify" do - @obj.stub!(:this_should_go).and_return(:blah) - @obj.this_should_go.should == :blah - @obj.rspec_verify - lambda do - @obj.this_should_go - end.should raise_error + it "should yield a specified object" do + @instance.stub!(:method_that_yields).and_yield(:yielded_obj) + current_value = :value_before + @instance.method_that_yields {|val| current_value = val} + current_value.should == :yielded_obj + @instance.rspec_verify + end + + it "should yield multiple times with multiple calls to and_yield" do + @instance.stub!(:method_that_yields_multiple_times).and_yield(:yielded_value). + and_yield(:another_value) + current_value = [] + @instance.method_that_yields_multiple_times {|val| current_value << val} + current_value.should == [:yielded_value, :another_value] + @instance.rspec_verify end - it "should support yielding" do - @obj.stub!(:method_that_yields).and_yield(:yielded_value) - current_value = :value_before - @obj.method_that_yields {|val| current_value = val} - current_value.should == :yielded_value - @obj.rspec_verify + it "should yield a specified object and return another specified object" do + yielded_obj = mock("my mock") + yielded_obj.should_receive(:foo).with(:bar) + @instance.stub!(:method_that_yields_and_returns).and_yield(yielded_obj).and_return(:baz) + @instance.method_that_yields_and_returns { |o| o.foo :bar }.should == :baz end it "should throw when told to" do - @mock.stub!(:something).and_throw(:blech) + @mock.stub!(:something).and_throw(:up) lambda do @mock.something - end.should throw_symbol(:blech) + end.should throw_symbol(:up) end - it "should support overriding w/ a new stub" do + it "should override a pre-existing stub" do @stub.stub!(:existing_instance_method).and_return(:updated_stub_value) @stub.existing_instance_method.should == :updated_stub_value end + + it "should limit " do + @stub.stub!(:foo).with("bar") + @stub.should_receive(:foo).with("baz") + @stub.foo("bar") + @stub.foo("baz") + end + end + + describe "A method stub with args" do + before(:each) do + @stub = Object.new + @stub.stub!(:foo).with("bar") + end + + it "should not complain if not called" do + end + + it "should not complain if called with arg" do + @stub.foo("bar") + end + + it "should complain if called with no arg" do + lambda do + @stub.foo + end.should raise_error + end + + it "should complain if called with other arg" do + lambda do + @stub.foo("other") + end.should raise_error + end + + it "should not complain if also mocked w/ different args" do + @stub.should_receive(:foo).with("baz") + @stub.foo("bar") + @stub.foo("baz") + end + + it "should complain if also mocked w/ different args AND called w/ a 3rd set of args" do + @stub.should_receive(:foo).with("baz") + @stub.foo("bar") + @stub.foo("baz") + lambda do + @stub.foo("other") + end.should raise_error + end + + it "should support options" do + @stub.stub!(:foo, :expected_from => "bar") + end end + end end diff --git a/vendor/plugins/rspec/spec/spec/package/bin_spec_spec.rb b/vendor/plugins/rspec/spec/spec/package/bin_spec_spec.rb index 6eac5e8cb..44bfd96a0 100644 --- a/vendor/plugins/rspec/spec/spec/package/bin_spec_spec.rb +++ b/vendor/plugins/rspec/spec/spec/package/bin_spec_spec.rb @@ -1,12 +1,14 @@ -require "#{File.dirname(__FILE__)}/../../spec_helper" +require File.dirname(__FILE__) + '/../../spec_helper' +require File.dirname(__FILE__) + '/../../ruby_forker' describe "The bin/spec script" do + include RubyForker + it "should have no warnings" do + pending "Hangs on JRuby" if PLATFORM =~ /java/ spec_path = "#{File.dirname(__FILE__)}/../../../bin/spec" - output = nil - IO.popen("ruby -w #{spec_path} --help 2>&1") do |io| - output = io.read - end + + output = ruby "-w #{spec_path} --help 2>&1" output.should_not =~ /warning/n end end diff --git a/vendor/plugins/rspec/spec/spec/runner/behaviour_runner_spec.rb b/vendor/plugins/rspec/spec/spec/runner/behaviour_runner_spec.rb deleted file mode 100644 index ff4890633..000000000 --- a/vendor/plugins/rspec/spec/spec/runner/behaviour_runner_spec.rb +++ /dev/null @@ -1,229 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Runner - describe BehaviourRunner, "#add_behaviour affecting passed in behaviour" do - before do - @err = StringIO.new('') - @out = StringIO.new('') - @options = Options.new(@err,@out) - @runner = BehaviourRunner.new(@options) - class << @runner - attr_reader :behaviours - end - - @behaviour = ::Spec::DSL::Behaviour.new("A Behaviour") do - it "runs 1" do - end - it "runs 2" do - end - end - end - - it "removes examples not selected from Behaviour when options.examples is set" do - @options.examples << "A Behaviour runs 1" - - @behaviour.number_of_examples.should == 2 - - @runner.add_behaviour @behaviour - @behaviour.number_of_examples.should == 1 - @behaviour.examples.first.send(:description).should == "runs 1" - end - - it "keeps all examples when options.examples is nil" do - @options.examples = nil - @behaviour.number_of_examples.should == 2 - - @runner.add_behaviour @behaviour - @behaviour.number_of_examples.should == 2 - @behaviour.examples.collect {|example| example.send(:description) }.should == ['runs 1', 'runs 2'] - end - - it "keeps all examples when options.examples is empty" do - @options.examples = [] - @behaviour.number_of_examples.should == 2 - - @runner.add_behaviour @behaviour - @behaviour.number_of_examples.should == 2 - @behaviour.examples.collect {|example| example.send(:description) }.should == ['runs 1', 'runs 2'] - end - end - - describe BehaviourRunner, "#add_behaviour affecting behaviours" do - before do - @err = StringIO.new('') - @out = StringIO.new('') - @options = Options.new(@err,@out) - @runner = BehaviourRunner.new(@options) - class << @runner - attr_reader :behaviours - end - end - - it "adds behaviour when behaviour has examples and is not shared" do - @behaviour = ::Spec::DSL::Behaviour.new("A Behaviour") do - it "uses this behaviour" do - end - end - - @behaviour.should_not be_shared - @behaviour.number_of_examples.should be > 0 - @runner.add_behaviour @behaviour - - @runner.behaviours.length.should == 1 - end - - it "does not add the behaviour when number_of_examples is 0" do - @behaviour = ::Spec::DSL::Behaviour.new("A Behaviour") do - end - @behaviour.number_of_examples.should == 0 - @runner.add_behaviour @behaviour - - @runner.behaviours.should be_empty - end - - it "does not add the behaviour when behaviour is shared" do - @behaviour = ::Spec::DSL::Behaviour.new("A Behaviour", :shared => true) do - it "does not use this behaviour" do - end - end - @behaviour.should be_shared - @runner.add_behaviour @behaviour - - @runner.behaviours.should be_empty - end - end - - describe BehaviourRunner do - before do - @err = StringIO.new('') - @out = StringIO.new('') - @options = Options.new(@err,@out) - end - - it "should only run behaviours with at least one example" do - desired_behaviour = mock("desired behaviour") - desired_behaviour.should_receive(:run) - desired_behaviour.should_receive(:retain_examples_matching!) - desired_behaviour.should_receive(:number_of_examples).twice.and_return(1) - desired_behaviour.should_receive(:shared?).and_return(false) - desired_behaviour.should_receive(:set_sequence_numbers).with(0, anything) - - other_behaviour = mock("other behaviour") - other_behaviour.should_receive(:run).never - other_behaviour.should_receive(:retain_examples_matching!) - other_behaviour.should_receive(:number_of_examples).and_return(0) - - reporter = mock("reporter") - @options.reporter = reporter - @options.examples = ["desired behaviour legal spec"] - - runner = Spec::Runner::BehaviourRunner.new(@options) - runner.add_behaviour(desired_behaviour) - runner.add_behaviour(other_behaviour) - reporter.should_receive(:start) - reporter.should_receive(:end) - reporter.should_receive(:dump) - runner.run([], false) - end - - it "should dump even if Interrupt exception is occurred" do - behaviour = Spec::DSL::Behaviour.new("behaviour") do - it "no error" do - end - - it "should interrupt" do - raise Interrupt - end - end - - reporter = mock("reporter") - reporter.should_receive(:start) - reporter.should_receive(:add_behaviour) - reporter.should_receive(:example_started).twice - reporter.should_receive(:example_finished).twice - reporter.should_receive(:rspec_verify) - reporter.should_receive(:rspec_reset) - reporter.should_receive(:end) - reporter.should_receive(:dump) - - @options.reporter = reporter - runner = Spec::Runner::BehaviourRunner.new(@options) - runner.add_behaviour(behaviour) - runner.run([], false) - end - - it "should heckle when options have heckle_runner" do - behaviour = mock("behaviour", :null_object => true) - behaviour.should_receive(:number_of_examples).twice.and_return(1) - behaviour.should_receive(:run).and_return(0) - behaviour.should_receive(:shared?).and_return(false) - - reporter = mock("reporter") - reporter.should_receive(:start).with(1) - reporter.should_receive(:end) - reporter.should_receive(:dump).and_return(0) - - heckle_runner = mock("heckle_runner") - heckle_runner.should_receive(:heckle_with) - - @options.reporter = reporter - @options.heckle_runner = heckle_runner - - runner = Spec::Runner::BehaviourRunner.new(@options) - runner.add_behaviour(behaviour) - runner.run([], false) - end - - it "should run examples backwards if options.reverse is true" do - @options.reverse = true - - reporter = mock("reporter") - reporter.should_receive(:start).with(3) - reporter.should_receive(:end) - reporter.should_receive(:dump).and_return(0) - @options.reporter = reporter - - runner = Spec::Runner::BehaviourRunner.new(@options) - b1 = mock("b1") - b1.should_receive(:number_of_examples).twice.and_return(1) - b1.should_receive(:shared?).and_return(false) - b1.should_receive(:set_sequence_numbers).with(12, true).and_return(18) - - b2 = mock("b2") - b2.should_receive(:number_of_examples).twice.and_return(2) - b2.should_receive(:shared?).and_return(false) - b2.should_receive(:set_sequence_numbers).with(0, true).and_return(12) - b2.should_receive(:run) do - b1.should_receive(:run) - end - - runner.add_behaviour(b1) - runner.add_behaviour(b2) - - runner.run([], false) - end - - it "should yield global configuration" do - Spec::Runner.configure do |config| - config.should equal(Spec::Runner.configuration) - end - end - - it "should pass its Description to the reporter" do - behaviour = Spec::DSL::Behaviour.new("behaviour") do - it "should" do - end - end - - reporter = mock("reporter", :null_object => true) - reporter.should_receive(:add_behaviour).with(an_instance_of(Spec::DSL::Description)) - - @options.reporter = reporter - runner = Spec::Runner::BehaviourRunner.new(@options) - runner.add_behaviour(behaviour) - runner.run([], false) - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/runner/command_line_spec.rb b/vendor/plugins/rspec/spec/spec/runner/command_line_spec.rb index d78626399..8b9e912a7 100644 --- a/vendor/plugins/rspec/spec/spec/runner/command_line_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/command_line_spec.rb @@ -1,33 +1,146 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb' -describe "CommandLine" do - it "should run directory" do - file = File.dirname(__FILE__) + '/../../../examples' - err = StringIO.new - out = StringIO.new - Spec::Runner::CommandLine.run([file], err, out, false, true) - - out.rewind - out.read.should =~ /78 examples, 0 failures, 3 pending/n - end +module Spec + module Runner + describe CommandLine, ".run" do + it_should_behave_like "sandboxed rspec_options" + attr_reader :options, :err, :out + before do + @err = options.error_stream + @out = options.output_stream + end - it "should run file" do - file = File.dirname(__FILE__) + '/../../../failing_examples/predicate_example.rb' - err = StringIO.new - out = StringIO.new - Spec::Runner::CommandLine.run([file], err, out, false, true) - - out.rewind - out.read.should =~ /2 examples, 1 failure/n - end + it "should run directory" do + file = File.dirname(__FILE__) + '/../../../examples/pure' + Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out)) + + @out.rewind + @out.read.should =~ /\d+ examples, 0 failures, 3 pending/n + end + + it "should run file" do + file = File.dirname(__FILE__) + '/../../../failing_examples/predicate_example.rb' + Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out)) + + @out.rewind + @out.read.should =~ /2 examples, 1 failure/n + end + + it "should raise when file does not exist" do + file = File.dirname(__FILE__) + '/doesntexist' + + lambda { + Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out)) + }.should raise_error + end + + it "should return true when in --generate-options mode" do + Spec::Runner::CommandLine.run( + OptionParser.parse(['--generate-options', '/dev/null'], @err, @out) + ).should be_true + end + + it "should dump even if Interrupt exception is occurred" do + example_group = Class.new(::Spec::Example::ExampleGroup) do + describe("example_group") + it "no error" do + end + + it "should interrupt" do + raise Interrupt, "I'm interrupting" + end + end + + options = ::Spec::Runner::Options.new(@err, @out) + ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) + options.reporter.should_receive(:dump) + options.add_example_group(example_group) + + Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) + end + + it "should heckle when options have heckle_runner" do + example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do + it "no error" do + end + end + options = ::Spec::Runner::Options.new(@err, @out) + ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) + options.add_example_group example_group + + heckle_runner = mock("heckle_runner") + heckle_runner.should_receive(:heckle_with) + $rspec_mocks.__send__(:mocks).delete(heckle_runner) + + options.heckle_runner = heckle_runner + options.add_example_group(example_group) + + Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) + heckle_runner.rspec_verify + end + + it "should run examples backwards if options.reverse is true" do + options = ::Spec::Runner::Options.new(@err, @out) + ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) + options.reverse = true + + b1 = Class.new(Spec::Example::ExampleGroup) + b2 = Class.new(Spec::Example::ExampleGroup) + + b2.should_receive(:run).ordered + b1.should_receive(:run).ordered + + options.add_example_group(b1) + options.add_example_group(b2) + + Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) + end + + it "should pass its ExampleGroup to the reporter" do + example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do + it "should" do + end + end + options = ::Spec::Runner::Options.new(@err, @out) + options.add_example_group(example_group) + + ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) + options.reporter.should_receive(:add_example_group).with(example_group) + + Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) + end + + it "runs only selected Examples when options.examples is set" do + options = ::Spec::Runner::Options.new(@err, @out) + ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) + + options.examples << "example_group should" + should_has_run = false + should_not_has_run = false + example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do + it "should" do + should_has_run = true + end + it "should not" do + should_not_has_run = true + end + end + + options.reporter.should_receive(:add_example_group).with(example_group) + + options.add_example_group example_group + Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) - it "should raise when file does not exist" do - file = File.dirname(__FILE__) + '/doesntexist' - err = StringIO.new - out = StringIO.new + should_has_run.should be_true + should_not_has_run.should be_false + end - lambda { - Spec::Runner::CommandLine.run([file], err, out, false, true) - }.should raise_error + it "sets Spec.run to true" do + ::Spec.run = false + ::Spec.should_not be_run + Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) + ::Spec.should be_run + end + end end -end +end
\ No newline at end of file diff --git a/vendor/plugins/rspec/spec/spec/runner/context_matching_spec.rb b/vendor/plugins/rspec/spec/spec/runner/context_matching_spec.rb deleted file mode 100644 index ad8017b64..000000000 --- a/vendor/plugins/rspec/spec/spec/runner/context_matching_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module DSL - describe Behaviour do - - before(:each) do - @formatter = Spec::Mocks::Mock.new("formatter") - @behaviour = Behaviour.new("behaviour") {} - end - - it "should retain examples that don't match" do - @behaviour.it("example1") {} - @behaviour.it("example2") {} - @behaviour.retain_examples_matching!(["behaviour"]) - @behaviour.number_of_examples.should == 2 - end - - it "should remove examples that match" do - @behaviour.it("example1") {} - @behaviour.it("example2") {} - @behaviour.retain_examples_matching!(["behaviour example1"]) - @behaviour.number_of_examples.should == 1 - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/runner/drb_command_line_spec.rb b/vendor/plugins/rspec/spec/spec/runner/drb_command_line_spec.rb index d2d68499d..760ec37a9 100644 --- a/vendor/plugins/rspec/spec/spec/runner/drb_command_line_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/drb_command_line_spec.rb @@ -3,82 +3,90 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb' module Spec module Runner describe DrbCommandLine, "without running local server" do - unless Config::CONFIG['ruby_install_name'] == 'jruby' it "should print error when there is no running local server" do err = StringIO.new out = StringIO.new - DrbCommandLine.run(['--version'], err, out, false) - + DrbCommandLine.run(OptionParser.parse(['--version'], err, out)) + err.rewind err.read.should =~ /No server is running/ end end end - describe DrbCommandLine, "with local server" do + class DrbCommandLineSpec < ::Spec::Example::ExampleGroup + describe DrbCommandLine, "with local server" - unless Config::CONFIG['ruby_install_name'] == 'jruby' + class CommandLineForSpec + def self.run(argv, stderr, stdout) + exit Spec::Runner::CommandLine.run(OptionParser.parse(argv, stderr, stdout)) + end + end + + unless Config::CONFIG['ruby_install_name'] == 'jruby' before(:all) do - DRb.start_service("druby://localhost:8989", Spec::Runner::CommandLine) - $drb_example_file_counter = 0 + DRb.start_service("druby://localhost:8989", CommandLineForSpec) + @@drb_example_file_counter = 0 end - + before(:each) do create_dummy_spec_file - $drb_example_file_counter = $drb_example_file_counter + 1 + @@drb_example_file_counter = @@drb_example_file_counter + 1 end - + after(:each) do File.delete(@dummy_spec_filename) end - + after(:all) do - DRb.stop_service + DRb.stop_service end it "should run against local server" do out = run_spec_via_druby(['--version']) out.should =~ /RSpec/n end - + it "should output green colorized text when running with --colour option" do out = run_spec_via_druby(["--colour", @dummy_spec_filename]) out.should =~ /\e\[32m/n end - - it "should output red colorized text when running with -c option" do + + it "should output red colorized text when running with -c option" do out = run_spec_via_druby(["-c", @dummy_spec_filename]) out.should =~ /\e\[31m/n end def create_dummy_spec_file - @dummy_spec_filename = File.expand_path(File.dirname(__FILE__)) + "/_dummy_spec#{$drb_example_file_counter}.rb" + @dummy_spec_filename = File.expand_path(File.dirname(__FILE__)) + "/_dummy_spec#{@@drb_example_file_counter}.rb" File.open(@dummy_spec_filename, 'w') do |f| f.write %{ - describe "DUMMY CONTEXT for 'DrbCommandLine with -c option'" do - it "should be output with green bar" do - true.should be_true - end + describe "DUMMY CONTEXT for 'DrbCommandLine with -c option'" do + it "should be output with green bar" do + true.should be_true + end - it "should be output with red bar" do - violated("I want to see a red bar!") - end - end - } + it "should be output with red bar" do + violated("I want to see a red bar!") + end + end + } end end - - def run_spec_via_druby(args) + + def run_spec_via_druby(argv) err, out = StringIO.new, StringIO.new out.instance_eval do def tty?; true end end - Spec::Runner::DrbCommandLine.run(args, err, out, false, true) + options = ::Spec::Runner::Options.new(err, out) + options.argv = argv + Spec::Runner::DrbCommandLine.run(options) out.rewind; out.read end end - + end end end diff --git a/vendor/plugins/rspec/spec/spec/runner/extensions/bug_report_10577_spec.rb b/vendor/plugins/rspec/spec/spec/runner/extensions/bug_report_10577_spec.rb deleted file mode 100644 index c4da69f4d..000000000 --- a/vendor/plugins/rspec/spec/spec/runner/extensions/bug_report_10577_spec.rb +++ /dev/null @@ -1,35 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' -require 'delegate' - -module Bug10577 - class OCI8 - def describe(name) - "Hello, #{name}" - end - - def something(name) - "Something, #{name}" - end - end - - class OCI8AutoRecover < DelegateClass(OCI8) - def initialize - @connection = OCI8.new - super(@connection) - end - end - - class OCI8AutoRecover - def describe(name) - @connection.describe(name) - end - end - - describe Kernel do - it "should not mask a delegate class' describe method" do - bugger = OCI8AutoRecover.new - bugger.describe('aslak').should == "Hello, aslak" - bugger.something('aslak').should == "Something, aslak" - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/runner/extensions/kernel_spec.rb b/vendor/plugins/rspec/spec/spec/runner/extensions/kernel_spec.rb deleted file mode 100644 index 6b253a06a..000000000 --- a/vendor/plugins/rspec/spec/spec/runner/extensions/kernel_spec.rb +++ /dev/null @@ -1,36 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' - -describe Kernel, "when extended by rspec" do - it "should respond to :describe" do - Object.new.should respond_to(:describe) - Object.new.should respond_to(:context) - end -end - -describe Kernel, " when creating behaviours with describe" do - - it "should fail when no block given" do - lambda { describe "foo" }.should raise_error(ArgumentError) - end - - it "should fail when no description given" do - lambda { describe do; end }.should raise_error(ArgumentError) - end -end - -describe Kernel, "#respond_to" do - before(:each) do - @kernel_impersonator = Class.new do - include Kernel - end.new - end - - it "should return a Spec::Matchers::RespondTo" do - @kernel_impersonator.respond_to.should be_an_instance_of(Spec::Matchers::RespondTo) - end - - it "should pass the submitted names to the RespondTo instance" do - Spec::Matchers::RespondTo.should_receive(:new).with(:a,'b','c?') - @kernel_impersonator.respond_to(:a,'b','c?') - end -end diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb deleted file mode 100644 index de3246c54..000000000 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +++ /dev/null @@ -1,40 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' - -module Spec - module Runner - module Formatter - describe "FailingBehavioursFormatter" do - before(:each) do - @io = StringIO.new - @formatter = FailingBehavioursFormatter.new(@io) - end - - def description(s) - Spec::DSL::Description.new(s) - end - - it "should add example name for each failure" do - @formatter.add_behaviour(description("b 1")) - @formatter.example_failed("e 1", nil, Reporter::Failure.new(nil, RuntimeError.new)) - @formatter.add_behaviour(description("b 2")) - @formatter.example_failed("e 2", nil, Reporter::Failure.new(nil, RuntimeError.new)) - @formatter.example_failed("e 3", nil, Reporter::Failure.new(nil, RuntimeError.new)) - @io.string.should eql(<<-EOF -b 1 -b 2 -EOF -) - end - - it "should remove druby url, which is used by Spec::Distributed" do - @formatter.add_behaviour("something something (druby://99.99.99.99:99)") - @formatter.example_failed("e 1", nil, Reporter::Failure.new(nil, RuntimeError.new)) - @io.string.should eql(<<-EOF -something something -EOF -) - end - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb index 396e4b16e..fda64f95f 100644 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb @@ -1,24 +1,29 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' +require File.dirname(__FILE__) + '/../../../spec_helper' +require 'spec/runner/formatter/failing_examples_formatter' module Spec module Runner module Formatter - describe "FailingExamplesFormatter" do + describe FailingExamplesFormatter do before(:each) do @io = StringIO.new - @formatter = FailingExamplesFormatter.new(@io) + options = mock('options') + @formatter = FailingExamplesFormatter.new(options, @io) end it "should add example name for each failure" do - @formatter.add_behaviour("b 1") - @formatter.example_failed(DSL::Example.new("e 1"), nil, Reporter::Failure.new(nil, RuntimeError.new)) - @formatter.add_behaviour("b 2") - @formatter.example_failed(DSL::Example.new("e 2"), nil, Reporter::Failure.new(nil, RuntimeError.new)) - @formatter.example_failed(DSL::Example.new("e 3"), nil, Reporter::Failure.new(nil, RuntimeError.new)) + example_group_1 = Class.new(ExampleGroup).describe("A") + example_group_2 = Class.new(example_group_1).describe("B") + + @formatter.add_example_group(example_group_1) + @formatter.example_failed(example_group_1.it("a1"){}, nil, Reporter::Failure.new(nil, RuntimeError.new)) + @formatter.add_example_group(example_group_2) + @formatter.example_failed(example_group_2.it("b2"){}, nil, Reporter::Failure.new(nil, RuntimeError.new)) + @formatter.example_failed(example_group_2.it("b3"){}, nil, Reporter::Failure.new(nil, RuntimeError.new)) @io.string.should eql(<<-EOF -b 1 e 1 -b 2 e 2 -b 2 e 3 +A a1 +A B b2 +A B b3 EOF ) end diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html index c6976ca5f..9cc458fdb 100644 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html +++ b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html @@ -1,12 +1,11 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!DOCTYPE html - PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>RSpec results</title> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Expires" content="-1" /> <meta http-equiv="Pragma" content="no-cache" /> <style type="text/css"> @@ -74,7 +73,7 @@ function makeYellow(element_id) { font-size: 1.2em; } -.behaviour { +.example_group { margin: 0 10px 5px; background: #fff; } @@ -177,21 +176,21 @@ a { </div> <div class="results"> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_1">Mocker</dt> + <dt id="example_group_1">Mocker</dt> <script type="text/javascript">moveProgressBar('5.8');</script> <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd> <script type="text/javascript">makeRed('rspec-header');</script> - <script type="text/javascript">makeRed('behaviour_1');</script> + <script type="text/javascript">makeRed('example_group_1');</script> <script type="text/javascript">moveProgressBar('11.7');</script> <dd class="spec failed"> <span class="failed_spec_name">should fail when expected message not received</span> <div class="failure" id="failure_1"> <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div> <div class="backtrace"><pre>./failing_examples/mocking_example.rb:13: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> +./spec/spec/runner/formatter/html_formatter_spec.rb:24: +./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div> <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should fail when expected message not received</span><span class="punct">"</span> <span class="keyword">do</span> <span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">poke me</span><span class="punct">")</span> <span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span> @@ -205,8 +204,8 @@ a { <div class="failure" id="failure_2"> <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div> <div class="backtrace"><pre>./failing_examples/mocking_example.rb:22: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> +./spec/spec/runner/formatter/html_formatter_spec.rb:24: +./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div> <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span> <span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span> <span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span> @@ -220,8 +219,8 @@ a { <div class="failure" id="failure_3"> <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div> <div class="backtrace"><pre>./failing_examples/mocking_example.rb:28: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> +./spec/spec/runner/formatter/html_formatter_spec.rb:24: +./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div> <pre class="ruby"><code><span class="linenum">26</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">"</span> <span class="keyword">do</span> <span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">don't talk to me</span><span class="punct">")</span> <span class="offending"><span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span> @@ -235,8 +234,8 @@ a { <div class="failure" id="failure_4"> <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div> <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> +./spec/spec/runner/formatter/html_formatter_spec.rb:24: +./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div> <pre class="ruby"><code><span class="linenum">31</span> <span class="linenum">32</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">has a bug we need to fix</span><span class="punct">"</span> <span class="keyword">do</span> <span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">"</span><span class="string">here is the bug</span><span class="punct">"</span> <span class="keyword">do</span></span> @@ -246,10 +245,10 @@ a { </dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_2">Running specs with --diff</dt> - <script type="text/javascript">makeRed('behaviour_2');</script> + <dt id="example_group_2">Running specs with --diff</dt> + <script type="text/javascript">makeRed('example_group_2');</script> <script type="text/javascript">moveProgressBar('35.2');</script> <dd class="spec failed"> <span class="failed_spec_name">should print diff of different strings</span> @@ -264,8 +263,8 @@ Diff: framework for Ruby </pre></div> <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:13: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> +./spec/spec/runner/formatter/html_formatter_spec.rb:24: +./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div> <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span> <span class="linenum">12</span><span class="constant">EOF</span> <span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span> @@ -294,8 +293,8 @@ Diff: > </pre></div> <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:34: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> +./spec/spec/runner/formatter/html_formatter_spec.rb:24: +./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div> <pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">giraffe</span><span class="punct">"</span> <span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">tortoise</span><span class="punct">"</span> <span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span> @@ -305,16 +304,16 @@ Diff: </dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_3">A consumer of a stub</dt> + <dt id="example_group_3">A consumer of a stub</dt> <script type="text/javascript">moveProgressBar('47.0');</script> <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_4">A stubbed method on a class</dt> + <dt id="example_group_4">A stubbed method on a class</dt> <script type="text/javascript">moveProgressBar('52.9');</script> <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd> <script type="text/javascript">moveProgressBar('58.8');</script> @@ -323,9 +322,9 @@ Diff: <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_5">A mock</dt> + <dt id="example_group_5">A mock</dt> <script type="text/javascript">moveProgressBar('70.5');</script> <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd> <script type="text/javascript">moveProgressBar('76.4');</script> @@ -334,28 +333,28 @@ Diff: <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_6">pending example (using pending method)</dt> - <script type="text/javascript">makeYellow('behaviour_6');</script> + <dt id="example_group_6">pending example (using pending method)</dt> + <script type="text/javascript">makeYellow('example_group_6');</script> <script type="text/javascript">moveProgressBar('88.2');</script> - <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason"</span></dd> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_7">pending example (with no block)</dt> - <script type="text/javascript">makeYellow('behaviour_7');</script> + <dt id="example_group_7">pending example (with no block)</dt> + <script type="text/javascript">makeYellow('example_group_7');</script> <script type="text/javascript">moveProgressBar('94.1');</script> - <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented"</span></dd> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_8">pending example (with block for pending)</dt> - <script type="text/javascript">makeYellow('behaviour_8');</script> + <dt id="example_group_8">pending example (with block for pending)</dt> + <script type="text/javascript">makeYellow('example_group_8');</script> <script type="text/javascript">moveProgressBar('100.0');</script> - <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason"</span></dd> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> </dl> </div> <script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script> diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html index 4f399d505..8bf1ed9cd 100644 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +++ b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html @@ -1,12 +1,11 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!DOCTYPE html - PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>RSpec results</title> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Expires" content="-1" /> <meta http-equiv="Pragma" content="no-cache" /> <style type="text/css"> @@ -19,7 +18,6 @@ </style> </head> <body> - <div class="rspec-report"> <script type="text/javascript"> // <![CDATA[ @@ -75,7 +73,7 @@ function makeYellow(element_id) { font-size: 1.2em; } -.behaviour { +.example_group { margin: 0 10px 5px; background: #fff; } @@ -178,22 +176,23 @@ a { </div> <div class="results"> - -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_1">Mocker</dt> + <dt id="example_group_1">Mocker</dt> <script type="text/javascript">moveProgressBar('5.8');</script> <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd> <script type="text/javascript">makeRed('rspec-header');</script> - <script type="text/javascript">makeRed('behaviour_1');</script> + <script type="text/javascript">makeRed('example_group_1');</script> <script type="text/javascript">moveProgressBar('11.7');</script> <dd class="spec failed"> <span class="failed_spec_name">should fail when expected message not received</span> <div class="failure" id="failure_1"> <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div> - <div class="backtrace"><pre>./failing_examples/mocking_example.rb:13: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:13:in `should_receive' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div> <pre class="ruby"><code><span class="linenum">11</span> it "should fail when expected message not received" do <span class="linenum">12</span> mock = mock("poke me") <span class="offending"><span class="linenum">13</span> mock.should_receive(:poke)</span> @@ -207,9 +206,12 @@ a { <span class="failed_spec_name">should fail when messages are received out of order</span> <div class="failure" id="failure_2"> <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div> - <div class="backtrace"><pre>./failing_examples/mocking_example.rb:22: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:22:in `three' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:16:in `instance_eval' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div> <pre class="ruby"><code><span class="linenum">20</span> mock.should_receive(:three).ordered <span class="linenum">21</span> mock.one <span class="offending"><span class="linenum">22</span> mock.three</span> @@ -223,9 +225,11 @@ a { <span class="failed_spec_name">should get yelled at when sending unexpected messages</span> <div class="failure" id="failure_3"> <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div> - <div class="backtrace"><pre>./failing_examples/mocking_example.rb:28: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:28:in `should_not_receive' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div> <pre class="ruby"><code><span class="linenum">26</span> it "should get yelled at when sending unexpected messages" do <span class="linenum">27</span> mock = mock("don't talk to me") <span class="offending"><span class="linenum">28</span> mock.should_not_receive(:any_message_at_all)</span> @@ -239,9 +243,12 @@ a { <span class="failed_spec_name">has a bug we need to fix</span> <div class="failure" id="failure_4"> <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div> - <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:33:in `pending' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:33:in `instance_eval' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div> <pre class="ruby"><code><span class="linenum">31</span> <span class="linenum">32</span> it "has a bug we need to fix" do <span class="offending"><span class="linenum">33</span> pending "here is the bug" do</span> @@ -252,10 +259,10 @@ a { </dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_2">Running specs with --diff</dt> - <script type="text/javascript">makeRed('behaviour_2');</script> + <dt id="example_group_2">Running specs with --diff</dt> + <script type="text/javascript">makeRed('example_group_2');</script> <script type="text/javascript">moveProgressBar('35.2');</script> <dd class="spec failed"> <span class="failed_spec_name">should print diff of different strings</span> @@ -269,10 +276,11 @@ Diff: +behaviour driven development framework for Ruby </pre></div> - <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:13:in `==' -./failing_examples/diffing_spec.rb:13: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:13:in `==' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div> <pre class="ruby"><code><span class="linenum">11</span>framework for Ruby <span class="linenum">12</span>EOF <span class="offending"><span class="linenum">13</span> usa.should == uk</span> @@ -302,9 +310,12 @@ Diff: +species=tortoise > </pre></div> - <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:34: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:34:in `should' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:31:in `instance_eval' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div> <pre class="ruby"><code><span class="linenum">32</span> expected = Animal.new "bob", "giraffe" <span class="linenum">33</span> actual = Animal.new "bob", "tortoise" <span class="offending"><span class="linenum">34</span> expected.should eql(actual)</span> @@ -315,16 +326,16 @@ Diff: </dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_3">A consumer of a stub</dt> + <dt id="example_group_3">A consumer of a stub</dt> <script type="text/javascript">moveProgressBar('47.0');</script> <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_4">A stubbed method on a class</dt> + <dt id="example_group_4">A stubbed method on a class</dt> <script type="text/javascript">moveProgressBar('52.9');</script> <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd> <script type="text/javascript">moveProgressBar('58.8');</script> @@ -333,9 +344,9 @@ Diff: <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_5">A mock</dt> + <dt id="example_group_5">A mock</dt> <script type="text/javascript">moveProgressBar('70.5');</script> <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd> <script type="text/javascript">moveProgressBar('76.4');</script> @@ -344,28 +355,28 @@ Diff: <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_6">pending example (using pending method)</dt> - <script type="text/javascript">makeYellow('behaviour_6');</script> + <dt id="example_group_6">pending example (using pending method)</dt> + <script type="text/javascript">makeYellow('example_group_6');</script> <script type="text/javascript">moveProgressBar('88.2');</script> - <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason"</span></dd> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_7">pending example (with no block)</dt> - <script type="text/javascript">makeYellow('behaviour_7');</script> + <dt id="example_group_7">pending example (with no block)</dt> + <script type="text/javascript">makeYellow('example_group_7');</script> <script type="text/javascript">moveProgressBar('94.1');</script> - <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented"</span></dd> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_8">pending example (with block for pending)</dt> - <script type="text/javascript">makeYellow('behaviour_8');</script> + <dt id="example_group_8">pending example (with block for pending)</dt> + <script type="text/javascript">makeYellow('example_group_8');</script> <script type="text/javascript">moveProgressBar('100.0');</script> - <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason"</span></dd> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> </dl> </div> <script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script> diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html index e7630ddde..cda7226bf 100644 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html +++ b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html @@ -1,12 +1,11 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!DOCTYPE html - PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>RSpec results</title> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Expires" content="-1" /> <meta http-equiv="Pragma" content="no-cache" /> <style type="text/css"> @@ -74,7 +73,7 @@ function makeYellow(element_id) { font-size: 1.2em; } -.behaviour { +.example_group { margin: 0 10px 5px; background: #fff; } @@ -177,13 +176,13 @@ a { </div> <div class="results"> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_1">Mocker</dt> + <dt id="example_group_1">Mocker</dt> <script type="text/javascript">moveProgressBar('5.8');</script> <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd> <script type="text/javascript">makeRed('rspec-header');</script> - <script type="text/javascript">makeRed('behaviour_1');</script> + <script type="text/javascript">makeRed('example_group_1');</script> <script type="text/javascript">moveProgressBar('11.7');</script> <dd class="spec failed"> <span class="failed_spec_name">should fail when expected message not received</span> @@ -250,10 +249,10 @@ a { </dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_2">Running specs with --diff</dt> - <script type="text/javascript">makeRed('behaviour_2');</script> + <dt id="example_group_2">Running specs with --diff</dt> + <script type="text/javascript">makeRed('example_group_2');</script> <script type="text/javascript">moveProgressBar('35.2');</script> <dd class="spec failed"> <span class="failed_spec_name">should print diff of different strings</span> @@ -311,16 +310,16 @@ Diff: </dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_3">A consumer of a stub</dt> + <dt id="example_group_3">A consumer of a stub</dt> <script type="text/javascript">moveProgressBar('47.0');</script> <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_4">A stubbed method on a class</dt> + <dt id="example_group_4">A stubbed method on a class</dt> <script type="text/javascript">moveProgressBar('52.9');</script> <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd> <script type="text/javascript">moveProgressBar('58.8');</script> @@ -329,9 +328,9 @@ Diff: <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_5">A mock</dt> + <dt id="example_group_5">A mock</dt> <script type="text/javascript">moveProgressBar('70.5');</script> <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd> <script type="text/javascript">moveProgressBar('76.4');</script> @@ -340,28 +339,28 @@ Diff: <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_6">pending example (using pending method)</dt> - <script type="text/javascript">makeYellow('behaviour_6');</script> + <dt id="example_group_6">pending example (using pending method)</dt> + <script type="text/javascript">makeYellow('example_group_6');</script> <script type="text/javascript">moveProgressBar('88.2');</script> - <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason"</span></dd> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_7">pending example (with no block)</dt> - <script type="text/javascript">makeYellow('behaviour_7');</script> + <dt id="example_group_7">pending example (with no block)</dt> + <script type="text/javascript">makeYellow('example_group_7');</script> <script type="text/javascript">moveProgressBar('94.1');</script> - <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented"</span></dd> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_8">pending example (with block for pending)</dt> - <script type="text/javascript">makeYellow('behaviour_8');</script> + <dt id="example_group_8">pending example (with block for pending)</dt> + <script type="text/javascript">makeYellow('example_group_8');</script> <script type="text/javascript">moveProgressBar('100.0');</script> - <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason"</span></dd> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> </dl> </div> <script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script> diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html index e7630ddde..511495bcd 100644 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html +++ b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html @@ -1,12 +1,11 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!DOCTYPE html - PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>RSpec results</title> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Expires" content="-1" /> <meta http-equiv="Pragma" content="no-cache" /> <style type="text/css"> @@ -74,7 +73,7 @@ function makeYellow(element_id) { font-size: 1.2em; } -.behaviour { +.example_group { margin: 0 10px 5px; background: #fff; } @@ -177,22 +176,22 @@ a { </div> <div class="results"> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_1">Mocker</dt> + <dt id="example_group_1">Mocker</dt> <script type="text/javascript">moveProgressBar('5.8');</script> <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd> <script type="text/javascript">makeRed('rspec-header');</script> - <script type="text/javascript">makeRed('behaviour_1');</script> + <script type="text/javascript">makeRed('example_group_1');</script> <script type="text/javascript">moveProgressBar('11.7');</script> <dd class="spec failed"> <span class="failed_spec_name">should fail when expected message not received</span> <div class="failure" id="failure_1"> <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div> <div class="backtrace"><pre>./failing_examples/mocking_example.rb:13: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir' -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> +./spec/spec/runner/formatter/html_formatter_spec.rb:18: +./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:14:</pre></div> <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should fail when expected message not received</span><span class="punct">"</span> <span class="keyword">do</span> <span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">poke me</span><span class="punct">")</span> <span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span> @@ -206,9 +205,9 @@ a { <div class="failure" id="failure_2"> <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div> <div class="backtrace"><pre>./failing_examples/mocking_example.rb:22: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir' -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> +./spec/spec/runner/formatter/html_formatter_spec.rb:18: +./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:14:</pre></div> <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span> <span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span> <span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span> @@ -222,9 +221,9 @@ a { <div class="failure" id="failure_3"> <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div> <div class="backtrace"><pre>./failing_examples/mocking_example.rb:28: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir' -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> +./spec/spec/runner/formatter/html_formatter_spec.rb:18: +./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:14:</pre></div> <pre class="ruby"><code><span class="linenum">26</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">"</span> <span class="keyword">do</span> <span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">don't talk to me</span><span class="punct">")</span> <span class="offending"><span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span> @@ -237,10 +236,7 @@ a { <span class="failed_spec_name">has a bug we need to fix</span> <div class="failure" id="failure_4"> <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div> - <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir' -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <pre class="ruby"><code><span class="linenum">31</span> <span class="linenum">32</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">has a bug we need to fix</span><span class="punct">"</span> <span class="keyword">do</span> <span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">"</span><span class="string">here is the bug</span><span class="punct">"</span> <span class="keyword">do</span></span> @@ -250,10 +246,10 @@ a { </dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_2">Running specs with --diff</dt> - <script type="text/javascript">makeRed('behaviour_2');</script> + <dt id="example_group_2">Running specs with --diff</dt> + <script type="text/javascript">makeRed('example_group_2');</script> <script type="text/javascript">moveProgressBar('35.2');</script> <dd class="spec failed"> <span class="failed_spec_name">should print diff of different strings</span> @@ -267,10 +263,7 @@ Diff: +behaviour driven development framework for Ruby </pre></div> - <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:13: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir' -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span> <span class="linenum">12</span><span class="constant">EOF</span> <span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span> @@ -298,10 +291,10 @@ Diff: +species=tortoise > </pre></div> - <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:34: -./spec/spec/runner/formatter/html_formatter_spec.rb:17: -./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir' -./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33: +./spec/spec/runner/formatter/html_formatter_spec.rb:18: +./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:14:</pre></div> <pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">giraffe</span><span class="punct">"</span> <span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">tortoise</span><span class="punct">"</span> <span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span> @@ -311,16 +304,16 @@ Diff: </dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_3">A consumer of a stub</dt> + <dt id="example_group_3">A consumer of a stub</dt> <script type="text/javascript">moveProgressBar('47.0');</script> <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_4">A stubbed method on a class</dt> + <dt id="example_group_4">A stubbed method on a class</dt> <script type="text/javascript">moveProgressBar('52.9');</script> <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd> <script type="text/javascript">moveProgressBar('58.8');</script> @@ -329,9 +322,9 @@ Diff: <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_5">A mock</dt> + <dt id="example_group_5">A mock</dt> <script type="text/javascript">moveProgressBar('70.5');</script> <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd> <script type="text/javascript">moveProgressBar('76.4');</script> @@ -340,28 +333,28 @@ Diff: <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_6">pending example (using pending method)</dt> - <script type="text/javascript">makeYellow('behaviour_6');</script> + <dt id="example_group_6">pending example (using pending method)</dt> + <script type="text/javascript">makeYellow('example_group_6');</script> <script type="text/javascript">moveProgressBar('88.2');</script> - <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason"</span></dd> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_7">pending example (with no block)</dt> - <script type="text/javascript">makeYellow('behaviour_7');</script> + <dt id="example_group_7">pending example (with no block)</dt> + <script type="text/javascript">makeYellow('example_group_7');</script> <script type="text/javascript">moveProgressBar('94.1');</script> - <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented"</span></dd> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd> </dl> </div> -<div class="behaviour"> +<div class="example_group"> <dl> - <dt id="behaviour_8">pending example (with block for pending)</dt> - <script type="text/javascript">makeYellow('behaviour_8');</script> + <dt id="example_group_8">pending example (with block for pending)</dt> + <script type="text/javascript">makeYellow('example_group_8');</script> <script type="text/javascript">moveProgressBar('100.0');</script> - <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason"</span></dd> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> </dl> </div> <script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script> diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatter_spec.rb index fad3aed1a..5ba39f0e9 100644 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatter_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatter_spec.rb @@ -1,56 +1,66 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' - -describe "HtmlFormatter" do - ['--diff', '--dry-run'].each do |opt| - it "should produce HTML identical to the one we designed manually with #{opt}" do - root = File.expand_path(File.dirname(__FILE__) + '/../../../..') - suffix = PLATFORM == 'java' ? '-jruby' : '' - expected_file = File.dirname(__FILE__) + "/html_formatted-#{VERSION}#{suffix}.html" - raise "There is no HTML file with expected content for this platform: #{expected_file}" unless File.file?(expected_file) - expected_html = File.read(expected_file) - raise "There should be no absolute paths in html_formatted.html!!" if (expected_html =~ /\/Users/n || expected_html =~ /\/home/n) - - Dir.chdir(root) do - args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/stubbing_example.rb', 'examples/pending_example.rb', '--format', 'html', opt] - err = StringIO.new - out = StringIO.new - Spec::Runner::CommandLine.run( - args, - err, - out, - false - ) - - seconds = /\d+\.\d+ seconds/ - html = out.string.gsub seconds, 'x seconds' - expected_html.gsub! seconds, 'x seconds' - - if opt == '--diff' - # Uncomment this line temporarily in order to overwrite the expected with actual. - # Use with care!!! - # File.open(expected_file, 'w') {|io| io.write(html)} - - doc = Hpricot(html) - backtraces = doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html} - doc.search("div.backtrace").remove - - expected_doc = Hpricot(expected_html) - expected_backtraces = expected_doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html} - expected_doc.search("div.backtrace").remove - - doc.inner_html.should == expected_doc.inner_html - - expected_backtraces.each_with_index do |expected_line, i| - expected_path, expected_line_number, expected_suffix = expected_line.split(':') - actual_path, actual_line_number, actual_suffix = backtraces[i].split(':') - File.expand_path(actual_path).should == File.expand_path(expected_path) - actual_line_number.should == expected_line_number +require File.dirname(__FILE__) + '/../../../spec_helper' +require 'hpricot' # Needed to compare generated with wanted HTML +require 'spec/runner/formatter/html_formatter' + +module Spec + module Runner + module Formatter + describe HtmlFormatter do + ['--diff', '--dry-run'].each do |opt| + def jruby? + PLATFORM == 'java' + end + + it "should produce HTML identical to the one we designed manually with #{opt}" do + root = File.expand_path(File.dirname(__FILE__) + '/../../../..') + suffix = jruby? ? '-jruby' : '' + expected_file = File.dirname(__FILE__) + "/html_formatted-#{::VERSION}#{suffix}.html" + raise "There is no HTML file with expected content for this platform: #{expected_file}" unless File.file?(expected_file) + expected_html = File.read(expected_file) + unless jruby? + raise "There should be no absolute paths in html_formatted.html!!" if (expected_html =~ /\/Users/n || expected_html =~ /\/home/n) + end + + Dir.chdir(root) do + args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/pure/stubbing_example.rb', 'examples/pure/pending_example.rb', '--format', 'html', opt] + err = StringIO.new + out = StringIO.new + CommandLine.run( + OptionParser.parse(args, err, out) + ) + + seconds = /\d+\.\d+ seconds/ + html = out.string.gsub seconds, 'x seconds' + expected_html.gsub! seconds, 'x seconds' + + if opt == '--diff' + # Uncomment this line temporarily in order to overwrite the expected with actual. + # Use with care!!! + # File.open(expected_file, 'w') {|io| io.write(html)} + + doc = Hpricot(html) + backtraces = doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html} + doc.search("div.backtrace").remove + + expected_doc = Hpricot(expected_html) + expected_backtraces = expected_doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html} + expected_doc.search("div.backtrace").remove + + doc.inner_html.should == expected_doc.inner_html + + expected_backtraces.each_with_index do |expected_line, i| + expected_path, expected_line_number, expected_suffix = expected_line.split(':') + actual_path, actual_line_number, actual_suffix = backtraces[i].split(':') + File.expand_path(actual_path).should == File.expand_path(expected_path) + actual_line_number.should == expected_line_number + end + else + html.should =~ /This was a dry-run/m + end + end end - else - html.should =~ /This was a dry-run/m end end end end - end diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb deleted file mode 100644 index 170fc441a..000000000 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' - -module Spec - module Runner - module Formatter - describe ProgressBarFormatter, "dry run" do - before(:each) do - @io = StringIO.new - @formatter = ProgressBarFormatter.new(@io) - @formatter.dry_run = true - end - - it "should not produce summary on dry run" do - @formatter.dump_summary(3, 2, 1, 0) - @io.string.should eql("") - end - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb deleted file mode 100644 index 04e3d9785..000000000 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +++ /dev/null @@ -1,36 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' - -module Spec - module Runner - module Formatter - describe "ProgressBarFormatter failure dump with NoisyBacktraceTweaker" do - before(:each) do - @io = StringIO.new - @reporter = Reporter.new([ProgressBarFormatter.new(@io)], NoisyBacktraceTweaker.new) - @reporter.add_behaviour(Spec::DSL::Description.new("context")) - end - - it "should end with line break" do - error=Spec::Expectations::ExpectationNotMetError.new("message") - set_backtrace(error) - @reporter.example_finished("spec", error, "spec") - @reporter.dump - @io.string.should match(/\n\z/) - end - - it "should include context and spec name in backtrace if error in spec" do - error=RuntimeError.new("message") - set_backtrace(error) - @reporter.example_finished("spec", error, "spec") - @reporter.dump - @io.string.should match(/RuntimeError in 'context spec'/) - end - - def set_backtrace(error) - error.set_backtrace(["/a/b/c/d/e.rb:34:in `whatever'"]) - end - - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb index 50fc12689..127a617c1 100644 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb @@ -1,4 +1,5 @@ require File.dirname(__FILE__) + '/../../../spec_helper.rb' +require 'spec/runner/formatter/progress_bar_formatter' module Spec module Runner @@ -6,7 +7,10 @@ module Spec describe ProgressBarFormatter do before(:each) do @io = StringIO.new - @formatter = ProgressBarFormatter.new(@io) + @options = mock('options') + @options.stub!(:dry_run).and_return(false) + @options.stub!(:colour).and_return(false) + @formatter = ProgressBarFormatter.new(@options, @io) end it "should produce line break on start dump" do @@ -20,44 +24,41 @@ module Spec end it "should produce standard summary" do - @formatter.example_pending("behaviour", "example", "message") + @formatter.example_pending("example_group", ExampleGroup.new("example"), "message") @io.rewind @formatter.dump_summary(3, 2, 1, 1) @io.string.should eql(%Q| Finished in 3 seconds 2 examples, 1 failure, 1 pending - -Pending: -behaviour example (message) |) end it "should push green dot for passing spec" do @io.should_receive(:tty?).and_return(true) - @formatter.colour = true + @options.should_receive(:colour).and_return(true) @formatter.example_passed("spec") @io.string.should == "\e[32m.\e[0m" end it "should push red F for failure spec" do @io.should_receive(:tty?).and_return(true) - @formatter.colour = true + @options.should_receive(:colour).and_return(true) @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)) @io.string.should eql("\e[31mF\e[0m") end it "should push magenta F for error spec" do @io.should_receive(:tty?).and_return(true) - @formatter.colour = true + @options.should_receive(:colour).and_return(true) @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", RuntimeError.new)) @io.string.should eql("\e[35mF\e[0m") end it "should push blue F for fixed pending spec" do @io.should_receive(:tty?).and_return(true) - @formatter.colour = true - @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::DSL::PendingFixedError.new)) + @options.should_receive(:colour).and_return(true) + @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::Example::PendingExampleFixedError.new)) @io.string.should eql("\e[34mF\e[0m") end @@ -83,17 +84,18 @@ EOE end it "should dump pending" do - @formatter.example_pending("behaviour", "example", "message") + @formatter.example_pending("example_group", ExampleGroup.new("example"), "message") @formatter.dump_pending - @io.string.should =~ /Pending\:\nbehaviour example \(message\)\n/ + @io.string.should =~ /Pending\:\nexample_group example \(message\)\n/ end end describe "ProgressBarFormatter outputting to custom out" do before(:each) do @out = mock("out") + @options = mock('options') @out.stub!(:puts) - @formatter = ProgressBarFormatter.new(@out) + @formatter = ProgressBarFormatter.new(@options, @out) @formatter.class.send :public, :output_to_tty? end @@ -106,6 +108,20 @@ EOE @formatter.output_to_tty?.should be_false end end + + describe ProgressBarFormatter, "dry run" do + before(:each) do + @io = StringIO.new + options = mock('options') + options.stub!(:dry_run).and_return(true) + @formatter = ProgressBarFormatter.new(options, @io) + end + + it "should not produce summary on dry run" do + @formatter.dump_summary(3, 2, 1, 0) + @io.string.should eql("") + end + end end end end diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb deleted file mode 100644 index c864162ed..000000000 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' - -module Spec -module Runner -module Formatter -describe "RdocFormatterDryRun" do - before(:each) do - @io = StringIO.new - @formatter = RdocFormatter.new(@io) - @formatter.dry_run = true - end - it "should not produce summary on dry run" do - @formatter.dump_summary(3, 2, 1, 0) - @io.string.should == "" - end -end -end -end -end diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/rdoc_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/rdoc_formatter_spec.rb deleted file mode 100644 index 728a515f1..000000000 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/rdoc_formatter_spec.rb +++ /dev/null @@ -1,46 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' - -module Spec - module Runner - module Formatter - describe "RdocFormatter" do - before(:each) do - @io = StringIO.new - @formatter = RdocFormatter.new(@io) - @formatter.dry_run = true - end - - it "should produce no summary" do - @formatter.dump_summary(nil, nil, nil, nil) - @io.string.should be_empty - end - - it "should produce nothing on start dump" do - @formatter.start_dump - @io.string.should be_empty - end - - it "should push out context" do - @formatter.add_behaviour(Spec::DSL::Description.new("context")) - @io.string.should eql("# context\n") - end - - it "should push out failed spec" do - @formatter.example_failed(DSL::Example.new("spec"), 98, nil) - @io.string.should eql("# * spec [98 - FAILED]\n") - end - - it "should push out spec" do - @formatter.example_passed(DSL::Example.new("spec")) - @io.string.should eql("# * spec\n") - end - - it "should push out not pending example" do - @formatter.example_pending("behaviour", "example", "reason") - @io.string.should eql("# * behaviour example [PENDING: reason]\n") - end - - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb index dce5c2ff2..4bb2f1585 100644 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb @@ -1,11 +1,18 @@ require File.dirname(__FILE__) + '/../../../spec_helper.rb' +require 'spec/runner/formatter/snippet_extractor' -describe Spec::Runner::Formatter::SnippetExtractor do - it "should fall back on a default message when it doesn't understand a line" do - Spec::Runner::Formatter::SnippetExtractor.new.snippet_for("blech").should == ["# Couldn't get snippet for blech", 1] - end +module Spec + module Runner + module Formatter + describe SnippetExtractor do + it "should fall back on a default message when it doesn't understand a line" do + SnippetExtractor.new.snippet_for("blech").should == ["# Couldn't get snippet for blech", 1] + end - it "should fall back on a default message when it doesn't find the file" do - Spec::Runner::Formatter::SnippetExtractor.new.lines_around("blech", 8).should == "# Couldn't get snippet for blech" + it "should fall back on a default message when it doesn't find the file" do + SnippetExtractor.new.lines_around("blech", 8).should == "# Couldn't get snippet for blech" + end + end + end end -end +end
\ No newline at end of file diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb deleted file mode 100644 index c86899cb1..000000000 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' - -module Spec -module Runner -module Formatter -describe "SpecdocFormatterDryRun" do - before(:each) do - @io = StringIO.new - @formatter = SpecdocFormatter.new(@io) - @formatter.dry_run = true - end - it "should not produce summary on dry run" do - @formatter.dump_summary(3, 2, 1, 0) - @io.string.should eql("") - - end - -end -end -end -end diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb index 14f436036..79995309d 100644 --- a/vendor/plugins/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb @@ -1,61 +1,125 @@ require File.dirname(__FILE__) + '/../../../spec_helper.rb' +require 'spec/runner/formatter/specdoc_formatter' module Spec module Runner module Formatter - describe "SpecdocFormatter" do + describe SpecdocFormatter do + it_should_behave_like "sandboxed rspec_options" + attr_reader :io, :options, :formatter, :example_group before(:each) do @io = StringIO.new - @formatter = SpecdocFormatter.new(@io) + options.stub!(:dry_run).and_return(false) + options.stub!(:colour).and_return(false) + @formatter = SpecdocFormatter.new(options, io) + @example_group = Class.new(::Spec::Example::ExampleGroup).describe("ExampleGroup") end - it "should produce standard summary without pending when pending has a 0 count" do - @formatter.dump_summary(3, 2, 1, 0) - @io.string.should eql("\nFinished in 3 seconds\n\n2 examples, 1 failure\n") - end + describe "where ExampleGroup has no superclasss with a description" do + before do + formatter.add_example_group(example_group) + end - it "should produce standard summary" do - @formatter.dump_summary(3, 2, 1, 4) - @io.string.should eql("\nFinished in 3 seconds\n\n2 examples, 1 failure, 4 pending\n") - end + it "should produce standard summary without pending when pending has a 0 count" do + formatter.dump_summary(3, 2, 1, 0) + io.string.should have_example_group_output("\nFinished in 3 seconds\n\n2 examples, 1 failure\n") + end - it "should push context name" do - @formatter.add_behaviour(Spec::DSL::Description.new("context")) - @io.string.should eql("\ncontext\n") - end + it "should produce standard summary" do + formatter.dump_summary(3, 2, 1, 4) + io.string.should have_example_group_output("\nFinished in 3 seconds\n\n2 examples, 1 failure, 4 pending\n") + end - it "should push failing spec name and failure number" do - @formatter.example_failed(DSL::Example.new("spec"), 98, Reporter::Failure.new("c s", RuntimeError.new)) - @io.string.should eql("- spec (ERROR - 98)\n") - end + it "should push ExampleGroup name" do + io.string.should eql("\nExampleGroup\n") + end - it "should push nothing on start" do - @formatter.start(5) - @io.string.should eql("") - end + it "when having an error, should push failing spec name and failure number" do + formatter.example_failed( + example_group.it("spec"), + 98, + Reporter::Failure.new("c s", RuntimeError.new) + ) + io.string.should have_example_group_output("- spec (ERROR - 98)\n") + end - it "should push nothing on start dump" do - @formatter.start_dump - @io.string.should eql("") - end + it "when having an expectation failure, should push failing spec name and failure number" do + formatter.example_failed( + example_group.it("spec"), + 98, + Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new) + ) + io.string.should have_example_group_output("- spec (FAILED - 98)\n") + end - it "should push passing spec name" do - @formatter.example_passed(DSL::Example.new("spec")) - @io.string.should eql("- spec\n") - end + it "should push nothing on start" do + formatter.start(5) + io.string.should have_example_group_output("") + end - it "should push pending example name and message" do - @formatter.example_pending('behaviour', 'example','reason') - @io.string.should eql("- example (PENDING: reason)\n") - end + it "should push nothing on start dump" do + formatter.start_dump + io.string.should have_example_group_output("") + end - it "should dump pending" do - @formatter.example_pending('behaviour', 'example','reason') - @io.rewind - @formatter.dump_pending - @io.string.should =~ /Pending\:\nbehaviour example \(reason\)\n/ + it "should push passing spec name" do + formatter.example_passed(example_group.it("spec")) + io.string.should have_example_group_output("- spec\n") + end + + it "should push pending example name and message" do + formatter.example_pending('example_group', ExampleGroup.new("example"), 'reason') + io.string.should have_example_group_output("- example (PENDING: reason)\n") + end + + it "should dump pending" do + formatter.example_pending('example_group', ExampleGroup.new("example"), 'reason') + io.rewind + formatter.dump_pending + io.string.should =~ /Pending\:\nexample_group example \(reason\)\n/ + end + + def have_example_group_output(expected_output) + expected = "\nExampleGroup\n#{expected_output}" + ::Spec::Matchers::SimpleMatcher.new(expected) do |actual| + actual == expected + end + end end + describe "where ExampleGroup has two superclasses with a description" do + attr_reader :child_example_group, :grand_child_example_group + before do + @child_example_group = Class.new(example_group).describe("Child ExampleGroup") + @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup") + formatter.add_example_group(grand_child_example_group) + end + + specify "when having an error, should push failing spec name and failure number" do + formatter.example_failed( + example_group.it("spec"), + 98, + Reporter::Failure.new("c s", RuntimeError.new) + ) + io.string.should have_nested_example_group_output("- spec (ERROR - 98)\n") + end + + specify "when having an expectation failure, should push failing spec name and failure number" do + formatter.example_failed( + example_group.it("spec"), + 98, + Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new) + ) + io.string.should have_nested_example_group_output("- spec (FAILED - 98)\n") + end + + def have_nested_example_group_output(expected_output) + expected_full_output = "\nExampleGroup Child ExampleGroup GrandChild ExampleGroup\n#{expected_output}" + ::Spec::Matchers::SimpleMatcher.new(expected_full_output) do |actual| + actual == expected_full_output + end + end + end end end end diff --git a/vendor/plugins/rspec/spec/spec/runner/heckle_runner_spec.rb b/vendor/plugins/rspec/spec/spec/runner/heckle_runner_spec.rb index 1f5d11759..539d908c2 100644 --- a/vendor/plugins/rspec/spec/spec/runner/heckle_runner_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/heckle_runner_spec.rb @@ -17,47 +17,62 @@ unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} describe "HeckleRunner" do before(:each) do @heckle = mock("heckle", :null_object => true) - @behaviour_runner = mock("behaviour_runner") @heckle_class = mock("heckle_class") end it "should heckle all methods in all classes in a module" do - @heckle_class.should_receive(:new).with("Foo::Bar", "one", behaviour_runner).and_return(@heckle) - @heckle_class.should_receive(:new).with("Foo::Bar", "two", behaviour_runner).and_return(@heckle) - @heckle_class.should_receive(:new).with("Foo::Zap", "three", behaviour_runner).and_return(@heckle) - @heckle_class.should_receive(:new).with("Foo::Zap", "four", behaviour_runner).and_return(@heckle) + @heckle_class.should_receive(:new).with("Foo::Bar", "one", rspec_options).and_return(@heckle) + @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle) + @heckle_class.should_receive(:new).with("Foo::Zap", "three", rspec_options).and_return(@heckle) + @heckle_class.should_receive(:new).with("Foo::Zap", "four", rspec_options).and_return(@heckle) heckle_runner = Spec::Runner::HeckleRunner.new("Foo", @heckle_class) - heckle_runner.heckle_with(behaviour_runner) + heckle_runner.heckle_with end it "should heckle all methods in a class" do - @heckle_class.should_receive(:new).with("Foo::Bar", "one", behaviour_runner).and_return(@heckle) - @heckle_class.should_receive(:new).with("Foo::Bar", "two", behaviour_runner).and_return(@heckle) + @heckle_class.should_receive(:new).with("Foo::Bar", "one", rspec_options).and_return(@heckle) + @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle) heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar", @heckle_class) - heckle_runner.heckle_with(behaviour_runner) + heckle_runner.heckle_with end it "should fail heckling when the class is not found" do lambda do heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bob", @heckle_class) - heckle_runner.heckle_with(behaviour_runner) + heckle_runner.heckle_with end.should raise_error(StandardError, "Heckling failed - \"Foo::Bob\" is not a known class or module") end it "should heckle specific method in a class (with #)" do - @heckle_class.should_receive(:new).with("Foo::Bar", "two", behaviour_runner).and_return(@heckle) + @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle) heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar#two", @heckle_class) - heckle_runner.heckle_with(behaviour_runner) + heckle_runner.heckle_with end it "should heckle specific method in a class (with .)" do - @heckle_class.should_receive(:new).with("Foo::Bar", "two", behaviour_runner).and_return(@heckle) + @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle) heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar.two", @heckle_class) - heckle_runner.heckle_with(behaviour_runner) + heckle_runner.heckle_with + end + end + + describe "Heckler" do + it "should say yes to tests_pass? if specs pass" do + options = mock("options", :null_object => true) + options.should_receive(:run_examples).and_return(true) + heckler = Spec::Runner::Heckler.new("Foo", nil, options) + heckler.tests_pass?.should be_true + end + + it "should say no to tests_pass? if specs fail" do + options = mock("options", :null_object => true) + options.should_receive(:run_examples).and_return(false) + heckler = Spec::Runner::Heckler.new("Foo", nil, options) + heckler.tests_pass?.should be_false end end end diff --git a/vendor/plugins/rspec/spec/spec/runner/heckler_spec.rb b/vendor/plugins/rspec/spec/spec/runner/heckler_spec.rb index 31d33ab5e..7cf6606ec 100644 --- a/vendor/plugins/rspec/spec/spec/runner/heckler_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/heckler_spec.rb @@ -3,11 +3,10 @@ unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} require 'spec/runner/heckle_runner' describe "Heckler" do - it "should run behaviour_runner on tests_pass?" do - behaviour_runner = mock("behaviour_runner") - behaviour_runner.should_receive(:run).with([], false) - heckler = Spec::Runner::Heckler.new('Array', 'push', behaviour_runner) - + it "should run examples on tests_pass?" do + options = Spec::Runner::Options.new(StringIO.new, StringIO.new) + options.should_receive(:run_examples).with().and_return(&options.method(:run_examples)) + heckler = Spec::Runner::Heckler.new('Array', 'push', options) heckler.tests_pass? end end diff --git a/vendor/plugins/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb b/vendor/plugins/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb index 522d346d9..e097f2ec0 100644 --- a/vendor/plugins/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb @@ -11,32 +11,32 @@ module Spec it "should leave anything in lib spec dir" do ["expectations", "mocks", "runner", "stubs"].each do |child| @error.set_backtrace(["/lib/spec/#{child}/anything.rb"]) - @tweaker.tweak_backtrace(@error, "spec name") + @tweaker.tweak_backtrace(@error) @error.backtrace.should_not be_empty end end it "should leave anything in spec dir" do @error.set_backtrace(["/lib/spec/expectations/anything.rb"]) - @tweaker.tweak_backtrace(@error, "spec name") + @tweaker.tweak_backtrace(@error) @error.backtrace.should_not be_empty end it "should leave bin spec" do @error.set_backtrace(["bin/spec:"]) - @tweaker.tweak_backtrace(@error, "spec name") + @tweaker.tweak_backtrace(@error) @error.backtrace.should_not be_empty end it "should not barf on nil backtrace" do lambda do - @tweaker.tweak_backtrace(@error, "spec name") + @tweaker.tweak_backtrace(@error) end.should_not raise_error end it "should clean up double slashes" do @error.set_backtrace(["/a//b/c//d.rb"]) - @tweaker.tweak_backtrace(@error, "spec name") + @tweaker.tweak_backtrace(@error) @error.backtrace.should include("/a/b/c/d.rb") end diff --git a/vendor/plugins/rspec/spec/spec/runner/object_ext_spec.rb b/vendor/plugins/rspec/spec/spec/runner/object_ext_spec.rb deleted file mode 100644 index 0d8348bb2..000000000 --- a/vendor/plugins/rspec/spec/spec/runner/object_ext_spec.rb +++ /dev/null @@ -1,11 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Runner - describe "ObjectExt" do - it "should add copy_instance_variables_from to object" do - Object.new.should respond_to(:copy_instance_variables_from) - end - end - end -end diff --git a/vendor/plugins/rspec/spec/spec/runner/option_parser_spec.rb b/vendor/plugins/rspec/spec/spec/runner/option_parser_spec.rb index 95e1f75a3..8c91ad19f 100644 --- a/vendor/plugins/rspec/spec/spec/runner/option_parser_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/option_parser_spec.rb @@ -1,18 +1,16 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb' +require 'fileutils' describe "OptionParser" do before(:each) do @out = StringIO.new @err = StringIO.new - @parser = Spec::Runner::OptionParser.new + @parser = Spec::Runner::OptionParser.new(@err, @out) end def parse(args) - @parser.parse(args, @err, @out, true) - end - - def behaviour_runner(args) - @parser.create_behaviour_runner(args, @err, @out, true) + @parser.parse(args) + @parser.options end it "should accept dry run option" do @@ -48,6 +46,14 @@ describe "OptionParser" do options.colour.should == false end + it "should print help to stdout if no args" do + pending 'A regression since 1.0.8' do + options = parse([]) + @out.rewind + @out.read.should match(/Usage: spec \(FILE\|DIRECTORY\|GLOB\)\+ \[options\]/m) + end + end + it "should print help to stdout" do options = parse(["--help"]) @out.rewind @@ -55,19 +61,17 @@ describe "OptionParser" do end it "should print instructions about how to require missing formatter" do - lambda { options = parse(["--format", "Custom::MissingFormatter"]) }.should raise_error(NameError) + lambda do + options = parse(["--format", "Custom::MissingFormatter"]) + options.formatters + end.should raise_error(NameError) @err.string.should match(/Couldn't find formatter class Custom::MissingFormatter/n) end - it "should print usage to err if no dir specified" do - options = parse([]) - @err.string.should match(/Usage: spec/) - end - it "should print version to stdout" do options = parse(["--version"]) @out.rewind - @out.read.should match(/RSpec-\d+\.\d+\.\d+.*\(r\d+\) - BDD for Ruby\nhttp:\/\/rspec.rubyforge.org\/\n/n) + @out.read.should match(/RSpec-\d+\.\d+\.\d+.*\(build \d+\) - BDD for Ruby\nhttp:\/\/rspec.rubyforge.org\/\n/n) end it "should require file when require specified" do @@ -123,14 +127,25 @@ describe "OptionParser" do options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter) end + it "should use html story formatter when format is h" do + options = parse(["--format", "h"]) + options.story_formatters[0].class.should equal(Spec::Runner::Formatter::Story::HtmlFormatter) + end + it "should use html formatter when format is html" do options = parse(["--format", "html"]) options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter) end + it "should use html story formatter when format is html" do + options = parse(["--format", "html"]) + options.story_formatters[0].class.should equal(Spec::Runner::Formatter::Story::HtmlFormatter) + end + it "should use html formatter with explicit output when format is html:test.html" do FileUtils.rm 'test.html' if File.exist?('test.html') options = parse(["--format", "html:test.html"]) + options.formatters # creates the file File.should be_exist('test.html') options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter) options.formatters[0].close @@ -157,16 +172,6 @@ describe "OptionParser" do options.formatters[0].class.should equal(Spec::Runner::Formatter::ProgressBarFormatter) end - it "should use rdoc formatter when format is r" do - options = parse(["--format", "r"]) - options.formatters[0].class.should equal(Spec::Runner::Formatter::RdocFormatter) - end - - it "should use rdoc formatter when format is rdoc" do - options = parse(["--format", "rdoc"]) - options.formatters[0].class.should equal(Spec::Runner::Formatter::RdocFormatter) - end - it "should use specdoc formatter when format is s" do options = parse(["--format", "s"]) options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter) @@ -195,9 +200,13 @@ describe "OptionParser" do end it "should use custom diff format option when format is a custom format" do - options = parse(["--diff", "Custom::Formatter"]) + Spec::Expectations.differ.should_not be_instance_of(Custom::Differ) + + options = parse(["--diff", "Custom::Differ"]) + options.parse_diff "Custom::Differ" options.diff_format.should == :custom - options.differ_class.should == Custom::Formatter + options.differ_class.should == Custom::Differ + Spec::Expectations.differ.should be_instance_of(Custom::Differ) end it "should print instructions about how to fix missing differ" do @@ -234,7 +243,7 @@ describe "OptionParser" do @err.string.should match(/You must specify one file, not a directory when using the --line option/n) end - it "should fail with error message if file is dir along with --line" do + it "should fail with error message if file does not exist along with --line" do spec_parser = mock("spec_parser") @parser.instance_variable_set('@spec_parser', spec_parser) @@ -277,18 +286,21 @@ describe "OptionParser" do end it "should read options from file when --options is specified" do - Spec::Runner::CommandLine.should_receive(:run).with(["--diff", "--colour"], @err, @out, true, true) options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"]) + options.diff_format.should_not be_nil + options.colour.should be_true end - it "should append options from file when --options is specified" do - Spec::Runner::CommandLine.should_receive(:run).with(["some/spec.rb", "--diff", "--colour"], @err, @out, true, true) - options = parse(["some/spec.rb", "--options", File.dirname(__FILE__) + "/spec.opts"]) + it "should default the formatter to ProgressBarFormatter when using options file" do + options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"]) + options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::ProgressBarFormatter) end - + it "should read spaced and multi-line options from file when --options is specified" do - Spec::Runner::CommandLine.should_receive(:run).with(["--diff", "--colour", "--format", "s"], @err, @out, true, true) options = parse(["--options", File.dirname(__FILE__) + "/spec_spaced.opts"]) + options.diff_format.should_not be_nil + options.colour.should be_true + options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::SpecdocFormatter) end it "should save config to file when --generate-options is specified" do @@ -298,52 +310,68 @@ describe "OptionParser" do FileUtils.rm 'test.spec.opts' end - it "should call DrbCommandLine when --drb is specified" do - Spec::Runner::DrbCommandLine.should_receive(:run).with(["some/spec.rb", "--diff", "--colour"], @err, @out, true, true) - options = parse(["some/spec.rb", "--diff", "--drb", "--colour"]) - end - - it "should not return an Options object when --drb is specified" do - Spec::Runner::DrbCommandLine.stub!(:run) - parse(["some/spec.rb", "--drb"]).should be_nil + it "should save config to file when -G is specified" do + FileUtils.rm 'test.spec.opts' if File.exist?('test.spec.opts') + options = parse(["--colour", "-G", "test.spec.opts", "--diff"]) + IO.read('test.spec.opts').should == "--colour\n--diff\n" + FileUtils.rm 'test.spec.opts' end + it "when --drb is specified, calls DrbCommandLine all of the other ARGV arguments" do + options = Spec::Runner::OptionParser.parse([ + "some/spec.rb", "--diff", "--colour" + ], @err, @out) + Spec::Runner::DrbCommandLine.should_receive(:run).and_return do |options| + options.argv.should == ["some/spec.rb", "--diff", "--colour"] + end + parse(["some/spec.rb", "--diff", "--drb", "--colour"]) + end + it "should reverse spec order when --reverse is specified" do options = parse(["some/spec.rb", "--reverse"]) end it "should set an mtime comparator when --loadby mtime" do - behaviour_runner = behaviour_runner(["--loadby", 'mtime']) + options = parse(["--loadby", 'mtime']) + runner = Spec::Runner::ExampleGroupRunner.new(options) + Spec::Runner::ExampleGroupRunner.should_receive(:new). + with(options). + and_return(runner) + runner.should_receive(:load_files).with(["most_recent_spec.rb", "command_line_spec.rb"]) + Dir.chdir(File.dirname(__FILE__)) do + options.files << 'command_line_spec.rb' + options.files << 'most_recent_spec.rb' FileUtils.touch "most_recent_spec.rb" - all_files = ['command_line_spec.rb', 'most_recent_spec.rb'] - sorted_files = behaviour_runner.sort_paths(all_files) - sorted_files.should == ["most_recent_spec.rb", "command_line_spec.rb"] + options.run_examples FileUtils.rm "most_recent_spec.rb" end end it "should use the standard runner by default" do + runner = ::Spec::Runner::ExampleGroupRunner.new(@parser.options) + ::Spec::Runner::ExampleGroupRunner.should_receive(:new). + with(@parser.options). + and_return(runner) options = parse([]) - options.create_behaviour_runner.class.should equal(Spec::Runner::BehaviourRunner) + options.run_examples end it "should use a custom runner when given" do - options = parse(["--runner", "Custom::BehaviourRunner"]) - options.create_behaviour_runner.class.should equal(Custom::BehaviourRunner) + runner = Custom::ExampleGroupRunner.new(@parser.options, nil) + Custom::ExampleGroupRunner.should_receive(:new). + with(@parser.options, nil). + and_return(runner) + options = parse(["--runner", "Custom::ExampleGroupRunner"]) + options.run_examples end it "should use a custom runner with extra options" do - options = parse(["--runner", "Custom::BehaviourRunner:something"]) - options.create_behaviour_runner.class.should equal(Custom::BehaviourRunner) + runner = Custom::ExampleGroupRunner.new(@parser.options, 'something') + Custom::ExampleGroupRunner.should_receive(:new). + with(@parser.options, 'something'). + and_return(runner) + options = parse(["--runner", "Custom::ExampleGroupRunner:something"]) + options.run_examples end - - it "should return the correct default behaviour runner" do - @parser.create_behaviour_runner([], @err, @out, true).should be_instance_of(Spec::Runner::BehaviourRunner) - end - - it "should return the correct default behaviour runner" do - @parser.create_behaviour_runner(["--runner", "Custom::BehaviourRunner"], @err, @out, true).should be_instance_of(Custom::BehaviourRunner) - end - end diff --git a/vendor/plugins/rspec/spec/spec/runner/options_spec.rb b/vendor/plugins/rspec/spec/spec/runner/options_spec.rb index 609d8d95c..e4d01b05c 100644 --- a/vendor/plugins/rspec/spec/spec/runner/options_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/options_spec.rb @@ -3,172 +3,291 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb' module Spec module Runner describe Options do - before do + before(:each) do @err = StringIO.new('') @out = StringIO.new('') @options = Options.new(@err, @out) end - it "instantiates empty arrays" do - @options.examples.should == [] - @options.formatters.should == [] + after(:each) do + Spec::Expectations.differ = nil end - it "defaults to QuietBacktraceTweaker" do - @options.backtrace_tweaker.class.should == QuietBacktraceTweaker + describe "#examples" do + it "should default to empty array" do + @options.examples.should == [] + end end - it "defaults to no dry_run" do - @options.dry_run.should == false + describe "#backtrace_tweaker" do + it "should default to QuietBacktraceTweaker" do + @options.backtrace_tweaker.class.should == QuietBacktraceTweaker + end end - it "parse_diff sets context_lines" do - @options.parse_diff nil - @options.context_lines.should == 3 + describe "#dry_run" do + it "should default to false" do + @options.dry_run.should == false + end end - it "defaults diff to unified" do - @options.parse_diff nil - @options.diff_format.should == :unified + describe "#context_lines" do + it "should default to 3" do + @options.context_lines.should == 3 + end end - it "should use unified diff format option when format is unified" do - @options.parse_diff 'unified' - @options.diff_format.should == :unified - @options.differ_class.should equal(Spec::Expectations::Differs::Default) - end + describe "#parse_diff with nil" do + before(:each) do + @options.parse_diff nil + end - it "should use context diff format option when format is context" do - @options.parse_diff 'context' - @options.diff_format.should == :context - @options.differ_class.should == Spec::Expectations::Differs::Default - end + it "should make diff_format unified" do + @options.diff_format.should == :unified + end - it "should use custom diff format option when format is a custom format" do - @options.parse_diff "Custom::Formatter" - @options.diff_format.should == :custom - @options.differ_class.should == Custom::Formatter + it "should set Spec::Expectations.differ to be a default differ" do + Spec::Expectations.differ.class.should == + ::Spec::Expectations::Differs::Default + end end - it "should print instructions about how to fix missing differ" do - lambda { @options.parse_diff "Custom::MissingDiffer" }.should raise_error(NameError) - @err.string.should match(/Couldn't find differ class Custom::MissingDiffer/n) - end + describe "#parse_diff with 'unified'" do + before(:each) do + @options.parse_diff 'unified' + end - it "should print instructions about how to fix bad formatter" do - lambda do - @options.parse_format "Custom::BadFormatter" - end.should raise_error(NameError, /undefined local variable or method `bad_method'/) - end + it "should make diff_format unified and uses default differ_class" do + @options.diff_format.should == :unified + @options.differ_class.should equal(Spec::Expectations::Differs::Default) + end - it "parse_example sets single example when argument not a file" do - example = "something or other" - File.file?(example).should == false - @options.parse_example example - @options.examples.should eql(["something or other"]) + it "should set Spec::Expectations.differ to be a default differ" do + Spec::Expectations.differ.class.should == + ::Spec::Expectations::Differs::Default + end end - it "parse_example sets examples to contents of file" do - example = "#{File.dirname(__FILE__)}/examples.txt" - File.should_receive(:file?).with(example).and_return(true) - file = StringIO.new("Sir, if you were my husband, I would poison your drink.\nMadam, if you were my wife, I would drink it.") - File.should_receive(:open).with(example).and_return(file) - - @options.parse_example example - @options.examples.should eql([ - "Sir, if you were my husband, I would poison your drink.", - "Madam, if you were my wife, I would drink it." - ]) - end - end + describe "#parse_diff with 'context'" do + before(:each) do + @options.parse_diff 'context' + end - describe Options, "splitting class names and args" do - before do - @err = StringIO.new('') - @out = StringIO.new('') - @options = Options.new(@err, @out) - end - - it "should split class names with args" do - @options.split_at_colon('Foo').should == ['Foo', nil] - @options.split_at_colon('Foo:arg').should == ['Foo', 'arg'] - @options.split_at_colon('Foo::Bar::Zap:arg').should == ['Foo::Bar::Zap', 'arg'] - @options.split_at_colon('Foo:arg1,arg2').should == ['Foo', 'arg1,arg2'] - @options.split_at_colon('Foo::Bar::Zap:arg1,arg2').should == ['Foo::Bar::Zap', 'arg1,arg2'] - @options.split_at_colon('Foo::Bar::Zap:drb://foo,drb://bar').should == ['Foo::Bar::Zap', 'drb://foo,drb://bar'] - end + it "should make diff_format context and uses default differ_class" do + @options.diff_format.should == :context + @options.differ_class.should == Spec::Expectations::Differs::Default + end - it "should raise error when splitting something starting with a number" do - lambda { @options.split_at_colon('') }.should raise_error("Couldn't parse \"\"") + it "should set Spec::Expectations.differ to be a default differ" do + Spec::Expectations.differ.class.should == + ::Spec::Expectations::Differs::Default + end end - it "should raise error when not class name" do - lambda do - @options.load_class('foo', 'fruit', '--food') - end.should raise_error('"foo" is not a valid class name') + describe "#parse_diff with Custom::Differ" do + before(:each) do + @options.parse_diff 'Custom::Differ' + end + + it "should use custom differ_class" do + @options.diff_format.should == :custom + @options.differ_class.should == Custom::Differ + Spec::Expectations.differ.should be_instance_of(Custom::Differ) + end + + it "should set Spec::Expectations.differ to be a default differ" do + Spec::Expectations.differ.class.should == + ::Custom::Differ + end end - end - describe Options, "receiving create_behaviour_runner" do - before do - @err = StringIO.new - @out = StringIO.new - @options = Options.new(@err, @out) + describe "#parse_diff with missing class name" do + it "should raise error" do + lambda { @options.parse_diff "Custom::MissingDiffer" }.should raise_error(NameError) + @err.string.should match(/Couldn't find differ class Custom::MissingDiffer/n) + end end - it "should fail when custom runner not found" do - @options.runner_arg = "Whatever" - lambda { @options.create_behaviour_runner }.should raise_error(NameError) - @err.string.should match(/Couldn't find behaviour runner class/) + describe "#parse_example" do + it "with argument thats not a file path, sets argument as the example" do + example = "something or other" + File.file?(example).should == false + @options.parse_example example + @options.examples.should eql(["something or other"]) + end + + it "with argument that is a file path, sets examples to contents of the file" do + example = "#{File.dirname(__FILE__)}/examples.txt" + File.should_receive(:file?).with(example).and_return(true) + file = StringIO.new("Sir, if you were my husband, I would poison your drink.\nMadam, if you were my wife, I would drink it.") + File.should_receive(:open).with(example).and_return(file) + + @options.parse_example example + @options.examples.should eql([ + "Sir, if you were my husband, I would poison your drink.", + "Madam, if you were my wife, I would drink it." + ]) + end end - it "should fail when custom runner not valid class name" do - @options.runner_arg = "whatever" - lambda { @options.create_behaviour_runner }.should raise_error('"whatever" is not a valid class name') - @err.string.should match(/"whatever" is not a valid class name/) + describe "#examples_should_not_be_run" do + it "should cause #run_examples to return true and do nothing" do + @options.examples_should_not_be_run + ExampleGroupRunner.should_not_receive(:new) + + @options.run_examples.should be_true + end end - it "returns nil when generate is true" do - @options.generate = true - @options.create_behaviour_runner.should == nil + describe "#load_class" do + it "should raise error when not class name" do + lambda do + @options.send(:load_class, 'foo', 'fruit', '--food') + end.should raise_error('"foo" is not a valid class name') + end end - it "returns a BehaviourRunner by default" do - runner = @options.create_behaviour_runner - runner.class.should == BehaviourRunner + describe "#reporter" do + it "returns a Reporter" do + @options.reporter.should be_instance_of(Reporter) + @options.reporter.options.should === @options + end end - it "does not set Expectations differ when differ_class is not set" do - @options.differ_class = nil - Spec::Expectations.should_not_receive(:differ=) - @options.create_behaviour_runner + describe "#add_example_group affecting passed in example_group" do + it "runs all examples when options.examples is nil" do + example_1_has_run = false + example_2_has_run = false + @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do + it "runs 1" do + example_1_has_run = true + end + it "runs 2" do + example_2_has_run = true + end + end + + @options.examples = nil + + @options.add_example_group @example_group + @options.run_examples + example_1_has_run.should be_true + example_2_has_run.should be_true + end + + it "keeps all example_definitions when options.examples is empty" do + example_1_has_run = false + example_2_has_run = false + @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do + it "runs 1" do + example_1_has_run = true + end + it "runs 2" do + example_2_has_run = true + end + end + + @options.examples = [] + + @options.add_example_group @example_group + @options.run_examples + example_1_has_run.should be_true + example_2_has_run.should be_true + end end - it "sets Expectations differ when differ_class is set" do - @options.differ_class = Spec::Expectations::Differs::Default - Spec::Expectations.should_receive(:differ=).with(anything()).and_return do |arg| - arg.class.should == Spec::Expectations::Differs::Default + describe "#add_example_group affecting example_group" do + it "adds example_group when example_group has example_definitions and is not shared" do + @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do + it "uses this example_group" do + end + end + + @options.number_of_examples.should == 0 + @options.add_example_group @example_group + @options.number_of_examples.should == 1 + @options.example_groups.length.should == 1 end - @options.configure end - it "creates a Reporter" do - formatter = ::Spec::Runner::Formatter::BaseFormatter.new(:somewhere) - @options.formatters << formatter - reporter = Reporter.new(@formatters, @backtrace_tweaker) - Reporter.should_receive(:new).with(@options.formatters, @options.backtrace_tweaker).and_return(reporter) - @options.configure - @options.reporter.should === reporter + describe "#remove_example_group" do + it "should remove the ExampleGroup from the list of ExampleGroups" do + @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do + end + @options.add_example_group @example_group + @options.example_groups.should include(@example_group) + + @options.remove_example_group @example_group + @options.example_groups.should_not include(@example_group) + end end - it "sets colour and dry_run on the formatters" do - @options.colour = true - @options.dry_run = true - formatter = ::Spec::Runner::Formatter::BaseTextFormatter.new(:somewhere) - formatter.should_receive(:colour=).with(true) - formatter.should_receive(:dry_run=).with(true) - @options.formatters << formatter - @options.configure + describe "#run_examples" do + it "should use the standard runner by default" do + runner = ::Spec::Runner::ExampleGroupRunner.new(@options) + ::Spec::Runner::ExampleGroupRunner.should_receive(:new). + with(@options). + and_return(runner) + @options.user_input_for_runner = nil + + @options.run_examples + end + + it "should use a custom runner when given" do + runner = Custom::ExampleGroupRunner.new(@options, nil) + Custom::ExampleGroupRunner.should_receive(:new). + with(@options, nil). + and_return(runner) + @options.user_input_for_runner = "Custom::ExampleGroupRunner" + + @options.run_examples + end + + it "should use a custom runner with extra options" do + runner = Custom::ExampleGroupRunner.new(@options, 'something') + Custom::ExampleGroupRunner.should_receive(:new). + with(@options, 'something'). + and_return(runner) + @options.user_input_for_runner = "Custom::ExampleGroupRunner:something" + + @options.run_examples + end + + describe "#run_examples when there are example_group" do + before(:each) do + @options.add_example_group Class.new(::Spec::Example::ExampleGroup) + @options.formatters << Formatter::BaseTextFormatter.new(@options, @out) + end + + it "runs the Examples and outputs the result" do + @options.run_examples + @out.string.should include("0 examples, 0 failures") + end + + it "sets #examples_run? to true" do + @options.examples_run?.should be_false + @options.run_examples + @options.examples_run?.should be_true + end + end + + describe "#run_examples when there are no example_group" do + before(:each) do + @options.formatters << Formatter::BaseTextFormatter.new(@options, @out) + end + + it "does not run Examples and does not output a result" do + @options.run_examples + @out.string.should_not include("examples") + @out.string.should_not include("failures") + end + + it "sets #examples_run? to false" do + @options.examples_run?.should be_false + @options.run_examples + @options.examples_run?.should be_false + end + end end end end diff --git a/vendor/plugins/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb b/vendor/plugins/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb index 2578dbe6d..e47b6c735 100644 --- a/vendor/plugins/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb @@ -10,13 +10,13 @@ module Spec it "should not barf on nil backtrace" do lambda do - @tweaker.tweak_backtrace(@error, "spec name") + @tweaker.tweak_backtrace(@error) end.should_not raise_error end it "should remove anything from textmate ruby bundle" do @error.set_backtrace(["/Applications/TextMate.app/Contents/SharedSupport/Bundles/Ruby.tmbundle/Support/tmruby.rb:147"]) - @tweaker.tweak_backtrace(@error, "spec name") + @tweaker.tweak_backtrace(@error) @error.backtrace.should be_empty end @@ -24,7 +24,7 @@ module Spec ["expectations", "mocks", "runner"].each do |child| element="/lib/spec/#{child}/anything.rb" @error.set_backtrace([element]) - @tweaker.tweak_backtrace(@error, "spec name") + @tweaker.tweak_backtrace(@error) unless (@error.backtrace.empty?) raise("Should have tweaked away '#{element}'") end @@ -34,7 +34,7 @@ module Spec it "should remove mock_frameworks/rspec" do element = "mock_frameworks/rspec" @error.set_backtrace([element]) - @tweaker.tweak_backtrace(@error, "spec name") + @tweaker.tweak_backtrace(@error) unless (@error.backtrace.empty?) raise("Should have tweaked away '#{element}'") end @@ -42,13 +42,13 @@ module Spec it "should remove bin spec" do @error.set_backtrace(["bin/spec:"]) - @tweaker.tweak_backtrace(@error, "spec name") + @tweaker.tweak_backtrace(@error) @error.backtrace.should be_empty end it "should clean up double slashes" do @error.set_backtrace(["/a//b/c//d.rb"]) - @tweaker.tweak_backtrace(@error, "spec name") + @tweaker.tweak_backtrace(@error) @error.backtrace.should include("/a/b/c/d.rb") end end diff --git a/vendor/plugins/rspec/spec/spec/runner/reporter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/reporter_spec.rb index 574625ce8..52377e7f3 100644 --- a/vendor/plugins/rspec/spec/spec/runner/reporter_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/reporter_spec.rb @@ -2,203 +2,187 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb' module Spec module Runner - - module ReporterSpecHelper - def setup - @io = StringIO.new + describe Reporter do + attr_reader :formatter_output, :options, :backtrace_tweaker, :formatter, :reporter, :example_group + before(:each) do + @formatter_output = StringIO.new + @options = Options.new(StringIO.new, StringIO.new) @backtrace_tweaker = stub("backtrace tweaker", :tweak_backtrace => nil) - @formatter = mock("formatter") - @reporter = Reporter.new([@formatter], @backtrace_tweaker) + options.backtrace_tweaker = backtrace_tweaker + @formatter = ::Spec::Runner::Formatter::BaseTextFormatter.new(options, formatter_output) + options.formatters << formatter + @reporter = Reporter.new(options) + @example_group = create_example_group("example_group") + reporter.add_example_group example_group end def failure Mocks::DuckTypeArgConstraint.new(:header, :exception) end - - def description(s) - Spec::DSL::Description.new(s) + + def create_example_group(description_text) + example_group = Class.new(Spec::Example::ExampleGroup) + example_group.describe description_text + example_group end - end - - describe Reporter do - include ReporterSpecHelper - before(:each) {setup} - - it "should tell formatter when behaviour is added" do - @formatter.should_receive(:add_behaviour).with(description("behaviour")) - @reporter.add_behaviour(description("behaviour")) + + it "should assign itself as the reporter to options" do + options.reporter.should equal(@reporter) + end + + it "should tell formatter when example_group is added" do + formatter.should_receive(:add_example_group).with(example_group) + reporter.add_example_group(example_group) end - it "should handle multiple behaviours with same name" do - @formatter.should_receive(:add_behaviour).exactly(3).times - @formatter.should_receive(:example_started).exactly(3).times - @formatter.should_receive(:example_passed).exactly(3).times - @formatter.should_receive(:start_dump) - @formatter.should_receive(:close).with(no_args) - @formatter.should_receive(:dump_summary).with(anything(), 3, 0, 0) - @reporter.add_behaviour(description("behaviour")) - @reporter.example_started("spec 1") - @reporter.example_finished("spec 1") - @reporter.add_behaviour(description("behaviour")) - @reporter.example_started("spec 2") - @reporter.example_finished("spec 2") - @reporter.add_behaviour(description("behaviour")) - @reporter.example_started("spec 3") - @reporter.example_finished("spec 3") - @reporter.dump + it "should handle multiple example_groups with same name" do + formatter.should_receive(:add_example_group).exactly(3).times + formatter.should_receive(:example_started).exactly(3).times + formatter.should_receive(:example_passed).exactly(3).times + formatter.should_receive(:start_dump) + formatter.should_receive(:dump_pending) + formatter.should_receive(:close).with(no_args) + formatter.should_receive(:dump_summary).with(anything(), 3, 0, 0) + reporter.add_example_group(create_example_group("example_group")) + reporter.example_started("spec 1") + reporter.example_finished("spec 1") + reporter.add_example_group(create_example_group("example_group")) + reporter.example_started("spec 2") + reporter.example_finished("spec 2") + reporter.add_example_group(create_example_group("example_group")) + reporter.example_started("spec 3") + reporter.example_finished("spec 3") + reporter.dump end it "should handle multiple examples with the same name" do error=RuntimeError.new - @formatter.should_receive(:add_behaviour).exactly(2).times - @formatter.should_receive(:example_passed).with("example").exactly(2).times - @formatter.should_receive(:example_failed).with("example", 1, failure) - @formatter.should_receive(:example_failed).with("example", 2, failure) - @formatter.should_receive(:dump_failure).exactly(2).times - @formatter.should_receive(:start_dump) - @formatter.should_receive(:close).with(no_args) - @formatter.should_receive(:dump_summary).with(anything(), 4, 2, 0) - @backtrace_tweaker.should_receive(:tweak_backtrace).twice - @reporter.add_behaviour(description("behaviour")) - @reporter.example_finished("example") - @reporter.example_finished("example", error) - @reporter.add_behaviour(description("behaviour")) - @reporter.example_finished("example") - @reporter.example_finished("example", error) - @reporter.dump + passing = ExampleGroup.new("example") + failing = ExampleGroup.new("example") + + formatter.should_receive(:add_example_group).exactly(2).times + formatter.should_receive(:example_passed).with(passing).exactly(2).times + formatter.should_receive(:example_failed).with(failing, 1, failure) + formatter.should_receive(:example_failed).with(failing, 2, failure) + formatter.should_receive(:dump_failure).exactly(2).times + formatter.should_receive(:start_dump) + formatter.should_receive(:dump_pending) + formatter.should_receive(:close).with(no_args) + formatter.should_receive(:dump_summary).with(anything(), 4, 2, 0) + backtrace_tweaker.should_receive(:tweak_backtrace).twice + + reporter.add_example_group(create_example_group("example_group")) + reporter.example_finished(passing) + reporter.example_finished(failing, error) + + reporter.add_example_group(create_example_group("example_group")) + reporter.example_finished(passing) + reporter.example_finished(failing, error) + reporter.dump end it "should push stats to formatter even with no data" do - @formatter.should_receive(:start_dump) - @formatter.should_receive(:dump_summary).with(anything(), 0, 0, 0) - @formatter.should_receive(:close).with(no_args) - @reporter.dump + formatter.should_receive(:start_dump) + formatter.should_receive(:dump_pending) + formatter.should_receive(:dump_summary).with(anything(), 0, 0, 0) + formatter.should_receive(:close).with(no_args) + reporter.dump end - + it "should push time to formatter" do - @formatter.should_receive(:start).with(5) - @formatter.should_receive(:start_dump) - @formatter.should_receive(:close).with(no_args) - @formatter.should_receive(:dump_summary) do |time, a, b| + formatter.should_receive(:start).with(5) + formatter.should_receive(:start_dump) + formatter.should_receive(:dump_pending) + formatter.should_receive(:close).with(no_args) + formatter.should_receive(:dump_summary) do |time, a, b| time.to_s.should match(/[0-9].[0-9|e|-]+/) end - @reporter.start(5) - @reporter.end - @reporter.dump - end - end - - describe Reporter, "reporting one passing example" do - include ReporterSpecHelper - before(:each) {setup} - - it "should tell formatter example passed" do - @formatter.should_receive(:example_passed) - @reporter.example_finished("example") - end - - it "should not delegate to backtrace tweaker" do - @formatter.should_receive(:example_passed) - @backtrace_tweaker.should_not_receive(:tweak_backtrace) - @reporter.example_finished("example") + reporter.start(5) + reporter.end + reporter.dump end - it "should account for passing example in stats" do - @formatter.should_receive(:example_passed) - @formatter.should_receive(:start_dump) - @formatter.should_receive(:dump_summary).with(anything(), 1, 0, 0) - @formatter.should_receive(:close).with(no_args) - @reporter.example_finished("example") - @reporter.dump - end - end + describe Reporter, "reporting one passing example" do + it "should tell formatter example passed" do + formatter.should_receive(:example_passed) + reporter.example_finished("example") + end - describe Reporter, "reporting one failing example" do - include ReporterSpecHelper - before(:each) {setup} + it "should not delegate to backtrace tweaker" do + formatter.should_receive(:example_passed) + backtrace_tweaker.should_not_receive(:tweak_backtrace) + reporter.example_finished("example") + end - it "should tell formatter that example failed" do - @formatter.should_receive(:example_failed) - @reporter.example_finished("example", RuntimeError.new) - end - - it "should delegate to backtrace tweaker" do - @formatter.should_receive(:example_failed) - @backtrace_tweaker.should_receive(:tweak_backtrace) - @reporter.example_finished("spec", RuntimeError.new) + it "should account for passing example in stats" do + formatter.should_receive(:example_passed) + formatter.should_receive(:start_dump) + formatter.should_receive(:dump_pending) + formatter.should_receive(:dump_summary).with(anything(), 1, 0, 0) + formatter.should_receive(:close).with(no_args) + reporter.example_finished("example") + reporter.dump + end end - it "should account for failing example in stats" do - @formatter.should_receive(:add_behaviour) - @formatter.should_receive(:example_failed).with("example", 1, failure) - @formatter.should_receive(:start_dump) - @formatter.should_receive(:dump_failure).with(1, anything()) - @formatter.should_receive(:dump_summary).with(anything(), 1, 1, 0) - @formatter.should_receive(:close).with(no_args) - @reporter.add_behaviour(description("behaviour")) - @reporter.example_finished("example", RuntimeError.new) - @reporter.dump - end - - end - - describe Reporter, "reporting one pending example (Not Yet Implemented)" do - include ReporterSpecHelper - before(:each) {setup} - - it "should tell formatter example is pending" do - @formatter.should_receive(:example_pending).with(description("behaviour"), "example", "Not Yet Implemented") - @formatter.should_receive(:add_behaviour).with(description("behaviour")) - @reporter.add_behaviour(description('behaviour')) - @reporter.example_finished("example", nil, nil, true) - end + describe Reporter, "reporting one failing example" do + it "should tell formatter that example failed" do + formatter.should_receive(:example_failed) + reporter.example_finished(example_group, RuntimeError.new) + end - it "should account for pending example in stats" do - @formatter.should_receive(:example_pending).with(description("behaviour"), "example", "Not Yet Implemented") - @formatter.should_receive(:start_dump) - @formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1) - @formatter.should_receive(:add_behaviour).with(description("behaviour")) - @formatter.should_receive(:close).with(no_args) - @reporter.add_behaviour(description('behaviour')) - @reporter.example_finished("example", nil, nil, true) - @reporter.dump - end - end + it "should delegate to backtrace tweaker" do + formatter.should_receive(:example_failed) + backtrace_tweaker.should_receive(:tweak_backtrace) + reporter.example_finished(ExampleGroup.new("example"), RuntimeError.new) + end - describe Reporter, "reporting one pending example (ExamplePendingError)" do - include ReporterSpecHelper - before(:each) {setup} + it "should account for failing example in stats" do + example = ExampleGroup.new("example") + formatter.should_receive(:example_failed).with(example, 1, failure) + formatter.should_receive(:start_dump) + formatter.should_receive(:dump_pending) + formatter.should_receive(:dump_failure).with(1, anything()) + formatter.should_receive(:dump_summary).with(anything(), 1, 1, 0) + formatter.should_receive(:close).with(no_args) + reporter.example_finished(example, RuntimeError.new) + reporter.dump + end - it "should tell formatter example is pending" do - @formatter.should_receive(:example_pending).with(description("behaviour"), "example", "reason") - @formatter.should_receive(:add_behaviour).with(description("behaviour")) - @reporter.add_behaviour(description('behaviour')) - @reporter.example_finished("example", Spec::DSL::ExamplePendingError.new("reason"), nil, false) end - it "should account for pending example in stats" do - @formatter.should_receive(:example_pending).with(description("behaviour"), "example", "reason") - @formatter.should_receive(:start_dump) - @formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1) - @formatter.should_receive(:close).with(no_args) - @formatter.should_receive(:add_behaviour).with(description("behaviour")) - @reporter.add_behaviour(description('behaviour')) - @reporter.example_finished("example", Spec::DSL::ExamplePendingError.new("reason"), nil, false) - @reporter.dump - end - end + describe Reporter, "reporting one pending example (ExamplePendingError)" do + it "should tell formatter example is pending" do + example = ExampleGroup.new("example") + formatter.should_receive(:example_pending).with(example_group.description, example, "reason") + formatter.should_receive(:add_example_group).with(example_group) + reporter.add_example_group(example_group) + reporter.example_finished(example, Spec::Example::ExamplePendingError.new("reason")) + end - describe Reporter, "reporting one pending example (PendingFixedError)" do - include ReporterSpecHelper - before(:each) {setup} + it "should account for pending example in stats" do + example = ExampleGroup.new("example") + formatter.should_receive(:example_pending).with(example_group.description, example, "reason") + formatter.should_receive(:start_dump) + formatter.should_receive(:dump_pending) + formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1) + formatter.should_receive(:close).with(no_args) + formatter.should_receive(:add_example_group).with(example_group) + reporter.add_example_group(example_group) + reporter.example_finished(example, Spec::Example::ExamplePendingError.new("reason")) + reporter.dump + end + end - it "should tell formatter pending example is fixed" do - @formatter.should_receive(:example_failed) do |name, counter, failure| - failure.header.should == "'behaviour example' FIXED" + describe Reporter, "reporting one pending example (PendingExampleFixedError)" do + it "should tell formatter pending example is fixed" do + formatter.should_receive(:example_failed) do |name, counter, failure| + failure.header.should == "'example_group example' FIXED" + end + formatter.should_receive(:add_example_group).with(example_group) + reporter.add_example_group(example_group) + reporter.example_finished(ExampleGroup.new("example"), Spec::Example::PendingExampleFixedError.new("reason")) end - @formatter.should_receive(:add_behaviour).with(description("behaviour")) - @reporter.add_behaviour(description('behaviour')) - @reporter.example_finished("example", Spec::DSL::PendingFixedError.new("reason"), nil, false) end end end diff --git a/vendor/plugins/rspec/spec/spec/runner/spec_parser_spec.rb b/vendor/plugins/rspec/spec/spec/runner/spec_parser_spec.rb index 6fb83dc35..301155d04 100644 --- a/vendor/plugins/rspec/spec/spec/runner/spec_parser_spec.rb +++ b/vendor/plugins/rspec/spec/spec/runner/spec_parser_spec.rb @@ -37,6 +37,21 @@ describe SpecParserSubject, "described" do end +describe SpecParserSubject, "described", :something => :something_else do + + it "7" do + end + +end + +describe "described", :something => :something_else do + + it "8" do + end + +end + + describe "SpecParser" do before(:each) do @p = Spec::Runner::SpecParser.new @@ -89,5 +104,21 @@ describe "SpecParser" do it "should find context and description and example for type" do @p.spec_name_for(File.open(__FILE__), 36).should == "SpecParserSubject described 6" end + + it "should find context and description for type with modifications" do + @p.spec_name_for(File.open(__FILE__), 40).should == "SpecParserSubject described" + end + + it "should find context and described and example for type with modifications" do + @p.spec_name_for(File.open(__FILE__), 43).should == "SpecParserSubject described 7" + end + + it "should find example group" do + @p.spec_name_for(File.open(__FILE__), 47).should == "described" + end + + it "should find example" do + @p.spec_name_for(File.open(__FILE__), 50).should == "described 8" + end end diff --git a/vendor/plugins/rspec/spec/spec/spec_classes.rb b/vendor/plugins/rspec/spec/spec/spec_classes.rb index 89eee72c4..73b0e33e8 100644 --- a/vendor/plugins/rspec/spec/spec/spec_classes.rb +++ b/vendor/plugins/rspec/spec/spec/spec_classes.rb @@ -51,6 +51,9 @@ module Spec [1] end + def items + @items_in_collection_with_size_method + end end class HandCodedMock @@ -96,10 +99,12 @@ module Spec end module Custom + require 'spec/runner/formatter/base_text_formatter' class Formatter < Spec::Runner::Formatter::BaseTextFormatter - attr_reader :where + attr_reader :options, :where - def initialize(where) + def initialize(options, where) + @options = options @where = where end end @@ -107,13 +112,18 @@ module Custom class BadFormatter < Spec::Runner::Formatter::BaseTextFormatter attr_reader :where - def initialize(where) + def initialize(options, where) bad_method end end - class BehaviourRunner - def initialize(options, arg=nil); end + class Differ + attr_reader :options + def initialize(options) + @options = options + end end end +class FakeReporter < Spec::Runner::Reporter +end diff --git a/vendor/plugins/rspec/spec/spec/translator_spec.rb b/vendor/plugins/rspec/spec/spec/translator_spec.rb index e11983a42..01293d9ee 100644 --- a/vendor/plugins/rspec/spec/spec/translator_spec.rb +++ b/vendor/plugins/rspec/spec/spec/translator_spec.rb @@ -1,4 +1,5 @@ require File.dirname(__FILE__) + '/../spec_helper.rb' +require 'spec/translator' describe "Translator" do before do @@ -7,7 +8,7 @@ describe "Translator" do it "should translate files" do from = File.dirname(__FILE__) + '/..' - to = File.dirname(__FILE__) + '/../../translated_specs' + to = "#{Dir.tmpdir}/translated_specs" @t.translate_dir(from, to) end diff --git a/vendor/plugins/rspec/spec/spec_helper.rb b/vendor/plugins/rspec/spec/spec_helper.rb index a7a4a82db..1318176d5 100644 --- a/vendor/plugins/rspec/spec/spec_helper.rb +++ b/vendor/plugins/rspec/spec/spec_helper.rb @@ -1,5 +1,4 @@ require 'stringio' -require 'rbconfig' dir = File.dirname(__FILE__) lib_path = File.expand_path("#{dir}/../lib") @@ -8,9 +7,10 @@ $_spec_spec = true # Prevents Kernel.exit in various places require 'spec' require 'spec/mocks' -require 'hpricot' # Needed to compare generated with wanted HTML +require 'spec/story' spec_classes_path = File.expand_path("#{dir}/../spec/spec/spec_classes") require spec_classes_path unless $LOAD_PATH.include?(spec_classes_path) +require File.dirname(__FILE__) + '/../lib/spec/expectations/differs/default' module Spec module Matchers @@ -40,7 +40,64 @@ module Spec def pass Pass.new end + + class CorrectlyOrderedMockExpectation + def initialize(&event) + @event = event + end + + def expect(&expectations) + expectations.call + @event.call + end + end + + def during(&block) + CorrectlyOrderedMockExpectation.new(&block) + end end end class NonStandardError < Exception; end + +module Custom + class ExampleGroupRunner + attr_reader :options, :arg + def initialize(options, arg) + @options, @arg = options, arg + end + + def load_files(files) + end + + def run + end + end +end + +def exception_from(&block) + exception = nil + begin + yield + rescue StandardError => e + exception = e + end + exception +end + +describe "sandboxed rspec_options", :shared => true do + attr_reader :options + + before(:all) do + @original_rspec_options = $rspec_options + end + + before(:each) do + @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new) + $rspec_options = options + end + + after do + $rspec_options = @original_rspec_options + end +end
\ No newline at end of file |