spec/spec_helper.rb in timcharper-spork-0.4.4 vs spec/spec_helper.rb in timcharper-spork-0.5.0
- old
+ new
@@ -1,20 +1,102 @@
require 'rubygems'
require 'spec'
-$LOAD_PATH.unshift(File.dirname(__FILE__))
-$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
-SPEC_TMP_DIR = File.dirname(__FILE__) + "/tmp"
-require 'spork'
-require 'spork/runner.rb'
-require 'spork/server.rb'
-require 'stringio'
+unless $spec_helper_loaded
+ $spec_helper_loaded = true
-Spec::Runner.configure do |config|
- config.before(:each) do
- $test_stdout = StringIO.new
+ $LOAD_PATH.unshift(File.expand_path('../lib', File.dirname(__FILE__)))
+ SPEC_TMP_DIR = File.expand_path('tmp', File.dirname(__FILE__))
+
+ require 'spork'
+ require 'spork/runner.rb'
+ require 'spork/server.rb'
+ require 'spork/diagnoser.rb'
+ require 'stringio'
+ require 'fileutils'
+
+ Spec::Runner.configure do |config|
+ config.before(:each) do
+ $test_stdout = StringIO.new
+ $test_stderr = StringIO.new
+ end
+
+ config.after(:each) do
+ FileUtils.rm_rf(SPEC_TMP_DIR) if File.directory?(SPEC_TMP_DIR)
+
+ end
+
+ def create_file(filename, contents)
+ FileUtils.mkdir_p(SPEC_TMP_DIR) unless File.directory?(SPEC_TMP_DIR)
+
+ in_current_dir do
+ FileUtils.mkdir_p(File.dirname(filename))
+ File.open(filename, 'wb') { |f| f << contents }
+ end
+ end
+
+ def in_current_dir(&block)
+ Dir.chdir(current_dir, &block)
+ end
+
+ def current_dir
+ @current_dir ||= SPEC_TMP_DIR
+ end
end
+
+
+ module Spec
+ module Matchers
+ class IncludeAStringLike
+ def initialize(substring_or_regex)
+ case substring_or_regex
+ when String
+ @regex = Regexp.new(Regexp.escape(substring_or_regex))
+ when Regexp
+ @regex = substring_or_regex
+ else
+ raise ArgumentError, "don't know what to do with the #{substring_or_regex.class} you provided"
+ end
+ end
+
+ def matches?(list_of_strings)
+ @list_of_strings = list_of_strings
+ @list_of_strings.any? { |s| s =~ @regex }
+ end
+ def failure_message
+ "#{@list_of_strings.inspect} expected to include a string like #{@regex.inspect}"
+ end
+ def negative_failure_message
+ "#{@list_of_strings.inspect} expected to not include a string like #{@regex.inspect}, but did"
+ end
+ end
+
+ def include_a_string_like(substring_or_regex)
+ IncludeAStringLike.new(substring_or_regex)
+ end
+ end
+ end
+
+ module Spork::TestIOStreams
+ def self.included(klass)
+ klass.send(:extend, ::Spork::TestIOStreams::ClassMethods)
+ end
- config.after(:each) do
- FileUtils.rm_rf(SPEC_TMP_DIR)
+ def stderr
+ self.class.stderr
+ end
+
+ def stdout
+ self.class.stdout
+ end
+
+ module ClassMethods
+ def stderr
+ $test_stderr
+ end
+
+ def stdout
+ $test_stdout
+ end
+ end
end
end