aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails/test_unit/sub_test_task.rb
blob: ac2bde2071b1f0d86e80951ece0cbb6fadbd0e5f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
require 'rake/testtask'

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

      def files
        @tasks.find_all { |t| File.file?(t) && !File.directory?(t) }
      end

      def tasks
        @tasks - files - opt_names
      end

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

      private

      def opt_names
        (@tasks - files).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