require 'spec_helper' require 'cucumber/formatter/spec_helper' require 'cucumber/formatter/pretty' require 'cucumber/cli/options' module Cucumber module Formatter describe Pretty do extend SpecHelperDsl include SpecHelper context "With no options" do before(:each) do Cucumber::Term::ANSIColor.coloring = false @out = StringIO.new @formatter = Pretty.new(runtime, @out, {}) end describe "given a single feature" do before(:each) do run_defined_feature end describe "with a scenario" do define_feature <<-FEATURE Feature: Banana party Scenario: Monkey eats banana Given there are bananas FEATURE it "outputs the scenario name" do expect(@out.string).to include "Scenario: Monkey eats banana" end it "outputs the step" do expect(@out.string).to include "Given there are bananas" end end describe "with a background" do define_feature <<-FEATURE Feature: Banana party Background: Given a tree Scenario: Monkey eats banana Given there are bananas FEATURE it "outputs the gherkin" do expect(@out.string).to include(self.class.feature_content) end it "outputs the scenario name" do expect(@out.string).to include "Scenario: Monkey eats banana" end it "outputs the step" do expect(@out.string).to include "Given there are bananas" end end describe "with a scenario outline" do define_feature <<-FEATURE Feature: Fud Pyramid Scenario Outline: Monkey eats a balanced diet Given there are Examples: Fruit | Things | | apples | | bananas | Examples: Vegetables | Things | | broccoli | | carrots | FEATURE it "outputs the scenario outline" do lines = <<-OUTPUT Examples: Fruit | Things | | apples | | bananas | Examples: Vegetables | Things | | broccoli | | carrots | OUTPUT lines.split("\n").each do |line| expect(@out.string).to include line.strip end end it "has 4 undefined scenarios" do expect(@out.string).to include "4 scenarios (4 undefined)" end it "has 4 undefined steps" do expect(@out.string).to include "4 steps (4 undefined)" end context 'when the examples table header is wider than the rows' do define_feature <<-FEATURE Feature: Monkey Business Scenario Outline: Types of monkey Given there are Examples: | Types of monkey | | Hominidae | FEATURE it "outputs the scenario outline" do lines = <<-OUTPUT Examples: | Types of monkey | | Hominidae | OUTPUT lines.split("\n").each do |line| expect(@out.string).to include line.strip end end end end # To ensure https://rspec.lighthouseapp.com/projects/16211/tickets/475 remains fixed. describe "with a scenario outline with a pystring" do define_feature <<-FEATURE Feature: Scenario Outline: Monkey eats a balanced diet Given a multiline string: """ Monkeys eat """ Examples: | things | | apples | FEATURE it "outputs the scenario outline" do lines = <<-OUTPUT Given a multiline string: """ Monkeys eat """ Examples: | things | | apples | OUTPUT lines.split("\n").each do |line| expect(@out.string).to include line.strip end end end describe "with a step with a py string" do define_feature <<-FEATURE Feature: Traveling circus Scenario: Monkey goes to town Given there is a monkey called: """ foo """ FEATURE it "displays the pystring nested" do expect(@out.string).to include < true}) end describe "given a single feature" do before(:each) do run_defined_feature end describe "with a scenario" do define_feature <<-FEATURE Feature: Banana party Scenario: Monkey eats banana Given there are bananas FEATURE it "outputs the scenario name" do expect(@out.string).to include "Scenario: Monkey eats banana" end it "outputs the step" do expect(@out.string).to include "Given there are bananas" end end describe "with a scenario outline" do define_feature <<-FEATURE Feature: Fud Pyramid Scenario Outline: Monkey eats a balanced diet Given there are Examples: Fruit | Things | | apples | | bananas | Examples: Vegetables | Things | | broccoli | | carrots | FEATURE it "outputs the scenario outline" do lines = <<-OUTPUT Examples: Fruit | Things | | apples | | bananas | Examples: Vegetables | Things | | broccoli | | carrots | OUTPUT lines.split("\n").each do |line| expect(@out.string).to include line.strip end end it "has 4 undefined scenarios" do expect(@out.string).to include "4 scenarios (4 undefined)" end it "has 4 undefined steps" do expect(@out.string).to include "4 steps (4 undefined)" end end describe "with a step with a py string" do define_feature <<-FEATURE Feature: Traveling circus Scenario: Monkey goes to town Given there is a monkey called: """ foo """ FEATURE it "does not display the pystring" do expect(@out.string).not_to include < true})} let(:mappings) { Mappings.new(runtime) } before(:each) do Cucumber::Term::ANSIColor.coloring = false @out = StringIO.new @formatter = Pretty.new(runtime, @out, {}) end describe "given a single feature" do before(:each) do run_defined_feature end describe "with a scenario outline" do define_feature <<-FEATURE Feature: Fud Pyramid Scenario Outline: Monkey eats a balanced diet Given there are Examples: Fruit | Things | | apples | | bananas | Examples: Vegetables | Things | | broccoli | | carrots | FEATURE it "outputs the instantiated scenarios" do lines = <<-OUTPUT Examples: Fruit Scenario: | apples | Given there are apples Scenario: | bananas | Given there are bananas Examples: Vegetables Scenario: | broccoli | Given there are broccoli Scenario: | carrots | Given there are carrots OUTPUT lines.split("\n").each do |line| expect(@out.string).to include line.strip end end end end end context "In --expand mode with --source as an option" do let(:runtime) { Runtime.new({:expand => true})} let(:mappings) { Mappings.new(runtime) } before(:each) do Cucumber::Term::ANSIColor.coloring = false @out = StringIO.new @formatter = Pretty.new(runtime, @out, {:source => true}) end describe "given a single feature" do before(:each) do run_defined_feature end describe "with a scenario outline" do define_feature <<-FEATURE Feature: Fud Pyramid Scenario Outline: Monkey eats a balanced diet Given there are Examples: Fruit | Things | | apples | | bananas | Examples: Vegetables | Things | | broccoli | | carrots | FEATURE it "includes the source in the output" do lines = <<-OUTPUT Scenario Outline: Monkey eats a balanced diet # spec.feature:3 Given there are # spec.feature:4 Examples: Fruit Scenario: | apples | # spec.feature:8 Given there are apples # spec.feature:4 Scenario: | bananas | # spec.feature:9 Given there are bananas # spec.feature:4 Examples: Vegetables Scenario: | broccoli | # spec.feature:12 Given there are broccoli # spec.feature:4 Scenario: | carrots | # spec.feature:13 Given there are carrots # spec.feature:4 OUTPUT lines.split("\n").each do |line| expect(@out.string).to include line.strip end end context "With very wide cells" do define_feature <<-FEATURE Feature: Monkey Business Scenario Outline: Types of monkey Given there are Examples: | Types of monkey | Extra | | Hominidae | Very long cell content | FEATURE it "the scenario line controls the source indentation" do lines = <<-OUTPUT Examples: Scenario: | Hominidae | Very long cell content | # spec.feature:8 Given there are Hominidae # spec.feature:4 OUTPUT lines.split("\n").each do |line| expect(@out.string).to include line.strip end end end end end end end end end