Sha256: ae04ab15c09c735df6665455c959829e15b7e15cadf83cf07957643ef1c3540e

Contents?: true

Size: 1.57 KB

Versions: 10

Compression:

Stored size: 1.57 KB

Contents

module Zapata
  module RZpec
    class Runner
      attr_reader :ran

      def initialize(spec_filename)
        @spec_filename = spec_filename
        run
        # silence { run }
      end

      def silence
        original_stderr = $stderr.dup
        original_stdout = $stdout.dup

        $stdout.reopen('/dev/null', 'w')
        $stdout.reopen('/dev/null', 'w')

        yield

        $stderr = original_stderr
        $stdout = original_stdout
      end

      def methodz
        examples.index_by { |ex| ex['description'].delete('#').to_sym }
      end

      def result_message(method_name)
        methodz[method_name]['exception']['message']
      end

      def expected(method_name)
        report_lines = result_message(method_name).to_s.split(/\n/)
        expected_line = report_lines.detect { |line| line.match('got:') }

        if expected_line
          clean_expected_line = expected_line[10..-1]

          if (matches = clean_expected_line.match(/\#\<(.+):(.+)\>/))
            "'Returned instance object #{matches[1]}'"
          else
            Printer.print(Diver.dive(Parser::CurrentRuby.parse(clean_expected_line)).to_raw)
          end
        else
         "'Exception in RSpec'"
        end
      end

      def run
        @ran = true

        @stdin, @stdout, @stderr = Bundler.with_clean_env do
          Open3.popen3("bundle exec rspec #{@spec_filename} --format j")
        end
      end

      def examples
        parsed_json_result['examples']
      end

      def parsed_json_result
        @json ||= JSON.parse(@stdout.readlines.last)
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
zapata-0.1.6 lib/zapata/rzpec/runner.rb
zapata-0.1.5 lib/zapata/rzpec/runner.rb
zapata-0.1.4 lib/zapata/rzpec/runner.rb
zapata-0.1.3 lib/zapata/rzpec/runner.rb
zapata-0.1.2 lib/zapata/rzpec/runner.rb
zapata-0.1.1 lib/zapata/rzpec/runner.rb
zapata-0.1.0 lib/zapata/rzpec/runner.rb
zapata-0.0.3 lib/zapata/rzpec/runner.rb
zapata-0.0.2 lib/zapata/rzpec/runner.rb
zapata-0.0.1 lib/zapata/rzpec/runner.rb