--- /dev/null
+steps_for :running_rspec do
+
+ Given("the file $relative_path") do |relative_path|
+ @path = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "resources", relative_path))
+ unless File.exist?(@path)
+ raise "could not find file at #{@path}"
+ end
+ end
+
+ When("I run it with the $interpreter") do |interpreter|
+ stderr_file = Tempfile.new('rspec')
+ stderr_file.close
+ @stdout = case(interpreter)
+ when /^ruby interpreter/
+ args = interpreter.gsub('ruby interpreter','')
+ ruby("#{@path}#{args}", stderr_file.path)
+ when /^spec script/
+ args = interpreter.gsub('spec script','')
+ spec("#{@path}#{args}", stderr_file.path)
+ when 'CommandLine object' then cmdline(@path, stderr_file.path)
+ else raise "Unknown interpreter: #{interpreter}"
+ end
+ @stderr = IO.read(stderr_file.path)
+ @exit_code = $?.to_i
+ end
+
+ Then("the exit code should be $exit_code") do |exit_code|
+ if @exit_code != exit_code.to_i
+ raise "Did not exit with #{exit_code}, but with #{@exit_code}. Standard error:\n#{@stderr}"
+ end
+ end
+
+ Then("the $stream should match $regex") do |stream, string_or_regex|
+ written = case(stream)
+ when 'stdout' then @stdout
+ when 'stderr' then @stderr
+ else raise "Unknown stream: #{stream}"
+ end
+ written.should smart_match(string_or_regex)
+ end
+
+ Then("the $stream should not match $regex") do |stream, string_or_regex|
+ written = case(stream)
+ when 'stdout' then @stdout
+ when 'stderr' then @stderr
+ else raise "Unknown stream: #{stream}"
+ end
+ written.should_not smart_match(string_or_regex)
+ end
+end