qat-cucumber 6.0.3 → 7.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 -78
- 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/tasks/tags/test_ids/helpers.rb +5 -5
- metadata +13 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c2d9c16ada4ae99664285b5387929d4292fe8414e21a8aae66857f094afc2f2
|
4
|
+
data.tar.gz: c957475c29c8977726b1b79b1e9714323aff2e8ee0e7f12e4bf81922527dfe83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21d90b8f0ad2711a838cacbffdcaf63791f316320bfa0012cb1bef9fe394d96a23f2648c7b1957941b8c674b7e3c360be4761cb2b3c85cda870bb1d7a35ba7dc
|
7
|
+
data.tar.gz: 17d16d5f040bfc49dbbab89ff25414d5dfe603f238d10a65852ee729c897d98909b0a70148a53ec5fa3730ac85186ba9318be454f0a36dd33c1aa1b6e3c13375
|
@@ -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,88 +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
|
-
before_test_case step unless @current_feature
|
69
|
-
log.info { "Running #{@current_scenario.keyword}: \"#{format_scenario_name step}\"" }
|
70
|
-
when :before_step
|
71
|
-
log.info "Step Done!\n" if @step_running
|
72
|
-
step_name = "#{step.source.last.keyword}#{step.name}"
|
73
|
-
log.info { "Step \"#{step_name}\"" }
|
74
|
-
mdc_add_step! step_name
|
75
|
-
end
|
76
|
-
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)
|
77
36
|
end
|
78
37
|
|
79
|
-
#@api private
|
80
|
-
def puts obj
|
81
|
-
return if @options[:dry_run]
|
82
|
-
|
83
|
-
log.debug { obj }
|
84
|
-
end
|
85
|
-
|
86
|
-
private
|
87
|
-
def format_scenario_name step
|
88
|
-
return '' unless @current_scenario
|
89
|
-
outline_number, outline_example = nil, nil
|
90
|
-
scenario_name = if @current_scenario.is_a? ::Cucumber::Core::Ast::ScenarioOutline
|
91
|
-
outline_example = step.source[3].values
|
92
|
-
outline_number = calculate_outline_id(step)
|
93
|
-
"#{@current_scenario.name} ##{outline_number}"
|
94
|
-
else
|
95
|
-
@current_scenario.name
|
96
|
-
end
|
97
|
-
mdc_before_scenario! @current_scenario.name, tags_from_test_step(step), outline_number, outline_example
|
98
|
-
return scenario_name
|
99
|
-
end
|
100
38
|
end
|
101
39
|
end
|
102
40
|
end
|
@@ -4,6 +4,8 @@ require 'cucumber/formatter/io'
|
|
4
4
|
require 'cucumber/gherkin/formatter/escaping'
|
5
5
|
require 'qat/logger'
|
6
6
|
require_relative 'loggable'
|
7
|
+
require 'cucumber/core/gherkin/writer'
|
8
|
+
require_relative 'helper'
|
7
9
|
|
8
10
|
module QAT
|
9
11
|
module Formatter
|
@@ -14,71 +16,25 @@ module QAT
|
|
14
16
|
include ::FileUtils
|
15
17
|
include ::Cucumber::Formatter::Io
|
16
18
|
include ::Cucumber::Gherkin::Formatter::Escaping
|
19
|
+
include ::Cucumber::Core::Gherkin::Writer
|
17
20
|
include QAT::Formatter::Loggable
|
18
21
|
include QAT::Logger
|
22
|
+
include QAT::Formatter::Helper
|
19
23
|
|
20
24
|
#@api private
|
21
|
-
def initialize(
|
22
|
-
@
|
23
|
-
|
24
|
-
ensure_outputter
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
unless @current_feature
|
33
|
-
@current_feature = test_case.source[0]
|
34
|
-
mdc_before_feature! @current_feature.name
|
35
|
-
end
|
36
|
-
|
37
|
-
@current_scenario = test_case.source[1]
|
38
|
-
end
|
39
|
-
|
40
|
-
#@api private
|
41
|
-
def after_feature *_
|
42
|
-
return if @options[:dry_run]
|
43
|
-
|
44
|
-
@current_feature = nil
|
45
|
-
mdc_after_feature!
|
46
|
-
end
|
47
|
-
|
48
|
-
#@api private
|
49
|
-
def after_test_case step, passed
|
50
|
-
return if @options[:dry_run]
|
51
|
-
|
52
|
-
if passed.respond_to? :exception
|
53
|
-
mdc_add_step! @step_name
|
54
|
-
mdc_add_status_failed!
|
55
|
-
log.error passed.exception
|
56
|
-
end
|
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
|
-
if type == :before_step
|
65
|
-
@step_name = "#{step.source.last.keyword}#{step.name}"
|
66
|
-
mdc_add_step! @step_name
|
67
|
-
elsif :before_scenario
|
68
|
-
outline_number, outline_example = nil, nil
|
69
|
-
if @current_scenario.is_a? ::Cucumber::Core::Ast::ScenarioOutline
|
70
|
-
outline_example = step.source[3].values
|
71
|
-
outline_number = calculate_outline_id(step)
|
72
|
-
end
|
73
|
-
mdc_before_scenario! @current_scenario.name, tags_from_test_step(step), outline_number, outline_example
|
74
|
-
end
|
75
|
-
end
|
25
|
+
def initialize(config)
|
26
|
+
@config = config
|
27
|
+
@io = ensure_io(config.out_stream, config.error_stream)
|
28
|
+
ensure_outputter config.out_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 exception e, _
|
80
|
-
# log.error e
|
81
|
-
# end
|
82
38
|
end
|
83
39
|
end
|
84
40
|
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require_relative 'builder'
|
2
|
+
require_relative 'utility_function'
|
3
|
+
|
4
|
+
module QAT
|
5
|
+
module Formatter
|
6
|
+
# Helper for Formatters , most of the main methods are done to reduce code duplication
|
7
|
+
module Helper
|
8
|
+
include QAT::Formatter::Builder
|
9
|
+
include QAT::Formatter::UtilityFuction
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
def on_test_case_started event
|
14
|
+
return if @config.dry_run?
|
15
|
+
@row_number = nil
|
16
|
+
test_case = event.test_case
|
17
|
+
build(test_case, @ast_lookup)
|
18
|
+
assign_print_feature unless @current_feature
|
19
|
+
@current_scenario = @scenario
|
20
|
+
scenario_name = @current_scenario[:name]
|
21
|
+
print_scenario_start @current_scenario[:keyword], scenario_name
|
22
|
+
mdc_before_scenario! scenario_name, @current_scenario[:tags], @row_number, @examples_values
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
def on_test_case_finished event
|
27
|
+
return if @config.dry_run?
|
28
|
+
_test_case, result = *event.attributes
|
29
|
+
@current_feature = nil
|
30
|
+
if result.failed?
|
31
|
+
mdc_add_step! @mdc_text
|
32
|
+
mdc_add_status_failed!
|
33
|
+
log.error { result.exception }
|
34
|
+
else
|
35
|
+
print_scenario_results @current_scenario[:keyword], @current_scenario[:name], result
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def on_test_step_started(event)
|
40
|
+
return if @config.dry_run?
|
41
|
+
test_step = event.test_step
|
42
|
+
return if internal_hook?(test_step)
|
43
|
+
return if support_hook?(test_step)
|
44
|
+
step_source = @ast_lookup.step_source(test_step).step
|
45
|
+
print_assign_step test_step, step_source
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
def on_test_step_finished(event)
|
50
|
+
return if @config.dry_run?
|
51
|
+
test_step, result = *event.attributes
|
52
|
+
return if internal_hook?(test_step)
|
53
|
+
return if support_hook?(test_step)
|
54
|
+
log.info "Step Done!"
|
55
|
+
end
|
56
|
+
|
57
|
+
def on_test_run_finished _event
|
58
|
+
return if @config.dry_run?
|
59
|
+
print_scenario_results @feature_hash[:keyword], @feature_hash[:name]
|
60
|
+
mdc_after_feature!
|
61
|
+
end
|
62
|
+
|
63
|
+
def assign_print_feature
|
64
|
+
@current_feature = @feature_hash
|
65
|
+
feature_name = @current_feature[:name]
|
66
|
+
print_scenario_start @current_feature[:keyword], feature_name
|
67
|
+
mdc_before_feature! feature_name
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
def print_assign_step test_step, step_source
|
72
|
+
test_step_text = test_step.text
|
73
|
+
log.info { "Step \"#{test_step_text}\"" }
|
74
|
+
@mdc_text = "#{step_source.keyword}#{test_step_text}"
|
75
|
+
mdc_add_step! @mdc_text
|
76
|
+
end
|
77
|
+
|
78
|
+
def print_scenario_results keyword, name, result = nil
|
79
|
+
if result
|
80
|
+
log.info { "Finished #{keyword}: \"#{name}\" - #{result}\n" }
|
81
|
+
else
|
82
|
+
log.info { "Finished #{keyword}: \"#{name}\"" }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def print_scenario_start keyword, name
|
87
|
+
log.info { "Running #{keyword}: \"#{name}\"" }
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -33,13 +33,13 @@ module QAT
|
|
33
33
|
#@since 0.1.0
|
34
34
|
def begin_test_step step
|
35
35
|
#World: step.location = /usr/local/rvm/gems/ruby-2.2.3/gems/cucumber-2.0.2/lib/cucumber/filters/prepare_world.rb:27
|
36
|
-
# step.
|
36
|
+
# step.to_s = "Before hook"
|
37
37
|
|
38
38
|
#Hooks: step.location = /home/mgomes/Projects/qat/src/qat/lib/qat/cucumber/hooks.rb:53
|
39
|
-
# step.
|
39
|
+
# step.to_s = "Before hook"
|
40
40
|
|
41
41
|
#Stepdef: step.location = features/formatter.feature:8
|
42
|
-
# step.
|
42
|
+
# step.to_s = step name
|
43
43
|
|
44
44
|
type = set_type(step)
|
45
45
|
|
@@ -66,7 +66,7 @@ module QAT
|
|
66
66
|
|
67
67
|
def set_type(step)
|
68
68
|
location = step.location.file.to_s
|
69
|
-
step_name = step.
|
69
|
+
step_name = step.to_s
|
70
70
|
|
71
71
|
if step_name == "After hook"
|
72
72
|
:after_step
|
@@ -1,46 +1,65 @@
|
|
1
1
|
require 'cucumber/formatter/io'
|
2
2
|
require 'json'
|
3
|
+
require_relative '../helper'
|
3
4
|
|
4
5
|
module QAT
|
5
6
|
module Formatter
|
6
7
|
module Scenario
|
7
8
|
class Name
|
8
9
|
include Cucumber::Formatter::Io
|
10
|
+
include QAT::Formatter::Helper
|
9
11
|
|
10
|
-
def initialize(
|
11
|
-
@
|
12
|
-
@io
|
13
|
-
@to_file = (@io != $stdout)
|
14
|
-
@
|
15
|
-
@scenarios
|
16
|
-
@repeated
|
12
|
+
def initialize(config)
|
13
|
+
@config = config
|
14
|
+
@io = ensure_io(config.out_stream, config.error_stream)
|
15
|
+
# @to_file = (@io != $stdout)
|
16
|
+
@to_file = @io
|
17
|
+
@scenarios = {}
|
18
|
+
@repeated = {}
|
19
|
+
@ast_lookup = ::Cucumber::Formatter::AstLookup.new(config)
|
20
|
+
@feature_hashes = []
|
21
|
+
config.on_event :test_case_started, &method(:on_test_case_started)
|
22
|
+
config.on_event :test_run_finished, &method(:on_test_run_finished)
|
17
23
|
end
|
18
24
|
|
19
|
-
|
25
|
+
|
26
|
+
def on_test_case_started event
|
27
|
+
@examples_values = []
|
28
|
+
build(event.test_case, @ast_lookup)
|
29
|
+
@current_feature = @feature_hash
|
30
|
+
scenario_name
|
31
|
+
end
|
32
|
+
|
33
|
+
def scenario_name
|
20
34
|
if @to_file
|
21
|
-
if @scenarios.values.include?(name)
|
22
|
-
@
|
23
|
-
@
|
35
|
+
if @scenarios.values.include?(@scenario[:name])
|
36
|
+
file_colon_line = "#{@current_feature[:uri]}:#{@scenario[:line]}"
|
37
|
+
unless @scenarios.keys.include?(file_colon_line)
|
38
|
+
@repeated[@scenario[:name]] ||= []
|
39
|
+
@repeated[@scenario[:name]] << "#{@current_feature[:uri]}:#{@scenario[:line]}"
|
40
|
+
end
|
24
41
|
end
|
25
|
-
@
|
42
|
+
file_colon_line = "#{@current_feature[:uri]}:#{@scenario[:line]}"
|
43
|
+
@scenarios[file_colon_line] = @scenario[:name]
|
26
44
|
else
|
27
|
-
puts "#{name}: #{file_colon_line}"
|
45
|
+
Kernel.puts "#{@scenario[:name]}: #{file_colon_line}"
|
28
46
|
end
|
29
47
|
end
|
30
48
|
|
31
|
-
def
|
49
|
+
def on_test_run_finished(_event)
|
32
50
|
if @to_file
|
33
51
|
content = {
|
34
52
|
scenarios: @scenarios,
|
35
53
|
repeated: @repeated
|
36
54
|
}
|
37
|
-
@io.
|
38
|
-
|
39
|
-
space: ' ',
|
40
|
-
object_nl: "\n"
|
41
|
-
}))
|
55
|
+
@io.write (JSON.pretty_generate(content))
|
56
|
+
@io.flush
|
42
57
|
end
|
43
58
|
end
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
|
44
63
|
end
|
45
64
|
end
|
46
65
|
end
|
data/lib/qat/formatter/tags.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'cucumber/formatter/io'
|
2
2
|
require 'json'
|
3
|
+
require_relative 'helper'
|
3
4
|
|
4
5
|
module QAT
|
5
6
|
module Formatter
|
@@ -13,50 +14,47 @@ module QAT
|
|
13
14
|
#
|
14
15
|
class Tags
|
15
16
|
include Cucumber::Formatter::Io
|
17
|
+
include QAT::Formatter::Helper
|
16
18
|
|
17
19
|
#@api private
|
18
|
-
def initialize(
|
19
|
-
@
|
20
|
+
def initialize(config)
|
21
|
+
@config = config
|
22
|
+
@io = ensure_io(config.out_stream, config.error_stream)
|
20
23
|
@tags = []
|
21
24
|
@scenario_tags = []
|
22
25
|
@total_scenarios = 0
|
23
26
|
@total_scenarios_without_tags = 0
|
24
27
|
@scenarios_without_tags = {}
|
25
|
-
@
|
28
|
+
@ast_lookup = ::Cucumber::Formatter::AstLookup.new(config)
|
29
|
+
@feature_hashes = []
|
30
|
+
config.on_event :test_case_started, &method(:on_test_case_started)
|
31
|
+
config.on_event :test_run_finished, &method(:on_test_run_finished)
|
26
32
|
end
|
27
33
|
|
28
|
-
#@api private
|
29
|
-
def after_features(features)
|
30
|
-
publish_result
|
31
|
-
end
|
32
34
|
|
33
|
-
|
34
|
-
def
|
35
|
+
|
36
|
+
def on_test_case_started event
|
35
37
|
@feature_tags = []
|
36
|
-
@
|
38
|
+
@examples_values = []
|
39
|
+
test_case = event.test_case
|
40
|
+
build(test_case, @ast_lookup)
|
41
|
+
@current_feature = @feature_hash
|
42
|
+
@test_id_tags = true
|
43
|
+
scenario_name
|
37
44
|
end
|
38
45
|
|
39
|
-
|
40
|
-
|
41
|
-
if @in_scenarios
|
42
|
-
@scenario_tags << tag_name unless tag_name.match(/@test#(\d+)/)
|
43
|
-
else
|
44
|
-
@feature_tags << tag_name
|
45
|
-
end
|
46
|
+
def on_test_run_finished(_event)
|
47
|
+
publish_result
|
46
48
|
end
|
47
49
|
|
48
|
-
#@api private
|
49
|
-
def after_tags(tags)
|
50
|
-
@in_scenarios = true unless @in_scenarios
|
51
|
-
end
|
52
50
|
|
53
51
|
#@api private
|
54
|
-
def scenario_name
|
55
|
-
scenario_tags = @
|
56
|
-
@tags += scenario_tags
|
52
|
+
def scenario_name
|
53
|
+
scenario_tags = @scenario[:tags] + @feature_hash[:tags] if @scenario[:tags] && @feature_hash[:tags] rescue nil
|
54
|
+
@tags += scenario_tags unless scenario_tags.nil?
|
57
55
|
@total_scenarios += 1
|
58
|
-
unless scenario_tags.any?
|
59
|
-
@scenarios_without_tags[name] =
|
56
|
+
unless scenario_tags.try(:any?)
|
57
|
+
@scenarios_without_tags[@scenario[:name]] = "#{@current_feature[:uri]}:#{@scenario[:line]}"
|
60
58
|
@total_scenarios_without_tags += 1
|
61
59
|
end
|
62
60
|
@scenario_tags = []
|
@@ -70,12 +68,11 @@ module QAT
|
|
70
68
|
{ unique: @tags.uniq.sort,
|
71
69
|
total: @tags.size }
|
72
70
|
}
|
73
|
-
@io.
|
74
|
-
indent: ' ',
|
75
|
-
space: ' ',
|
76
|
-
object_nl: "\n"
|
77
|
-
}))
|
71
|
+
@io.write (JSON.pretty_generate(content))
|
78
72
|
end
|
73
|
+
|
74
|
+
|
75
|
+
|
79
76
|
end
|
80
77
|
end
|
81
78
|
end
|
@@ -1,64 +1,74 @@
|
|
1
1
|
require 'cucumber/formatter/io'
|
2
2
|
require 'json'
|
3
|
+
require_relative 'helper'
|
3
4
|
|
4
5
|
module QAT
|
5
6
|
module Formatter
|
6
|
-
|
7
|
+
# Formatter to get duplicate test ids and get scenarios untagged
|
8
|
+
class TestIds
|
7
9
|
include Cucumber::Formatter::Io
|
10
|
+
include QAT::Formatter::Helper
|
8
11
|
|
9
|
-
def initialize(
|
10
|
-
@
|
11
|
-
@tags = []
|
12
|
-
@scenario_tags = []
|
12
|
+
def initialize(config)
|
13
|
+
@config = config
|
13
14
|
@no_test_id = {}
|
14
15
|
@max_test_id = 0
|
15
16
|
@duplicate_test_ids = {}
|
16
17
|
@test_id_mapping = {}
|
17
|
-
@
|
18
|
-
|
18
|
+
@io = ensure_io(config.out_stream, config.error_stream)
|
19
|
+
@ast_lookup = ::Cucumber::Formatter::AstLookup.new(@config)
|
20
|
+
config.on_event :test_case_started, &method(:on_test_case_started)
|
21
|
+
config.on_event :test_run_finished, &method(:on_test_run_finished)
|
19
22
|
|
20
|
-
def before_feature(feature)
|
21
|
-
@in_scenarios = false
|
22
23
|
end
|
23
24
|
|
24
|
-
|
25
|
-
|
25
|
+
|
26
|
+
#@api private
|
27
|
+
def on_test_case_started event
|
28
|
+
@feature_hashes = []
|
29
|
+
@tags = []
|
30
|
+
@scenario_tags = []
|
31
|
+
@examples_values = []
|
32
|
+
build(event.test_case, @ast_lookup)
|
33
|
+
@current_feature = @feature_hash
|
34
|
+
scenario_name
|
26
35
|
end
|
27
36
|
|
28
|
-
def
|
29
|
-
|
37
|
+
def on_test_run_finished(_event)
|
38
|
+
publish_result
|
39
|
+
@io.flush
|
30
40
|
end
|
31
41
|
|
32
|
-
def scenario_name
|
33
|
-
|
34
|
-
|
42
|
+
def scenario_name
|
43
|
+
path = "#{@current_feature[:uri]}:#{@scenario[:line]}"
|
44
|
+
scenario_tags= @scenario[:tags]
|
45
|
+
if scenario_tags.any? { |tag| tag.match(/@test#(\d+)/) }
|
46
|
+
id = scenario_tags.map { |tag| tag.match(/@test#(\d+)/) }.compact.first.captures.first.to_i
|
35
47
|
@max_test_id = id if id > @max_test_id
|
36
48
|
|
37
|
-
test_id_info = { name: name,
|
38
|
-
path:
|
49
|
+
test_id_info = { name: @scenario[:name],
|
50
|
+
path: path}
|
39
51
|
|
40
52
|
if @test_id_mapping[id]
|
41
53
|
if @duplicate_test_ids[id]
|
42
|
-
@duplicate_test_ids[id]
|
54
|
+
@duplicate_test_ids[id].find do |dup|
|
55
|
+
@exist = true if dup[:path]== test_id_info[:path]
|
56
|
+
end
|
57
|
+
@duplicate_test_ids[id] << test_id_info unless @exist
|
43
58
|
else
|
44
|
-
@duplicate_test_ids[id] = [@test_id_mapping[id], test_id_info]
|
59
|
+
@duplicate_test_ids[id] = [@test_id_mapping[id], test_id_info] unless @test_id_mapping[id][:path] == test_id_info[:path]
|
45
60
|
end
|
46
61
|
else
|
47
62
|
@test_id_mapping[id] = test_id_info
|
48
63
|
end
|
49
|
-
|
50
64
|
else
|
51
|
-
@no_test_id[name] =
|
65
|
+
@no_test_id[@scenario[:name]] = path unless scenario_tags.include?('@dummy_test')
|
52
66
|
end
|
53
|
-
@
|
54
|
-
end
|
55
|
-
|
56
|
-
def after_features(features)
|
57
|
-
publish_result
|
58
|
-
@io.flush
|
67
|
+
@scenario[:tags] = []
|
59
68
|
end
|
60
69
|
|
61
70
|
private
|
71
|
+
|
62
72
|
def publish_result
|
63
73
|
content = {
|
64
74
|
max: @max_test_id,
|
@@ -79,15 +89,14 @@ module QAT
|
|
79
89
|
------------------------------------
|
80
90
|
#{dups_info.join("\n")}
|
81
91
|
TXT
|
82
|
-
puts duplicates_info
|
92
|
+
Kernel.puts duplicates_info
|
83
93
|
end
|
84
94
|
|
85
|
-
@io.
|
86
|
-
indent: ' ',
|
87
|
-
space: ' ',
|
88
|
-
object_nl: "\n"
|
89
|
-
}))
|
95
|
+
@io.write (JSON.pretty_generate(content))
|
90
96
|
end
|
97
|
+
|
98
|
+
|
99
|
+
|
91
100
|
end
|
92
101
|
end
|
93
102
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
|
2
|
+
module QAT
|
3
|
+
module Formatter
|
4
|
+
# Helper for Formatters , most of the main methods are done to reduce code duplication
|
5
|
+
module UtilityFuction
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
def background(background)
|
10
|
+
@background_hash = {
|
11
|
+
keyword: background.keyword,
|
12
|
+
name: background.name,
|
13
|
+
description: background.description.nil? ? '' : background.description,
|
14
|
+
line: background.location.line,
|
15
|
+
type: 'background'
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_feature_hash feature,uri
|
20
|
+
@feature_hash = {
|
21
|
+
id: feature.name,
|
22
|
+
uri: uri,
|
23
|
+
keyword: feature.keyword,
|
24
|
+
name: feature.name,
|
25
|
+
description: feature.description.nil? ? '' : feature.description,
|
26
|
+
line: feature.location.line
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
def get_lines_from_scenario(scenario_source, test_case)
|
31
|
+
if scenario_source.type == :Scenario
|
32
|
+
test_case.location.lines.max
|
33
|
+
else
|
34
|
+
test_case.location.lines.min
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def calculate_row_number(scenario_source)
|
39
|
+
scenario_source.examples.table_body.each_with_index do |row, index|
|
40
|
+
return index + 1 if row == scenario_source.row
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def get_example_values(scenario_source)
|
45
|
+
scenario_source.examples.table_body.each do |row|
|
46
|
+
if row == scenario_source.row
|
47
|
+
add_values_to_examples row[:cells]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def internal_hook?(test_step)
|
53
|
+
test_step.location.file.include?('lib/qat/cucumber/')
|
54
|
+
end
|
55
|
+
|
56
|
+
def support_hook?(test_step)
|
57
|
+
test_step.location.file.include?('features/support/hooks')
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -15,7 +15,7 @@ module TestIds
|
|
15
15
|
|
16
16
|
update_test_ids(files, max_test_id)
|
17
17
|
else
|
18
|
-
puts "There are no scenarios without test id. Last test id given was '@test##{max_test_id}'."
|
18
|
+
Kernel.puts "There are no scenarios without test id. Last test id given was '@test##{max_test_id}'."
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -39,8 +39,8 @@ module TestIds
|
|
39
39
|
#@param files [Array] list of files to change
|
40
40
|
#@see TestIds::Helpers#map_untaged
|
41
41
|
def announce_changes(files)
|
42
|
-
puts "Giving test ids to scenarios:"
|
43
|
-
puts files.to_json({
|
42
|
+
Kernel.puts "Giving test ids to scenarios:"
|
43
|
+
Kernel.puts files.to_json({
|
44
44
|
indent: ' ',
|
45
45
|
space: ' ',
|
46
46
|
object_nl: "\n"
|
@@ -57,7 +57,7 @@ module TestIds
|
|
57
57
|
files.each { |file, lines| max_test_id = rewrite_file(file, lines, max_test_id) }
|
58
58
|
rescue
|
59
59
|
path = File.join(Dir.pwd, 'public', 'test_ids_failed.feature')
|
60
|
-
puts "Tag attribution failed! Check '#{path}' for more information!"
|
60
|
+
Kernel.puts "Tag attribution failed! Check '#{path}' for more information!"
|
61
61
|
File.write(path, file_lines.join)
|
62
62
|
end
|
63
63
|
end
|
@@ -75,7 +75,7 @@ module TestIds
|
|
75
75
|
|
76
76
|
norm_lines.size.times do
|
77
77
|
line = norm_lines.shift
|
78
|
-
puts "Editing file #{file} @ line #{line}."
|
78
|
+
Kernel.puts "Editing file #{file} @ line #{line}."
|
79
79
|
max_test_id = add_tags(file_lines, line, max_test_id)
|
80
80
|
end
|
81
81
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qat-cucumber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 7.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- QAT
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cucumber
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 5.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 5.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,28 +72,28 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '8.0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '8.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: qat-devel
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '8.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '8.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: httparty
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -138,14 +138,17 @@ files:
|
|
138
138
|
- lib/qat/cucumber/time.rb
|
139
139
|
- lib/qat/cucumber/version.rb
|
140
140
|
- lib/qat/cucumber/world.rb
|
141
|
+
- lib/qat/formatter/builder.rb
|
141
142
|
- lib/qat/formatter/console.rb
|
142
143
|
- lib/qat/formatter/dashboard.rb
|
144
|
+
- lib/qat/formatter/helper.rb
|
143
145
|
- lib/qat/formatter/loggable.rb
|
144
146
|
- lib/qat/formatter/loggable/mdc.rb
|
145
147
|
- lib/qat/formatter/loggable/scenario_info.rb
|
146
148
|
- lib/qat/formatter/scenario/name.rb
|
147
149
|
- lib/qat/formatter/tags.rb
|
148
150
|
- lib/qat/formatter/test_ids.rb
|
151
|
+
- lib/qat/formatter/utility_function.rb
|
149
152
|
- lib/qat/jenkins.rb
|
150
153
|
- lib/qat/project/Gemfile
|
151
154
|
- lib/qat/project/Rakefile
|
@@ -180,14 +183,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
180
183
|
requirements:
|
181
184
|
- - "~>"
|
182
185
|
- !ruby/object:Gem::Version
|
183
|
-
version: '2.
|
186
|
+
version: '2.5'
|
184
187
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
188
|
requirements:
|
186
189
|
- - ">="
|
187
190
|
- !ruby/object:Gem::Version
|
188
191
|
version: '0'
|
189
192
|
requirements: []
|
190
|
-
rubygems_version: 3.0.
|
193
|
+
rubygems_version: 3.0.8
|
191
194
|
signing_key:
|
192
195
|
specification_version: 4
|
193
196
|
summary: QAT is a Cucumber-based toolkit for automating tests.
|