lib/parallel_tests/cucumber/gherkin_listener.rb



require 'gherkin'

module ParallelTests
  module Cucumber
    class GherkinListener
      attr_reader :collect

      def initialize
        @steps, @uris = [], []
        @collect = {}
        reset_counters!
      end

      def background(*args)
        @background = 1
      end

      def scenario(*args)
        @scenarios += 1
        @outline = @background = 0
      end

      def scenario_outline(*args)
        @outline = 1
      end

      def step(*args)
        if @background == 1
          @background_steps += 1
        elsif @outline > 0
          @outline_steps += 1
        else
          @collect[@uri] += 1
        end
      end

      def uri(path)
        @uri = path
        @collect[@uri] = 0
      end

      def examples(*args)
        @examples += 1
      end

      def eof(*args)
        @collect[@uri] += (@background_steps * @scenarios) + (@outline_steps * @examples)
        reset_counters!
      end

      def reset_counters!
        @examples = @outline = @outline_steps = @background = @background_steps = @scenarios = 0
      end

      # ignore lots of other possible callbacks ...
      def method_missing(*args)
      end
    end
  end
end