class RBS::CLI

def run_test(args, options)

def run_test(args, options)
  # @type var unchecked_classes: Array[String]
  unchecked_classes = []
  # @type var targets: Array[String]
  targets = []
  # @type var sample_size: String?
  sample_size = nil
  # @type var double_suite: String?
  double_suite = nil
  (opts = OptionParser.new do |opts|
    opts.banner = <<EOB
e: rbs [rbs options...] test [test options...] COMMAND
ples:
rbs test rake test
rbs --log-level=debug test --target SomeModule::* rspec
rbs test --target SomeModule::* --target AnotherModule::* --target SomeClass rake test
ons:
    opts.on("--target TARGET", "Sets the runtime test target") do |target|
      targets << target
    end
    opts.on("--sample-size SAMPLE_SIZE", "Sets the sample size") do |size|
      sample_size = size
    end
    opts.on("--unchecked-class UNCHECKED_CLASS", "Sets the class that would not be checked") do |unchecked_class|
      unchecked_classes << unchecked_class
    end
    opts.on("--double-suite DOUBLE_SUITE", "Sets the double suite in use (currently supported: rspec | minitest)") do |suite|
      double_suite = suite
    end
  end).order!(args)
  if args.length.zero?
    stdout.puts opts.help
    exit 1
  end
  # @type var env_hash: Hash[String, String?]
  env_hash = {
    'RUBYOPT' => "#{ENV['RUBYOPT']} -rrbs/test/setup",
    'RBS_TEST_OPT' => test_opt(options),
    'RBS_TEST_LOGLEVEL' => RBS.logger_level,
    'RBS_TEST_SAMPLE_SIZE' => sample_size,
    'RBS_TEST_DOUBLE_SUITE' => double_suite,
    'RBS_TEST_UNCHECKED_CLASSES' => (unchecked_classes.join(',') unless unchecked_classes.empty?),
    'RBS_TEST_TARGET' => (targets.join(',') unless targets.empty?)
  }
  # @type var out: String
  # @type var err: String
  out, err, status = Open3.capture3(env_hash, *args)
  stdout.print(out)
  stderr.print(err)
  status
end