module Cucumber::Runtime::UserInterface

Attributes

visitor[W]

Public Instance Methods

ask(question, timeout_seconds) click to toggle source

Suspends execution and prompts question to the console (STDOUT). An operator (manual tester) can then enter a line of text and hit <ENTER>. The entered text is returned, and both question and the result is added to the output using puts.

If you want a beep to happen (to grab the manual tester's attention), just prepend ASCII character 7 to the question:

ask("#{7.chr}How many cukes are in the external system?")

If that doesn't issue a beep, you can shell out to something else that makes a sound before invoking ask.

# File lib/cucumber/runtime/user_interface.rb, line 22
def ask(question, timeout_seconds)
  STDOUT.puts(question)
  STDOUT.flush
  puts(question)

  answer = if Cucumber::JRUBY
             jruby_gets(timeout_seconds)
           else
             mri_gets(timeout_seconds)
           end

  raise("Waited for input for #{timeout_seconds} seconds, then timed out.") unless answer
  puts(answer)
  answer
end
attach(src, media_type) click to toggle source

Embed src of MIME type mime_type into the output. The src argument may be a path to a file, or if it's an image it may also be a Base64 encoded image. The embedded data may or may not be ignored, depending on what kind of formatter(s) are active.

# File lib/cucumber/runtime/user_interface.rb, line 42
def attach(src, media_type)
  @visitor.attach(src, media_type)
end

Private Instance Methods

jruby_gets(timeout_seconds) click to toggle source
# File lib/cucumber/runtime/user_interface.rb, line 56
def jruby_gets(timeout_seconds)
  answer = nil
  t = java.lang.Thread.new do
    answer = STDIN.gets
  end
  t.start
  t.join(timeout_seconds * 1000)
  answer
end
mri_gets(timeout_seconds) click to toggle source
# File lib/cucumber/runtime/user_interface.rb, line 48
def mri_gets(timeout_seconds)
  Timeout.timeout(timeout_seconds) do
    STDIN.gets
  end
rescue Timeout::Error
  nil
end