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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
|
# frozen_string_literal: true
require "active_support/testing/strict_warnings"
require "active_support/test_case"
require "active_support/testing/autorun"
require "rails/generators/rails/app/app_generator"
require "tempfile"
require "fileutils"
require "env_helpers"
module Rails
module Generators
class ARGVScrubberTest < ActiveSupport::TestCase # :nodoc:
# Future people who read this... These tests are just to surround the
# current behavior of the ARGVScrubber, they do not mean that the class
# *must* act this way, I just want to prevent regressions.
include EnvHelpers
def test_version
["-v", "--version"].each do |str|
scrubber = ARGVScrubber.new [str]
output = nil
exit_code = nil
scrubber.extend(Module.new {
define_method(:puts) { |string| output = string }
define_method(:exit) { |code| exit_code = code }
})
scrubber.prepare!
assert_equal "Rails #{Rails::VERSION::STRING}", output
assert_equal 0, exit_code
end
end
def test_default_help
argv = ["zomg", "how", "are", "you"]
scrubber = ARGVScrubber.new argv
args = scrubber.prepare!
assert_equal ["--help"] + argv.drop(1), args
end
def test_prepare_returns_args
scrubber = ARGVScrubber.new ["hi mom"]
args = scrubber.prepare!
assert_equal "--help", args.first
end
def test_no_mutations
scrubber = ARGVScrubber.new ["hi mom"].freeze
args = scrubber.prepare!
assert_equal "--help", args.first
end
def test_new_command_no_rc
scrubber = Class.new(ARGVScrubber) {
def self.default_rc_file
File.join(Dir.tmpdir, "whatever")
end
}.new ["new"]
args = scrubber.prepare!
assert_equal [], args
end
def test_default_rc_file_with_xdg_config_home
Dir.mktmpdir do |dir|
rc_file = File.join(dir, "rails/railsrc")
FileUtils.mkdir_p(File.dirname(rc_file))
FileUtils.touch(rc_file)
switch_env("XDG_CONFIG_HOME", dir) do
assert_equal rc_file, ARGVScrubber.default_rc_file
end
end
end
def test_new_homedir_rc
file = Tempfile.new "myrcfile"
file.puts "--hello-world"
file.flush
message = nil
scrubber = Class.new(ARGVScrubber) {
define_singleton_method(:default_rc_file) do
file.path
end
define_method(:puts) { |msg| message = msg }
}.new ["new"]
args = scrubber.prepare!
assert_equal ["--hello-world"], args
assert_match "hello-world", message
assert_match file.path, message
ensure
file.close
file.unlink
end
def test_rc_whitespace_separated
file = Tempfile.new "myrcfile"
file.puts "--hello --world"
file.flush
scrubber = Class.new(ARGVScrubber) {
define_method(:puts) { |msg| }
}.new ["new", "--rc=#{file.path}"]
args = scrubber.prepare!
assert_equal ["--hello", "--world"], args
ensure
file.close
file.unlink
end
def test_rc_lines_with_comments
file = Tempfile.new "myrcfile"
file.puts "--hello # --world"
file.puts "--love"
file.puts "# --hate"
file.flush
scrubber = Class.new(ARGVScrubber) {
define_method(:puts) { |msg| }
}.new ["new", "--rc=#{file.path}"]
args = scrubber.prepare!
assert_equal ["--hello", "--love"], args
ensure
file.close
file.unlink
end
def test_new_rc_option
file = Tempfile.new "myrcfile"
file.puts "--hello-world"
file.flush
message = nil
scrubber = Class.new(ARGVScrubber) {
define_method(:puts) { |msg| message = msg }
}.new ["new", "--rc=#{file.path}"]
args = scrubber.prepare!
assert_equal ["--hello-world"], args
assert_match "hello-world", message
assert_match file.path, message
ensure
file.close
file.unlink
end
def test_new_rc_option_and_custom_options
file = Tempfile.new "myrcfile"
file.puts "--hello"
file.puts "--world"
file.flush
scrubber = Class.new(ARGVScrubber) {
define_method(:puts) { |msg| }
}.new ["new", "tenderapp", "--love", "--rc=#{file.path}"]
args = scrubber.prepare!
assert_equal ["tenderapp", "--hello", "--world", "--love"], args
ensure
file.close
file.unlink
end
def test_no_rc
scrubber = ARGVScrubber.new ["new", "--no-rc"]
args = scrubber.prepare!
assert_equal [], args
end
end
end
end
|