Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion lib/cucumber/glue/snippet.rb
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def typed_pattern
def to_s
header = generated_expressions.each_with_index.map do |expr, i|
prefix = i.zero? ? '' : '# '
"#{prefix}#{code_keyword}('#{expr.source}') do#{parameters(expr)}"
"#{prefix}#{code_keyword}('#{escaped_expression_source(expr)}') do#{parameters(expr)}"
end.join("\n")

body = <<~DOC.chomp
Expand All @@ -108,6 +108,10 @@ def parameters(expr)
parameter_names.empty? ? '' : " |#{parameter_names.join(', ')}|"
end

def escaped_expression_source(expr)
expr.source.gsub(/['\\]/) { |char| "\\#{char}" }
end

def self.description
'Cucumber Expressions'
end
Expand Down
11 changes: 11 additions & 0 deletions spec/cucumber/glue/snippet_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,17 @@ module Glue

expect(snippet.to_s).to eq(cucumber_output)
end

it 'escapes apostrophes in generated cucumber expression snippets' do
@step_text = "Lucy hears Sean's message"
cucumber_output = <<~CUKE.chomp
Given('Lucy hears Sean\\'s message') do
pending # Write code here that turns the phrase above into concrete actions
end
CUKE

expect(snippet.to_s).to eq(cucumber_output)
end
end
end
end
Expand Down