Methods
A
S
T
W
Instance Public methods
assert_output(expected, timeout = 1)
# File railties/test/application/console_test.rb, line 109
def assert_output(expected, timeout = 1)
  timeout = Time.now + timeout

  output = ""
  until output.include?(expected) || Time.now > timeout
    if IO.select([@master], [], [], 0.1)
      output << @master.read(1)
    end
  end

  assert output.include?(expected), "#{expected.inspect} expected, but got:\n\n#{output}"
end
setup()
# File railties/test/application/console_test.rb, line 92
def setup
  skip "PTY unavailable" unless defined?(PTY) && PTY.respond_to?(:open)

  build_app
  app_file 'app/models/post.rb', <<-CODE
    class Post < ActiveRecord::Base
    end
  CODE
  system "#{app_path}/bin/rails runner 'Post.connection.create_table :posts'"

  @master, @slave = PTY.open
end
spawn_console()
# File railties/test/application/console_test.rb, line 129
def spawn_console
  Process.spawn(
    "#{app_path}/bin/rails console --sandbox",
    in: @slave, out: @slave, err: @slave
  )

  assert_output "> ", 30
end
teardown()
# File railties/test/application/console_test.rb, line 105
def teardown
  teardown_app
end
test_sandbox()
# File railties/test/application/console_test.rb, line 138
def test_sandbox
  spawn_console

  write_prompt "Post.count", "=> 0"
  write_prompt "Post.create"
  write_prompt "Post.count", "=> 1"
  @master.puts "quit"

  spawn_console

  write_prompt "Post.count", "=> 0"
  write_prompt "Post.transaction { Post.create; raise }"
  write_prompt "Post.count", "=> 0"
  @master.puts "quit"
end
write_prompt(command, expected_output = nil)
# File railties/test/application/console_test.rb, line 122
def write_prompt(command, expected_output = nil)
  @master.puts command
  assert_output command
  assert_output expected_output if expected_output
  assert_output "> "
end