#!/usr/bin/env ruby # frozen_string_literal: true ENV['RAILS_ENV'] ||= 'test' require './lib/turbo_tests' require 'optparse' requires = [] formatters = [] verbose = false fail_fast = nil OptionParser.new do |opts| opts.on("-r", "--require PATH", "Require a file.") do |filename| requires << filename end opts.on("-f", "--format FORMATTER", "Choose a formatter.") do |name| formatters << { name: name, outputs: [] } end opts.on("-o", "--out FILE", "Write output to a file instead of $stdout") do |filename| if formatters.empty? formatters << { name: "progress", outputs: [] } end formatters.last[:outputs] << filename end opts.on("-v", "--verbose", "More output") do verbose = true end opts.on("--fail-fast=[N]") do |n| n = Integer(n) rescue nil fail_fast = (n.nil? || n < 1) ? 1 : n end end.parse!(ARGV) requires.each { |f| require(f) } if formatters.empty? formatters << { name: "progress", outputs: [] } end formatters.each do |formatter| if formatter[:outputs].empty? formatter[:outputs] << '-' end end # We do not want to include system specs by default, they are super # slow and require a selenium server to be running. default_spec_dirs = Dir.entries("#{Rails.root}/spec").reject do |entry| !File.directory?("spec/#{entry}") || ["..", ".", "system"].include?(entry) end.map { |entry| "spec/#{entry}" } files = ARGV.empty? ? default_spec_dirs : ARGV puts "Running turbo_rspec using files in #{files}" success = TurboTests::Runner.run( formatters: formatters, files: files, verbose: verbose, fail_fast: fail_fast ) if success exit 0 else exit 1 end