Sha256: ad1715bb7110a85c270c52483dce1e1c929b1dd0083400eeee7877d7411fd9f4

Contents?: true

Size: 1.78 KB

Versions: 29

Compression:

Stored size: 1.78 KB

Contents

require 'rake/testtask'

module Rails
  class TestTask < Rake::TestTask # :nodoc: all
    class TestInfo
      def initialize(tasks)
        @tasks = tasks
      end

      def files
        @tasks.map { |task|
          [task, translate(task)].find { |file| test_file?(file) }
        }.compact
      end

      def translate(file)
        if file =~ /^app\/(.*)$/
          "test/#{$1.sub(/\.rb$/, '')}_test.rb"
        else
          "test/#{file}_test.rb"
        end
      end

      def tasks
        @tasks - test_file_tasks - opt_names
      end

      def opts
        opts = opt_names
        if opts.any?
          "-n #{opts.join ' '}"
        end
      end

      private

      def test_file_tasks
        @tasks.find_all { |task|
          [task, translate(task)].any? { |file| test_file?(file) }
        }
      end

      def test_file?(file)
        file =~ /^test/ && File.file?(file) && !File.directory?(file)
      end

      def opt_names
        (@tasks - test_file_tasks).reject { |t| task_defined? t }
      end

      def task_defined?(task)
        Rake::Task.task_defined? task
      end
    end

    def self.test_info(tasks)
      TestInfo.new tasks
    end

    def initialize(name = :test)
      super
      @libs << "test" # lib *and* test seem like a better default
    end

    def define
      task @name do
        if ENV['TESTOPTS']
          ARGV.replace Shellwords.split ENV['TESTOPTS']
        end
        libs = @libs - $LOAD_PATH
        $LOAD_PATH.unshift(*libs)
        file_list.each { |fl|
          FileList[fl].to_a.each { |f| require File.expand_path f }
        }
      end
    end
  end

  # Silence the default description to cut down on `rake -T` noise.
  class SubTestTask < Rake::TestTask # :nodoc:
    def desc(string)
      # Ignore the description.
    end
  end
end

Version data entries

29 entries across 29 versions & 2 rubygems

Version Path
railties-4.0.13 lib/rails/test_unit/sub_test_task.rb
railties-4.0.13.rc1 lib/rails/test_unit/sub_test_task.rb
railties-4.0.11.1 lib/rails/test_unit/sub_test_task.rb
railties-4.0.12 lib/rails/test_unit/sub_test_task.rb
railties-4.0.11 lib/rails/test_unit/sub_test_task.rb
railties-4.0.10 lib/rails/test_unit/sub_test_task.rb
railties-4.0.10.rc2 lib/rails/test_unit/sub_test_task.rb
railties-4.0.10.rc1 lib/rails/test_unit/sub_test_task.rb
railties-4.0.9 lib/rails/test_unit/sub_test_task.rb
railties-4.0.8 lib/rails/test_unit/sub_test_task.rb
railties-4.0.7 lib/rails/test_unit/sub_test_task.rb
railties-4.0.6 lib/rails/test_unit/sub_test_task.rb
railties-4.0.6.rc3 lib/rails/test_unit/sub_test_task.rb
railties-4.0.6.rc2 lib/rails/test_unit/sub_test_task.rb
railties-4.0.6.rc1 lib/rails/test_unit/sub_test_task.rb
railties-4.0.5 lib/rails/test_unit/sub_test_task.rb
railties-4.0.4 lib/rails/test_unit/sub_test_task.rb
railties-4.0.4.rc1 lib/rails/test_unit/sub_test_task.rb
railties-4.0.3 lib/rails/test_unit/sub_test_task.rb
railties-4.0.2 lib/rails/test_unit/sub_test_task.rb