|
- # frozen_string_literal: true
-
- require 'spec_helper'
- require 'cucumber/cucumber_expressions/parameter_type_registry'
- require 'cucumber/cucumber_expressions/parameter_type'
- require 'cucumber/cucumber_expressions/cucumber_expression_generator'
- require 'cucumber/glue/snippet'
- require 'cucumber/formatter/console'
-
- module Cucumber
- module Glue
- describe Snippet do
- include Cucumber::Formatter::Console
- let(:code_keyword) { 'Given' }
-
- before do
- @step_text = 'we have a missing step'
- @multiline_argument = Core::Test::EmptyMultilineArgument.new
- @registry = CucumberExpressions::ParameterTypeRegistry.new
- @cucumber_expression_generator = CucumberExpressions::CucumberExpressionGenerator.new(@registry)
- end
-
- let(:snippet) do
- snippet_class.new(@cucumber_expression_generator, code_keyword, @step_text, @multiline_argument)
- end
-
- def unindented(snippet)
- indent(snippet.split("\n")[1..-2].join("\n"), -10)
- end
-
- describe Snippet::Regexp do
- let(:snippet_class) { Snippet::Regexp }
- let(:snippet_text) { snippet.to_s }
-
- it 'wraps snippet patterns in parentheses' do
- @step_text = 'A "string" with 4 spaces'
-
- expect(snippet_text).to eq unindented(%{
- Given(/^A "([^"]*)" with (\\d+) spaces$/) do |arg1, arg2|
- pending # Write code here that turns the phrase above into concrete actions
- end
- })
- end
-
- it 'recognises numbers in name and make according regexp' do
- @step_text = 'Cloud 9 yeah'
-
- expect(snippet_text).to eq unindented(%{
- Given(/^Cloud (\\d+) yeah$/) do |arg1|
- pending # Write code here that turns the phrase above into concrete actions
- end
- })
- end
-
- it 'recognises a mix of ints, strings and why not a table too' do
- @step_text = 'I have 9 "awesome" cukes in 37 "boxes"'
- @multiline_argument = Core::Test::DataTable.new([[]])
-
- expect(snippet_text).to eq unindented(%{
- Given(/^I have (\\d+) "([^"]*)" cukes in (\\d+) "([^"]*)"$/) do |arg1, arg2, arg3, arg4, table|
- # table is a Cucumber::MultilineArgument::DataTable
- pending # Write code here that turns the phrase above into concrete actions
- end
- })
- end
-
- it 'recognises quotes in name and make according regexp' do
- @step_text = 'A "first" arg'
-
- expect(snippet_text).to eq unindented(%{
- Given(/^A "([^"]*)" arg$/) do |arg1|
- pending # Write code here that turns the phrase above into concrete actions
- end
- })
- end
-
- it 'recognises several quoted words in name and make according regexp and args' do
- @step_text = 'A "first" and "second" arg'
-
- expect(snippet_text).to eq unindented(%{
- Given(/^A "([^"]*)" and "([^"]*)" arg$/) do |arg1, arg2|
- pending # Write code here that turns the phrase above into concrete actions
- end
- })
- end
-
- it 'does not use quote group when there are no quotes' do
- @step_text = 'A first arg'
-
- expect(snippet_text).to eq unindented(%{
- Given(/^A first arg$/) do
- pending # Write code here that turns the phrase above into concrete actions
- end
- })
- end
-
- it 'is helpful with tables' do
- @step_text = 'A "first" arg'
- @multiline_argument = Core::Test::DataTable.new([[]])
-
- expect(snippet_text).to eq unindented(%{
- Given(/^A "([^"]*)" arg$/) do |arg1, table|
- # table is a Cucumber::MultilineArgument::DataTable
- pending # Write code here that turns the phrase above into concrete actions
- end
- })
- end
-
- it 'is helpful with doc string' do
- @step_text = 'A "first" arg'
- @multiline_argument = MultilineArgument.from('', Core::Test::Location.new(''))
-
- expect(snippet_text).to eq unindented(%{
- Given(/^A "([^"]*)" arg$/) do |arg1, doc_string|
- pending # Write code here that turns the phrase above into concrete actions
- end
- })
- end
- end
-
- describe Snippet::Classic do
- let(:snippet_class) { Snippet::Classic }
-
- it 'renders snippet as unwrapped regular expression' do
- expect(snippet.to_s).to eq unindented(%(
- Given /^we have a missing step$/ do
- pending # Write code here that turns the phrase above into concrete actions
- end
- ))
- end
- end
-
- describe Snippet::Percent do
- let(:snippet_class) { Snippet::Percent }
-
- it 'renders snippet as percent-style regular expression' do
- expect(snippet.to_s).to eq unindented(%(
- Given %r{^we have a missing step$} do
- pending # Write code here that turns the phrase above into concrete actions
- end
- ))
- end
- end
-
- describe Snippet::CucumberExpression do
- let(:snippet_class) { Snippet::CucumberExpression }
-
- it 'renders snippet as cucumber expression' do
- @step_text = 'I have 2.3 cukes in my belly'
- @registry.define_parameter_type(CucumberExpressions::ParameterType.new(
- 'veg',
- /(cuke|banana)s?/,
- Object,
- ->(s) { s },
- true,
- false
- ))
- @registry.define_parameter_type(CucumberExpressions::ParameterType.new(
- 'cucumis',
- /(bella|cuke)s?/,
- Object,
- ->(s) { s },
- true,
- false
- ))
-
- expect(snippet.to_s).to eq unindented(%{
- Given('I have {float} {cucumis} in my belly') do |float, cucumis|
- # Given('I have {float} {veg} in my belly') do |float, veg|
- pending # Write code here that turns the phrase above into concrete actions
- end
- })
- end
- end
- end
- end
- end
|