hiptest-publisher 2.0.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +17 -5
- data/config/locales/en.yml +3 -1
- data/lib/config/cucumber_expressions-typescript.conf +41 -0
- data/lib/hiptest-publisher.rb +5 -7
- data/lib/hiptest-publisher/client.rb +61 -10
- data/lib/hiptest-publisher/formatters/console_formatter.rb +40 -11
- data/lib/hiptest-publisher/formatters/reporter.rb +14 -0
- data/lib/hiptest-publisher/options_parser.rb +27 -7
- data/lib/hiptest-publisher/renderer_addons/gherkin_addon.rb +21 -0
- data/lib/templates/common/_gherkin_typed_pattern.hbs +1 -0
- data/lib/templates/cucumber_expressions/typescript/actionword.hbs +5 -0
- data/lib/templates/cucumber_expressions/typescript/libraryactionword.hbs +5 -0
- data/lib/templates/groovy/_scenario.hbs +1 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5bcc0cd663f5ba7411031e5f8db901bd7229fe6d88a7deb815cbfc82dde9e8ea
|
4
|
+
data.tar.gz: 165c9da7b30f07d0eeacbdaef4aae5fefa9146533ee826898971d646ecc6adcf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 824256833f21ff08a6693ca63a5d5d40f1d15e54b9a6df78152d98bc94ac9f5fc67b04b0c371b6f2ac3d24ef9e0e3d454d680c4de4fe3ca7972f50e5ec6753a2
|
7
|
+
data.tar.gz: 9b58353c5f481931ca91ed563cff619d4738589a0c35bea5f3cfb7bf53324719999bc718697001e2d83623f2854e0251af76a4a14bb9e8328846d7a215194755
|
data/README.md
CHANGED
@@ -55,13 +55,24 @@ hiptest-publisher --token=<YOUR TOKEN>
|
|
55
55
|
|
56
56
|
This will create a Ruby tests suite. For the moment, we support the following languages and frameworks:
|
57
57
|
|
58
|
-
-
|
59
|
-
-
|
60
|
-
-
|
61
|
-
-
|
58
|
+
- Behat
|
59
|
+
- Behave
|
60
|
+
- CSharp (NUnit)
|
61
|
+
- Cucumber (Groovy / Java / Javascript / Ruby / TypeScript)
|
62
|
+
- Cucumber Expressions (TypeScript)*
|
63
|
+
- Groovy (Spock)
|
64
|
+
- Java (Espresso / JUnit / TestNg)
|
65
|
+
- JavaScript (CodeceptJS / Jasmine / Mocha / Protractor / QUnit)
|
66
|
+
- JBehave
|
67
|
+
- PHP (PHPUnit / UnitTest)
|
68
|
+
- Python (UnitTest)
|
62
69
|
- Robot Framework
|
70
|
+
- Ruby (MiniTest / RSpec)
|
63
71
|
- Selenium IDE
|
64
|
-
-
|
72
|
+
- SpecFlow
|
73
|
+
- Swift (XCTest)
|
74
|
+
|
75
|
+
*Cucumber Expressions is standard Cucumber syntax that makes use of [Cucumber Expressions](https://cucumber.io/docs/cucumber/cucumber-expressions/)
|
65
76
|
|
66
77
|
You can specify the output language and framework in the command line, for example:
|
67
78
|
|
@@ -148,6 +159,7 @@ Specific options:
|
|
148
159
|
--not-recursive Used in conjunction with filter-on-folder-ids or filter-on-folder-name: only exports those folders, not their children (default: false)
|
149
160
|
--check-version Check if a new release of hiptest-publisher is available (default: false)
|
150
161
|
--force Force overwrite of existing files (do not apply to test files) (default: false)
|
162
|
+
--[no-]color Force [un]use of ANSI color in text output
|
151
163
|
-v, --verbose Run verbosely (default: false)
|
152
164
|
-H, --languages-help Show languages and framework options
|
153
165
|
-h, --help Show this message
|
data/config/locales/en.yml
CHANGED
@@ -168,6 +168,7 @@ en:
|
|
168
168
|
aw_renamed: Output signatures of renamed action words
|
169
169
|
aw_signature_changed: Output signatures of action words for which signature changed
|
170
170
|
check_version: Check if a new release of hiptest-publisher is available
|
171
|
+
color: Force [un]use of ANSI color in text output
|
171
172
|
config: Configuration file
|
172
173
|
empty_folders: Export empty folders
|
173
174
|
execution_environment: Name of the execution environment
|
@@ -205,7 +206,7 @@ en:
|
|
205
206
|
test_run_name: Export data from a test run identified by its name
|
206
207
|
tests_only: "(deprecated) alias for --only=tests"
|
207
208
|
token: Secret token (available in your project settings)
|
208
|
-
uids: 'Export UIDs (note:
|
209
|
+
uids: 'Export UIDs for Gherkin-based exports (note: disabled by default, enabled when specifying test run, disabling it may cause issue when pushing results back into test run)'
|
209
210
|
verbose: Run verbosely
|
210
211
|
with_dataset_names: 'Export dataset name when creating feature files (note: available only for Gherkin-based exports)'
|
211
212
|
with_folders: Use folders hierarchy to export files in respective directories
|
@@ -213,6 +214,7 @@ en:
|
|
213
214
|
xml_file: XML file to use instead of fetching it from HipTest
|
214
215
|
cache_dir: "Path to the directory to store cache of Hiptest data"
|
215
216
|
cache_duration: "Validity of the Hiptest data cache in seconds"
|
217
|
+
indentation: Customize indentation
|
216
218
|
overwrite:
|
217
219
|
ask_confirmation: 'File %{path} exists, do you want to overwrite it? [y/N] '
|
218
220
|
warning_message: File %{path} already exists, skipping. Use --force to overwrite it.
|
@@ -0,0 +1,41 @@
|
|
1
|
+
[_common]
|
2
|
+
indentation = ' '
|
3
|
+
fallback_template = 'empty'
|
4
|
+
|
5
|
+
[features]
|
6
|
+
node_name = folders
|
7
|
+
template_dirs = gherkin/inlined_uids, gherkin, common
|
8
|
+
named_filename = '%s.feature'
|
9
|
+
indentation = ' '
|
10
|
+
renderer_addons = 'GherkinAddon'
|
11
|
+
|
12
|
+
[step_definitions]
|
13
|
+
node_name = actionwords
|
14
|
+
template_dirs = cucumber_expressions/typescript, cucumber/typescript, javascript, common
|
15
|
+
filename = 'step_definitions.ts'
|
16
|
+
naming_convention = 'camelize_lower'
|
17
|
+
call_prefix = 'actionwords'
|
18
|
+
renderer_addons = 'GherkinAddon'
|
19
|
+
|
20
|
+
[step_definitions_library]
|
21
|
+
node_name = libraries
|
22
|
+
template_dirs = cucumber_expressions/typescript, cucumber/typescript, javascript, common
|
23
|
+
named_filename = 'steps_%s.ts'
|
24
|
+
naming_convention = 'camelize_lower'
|
25
|
+
call_prefix = 'actionwords'
|
26
|
+
renderer_addons = 'GherkinAddon'
|
27
|
+
|
28
|
+
[actionwords]
|
29
|
+
template_dirs = typescript, javascript, common
|
30
|
+
filename = 'actionwords.ts'
|
31
|
+
naming_convention = 'camelize_lower'
|
32
|
+
|
33
|
+
|
34
|
+
[library]
|
35
|
+
template_dirs = typescript, javascript, common
|
36
|
+
filename = 'actionword_library.ts'
|
37
|
+
|
38
|
+
[libraries]
|
39
|
+
template_dirs = typescript, javascript, common
|
40
|
+
named_filename = '%s_library.ts'
|
41
|
+
filename_convention = 'underscore'
|
data/lib/hiptest-publisher.rb
CHANGED
@@ -83,15 +83,15 @@ module Hiptest
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def fetch_xml_file
|
86
|
-
@client.
|
86
|
+
@client.fetch_project
|
87
87
|
rescue ClientError => err
|
88
88
|
# This should not be an error that needs reporting to an exception monitoring app
|
89
|
-
|
89
|
+
reporter.show_error(err.message)
|
90
90
|
if @exit_on_bad_arguments == false # means we are embedded in hiptest-publisher
|
91
91
|
raise
|
92
92
|
end
|
93
93
|
rescue => err
|
94
|
-
|
94
|
+
reporter.show_failure(I18n.t("errors.default"))
|
95
95
|
reporter.dump_error(err)
|
96
96
|
end
|
97
97
|
|
@@ -113,10 +113,8 @@ module Hiptest
|
|
113
113
|
return true unless File.file?(path)
|
114
114
|
return true if @cli_options.force_overwrite
|
115
115
|
|
116
|
-
if $stdout.
|
117
|
-
|
118
|
-
STDOUT.print "[#{"?".yellow}] #{I18n.t('overwrite.ask_confirmation', path: path)}"
|
119
|
-
answer = $stdin.gets.chomp.downcase.strip
|
116
|
+
if $stdout.tty?
|
117
|
+
answer = reporter.ask(I18n.t('overwrite.ask_confirmation', path: path))
|
120
118
|
return ['y', 'yes'].include?(answer)
|
121
119
|
else
|
122
120
|
reporter.warning_message(I18n.t('overwrite.warning_message', path: path))
|
@@ -21,6 +21,9 @@ module Hiptest
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
class AsyncExportUnavailable < StandardError
|
25
|
+
end
|
26
|
+
|
24
27
|
class MaximumRedirectionReachedError < StandardError
|
25
28
|
end
|
26
29
|
|
@@ -28,10 +31,12 @@ module Hiptest
|
|
28
31
|
|
29
32
|
class Client
|
30
33
|
attr_reader :cli_options
|
34
|
+
attr_writer :async_options
|
31
35
|
|
32
36
|
def initialize(cli_options, reporter = nil)
|
33
37
|
@cli_options = cli_options
|
34
38
|
@reporter = reporter || NullReporter.new
|
39
|
+
@async_options = { max_attempts: 200, sleep_time_between_attemps: 5 }
|
35
40
|
end
|
36
41
|
|
37
42
|
def url
|
@@ -86,7 +91,7 @@ module Hiptest
|
|
86
91
|
return "?filter_status=#{value}"
|
87
92
|
end
|
88
93
|
|
89
|
-
def
|
94
|
+
def fetch_project
|
90
95
|
cached = export_cache.cache_for(url)
|
91
96
|
|
92
97
|
unless cached.nil?
|
@@ -95,17 +100,18 @@ module Hiptest
|
|
95
100
|
end
|
96
101
|
end
|
97
102
|
|
98
|
-
@reporter.with_status_message I18n.t(:fetching_data) do
|
99
|
-
|
100
|
-
if response.code_type == Net::HTTPNotFound
|
101
|
-
raise ClientError, I18n.t('errors.project_not_found')
|
102
|
-
end
|
103
|
-
|
104
|
-
content = response.body
|
105
|
-
export_cache.cache(url, content)
|
103
|
+
content = @reporter.with_status_message I18n.t(:fetching_data) do
|
104
|
+
break fetch_project_export if use_synchronous_fetch?
|
106
105
|
|
107
|
-
|
106
|
+
begin
|
107
|
+
fetch_project_export_asynchronously
|
108
|
+
rescue AsyncExportUnavailable
|
109
|
+
fetch_project_export
|
110
|
+
end
|
108
111
|
end
|
112
|
+
|
113
|
+
export_cache.cache(url, content)
|
114
|
+
content
|
109
115
|
end
|
110
116
|
|
111
117
|
def available_test_runs
|
@@ -136,6 +142,50 @@ module Hiptest
|
|
136
142
|
|
137
143
|
private
|
138
144
|
|
145
|
+
def use_synchronous_fetch?
|
146
|
+
cli_options.push? || cli_options.leafless_export || test_run_id
|
147
|
+
end
|
148
|
+
|
149
|
+
def fetch_project_export
|
150
|
+
response = send_get_request(url)
|
151
|
+
if response.code_type == Net::HTTPNotFound
|
152
|
+
raise ClientError, I18n.t('errors.project_not_found')
|
153
|
+
end
|
154
|
+
|
155
|
+
response.body
|
156
|
+
end
|
157
|
+
|
158
|
+
def fetch_project_export_asynchronously
|
159
|
+
publication_export_id = fetch_asynchronous_publication_export_id
|
160
|
+
url = "#{base_publication_path}/async_project/#{publication_export_id}"
|
161
|
+
response = nil
|
162
|
+
|
163
|
+
# the server should respond with a timeout after 15 minutes
|
164
|
+
# it is about 180 attempts with a sleep time of 5 seconds between each requests
|
165
|
+
sleep_time_between_attemps = @async_options[:sleep_time_between_attemps]
|
166
|
+
max_attempts = @async_options[:max_attempts]
|
167
|
+
|
168
|
+
loop do
|
169
|
+
response = send_get_request(url)
|
170
|
+
|
171
|
+
break unless response.code_type == Net::HTTPAccepted
|
172
|
+
break if 0 >= (max_attempts -= 1)
|
173
|
+
|
174
|
+
sleep(sleep_time_between_attemps)
|
175
|
+
end
|
176
|
+
|
177
|
+
response.body
|
178
|
+
end
|
179
|
+
|
180
|
+
def fetch_asynchronous_publication_export_id
|
181
|
+
url = "#{base_publication_path}/async_project#{project_export_filters}"
|
182
|
+
response = send_post_request(url)
|
183
|
+
|
184
|
+
raise AsyncExportUnavailable if response.code_type == Net::HTTPNotFound
|
185
|
+
|
186
|
+
JSON.parse(response.body)['publication_export_id']
|
187
|
+
end
|
188
|
+
|
139
189
|
def export_cache
|
140
190
|
@export_cache ||= ExportCache.new(
|
141
191
|
@cli_options.cache_dir,
|
@@ -243,6 +293,7 @@ module Hiptest
|
|
243
293
|
response = http.request(request)
|
244
294
|
|
245
295
|
raise RedirectionError.new("Got redirected", response['location']) if response.is_a?(Net::HTTPRedirection)
|
296
|
+
|
246
297
|
response
|
247
298
|
end
|
248
299
|
end
|
@@ -5,26 +5,35 @@ require 'hiptest-publisher/utils'
|
|
5
5
|
class ConsoleFormatter
|
6
6
|
attr_reader :verbose
|
7
7
|
|
8
|
-
def initialize(verbose)
|
8
|
+
def initialize(verbose, color: nil)
|
9
9
|
@verbose = verbose
|
10
|
+
@color = color.nil? ? tty? : color
|
10
11
|
@immediate_verbose = true
|
11
12
|
@verbose_messages = []
|
12
13
|
end
|
13
14
|
|
14
15
|
def dump_error(error, message = nil)
|
15
16
|
return unless verbose
|
16
|
-
puts message
|
17
|
+
puts colorize(message, :blue) if message
|
17
18
|
line = "-" * 80
|
18
|
-
puts line
|
19
|
-
puts "#{error.class.name}: #{error.message}"
|
20
|
-
puts "#{error.backtrace.map {|l| " #{l}\n"}.join}"
|
21
|
-
puts line
|
19
|
+
puts colorize(line, :yellow)
|
20
|
+
puts colorize("#{error.class.name}: #{error.message}", :red)
|
21
|
+
puts colorize("#{error.backtrace.map {|l| " #{l}\n"}.join}", :yellow)
|
22
|
+
puts colorize(line, :yellow)
|
23
|
+
end
|
24
|
+
|
25
|
+
def show_error(message)
|
26
|
+
STDOUT.print colorize(message, :yellow)
|
27
|
+
end
|
28
|
+
|
29
|
+
def show_failure(message)
|
30
|
+
STDOUT.print(colorize(message, :red))
|
22
31
|
end
|
23
32
|
|
24
33
|
def show_options(options, message = nil)
|
25
34
|
return unless verbose
|
26
35
|
message ||= I18n.t(:verbose_header, version: hiptest_publisher_version)
|
27
|
-
puts message
|
36
|
+
puts colorize(message, :yellow)
|
28
37
|
options.each { |k, v| puts " - #{k}: #{v.inspect}" }
|
29
38
|
end
|
30
39
|
|
@@ -42,18 +51,18 @@ class ConsoleFormatter
|
|
42
51
|
output = STDOUT
|
43
52
|
|
44
53
|
if status == :success
|
45
|
-
status_icon = "v"
|
54
|
+
status_icon = colorize("v", :green)
|
46
55
|
elsif status == :warning
|
47
|
-
status_icon = "?"
|
56
|
+
status_icon = colorize("?", :yellow)
|
48
57
|
elsif status == :failure
|
49
|
-
status_icon = "x"
|
58
|
+
status_icon = colorize("x", :red)
|
50
59
|
output = STDERR
|
51
60
|
end
|
52
61
|
if status
|
53
62
|
@immediate_verbose = true
|
54
63
|
cursor_offset = ""
|
55
64
|
else
|
56
|
-
return unless
|
65
|
+
return unless tty?
|
57
66
|
rows, columns = IO.console.winsize
|
58
67
|
return if columns == 0
|
59
68
|
@immediate_verbose = false
|
@@ -68,4 +77,24 @@ class ConsoleFormatter
|
|
68
77
|
@verbose_messages.clear
|
69
78
|
end
|
70
79
|
end
|
80
|
+
|
81
|
+
def ask(question)
|
82
|
+
return unless tty?
|
83
|
+
STDOUT.print "[#{colorize('?', :yellow)}] #{question}"
|
84
|
+
return $stdin.gets.chomp.downcase.strip
|
85
|
+
end
|
86
|
+
|
87
|
+
def colored?
|
88
|
+
@color
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
def tty?
|
94
|
+
$stdout.tty?
|
95
|
+
end
|
96
|
+
|
97
|
+
def colorize(txt, color)
|
98
|
+
colored? ? txt.send(color) : txt
|
99
|
+
end
|
71
100
|
end
|
@@ -11,6 +11,14 @@ class Reporter
|
|
11
11
|
notify(:dump_error, error, message)
|
12
12
|
end
|
13
13
|
|
14
|
+
def show_error(message)
|
15
|
+
notify(:show_error, message)
|
16
|
+
end
|
17
|
+
|
18
|
+
def show_failure(message)
|
19
|
+
notify(:show_failure, message)
|
20
|
+
end
|
21
|
+
|
14
22
|
def show_options(options, message = nil)
|
15
23
|
notify(:show_options, options, message)
|
16
24
|
end
|
@@ -48,6 +56,12 @@ class Reporter
|
|
48
56
|
end
|
49
57
|
nil
|
50
58
|
end
|
59
|
+
|
60
|
+
def ask(question)
|
61
|
+
askable_listener = @listeners.find { |l| l.respond_to?(:ask) }
|
62
|
+
return nil if askable_listener.nil?
|
63
|
+
return askable_listener.ask(question)
|
64
|
+
end
|
51
65
|
end
|
52
66
|
|
53
67
|
class NullReporter
|
@@ -114,6 +114,10 @@ class CliOptions < OpenStruct
|
|
114
114
|
option_present?(test_run_name)
|
115
115
|
end
|
116
116
|
|
117
|
+
def test_run?
|
118
|
+
test_run_id? || test_run_name?
|
119
|
+
end
|
120
|
+
|
117
121
|
def language_framework
|
118
122
|
if framework.empty?
|
119
123
|
language
|
@@ -132,10 +136,15 @@ class CliOptions < OpenStruct
|
|
132
136
|
"--#{key.to_s.gsub('_', '-')}=#{self[key]}"
|
133
137
|
end.compact
|
134
138
|
|
135
|
-
|
139
|
+
"hiptest-publisher #{args.join(' ')}".strip
|
140
|
+
end
|
141
|
+
|
142
|
+
def uids_not_set_yet?
|
143
|
+
!__cli_args.include?(:uids) && !__config_args.include?(:uids)
|
136
144
|
end
|
137
145
|
|
138
146
|
def normalize!(reporter = nil)
|
147
|
+
self.uids = true if test_run? && uids_not_set_yet?
|
139
148
|
self.no_uids = !uids # silent normalization
|
140
149
|
modified_options = self.clone
|
141
150
|
if actionwords_only
|
@@ -194,18 +203,20 @@ class OptionsParser
|
|
194
203
|
{
|
195
204
|
'Ruby' => ['Rspec', 'MiniTest'],
|
196
205
|
'Cucumber' => ['Ruby', 'Java', 'Javascript', 'Groovy', 'TypeScript'],
|
206
|
+
'Cucumber_Expressions' => ['TypeScript'],
|
197
207
|
'Java' => ['JUnit', 'Test NG', 'Espresso'],
|
198
208
|
'Python' => ['Unittest'],
|
199
209
|
'Robot Framework' => [''],
|
200
210
|
'Selenium IDE' => [''],
|
201
211
|
'Javascript' => ['qUnit', 'Jasmine', 'Mocha', 'Protractor', 'CodeceptJS'],
|
202
212
|
'CSharp' => ['NUnit'],
|
203
|
-
'PHP' => ['PHPUnit'],
|
213
|
+
'PHP' => ['PHPUnit', 'UnitTest'],
|
204
214
|
'SpecFlow' => [''],
|
205
215
|
'Behave' => [''],
|
206
216
|
'Behat' => [''],
|
207
217
|
'Groovy' => ['Spock'],
|
208
|
-
'JBehave' => ['']
|
218
|
+
'JBehave' => [''],
|
219
|
+
'Swift' => ['XCTest']
|
209
220
|
}
|
210
221
|
end
|
211
222
|
|
@@ -247,7 +258,7 @@ class OptionsParser
|
|
247
258
|
Option.new(nil, 'push-format=tap', 'tap', String, I18n.t('options.push_format'), :push_format),
|
248
259
|
Option.new(nil, 'execution-environment=NAME', '', String, I18n.t('options.execution_environment'), :execution_environment),
|
249
260
|
Option.new(nil, 'sort=[id,order,alpha]', 'order', String, I18n.t('options.sort'), :sort),
|
250
|
-
Option.new(nil, '[no-]uids',
|
261
|
+
Option.new(nil, '[no-]uids', false, nil, I18n.t('options.uids'), :uids),
|
251
262
|
Option.new(nil, '[no-]parent-folder-tags', true, nil, I18n.t('options.parent_folder_tags'), :parent_folder_tags),
|
252
263
|
Option.new(nil, 'parameter-delimiter=DELIMITER', '"', EmptiableString, I18n.t('options.parameter_delimiter'), :parameter_delimiter),
|
253
264
|
Option.new(nil, 'with-dataset-names', false, nil, I18n.t('options.with_dataset_names'), :with_dataset_names),
|
@@ -263,12 +274,20 @@ class OptionsParser
|
|
263
274
|
Option.new(nil, 'meta=META', '', String, I18n.t('options.meta'), :meta),
|
264
275
|
Option.new(nil, 'check-version', false, nil, I18n.t('options.check_version'), :check_version),
|
265
276
|
Option.new(nil, 'force', false, nil, I18n.t('options.force_overwrite'), :force_overwrite),
|
266
|
-
Option.new(
|
277
|
+
Option.new(nil, '[no-]color', nil, nil, I18n.t('options.color'), :color),
|
278
|
+
Option.new('v', 'verbose', false, nil, I18n.t('options.verbose'), :verbose),
|
279
|
+
Option.new(nil, 'indentation=INDENTATION', nil, EmptiableString, I18n.t('options.indentation'), :indent)
|
267
280
|
]
|
268
281
|
end
|
269
282
|
|
270
283
|
def self.default_cache_directory
|
271
|
-
|
284
|
+
home_dir = begin
|
285
|
+
Dir.home
|
286
|
+
rescue
|
287
|
+
'.'
|
288
|
+
end
|
289
|
+
|
290
|
+
File.join(home_dir, '.hiptest-publisher', 'cache')
|
272
291
|
end
|
273
292
|
|
274
293
|
def self.parse(args, reporter)
|
@@ -294,7 +313,7 @@ class OptionsParser
|
|
294
313
|
|
295
314
|
args << "--help" if args.empty?
|
296
315
|
opt_parser.parse!(args)
|
297
|
-
reporter.add_listener(ConsoleFormatter.new(options.verbose))
|
316
|
+
reporter.add_listener(ConsoleFormatter.new(options.verbose, color: options.color))
|
298
317
|
FileConfigParser.update_options(options, reporter)
|
299
318
|
|
300
319
|
reporter.show_options(options.marshal_dump)
|
@@ -555,6 +574,7 @@ class LanguageGroupConfig
|
|
555
574
|
end
|
556
575
|
|
557
576
|
def indentation
|
577
|
+
return @user_params[:indent] unless @user_params[:indent].nil?
|
558
578
|
@language_group_params[:indentation] || ' '
|
559
579
|
end
|
560
580
|
|
@@ -14,6 +14,14 @@ module Hiptest
|
|
14
14
|
super(call)
|
15
15
|
end
|
16
16
|
|
17
|
+
def walk_actionword(aw)
|
18
|
+
parameters = aw.children[:parameters]
|
19
|
+
aw.chunks = replace_parameter_value_with_type(aw.chunks, parameters)
|
20
|
+
aw.extra_inlined_parameters = replace_parameter_value_with_type(aw.extra_inlined_parameters, parameters)
|
21
|
+
|
22
|
+
super(aw)
|
23
|
+
end
|
24
|
+
|
17
25
|
def walk_folder(folder)
|
18
26
|
@rendered_children[:ancestor_tags] = ancestor_tags(folder)
|
19
27
|
|
@@ -34,5 +42,18 @@ module Hiptest
|
|
34
42
|
ancestor_tags = folder.ancestors.map { |f| f.children[:tags] }.flatten.uniq
|
35
43
|
ancestor_tags.map { |t| Hiptest::Renderer.render(t, @context) }
|
36
44
|
end
|
45
|
+
|
46
|
+
def replace_parameter_value_with_type(collection, parameters)
|
47
|
+
collection.map do |obj|
|
48
|
+
if obj[:is_parameter]
|
49
|
+
parameter = parameters.find { |parameter| parameter.children[:name] == obj[:name] }
|
50
|
+
obj[:typed_value] = parameter ? "{#{parameter.type.downcase}}" : "{}"
|
51
|
+
else
|
52
|
+
obj[:typed_value] = obj[:value]
|
53
|
+
end
|
54
|
+
|
55
|
+
obj
|
56
|
+
end
|
57
|
+
end
|
37
58
|
end
|
38
59
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
{{#strip}}{{#each chunks as |treated_chunk|}}{{treated_chunk.typed_value}}{{/each}}{{#each extra_inlined_parameters as |param|}} {{param.typed_value}}{{/each}}{{/strip}}
|
@@ -0,0 +1,5 @@
|
|
1
|
+
{{#if rendered_children.gherkin_annotation }}
|
2
|
+
{{{ rendered_children.gherkin_annotation }}}('{{> gherkin_typed_pattern}}', async ({{#if rendered_children.parameters}}{{{ join rendered_children.parameters_ordered_by_pattern ', '}}}{{/if}}) => {{#curly}}{{#indent}}
|
3
|
+
actionWords.{{{camelize_lower rendered_children.name}}}({{#if has_parameters?}}{{#join raw_parameter_names ', ' as |param|}}{{{underscore param}}}{{/join}}{{/if}});
|
4
|
+
{{/indent}}
|
5
|
+
{{/curly}});{{/if}}
|
@@ -0,0 +1,5 @@
|
|
1
|
+
{{#if rendered_children.gherkin_annotation}}
|
2
|
+
{{{ rendered_children.gherkin_annotation }}}('{{> gherkin_typed_pattern}}', async ({{#if rendered_children.parameters}}{{{ join rendered_children.parameters_ordered_by_pattern ', '}}}{{/if}}) => {{#curly}}{{#indent}}
|
3
|
+
libraryActionWord.getDefaultLibrary().{{{camelize_lower rendered_children.name}}}({{#if has_parameters?}}{{#join raw_parameter_names ', ' as |param|}}{{{underscore param}}}{{/join}}{{/if}});
|
4
|
+
{{/indent}}
|
5
|
+
{{/curly}});{{/if}}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
{{#if has_datasets?}}
|
2
|
-
@Unroll("{{{ escape_double_quotes rendered_children.name }}} #hiptestUid")
|
2
|
+
@Unroll("{{{ escape_double_quotes rendered_children.name }}}{{#if context.uids}} #hiptestUid{{/if}}")
|
3
3
|
{{/if}}def "{{{ escape_double_quotes rendered_children.name }}}{{#if rendered_children.uid}} (uid:{{{ rendered_children.uid}}}){{/if}}"() {{#curly}}{{#indent}}{{> desc}}{{#unless has_annotations?}}{{#unless is_empty?}}
|
4
4
|
expect:{{/unless}}{{/unless}}
|
5
5
|
{{> steps}}{{#if has_datasets?}}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hiptest-publisher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- HipTest R&D
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -259,6 +259,7 @@ files:
|
|
259
259
|
- lib/config/cucumber-javascript.conf
|
260
260
|
- lib/config/cucumber-ruby.conf
|
261
261
|
- lib/config/cucumber-typescript.conf
|
262
|
+
- lib/config/cucumber_expressions-typescript.conf
|
262
263
|
- lib/config/groovy-spock.conf
|
263
264
|
- lib/config/java-espresso.conf
|
264
265
|
- lib/config/java-junit.conf
|
@@ -326,6 +327,7 @@ files:
|
|
326
327
|
- lib/templates/behave/libraryactionword.hbs
|
327
328
|
- lib/templates/behave/nullliteral.hbs
|
328
329
|
- lib/templates/common/_gherkin_pattern.hbs
|
330
|
+
- lib/templates/common/_gherkin_typed_pattern.hbs
|
329
331
|
- lib/templates/common/booleanliteral.hbs
|
330
332
|
- lib/templates/common/dataset.hbs
|
331
333
|
- lib/templates/common/datatable.hbs
|
@@ -391,6 +393,8 @@ files:
|
|
391
393
|
- lib/templates/cucumber/typescript/actionwords.hbs
|
392
394
|
- lib/templates/cucumber/typescript/library.hbs
|
393
395
|
- lib/templates/cucumber/typescript/libraryactionword.hbs
|
396
|
+
- lib/templates/cucumber_expressions/typescript/actionword.hbs
|
397
|
+
- lib/templates/cucumber_expressions/typescript/libraryactionword.hbs
|
394
398
|
- lib/templates/gherkin/_call.hbs
|
395
399
|
- lib/templates/gherkin/_gherkin_text.hbs
|
396
400
|
- lib/templates/gherkin/_scenario.hbs
|
@@ -749,7 +753,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
749
753
|
version: '0'
|
750
754
|
requirements: []
|
751
755
|
rubyforge_project:
|
752
|
-
rubygems_version: 2.6.
|
756
|
+
rubygems_version: 2.7.6.2
|
753
757
|
signing_key:
|
754
758
|
specification_version: 4
|
755
759
|
summary: Export your tests from HipTest into executable tests.
|