aboutsummaryrefslogtreecommitdiffstats
path: root/railties/test/commands/console_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'railties/test/commands/console_test.rb')
-rw-r--r--railties/test/commands/console_test.rb176
1 files changed, 176 insertions, 0 deletions
diff --git a/railties/test/commands/console_test.rb b/railties/test/commands/console_test.rb
new file mode 100644
index 0000000000..4aea3e980f
--- /dev/null
+++ b/railties/test/commands/console_test.rb
@@ -0,0 +1,176 @@
+require 'abstract_unit'
+require 'env_helpers'
+require 'rails/commands/console'
+
+class Rails::ConsoleTest < ActiveSupport::TestCase
+ include EnvHelpers
+
+ class FakeConsole
+ def self.started?
+ @started
+ end
+
+ def self.start
+ @started = true
+ end
+ end
+
+ def test_sandbox_option
+ console = Rails::Console.new(app, parse_arguments(["--sandbox"]))
+ assert console.sandbox?
+ end
+
+ def test_short_version_of_sandbox_option
+ console = Rails::Console.new(app, parse_arguments(["-s"]))
+ assert console.sandbox?
+ end
+
+ def test_no_options
+ console = Rails::Console.new(app, parse_arguments([]))
+ assert !console.sandbox?
+ end
+
+ def test_start
+ start
+
+ assert app.console.started?
+ assert_match(/Loading \w+ environment \(Rails/, output)
+ end
+
+ def test_start_with_sandbox
+ start ["--sandbox"]
+
+
+ assert app.console.started?
+ assert app.sandbox
+ assert_match(/Loading \w+ environment in sandbox \(Rails/, output)
+ end
+
+ if RUBY_VERSION < '2.0.0'
+ def test_debugger_option
+ console = Rails::Console.new(app, parse_arguments(["--debugger"]))
+ assert console.debugger?
+ end
+
+ def test_no_options_does_not_set_debugger_flag
+ console = Rails::Console.new(app, parse_arguments([]))
+ assert !console.debugger?
+ end
+
+ def test_start_with_debugger
+ stubbed_console = Class.new(Rails::Console) do
+ def require_debugger
+ end
+ end
+
+ rails_console = stubbed_console.new(app, parse_arguments(["--debugger"]))
+ silence_stream(STDOUT) { rails_console.start }
+ end
+ end
+
+ def test_console_with_environment
+ start ["-e production"]
+ assert_match(/\sproduction\s/, output)
+ end
+
+ def test_console_defaults_to_IRB
+ app = build_app(nil)
+ assert_equal IRB, Rails::Console.new(app).console
+ end
+
+ def test_default_environment_with_no_rails_env
+ with_rails_env nil do
+ start
+ assert_match(/\sdevelopment\s/, output)
+ end
+ end
+
+ def test_default_environment_with_rails_env
+ with_rails_env 'special-production' do
+ start
+ assert_match(/\sspecial-production\s/, output)
+ end
+ end
+
+ def test_default_environment_with_rack_env
+ with_rack_env 'production' do
+ start
+ assert_match(/\sproduction\s/, output)
+ end
+ end
+
+ def test_e_option
+ start ['-e', 'special-production']
+ assert_match(/\sspecial-production\s/, output)
+ end
+
+ def test_environment_option
+ start ['--environment=special-production']
+ assert_match(/\sspecial-production\s/, output)
+ end
+
+ def test_rails_env_is_production_when_first_argument_is_p
+ start ['p']
+ assert_match(/\sproduction\s/, output)
+ end
+
+ def test_rails_env_is_test_when_first_argument_is_t
+ start ['t']
+ assert_match(/\stest\s/, output)
+ end
+
+ def test_rails_env_is_development_when_argument_is_d
+ start ['d']
+ assert_match(/\sdevelopment\s/, output)
+ end
+
+ def test_rails_env_is_dev_when_argument_is_dev_and_dev_env_is_present
+ stubbed_console = Class.new(Rails::Console) do
+ def available_environments
+ ['dev']
+ end
+ end
+ options = stubbed_console.parse_arguments(['dev'])
+ assert_match('dev', options[:environment])
+ end
+
+ attr_reader :output
+ private :output
+
+ private
+
+ def start(argv = [])
+ rails_console = Rails::Console.new(app, parse_arguments(argv))
+ @output = capture(:stdout) { rails_console.start }
+ end
+
+ def app
+ @app ||= build_app(FakeConsole)
+ end
+
+ def build_app(console)
+ mocked_console = Class.new do
+ attr_reader :sandbox, :console
+
+ def initialize(console)
+ @console = console
+ end
+
+ def config
+ self
+ end
+
+ def sandbox=(arg)
+ @sandbox = arg
+ end
+
+ def load_console
+ end
+ end
+ mocked_console.new(console)
+ end
+
+ def parse_arguments(args)
+ Rails::Console.parse_arguments(args)
+ end
+end