Sha256: b9919410b854e2a4ba1c8543d26333db891415b90824ebba42b34175b62a7e0b

Contents?: true

Size: 1.71 KB

Versions: 1

Compression:

Stored size: 1.71 KB

Contents

module CucumberAnalytics
  class ParsedScenarioOutline < TestElement


    attr_accessor :tags
    attr_accessor :examples

    # Creates a new ParsedScenarioOutline object and, if *source_lines* is
    # provided, populates the object.
    def initialize(source_lines = nil)
      super

      @tags = []
      @examples = []

      parse_outline(source_lines) if source_lines
    end

    def contains
      @examples
    end


    private


    def parse_outline(source_lines)
      parse_feature_element_tags(source_lines)
      parse_feature_element(source_lines)
      parse_test_element_steps(source_lines)
      parse_outline_examples(source_lines)
    end

    def parse_feature_element_description(source_lines)
      until source_lines.first =~ /^\s*(?:(?:Given )|(?:When )|(?:Then )|(?:And )|(?:\* )| (?:Examples: ))/ or
          source_lines.empty?

        @description << source_lines.first.strip
        source_lines.shift
      end
    end

    def parse_outline_examples(source_lines)
      until source_lines.empty?
        current_example_line = source_lines.index { |line| line =~ /^\s*Examples/ }

        example_lines = source_lines.slice!(0..current_example_line)

        next_example_line = source_lines.index { |line| line =~ /^\s*Examples:/ }

        if next_example_line.nil?
          example_lines.concat(source_lines.slice!(0..source_lines.count))
        else
          while  source_lines[next_example_line - 1] =~ /^\s*@/
            next_example_line -= 1
          end

          example_lines.concat(source_lines.slice!(0...next_example_line))
        end

        @examples << OutlineExample.new(example_lines)
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cucumber_analytics-0.0.2 lib/cucumber_analytics/parsed_scenario_outline.rb