/
cucumber_steps.rb
68 lines (57 loc) · 1.89 KB
/
cucumber_steps.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
require 'cucumber'
module Greenletters
module CucumberHelpers
def greenletters_prepare_entry(text)
text.chomp + "\n"
end
def greenletters_massage_pattern(text)
Regexp.new(Regexp.escape(text.strip.tr_s(" \r\n\t", " ")).gsub('\ ', '\s+'))
end
end
end
World(Greenletters::CucumberHelpers)
Before do
@greenletters_process_table = Hash.new {|h,k|
raise "No such process defined: #{k}"
}
end
Given /^process activity is logged to "([^\"]*)"$/ do |filename|
logger = ::Logger.new(open(filename, 'w+'))
#logger.level = ::Logger::INFO
logger.level = ::Logger::DEBUG
@greenletters_process_log = logger
end
Given /^a process (?:"([^\"]*)" )?from command "([^\"]*)"$/ do |name, command|
name ||= "default"
options = {
}
options[:logger] = @greenletters_process_log if @greenletters_process_log
@greenletters_process_table[name] = Greenletters::Process.new(command, options)
end
Given /^I reply "([^\"]*)" to output "([^\"]*)"(?: from process "([^\"]*)")?$/ do
|reply, pattern, name|
name ||= "default"
pattern = greenletters_massage_pattern(pattern)
@greenletters_process_table[name].on(:output, pattern) do |process, match_data|
process << greenletters_prepare_entry(reply)
end
end
When /^I execute the process(?: "([^\"]*)")?$/ do |name|
name ||= "default"
@greenletters_process_table[name].start!
end
Then /^I should see the following output(?: from process "([^\"]*)")?:$/ do
|name, pattern|
name ||= "default"
pattern = greenletters_massage_pattern(pattern)
@greenletters_process_table[name].wait_for(:output, pattern)
end
When /^I enter "([^\"]*)"(?: into process "([^\"]*)")?$/ do
|input, name|
name ||= "default"
@greenletters_process_table[name] << greenletters_prepare_entry(input)
end
Then /^the process(?: "([^\"]*)")? should exit succesfully$/ do |name|
name ||= "default"
@greenletters_process_table[name].wait_for(:exit, 0)
end