qat-cucumber 6.0.0 → 7.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/qat/cucumber/core_ext/formatter/html.rb +45 -45
- data/lib/qat/cucumber/core_ext/formatter/junit.rb +53 -53
- data/lib/qat/cucumber/core_ext/result.rb +16 -16
- data/lib/qat/cucumber/hooks/scenario.rb +34 -32
- data/lib/qat/cucumber/version.rb +1 -1
- data/lib/qat/formatter/builder.rb +86 -0
- data/lib/qat/formatter/console.rb +16 -77
- data/lib/qat/formatter/dashboard.rb +15 -59
- data/lib/qat/formatter/helper.rb +91 -0
- data/lib/qat/formatter/loggable.rb +4 -4
- data/lib/qat/formatter/scenario/name.rb +38 -19
- data/lib/qat/formatter/tags.rb +28 -31
- data/lib/qat/formatter/test_ids.rb +43 -34
- data/lib/qat/formatter/utility_function.rb +65 -0
- data/lib/qat/project/Gemfile +2 -11
- data/lib/qat/project/config/env-dummy/time.yml +1 -1
- data/lib/qat/project/features/support/hooks.rb +1 -1
- data/lib/qat/tasks/tags/test_ids/helpers.rb +5 -5
- metadata +16 -12
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 67139374f8bbe0d89a773371791ebb6a33ed8cd37da6ef93b92435ea49758424
         | 
| 4 | 
            +
              data.tar.gz: 28e5fb337b59eda8f6b9414b93a12f3cc47acb1ea15b800d11fb78ff7e1304ac
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: '048ca6237a83e00e8ca6b40a36668d256d054c95e4a9399d37da829da05d54e973edcbac82b5ca86f962319843aa8c1bfd005442122c73449ae68426476879a5'
         | 
| 7 | 
            +
              data.tar.gz: bb0b52ebfa6101d059dc55b2e1cdf1576131656ef7c5c7b8a08227933613f9123083d722bdc57ab0ebff3cc8af43123220bc7a364568495270c60d1e9e504e3f
         | 
| @@ -1,48 +1,48 @@ | |
| 1 1 | 
             
            require 'cucumber/formatter/html'
         | 
| 2 2 |  | 
| 3 | 
            -
            #Extension to the cucumber module adding the embed video options
         | 
| 4 | 
            -
            module Cucumber
         | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
            end
         | 
| 3 | 
            +
            # #Extension to the cucumber module adding the embed video options
         | 
| 4 | 
            +
            # module Cucumber
         | 
| 5 | 
            +
            #   #Extension to the formatter module adding the embed video options
         | 
| 6 | 
            +
            #   module Formatter
         | 
| 7 | 
            +
            #     #Extension to the html class adding the embed video options
         | 
| 8 | 
            +
            #     class Html
         | 
| 9 | 
            +
            #       #Method embed that also contains options to embed video case the extension is met
         | 
| 10 | 
            +
            #       def embed(src, mime_type, label)
         | 
| 11 | 
            +
            #         case (mime_type)
         | 
| 12 | 
            +
            #           when /^image\/(png|gif|jpg|jpeg)/
         | 
| 13 | 
            +
            #             unless File.file?(src) or src =~ /^data:image\/(png|gif|jpg|jpeg);base64,/
         | 
| 14 | 
            +
            #               type = mime_type =~ /;base[0-9]+$/ ? mime_type : mime_type + ";base64"
         | 
| 15 | 
            +
            #               src  = "data:" + type + "," + src
         | 
| 16 | 
            +
            #             end
         | 
| 17 | 
            +
            #             embed_image(src, label)
         | 
| 18 | 
            +
            #           when /^text\/plain/
         | 
| 19 | 
            +
            #             embed_text(src, label)
         | 
| 20 | 
            +
            #           when /^video\/\w+/
         | 
| 21 | 
            +
            #             embed_video(src,mime_type, label)
         | 
| 22 | 
            +
            #         end
         | 
| 23 | 
            +
            #       end
         | 
| 24 | 
            +
            #
         | 
| 25 | 
            +
            #       #Method to embed the video in the HTML Report
         | 
| 26 | 
            +
            #       def embed_video(src,mime_type, label)
         | 
| 27 | 
            +
            #         @video_id ||= 0
         | 
| 28 | 
            +
            #
         | 
| 29 | 
            +
            #         if @io.respond_to?(:path) and File.file?(src)
         | 
| 30 | 
            +
            #           out_dir = Pathname.new(File.dirname(File.absolute_path(@io.path)))
         | 
| 31 | 
            +
            #           src     = Pathname.new(File.absolute_path(src)).relative_path_from(out_dir)
         | 
| 32 | 
            +
            #         end
         | 
| 33 | 
            +
            #
         | 
| 34 | 
            +
            #         @builder.span(:class => 'embed') do |pre|
         | 
| 35 | 
            +
            #           pre << %{
         | 
| 36 | 
            +
            #           <a href="" onclick="video=document.getElementById('video_div_#{@video_id}'); video.style.display = (video.style.display == 'none' ? 'block' : 'none');return false"><br>#{label}</a><br> 
         | 
| 37 | 
            +
            #           <div id="video_div_#{@video_id}" style="display: none">
         | 
| 38 | 
            +
            #           <video id="video_#{@video_id}" autostart="0" width="800" height="600" controls> <source src="#{src}"  type="#{mime_type}" ></video><br>
         | 
| 39 | 
            +
            #           <a href="#{src}" download="#{src}">Download Video</a>
         | 
| 40 | 
            +
            #           </div>}
         | 
| 41 | 
            +
            #         end
         | 
| 42 | 
            +
            #
         | 
| 43 | 
            +
            #         @video_id += 1
         | 
| 44 | 
            +
            #       end
         | 
| 45 | 
            +
            #     end
         | 
| 46 | 
            +
            #   end
         | 
| 47 | 
            +
            # end
         | 
| 48 48 |  | 
| @@ -1,57 +1,57 @@ | |
| 1 1 | 
             
            require 'cucumber/formatter/junit'
         | 
| 2 2 |  | 
| 3 | 
            -
            module Cucumber
         | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 3 | 
            +
            # module Cucumber
         | 
| 4 | 
            +
            #   module Formatter
         | 
| 5 | 
            +
            #     # The formatter used for <tt>--format junit</tt>
         | 
| 6 | 
            +
            #     class Junit
         | 
| 7 7 |  | 
| 8 | 
            -
                  #Method to parse time in testsuite elements
         | 
| 9 | 
            -
                  def end_feature(feature_data)
         | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
                  end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                  #Method to parse time in testcase elements
         | 
| 26 | 
            -
                  def build_testcase(result, scenario_designation, output)
         | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
                  end
         | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
            end
         | 
| 8 | 
            +
                  # #Method to parse time in testsuite elements
         | 
| 9 | 
            +
                  # def end_feature(feature_data)
         | 
| 10 | 
            +
                  #   @testsuite = Builder::XmlMarkup.new(:indent => 2)
         | 
| 11 | 
            +
                  #   @testsuite.instruct!
         | 
| 12 | 
            +
                  #   @testsuite.testsuite(
         | 
| 13 | 
            +
                  #     :failures => feature_data[:failures],
         | 
| 14 | 
            +
                  #     :errors   => feature_data[:errors],
         | 
| 15 | 
            +
                  #     :skipped  => feature_data[:skipped],
         | 
| 16 | 
            +
                  #     :tests    => feature_data[:tests],
         | 
| 17 | 
            +
                  #     :time     => "%.3f" % feature_data[:time],
         | 
| 18 | 
            +
                  #     :name     => feature_data[:feature].name) do
         | 
| 19 | 
            +
                  #     @testsuite << feature_data[:builder].target!
         | 
| 20 | 
            +
                  #   end
         | 
| 21 | 
            +
                  #
         | 
| 22 | 
            +
                  #   write_file(feature_result_filename(feature_data[:feature].file), @testsuite.target!)
         | 
| 23 | 
            +
                  # end
         | 
| 24 | 
            +
                  #
         | 
| 25 | 
            +
                  # #Method to parse time in testcase elements
         | 
| 26 | 
            +
                  # def build_testcase(result, scenario_designation, output)
         | 
| 27 | 
            +
                  #   duration = ResultBuilder.new(result).test_case_duration
         | 
| 28 | 
            +
                  #   @current_feature_data[:time] += duration
         | 
| 29 | 
            +
                  #   classname = @current_feature_data[:feature].name
         | 
| 30 | 
            +
                  #   name = scenario_designation
         | 
| 31 | 
            +
                  #
         | 
| 32 | 
            +
                  #   @current_feature_data[:builder].testcase(:classname => classname, :name => name, :time => "%.3f" % duration) do
         | 
| 33 | 
            +
                  #     if !result.passed? && result.ok?(@config.strict)
         | 
| 34 | 
            +
                  #       @current_feature_data[:builder].skipped
         | 
| 35 | 
            +
                  #       @current_feature_data[:skipped] += 1
         | 
| 36 | 
            +
                  #     elsif !result.passed?
         | 
| 37 | 
            +
                  #       status = result.to_sym
         | 
| 38 | 
            +
                  #       exception = get_backtrace_object(result)
         | 
| 39 | 
            +
                  #       @current_feature_data[:builder].failure(:message => "#{status} #{name}", :type => status) do
         | 
| 40 | 
            +
                  #         @current_feature_data[:builder].cdata! output
         | 
| 41 | 
            +
                  #         @current_feature_data[:builder].cdata!(format_exception(exception)) if exception
         | 
| 42 | 
            +
                  #       end
         | 
| 43 | 
            +
                  #       @current_feature_data[:failures] += 1
         | 
| 44 | 
            +
                  #     end
         | 
| 45 | 
            +
                  #     @current_feature_data[:builder].tag!('system-out') do
         | 
| 46 | 
            +
                  #       @current_feature_data[:builder].cdata! strip_control_chars(@interceptedout.buffer_string)
         | 
| 47 | 
            +
                  #     end
         | 
| 48 | 
            +
                  #     @current_feature_data[:builder].tag!('system-err') do
         | 
| 49 | 
            +
                  #       @current_feature_data[:builder].cdata! strip_control_chars(@interceptederr.buffer_string)
         | 
| 50 | 
            +
                  #     end
         | 
| 51 | 
            +
                  #   end
         | 
| 52 | 
            +
                  #   @current_feature_data[:tests] += 1
         | 
| 53 | 
            +
                  # end
         | 
| 54 | 
            +
            #     end
         | 
| 55 | 
            +
            #   end
         | 
| 56 | 
            +
            # end
         | 
| 57 57 |  | 
| @@ -1,16 +1,16 @@ | |
| 1 | 
            -
            require 'cucumber/core/test/result'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            #Patch for Cucumber::Core::Test::Result::Unknown to implement methods used by the formatters
         | 
| 4 | 
            -
            #@since 1.1.0
         | 
| 5 | 
            -
            class Cucumber::Core::Test::Result::Unknown
         | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
            end
         | 
| 1 | 
            +
            # require 'cucumber/core/test/result'
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            # #Patch for Cucumber::Core::Test::Result::Unknown to implement methods used by the formatters
         | 
| 4 | 
            +
            # #@since 1.1.0
         | 
| 5 | 
            +
            # class Cucumber::Core::Test::Result::Unknown
         | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            #   #Dummy function
         | 
| 8 | 
            +
            #   def with_appended_backtrace(_)
         | 
| 9 | 
            +
            #     ''
         | 
| 10 | 
            +
            #   end
         | 
| 11 | 
            +
            #
         | 
| 12 | 
            +
            #   #Dummy function
         | 
| 13 | 
            +
            #   def with_filtered_backtrace(_)
         | 
| 14 | 
            +
            #     ''
         | 
| 15 | 
            +
            #   end
         | 
| 16 | 
            +
            # end
         | 
| @@ -2,6 +2,7 @@ | |
| 2 2 | 
             
            require 'cucumber'
         | 
| 3 3 | 
             
            require 'qat/logger'
         | 
| 4 4 |  | 
| 5 | 
            +
             | 
| 5 6 | 
             
            module QAT
         | 
| 6 7 | 
             
              module Cucumber
         | 
| 7 8 | 
             
                #Methods to execute with Cucumber Hooks and at_exit.
         | 
| @@ -24,7 +25,7 @@ module QAT | |
| 24 25 |  | 
| 25 26 | 
             
                    private
         | 
| 26 27 | 
             
                    def test_id(scenario)
         | 
| 27 | 
            -
                      outline_id = get_outline_id(scenario)
         | 
| 28 | 
            +
                      # outline_id = get_outline_id(scenario)
         | 
| 28 29 |  | 
| 29 30 | 
             
                      tags    = scenario_tags(scenario)
         | 
| 30 31 | 
             
                      tag     = tags.select { |tag| tag.match /^\@test\#/ }.first
         | 
| @@ -35,39 +36,40 @@ module QAT | |
| 35 36 | 
             
                                  'test_0'
         | 
| 36 37 | 
             
                                end
         | 
| 37 38 |  | 
| 38 | 
            -
                      "#{test_id}#{outline_id}"
         | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
                    def get_outline_id(scenario)
         | 
| 42 | 
            -
                      if scenario.is_a? ::Cucumber::RunningTestCase::ScenarioOutlineExample
         | 
| 43 | 
            -
                        test_case        = scenario.instance_exec { @test_case }
         | 
| 44 | 
            -
                        test_case_source = test_case.source
         | 
| 45 | 
            -
             | 
| 46 | 
            -
                        tables            = get_example_tables(test_case_source)
         | 
| 47 | 
            -
                        table_lines       = get_examples_size(tables)
         | 
| 48 | 
            -
                        table_num         = current_outline_index(tables, test_case_source)
         | 
| 49 | 
            -
                        previous_outlines = count_previous_outlines(table_lines, table_num)
         | 
| 50 | 
            -
                        "_#{previous_outlines + test_case_source[3].number}"
         | 
| 51 | 
            -
                      else
         | 
| 52 | 
            -
                        nil
         | 
| 53 | 
            -
                      end
         | 
| 54 | 
            -
                    end
         | 
| 55 | 
            -
             | 
| 56 | 
            -
                    def get_example_tables(test_case_source)
         | 
| 57 | 
            -
                      test_case_source[1].instance_exec { @examples_tables }
         | 
| 39 | 
            +
                      #"#{test_id}#{outline_id}"
         | 
| 40 | 
            +
                      "#{test_id}"
         | 
| 58 41 | 
             
                    end
         | 
| 59 42 |  | 
| 60 | 
            -
                    def  | 
| 61 | 
            -
             | 
| 62 | 
            -
                     | 
| 63 | 
            -
             | 
| 64 | 
            -
                     | 
| 65 | 
            -
             | 
| 66 | 
            -
                     | 
| 67 | 
            -
             | 
| 68 | 
            -
                     | 
| 69 | 
            -
             | 
| 70 | 
            -
                     | 
| 43 | 
            +
                    # def get_outline_id(scenario)
         | 
| 44 | 
            +
                    #   if scenario.is_a? ::Cucumber::RunningTestCase::ScenarioOutlineExample
         | 
| 45 | 
            +
                    #     test_case        = scenario.instance_exec { @test_case }
         | 
| 46 | 
            +
                    #     test_case_source = test_case.source
         | 
| 47 | 
            +
                    #
         | 
| 48 | 
            +
                    #     tables            = get_example_tables(test_case_source)
         | 
| 49 | 
            +
                    #     table_lines       = get_examples_size(tables)
         | 
| 50 | 
            +
                    #     table_num         = current_outline_index(tables, test_case_source)
         | 
| 51 | 
            +
                    #     previous_outlines = count_previous_outlines(table_lines, table_num)
         | 
| 52 | 
            +
                    #     "_#{previous_outlines + test_case_source[3].number}"
         | 
| 53 | 
            +
                    #   else
         | 
| 54 | 
            +
                    #     nil
         | 
| 55 | 
            +
                    #   end
         | 
| 56 | 
            +
                    # end
         | 
| 57 | 
            +
                    #
         | 
| 58 | 
            +
                    # def get_example_tables(test_case_source)
         | 
| 59 | 
            +
                    #   test_case_source[1].instance_exec { @examples_tables }
         | 
| 60 | 
            +
                    # end
         | 
| 61 | 
            +
                    #
         | 
| 62 | 
            +
                    # def get_examples_size(tables)
         | 
| 63 | 
            +
                    #   tables.each.map { |table| table.example_rows.size }
         | 
| 64 | 
            +
                    # end
         | 
| 65 | 
            +
                    #
         | 
| 66 | 
            +
                    # def current_outline_index(tables, test_case_source)
         | 
| 67 | 
            +
                    #   tables.index test_case_source[2]
         | 
| 68 | 
            +
                    # end
         | 
| 69 | 
            +
                    #
         | 
| 70 | 
            +
                    # def count_previous_outlines(table_lines, table_num)
         | 
| 71 | 
            +
                    #   table_lines[0...table_num].inject(0) { |sum, lines| sum += lines; sum }
         | 
| 72 | 
            +
                    # end
         | 
| 71 73 |  | 
| 72 74 | 
             
                    extend self
         | 
| 73 75 | 
             
                  end
         | 
    
        data/lib/qat/cucumber/version.rb
    CHANGED
    
    
| @@ -0,0 +1,86 @@ | |
| 1 | 
            +
             require_relative 'utility_function'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module QAT
         | 
| 4 | 
            +
              module Formatter
         | 
| 5 | 
            +
                # Helper for Formatters , most of the main methods are done to reduce code duplication
         | 
| 6 | 
            +
                module Builder
         | 
| 7 | 
            +
                  include QAT::Formatter::UtilityFuction
         | 
| 8 | 
            +
             | 
| 9 | 
            +
             | 
| 10 | 
            +
                  def build (test_case, ast_lookup)
         | 
| 11 | 
            +
                    @background_hash = nil
         | 
| 12 | 
            +
                    uri              = test_case.location.file
         | 
| 13 | 
            +
                    feature          = ast_lookup.gherkin_document(uri).feature
         | 
| 14 | 
            +
                    feature(feature, uri)
         | 
| 15 | 
            +
                    background = feature.children.first.background
         | 
| 16 | 
            +
                    background(background) if background
         | 
| 17 | 
            +
                    scenario(ast_lookup.scenario_source(test_case), test_case)
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  def feature (feature, uri)
         | 
| 21 | 
            +
                    feature_tags = feature.tags
         | 
| 22 | 
            +
                    create_feature_hash feature, uri
         | 
| 23 | 
            +
                    return if feature_tags.empty?
         | 
| 24 | 
            +
                    tags_array = []
         | 
| 25 | 
            +
                    feature_tags.each { |tag| tags_array << tag.name }
         | 
| 26 | 
            +
                    @feature_hash[:tags] = tags_array
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def scenario(scenario_source, test_case)
         | 
| 30 | 
            +
                    scenario    = scenario_source.type == :Scenario ? scenario_source.scenario : scenario_source.scenario_outline
         | 
| 31 | 
            +
                    @scenario   = {
         | 
| 32 | 
            +
                      id:          "#{@feature_hash[:id]};#{create_id_from_scenario_source(scenario_source)}",
         | 
| 33 | 
            +
                      keyword:     scenario.keyword,
         | 
| 34 | 
            +
                      name:        test_case.name,
         | 
| 35 | 
            +
                      description: scenario.description || '',
         | 
| 36 | 
            +
                      line:        get_lines_from_scenario(scenario_source, test_case),
         | 
| 37 | 
            +
                      type:        'scenario'
         | 
| 38 | 
            +
                    }
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                    get_scenario_tags test_case.tags
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  def get_scenario_tags tags
         | 
| 44 | 
            +
                    if tags.empty?
         | 
| 45 | 
            +
                      @scenario[:tags] = []
         | 
| 46 | 
            +
                    else
         | 
| 47 | 
            +
                      tags_array = []
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                     tags.each { |tag|
         | 
| 50 | 
            +
                        name = tag.name
         | 
| 51 | 
            +
                        if @test_id_tags
         | 
| 52 | 
            +
                          tags_array << name unless name.match(/@test#(\d+)/)
         | 
| 53 | 
            +
                        else
         | 
| 54 | 
            +
                          tags_array << name
         | 
| 55 | 
            +
                        end
         | 
| 56 | 
            +
                      }
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                      @scenario[:tags] = tags_array
         | 
| 59 | 
            +
                    end
         | 
| 60 | 
            +
                  end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
             | 
| 63 | 
            +
                  def create_id_from_scenario_source(scenario_source)
         | 
| 64 | 
            +
                    if scenario_source.type == :Scenario
         | 
| 65 | 
            +
                      @examples_values = nil
         | 
| 66 | 
            +
                      scenario_source.scenario.name
         | 
| 67 | 
            +
                    else
         | 
| 68 | 
            +
                      @examples_values      = []
         | 
| 69 | 
            +
                      scenario_outline_name = scenario_source.scenario_outline.name
         | 
| 70 | 
            +
                      examples_name         = scenario_source.examples.name
         | 
| 71 | 
            +
                      get_example_values scenario_source
         | 
| 72 | 
            +
                      @row_number = calculate_row_number(scenario_source)
         | 
| 73 | 
            +
                      "#{scenario_outline_name};#{examples_name};#{@row_number}"
         | 
| 74 | 
            +
                    end
         | 
| 75 | 
            +
                  end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
             | 
| 78 | 
            +
                  def add_values_to_examples(cells)
         | 
| 79 | 
            +
                    @examples_values =  cells.map do |data|
         | 
| 80 | 
            +
                      data[:value].to_s
         | 
| 81 | 
            +
                    end
         | 
| 82 | 
            +
                  end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
              end
         | 
| 86 | 
            +
            end
         | 
| @@ -1,8 +1,11 @@ | |
| 1 1 | 
             
            require 'fileutils'
         | 
| 2 2 | 
             
            require 'cucumber/formatter/console'
         | 
| 3 3 | 
             
            require 'cucumber/formatter/io'
         | 
| 4 | 
            +
            require 'cucumber/formatter/ast_lookup'
         | 
| 4 5 | 
             
            require 'cucumber/gherkin/formatter/escaping'
         | 
| 6 | 
            +
            require 'cucumber/deprecate'
         | 
| 5 7 | 
             
            require 'qat/logger'
         | 
| 8 | 
            +
            require_relative 'helper'
         | 
| 6 9 | 
             
            require_relative 'loggable'
         | 
| 7 10 |  | 
| 8 11 | 
             
            module QAT
         | 
| @@ -15,87 +18,23 @@ module QAT | |
| 15 18 | 
             
                  include ::FileUtils
         | 
| 16 19 | 
             
                  include ::Cucumber::Formatter::Io
         | 
| 17 20 | 
             
                  include ::Cucumber::Gherkin::Formatter::Escaping
         | 
| 21 | 
            +
                  include ::Cucumber::Formatter
         | 
| 18 22 | 
             
                  include QAT::Formatter::Loggable
         | 
| 19 23 | 
             
                  include QAT::Logger
         | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
                  def initialize( | 
| 23 | 
            -
                    @ | 
| 24 | 
            -
             | 
| 25 | 
            -
                     | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
                     | 
| 31 | 
            -
             | 
| 32 | 
            -
                    unless @current_feature
         | 
| 33 | 
            -
                      @current_feature = test_case.source[0]
         | 
| 34 | 
            -
                      log.info { "Running #{@current_feature.keyword}: \"#{@current_feature.name}\"" }
         | 
| 35 | 
            -
                      mdc_before_feature! @current_feature.name
         | 
| 36 | 
            -
                    end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                    @current_scenario = test_case.source[1]
         | 
| 39 | 
            -
                  end
         | 
| 40 | 
            -
             | 
| 41 | 
            -
                  #@api private
         | 
| 42 | 
            -
                  def after_feature *_
         | 
| 43 | 
            -
                    return if @options[:dry_run]
         | 
| 44 | 
            -
             | 
| 45 | 
            -
                    log.info { "Finished #{@current_feature.keyword}: \"#{@current_feature.name}\"" }
         | 
| 46 | 
            -
                    @current_feature = nil
         | 
| 47 | 
            -
                    mdc_after_feature!
         | 
| 48 | 
            -
                  end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                  #@api private
         | 
| 51 | 
            -
                  def after_test_case step, result
         | 
| 52 | 
            -
                    return if @options[:dry_run]
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                    log.error { result.exception } if result.failed?
         | 
| 55 | 
            -
             | 
| 56 | 
            -
                    log.info { "Finished #{@current_scenario.keyword}: \"#{format_scenario_name step}\" - #{result.to_sym}\n" } if @current_scenario
         | 
| 57 | 
            -
                  end
         | 
| 58 | 
            -
             | 
| 59 | 
            -
                  #@api private
         | 
| 60 | 
            -
                  def before_test_step step
         | 
| 61 | 
            -
                    return if @options[:dry_run]
         | 
| 62 | 
            -
             | 
| 63 | 
            -
                    begin_test_step step do |type|
         | 
| 64 | 
            -
                      case type
         | 
| 65 | 
            -
                        when :after_step
         | 
| 66 | 
            -
                          log.info "Step Done!" if @step_running
         | 
| 67 | 
            -
                        when :before_scenario
         | 
| 68 | 
            -
                          log.info { "Running #{@current_scenario.keyword}: \"#{format_scenario_name step}\"" }
         | 
| 69 | 
            -
                        when :before_step
         | 
| 70 | 
            -
                          log.info "Step Done!\n" if @step_running
         | 
| 71 | 
            -
                          step_name = "#{step.source.last.keyword}#{step.name}"
         | 
| 72 | 
            -
                          log.info { "Step \"#{step_name}\"" }
         | 
| 73 | 
            -
                          mdc_add_step! step_name
         | 
| 74 | 
            -
                      end
         | 
| 75 | 
            -
                    end
         | 
| 24 | 
            +
                  include QAT::Formatter::Helper
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  def initialize(config)
         | 
| 27 | 
            +
                    @config         = config
         | 
| 28 | 
            +
                    @io             = ensure_io(config.out_stream, config.error_stream)
         | 
| 29 | 
            +
                    @ast_lookup     = ::Cucumber::Formatter::AstLookup.new(config)
         | 
| 30 | 
            +
                    @feature_hashes = []
         | 
| 31 | 
            +
                    config.on_event :test_case_started, &method(:on_test_case_started)
         | 
| 32 | 
            +
                    config.on_event :test_case_finished, &method(:on_test_case_finished)
         | 
| 33 | 
            +
                    config.on_event :test_step_started, &method(:on_test_step_started)
         | 
| 34 | 
            +
                    config.on_event :test_step_finished, &method(:on_test_step_finished)
         | 
| 35 | 
            +
                    config.on_event :test_run_finished, &method(:on_test_run_finished)
         | 
| 76 36 | 
             
                  end
         | 
| 77 37 |  | 
| 78 | 
            -
                  #@api private
         | 
| 79 | 
            -
                  def puts obj
         | 
| 80 | 
            -
                    return if @options[:dry_run]
         | 
| 81 | 
            -
             | 
| 82 | 
            -
                    log.debug { obj }
         | 
| 83 | 
            -
                  end
         | 
| 84 | 
            -
             | 
| 85 | 
            -
                  private
         | 
| 86 | 
            -
                  def format_scenario_name step
         | 
| 87 | 
            -
                    return '' unless @current_scenario
         | 
| 88 | 
            -
                    outline_number, outline_example = nil, nil
         | 
| 89 | 
            -
                    scenario_name                   = if @current_scenario.is_a? ::Cucumber::Core::Ast::ScenarioOutline
         | 
| 90 | 
            -
                                                        outline_example = step.source[3].values
         | 
| 91 | 
            -
                                                        outline_number  = calculate_outline_id(step)
         | 
| 92 | 
            -
                                                        "#{@current_scenario.name} ##{outline_number}"
         | 
| 93 | 
            -
                                                      else
         | 
| 94 | 
            -
                                                        @current_scenario.name
         | 
| 95 | 
            -
                                                      end
         | 
| 96 | 
            -
                    mdc_before_scenario! @current_scenario.name, tags_from_test_step(step), outline_number, outline_example
         | 
| 97 | 
            -
                    return scenario_name
         | 
| 98 | 
            -
                  end
         | 
| 99 38 | 
             
                end
         | 
| 100 39 | 
             
              end
         | 
| 101 40 | 
             
            end
         |