Sha256: a258a50e616856a7851ba5567a2b8a6ae8b1346ee5c3eabf891b3fdcaebc4b11

Contents?: true

Size: 1005 Bytes

Versions: 6

Compression:

Stored size: 1005 Bytes

Contents

module Daigaku
  require 'fileutils'

  class Test

    attr_reader :path

    CODE_REGEX = /\[\['solution::code'\]\]/

    def initialize(path)
      @unit_path = path
      @path = Dir[File.join(path, '*spec.rb')].first
    end

    def run(solution_code)
      spec_code = File.read(@path)
      patched_spec_code = insert_code(spec_code, solution_code.to_s)

      temp_spec = File.join(File.dirname(@path), "temp_#{File.basename(@path)}")
      create_temp_spec(temp_spec, patched_spec_code)

      result = %x{ rspec --color --format j #{temp_spec} }
      remove_file(temp_spec)

      TestResult.new(result)
    end

    private

    def insert_code(spec, code)
      spec.gsub(CODE_REGEX, code)
    end

    def create_temp_spec(path, content)
      base_path = File.dirname(path)
      FileUtils.mkdir_p(base_path) unless Dir.exist?(base_path)
      File.open(path, 'w') { |f| f.puts content }
    end

    def remove_file(path)
      FileUtils.rm(path) if File.exist?(path)
    end

  end

end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
daigaku-0.3.0 lib/daigaku/test.rb
daigaku-0.2.0 lib/daigaku/test.rb
daigaku-0.1.1 lib/daigaku/test.rb
daigaku-0.1.0 lib/daigaku/test.rb
daigaku-0.0.2 lib/daigaku/test.rb
daigaku-0.0.1 lib/daigaku/test.rb