Module: Lucid::InterfaceRb::RbDomain

Defined in:
lib/lucid/interface_rb/rb_world.rb

Overview

Defines the basic DSL methods available in all Lucid test definitions.

You can, and probably should, extend this DSL with your own methods that make sense in your own domain.

Constant Summary collapse

AnsiEscapes =
Gherkin::Formatter::AnsiEscapes

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#__lucid_runtime=(value) ⇒ Object (writeonly)



21
22
23
# File 'lib/lucid/interface_rb/rb_world.rb', line 21

def __lucid_runtime=(value)
  @__lucid_runtime = value
end

#__natural_language=(value) ⇒ Object (writeonly)



21
22
23
# File 'lib/lucid/interface_rb/rb_world.rb', line 21

def __natural_language=(value)
  @__natural_language = value
end

Instance Method Details

#ask(question, timeout_seconds = 60) ⇒ Object

Pause the tests and ask the operator for input



92
93
94
# File 'lib/lucid/interface_rb/rb_world.rb', line 92

def ask(question, timeout_seconds=60)
  @__lucid_runtime.ask(question, timeout_seconds)
end

#doc_string(string_without_triple_quotes, content_type = '', line_offset = 0) ⇒ Object

Create an AST::DocString object

Useful in conjunction with the #step method, when want to specify a content type.

Examples:

Create a multiline string

code = multiline_string(%{
  puts "this is ruby code"
%}, 'ruby')


75
76
77
78
# File 'lib/lucid/interface_rb/rb_world.rb', line 75

def doc_string(string_without_triple_quotes, content_type='', line_offset=0)
  # TODO: rename this method to multiline_string
  @__lucid_runtime.doc_string(string_without_triple_quotes, content_type, line_offset)
end

#embed(file, mime_type, label = 'Screenshot') ⇒ Object

Embed an image in the output



97
98
99
# File 'lib/lucid/interface_rb/rb_world.rb', line 97

def embed(file, mime_type, label='Screenshot')
  @__lucid_runtime.embed(file, mime_type, label)
end

#inspectObject

Prints the list of modules that are included in the Domain



116
117
118
119
120
121
122
# File 'lib/lucid/interface_rb/rb_world.rb', line 116

def inspect
  modules = [self.class]
  (class << self; self; end).instance_eval do
    modules += included_modules
  end
  sprintf("#<%s:0x%x>", modules.join('+'), self.object_id)
end

#pending(message = 'TODO') ⇒ Object

Mark the matched step as pending.



102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/lucid/interface_rb/rb_world.rb', line 102

def pending(message = 'TODO')
  if block_given?
    begin
      yield
    rescue Exception
      raise Pending.new(message)
    end
    raise Pending.new("Expected pending '#{message}' to fail. No error was raised. No longer pending?")
  else
    raise Pending.new(message)
  end
end

#puts(*messages) ⇒ Object

Note:

Lucid might surprise you with the behavior of this method. Instead of sending the output directly to STDOUT, Lucid will intercept and cache the message until the current step has finished, and then display it.

If you’d prefer to see the message immediately, call Kernel.puts instead.

Print a message to the output.



87
88
89
# File 'lib/lucid/interface_rb/rb_world.rb', line 87

def puts(*messages)
  @__lucid_runtime.puts(*messages)
end

#step(name, multiline_argument = nil) ⇒ Object

Run a single Gherkin step

Examples:

Call another step

step "I am logged in"

Call a step with quotes in the name

step %{the user "Jeff" is logged in}

Passing a table

step "the following users exist:", table(%{
  | name   | email           |
  | Jeff   | [email protected]   |
  | Harley | [email protected] |
})

Passing a multiline string

step "the email should contain:", "Dear sir,\nYou've won a prize!\n"

Parameters:



38
39
40
# File 'lib/lucid/interface_rb/rb_world.rb', line 38

def step(name, multiline_argument=nil)
  @__lucid_runtime.invoke(name, multiline_argument)
end

#steps(steps_text) ⇒ Object

Run a matcher of Gherkin

Examples:

steps %{
  Given the user "Jeff" exists
  And I am logged in as "Jeff"
}

Parameters:

  • steps_text (String)

    The Gherkin matcher to run



49
50
51
# File 'lib/lucid/interface_rb/rb_world.rb', line 49

def steps(steps_text)
  @__lucid_runtime.invoke_steps(steps_text, @__natural_language, caller[0])
end

#table(text_or_table, file = nil, line_offset = 0) ⇒ Object

Parse Gherkin into a AST::Table object.

Useful in conjunction with the #step method.

Examples:

Create a table

users = table(%{
  | name   | email           |
  | Jeff   | [email protected]   |
  | Harley | [email protected] |
})

Parameters:

  • text_or_table (String)

    The Gherkin string that represents the table



63
64
65
# File 'lib/lucid/interface_rb/rb_world.rb', line 63

def table(text_or_table, file=nil, line_offset=0)
  @__lucid_runtime.table(text_or_table, file, line_offset)
end

#to_sObject



124
125
126
# File 'lib/lucid/interface_rb/rb_world.rb', line 124

def to_s
  inspect
end

#Transform(arg) ⇒ Object

Call a Transform with a string from another Transform definition



15
16
17
18
# File 'lib/lucid/interface_rb/rb_world.rb', line 15

def Transform(arg)
  rb = @__lucid_runtime.load_code_language('rb')
  rb.execute_transforms([arg]).first
end