mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
4efb36e7b4
This reverts commitf632f79b8d
, reversing changes made to98c7fe8769
. Closes #16343
136 lines
3.9 KiB
Ruby
136 lines
3.9 KiB
Ruby
require 'active_support/test_case'
|
|
require 'active_support/testing/autorun'
|
|
require 'rails/generators/rails/app/app_generator'
|
|
require 'tempfile'
|
|
|
|
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.
|
|
|
|
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_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
|
|
|
|
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
|
|
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
|