summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/testtask.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/testtask.rb')
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/testtask.rb192
1 files changed, 192 insertions, 0 deletions
diff --git a/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/testtask.rb b/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/testtask.rb
new file mode 100644
index 0000000..b1737cd
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/testtask.rb
@@ -0,0 +1,192 @@
+# frozen_string_literal: true
+require_relative "../rake"
+require_relative "tasklib"
+
+module Rake
+
+ # Create a task that runs a set of tests.
+ #
+ # Example:
+ # require "rake/testtask"
+ #
+ # Rake::TestTask.new do |t|
+ # t.libs << "test"
+ # t.test_files = FileList['test/test*.rb']
+ # t.verbose = true
+ # end
+ #
+ # If rake is invoked with a "TEST=filename" command line option,
+ # then the list of test files will be overridden to include only the
+ # filename specified on the command line. This provides an easy way
+ # to run just one test.
+ #
+ # If rake is invoked with a "TESTOPTS=options" command line option,
+ # then the given options are passed to the test process after a
+ # '--'. This allows Test::Unit options to be passed to the test
+ # suite.
+ #
+ # Examples:
+ #
+ # rake test # run tests normally
+ # rake test TEST=just_one_file.rb # run just one test file.
+ # rake test TESTOPTS="-v" # run in verbose mode
+ # rake test TESTOPTS="--runner=fox" # use the fox test runner
+ #
+ class TestTask < TaskLib
+
+ # Name of test task. (default is :test)
+ attr_accessor :name
+
+ # List of directories added to $LOAD_PATH before running the
+ # tests. (default is 'lib')
+ attr_accessor :libs
+
+ # True if verbose test output desired. (default is false)
+ attr_accessor :verbose
+
+ # Test options passed to the test suite. An explicit
+ # TESTOPTS=opts on the command line will override this. (default
+ # is NONE)
+ attr_accessor :options
+
+ # Request that the tests be run with the warning flag set.
+ # E.g. warning=true implies "ruby -w" used to run the tests.
+ # (default is true)
+ attr_accessor :warning
+
+ # Glob pattern to match test files. (default is 'test/test*.rb')
+ attr_accessor :pattern
+
+ # Style of test loader to use. Options are:
+ #
+ # * :rake -- Rake provided test loading script (default).
+ # * :testrb -- Ruby provided test loading script.
+ # * :direct -- Load tests using command line loader.
+ #
+ attr_accessor :loader
+
+ # Array of command line options to pass to ruby when running test loader.
+ attr_accessor :ruby_opts
+
+ # Description of the test task. (default is 'Run tests')
+ attr_accessor :description
+
+ # Task prerequisites.
+ attr_accessor :deps
+
+ # Explicitly define the list of test files to be included in a
+ # test. +list+ is expected to be an array of file names (a
+ # FileList is acceptable). If both +pattern+ and +test_files+ are
+ # used, then the list of test files is the union of the two.
+ def test_files=(list)
+ @test_files = list
+ end
+
+ # Create a testing task.
+ def initialize(name=:test)
+ @name = name
+ @libs = ["lib"]
+ @pattern = nil
+ @options = nil
+ @test_files = nil
+ @verbose = false
+ @warning = true
+ @loader = :rake
+ @ruby_opts = []
+ @description = "Run tests" + (@name == :test ? "" : " for #{@name}")
+ @deps = []
+ if @name.is_a?(Hash)
+ @deps = @name.values.first
+ @name = @name.keys.first
+ end
+ yield self if block_given?
+ @pattern = "test/test*.rb" if @pattern.nil? && @test_files.nil?
+ define
+ end
+
+ # Create the tasks defined by this task lib.
+ def define
+ desc @description
+ task @name => Array(deps) do
+ effective_verbose = @verbose || FileUtilsExt.verbose_flag == true
+ FileUtilsExt.verbose(effective_verbose) do
+ args =
+ "#{ruby_opts_string} #{run_code} " +
+ "#{file_list_string} #{option_list(verbose: effective_verbose)}"
+ ruby args do |ok, status|
+ if !ok && status.respond_to?(:signaled?) && status.signaled?
+ raise SignalException.new(status.termsig)
+ elsif !ok
+ status = "Command failed with status (#{status.exitstatus})"
+ details = ": [ruby #{args}]"
+ message =
+ if Rake.application.options.trace or @verbose
+ status + details
+ else
+ status
+ end
+
+ fail message
+ end
+ end
+ end
+ end
+ self
+ end
+
+ def option_list(verbose: @verbose) # :nodoc:
+ opts = ENV["TESTOPTS"] ||
+ ENV["TESTOPT"] ||
+ ENV["TEST_OPTS"] ||
+ ENV["TEST_OPT"] ||
+ @options ||
+ ""
+ if verbose && !opts.split.include?("-v")
+ opts = opts.empty? ? "-v" : "#{opts} -v"
+ end
+ opts
+ end
+
+ def ruby_opts_string # :nodoc:
+ opts = @ruby_opts.dup
+ opts.unshift("-I\"#{lib_path}\"") unless @libs.empty?
+ opts.unshift("-w") if @warning
+ opts.join(" ")
+ end
+
+ def lib_path # :nodoc:
+ @libs.join(File::PATH_SEPARATOR)
+ end
+
+ def file_list_string # :nodoc:
+ file_list.map { |fn| "\"#{fn}\"" }.join(" ")
+ end
+
+ def file_list # :nodoc:
+ if ENV["TEST"]
+ FileList[ENV["TEST"].split(",")]
+ else
+ result = []
+ result += @test_files.to_a if @test_files
+ result += FileList[@pattern].to_a if @pattern
+ result
+ end
+ end
+
+ def ruby_version # :nodoc:
+ RUBY_VERSION
+ end
+
+ def run_code # :nodoc:
+ case @loader
+ when :direct
+ "-e \"ARGV.each{|f| require f}\""
+ when :testrb
+ "-S testrb"
+ when :rake
+ "#{__dir__}/rake_test_loader.rb"
+ end
+ end
+
+ end
+end