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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 36283085bf8b4776b1a854fed8a9dc0c96d7e84a
4
- data.tar.gz: 040bc62f36aaa7b1aa54b354ba205ce4bc2660d6
2
+ SHA256:
3
+ metadata.gz: 5bcc0cd663f5ba7411031e5f8db901bd7229fe6d88a7deb815cbfc82dde9e8ea
4
+ data.tar.gz: 165c9da7b30f07d0eeacbdaef4aae5fefa9146533ee826898971d646ecc6adcf
5
5
  SHA512:
6
- metadata.gz: 88d3eba37283240cd6632fef52cdc0bd55fda0544428bf29b92cc648760e0ef59c06bbfecf863773e6bbba626f08d17de4d6efec4aabfe07a4cb93e93dec7e80
7
- data.tar.gz: f8d676bc23cc00e1428c64b9f1f41b33c269feffbfe0afd3f27c6ba353bfd4d27fee1024eddf2bd568d53526a6f63e9be531504a694ca492b18727a6c9083b77
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
- - Ruby (rspec / minitest)
59
- - Cucumber Ruby
60
- - Python (unittest)
61
- - Java (JUnit / TestNg)
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
- - Javascript (qUnit / Jasmine)
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
@@ -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: can be disabled only for Gherkin-based exports, may cause issue when pushing results back)'
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'
@@ -83,15 +83,15 @@ module Hiptest
83
83
  end
84
84
 
85
85
  def fetch_xml_file
86
- @client.fetch_project_export
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
- puts err.message.yellow
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
- puts I18n.t("errors.default").red
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.isatty
117
- STDOUT.print "\n"
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 fetch_project_export
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
- response = send_get_request(url)
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
- return content
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.blue if message
17
+ puts colorize(message, :blue) if message
17
18
  line = "-" * 80
18
- puts line.yellow
19
- puts "#{error.class.name}: #{error.message}".red
20
- puts "#{error.backtrace.map {|l| " #{l}\n"}.join}".yellow
21
- puts line.yellow
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.yellow
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".green
54
+ status_icon = colorize("v", :green)
46
55
  elsif status == :warning
47
- status_icon = "?".yellow
56
+ status_icon = colorize("?", :yellow)
48
57
  elsif status == :failure
49
- status_icon = "x".red
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 $stdout.tty?
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
- return "hiptest-publisher #{args.join(' ')}".strip
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', true, nil, I18n.t('options.uids'), :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('v', 'verbose', false, nil, I18n.t('options.verbose'), :verbose)
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
- File.join(Dir.home, '.hiptest-publisher', 'cache')
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.0.0
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: 2019-12-02 00:00:00.000000000 Z
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.10
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.