hiptest-publisher 2.4.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +310 -0
  3. data/LICENSE +1 -2
  4. data/README.md +26 -21
  5. data/bin/hiptest-publisher +11 -7
  6. data/config/locales/en.yml +14 -13
  7. data/lib/config/cucumber-typescript.conf +41 -41
  8. data/lib/config/cucumber_legacy-groovy.conf +40 -0
  9. data/lib/config/cucumber_legacy-java.conf +24 -0
  10. data/lib/config/{cucumber_expressions-typescript.conf → cucumber_legacy-typescript.conf} +41 -41
  11. data/lib/hiptest-publisher/formatters/console_formatter.rb +1 -0
  12. data/lib/hiptest-publisher/handlebars_helper.rb +1 -1
  13. data/lib/hiptest-publisher/options_parser.rb +22 -5
  14. data/lib/hiptest-publisher/renderer.rb +5 -1
  15. data/lib/templates/cucumber/groovy/step-definitions/actionword.hbs +1 -1
  16. data/lib/templates/cucumber/groovy/step-definitions/actionwords.hbs +3 -2
  17. data/lib/templates/cucumber/groovy/step-definitions/library.hbs +3 -2
  18. data/lib/templates/cucumber/groovy/step-definitions/libraryactionword.hbs +1 -1
  19. data/lib/templates/cucumber/java/actionword.hbs +1 -1
  20. data/lib/templates/cucumber/java/actionwords.hbs +2 -2
  21. data/lib/templates/cucumber/typescript/actionword.hbs +1 -1
  22. data/lib/templates/cucumber/typescript/libraryactionword.hbs +1 -1
  23. data/lib/templates/cucumber_legacy/groovy/step-definitions/actionword.hbs +5 -0
  24. data/lib/templates/cucumber_legacy/groovy/step-definitions/actionwords.hbs +10 -0
  25. data/lib/templates/cucumber_legacy/groovy/step-definitions/library.hbs +10 -0
  26. data/lib/templates/cucumber_legacy/groovy/step-definitions/libraryactionword.hbs +5 -0
  27. data/lib/templates/cucumber_legacy/java/actionword.hbs +6 -0
  28. data/lib/templates/cucumber_legacy/java/actionwords.hbs +12 -0
  29. data/lib/templates/cucumber_legacy/typescript/actionword.hbs +5 -0
  30. data/lib/templates/{cucumber_expressions → cucumber_legacy}/typescript/libraryactionword.hbs +1 -1
  31. data/lib/templates/gherkin/scenarios.hbs +1 -1
  32. metadata +38 -14
  33. data/lib/templates/cucumber_expressions/typescript/actionword.hbs +0 -5
@@ -16,14 +16,18 @@ require 'ruby_version'
16
16
  require 'hiptest-publisher/i18n'
17
17
  require 'hiptest-publisher/utils'
18
18
 
19
- # Ensure ruby version >= 2.3
20
- if RubyVersion < '2.3.0'
21
- STDERR.puts(I18n.t('ruby_version.required_version', version: '2.3.0'))
19
+ # Ensure ruby version >= 2.5
20
+ if RubyVersion < '2.5.0'
21
+ STDERR.puts(I18n.t('ruby_version.required_version', version: '2.5.0'))
22
22
  STDERR.puts(I18n.t('ruby_version.current_version', engine: RUBY_ENGINE, version: RUBY_VERSION))
23
23
  STDERR.puts(I18n.t('ruby_version.use_more_recent'))
24
24
 
25
- if RubyVersion.is? 2.2
26
- STDERR.puts(I18n.('ruby_version.support_ended', version: '2.2.0', year: '2018', month: '06', day: '20'))
25
+ if RubyVersion.is? 2.4
26
+ STDERR.puts(I18n.('ruby_version.support_ended', version: '2.4.0', year: '2020', month: '03', day: '31'))
27
+ elsif RubyVersion.is? 2.3
28
+ STDERR.puts(I18n.('ruby_version.support_ended', version: '2.3.0', year: '2019', month: '03', day: '31'))
29
+ elsif RubyVersion.is? 2.2
30
+ STDERR.puts(I18n.('ruby_version.support_ended', version: '2.2.0', year: '2018', month: '03', day: '31'))
27
31
  elsif RubyVersion.is? 2.1
28
32
  STDERR.puts(I18n.('ruby_version.support_ended', version: '2.1.0', year: '2017', month: '04', day: '01'))
29
33
  elsif RubyVersion.is? 2.0
@@ -36,7 +40,7 @@ if RubyVersion < '2.3.0'
36
40
  exit 1
37
41
  end
38
42
 
39
- if RubyVersion < '2.4'
43
+ if RubyVersion < '2.4' # TODO: deprecate ruby 2.5 (eol 2021-03-31)
40
44
  STDERR.puts(I18n.t('ruby_version.current_version', engine: RUBY_ENGINE, version: RUBY_VERSION))
41
45
  STDERR.puts(I18n.t('ruby_version.deprecation_warning', version: '2.3'))
42
46
  STDERR.puts(I18n.t('ruby_version.support_ended', version: '2.3', year: '2019', month: '03', day: '31'))
@@ -45,7 +49,7 @@ end
45
49
  require 'hiptest-publisher'
46
50
  begin
47
51
  require 'pry' # only available in development
48
- rescue LoadError
52
+ rescue StandardError, LoadError
49
53
  end
50
54
 
51
55
  Hiptest::Publisher.new(ARGV).run
@@ -66,7 +66,7 @@ en:
66
66
  up_to_date: Your current install of hiptest-publisher (%{current}) is up-to-date.
67
67
  default: default
68
68
  errors:
69
- api_error: HipTest API returned error %{code}
69
+ api_error: CucumberStudio API returned error %{code}
70
70
  cli_options:
71
71
  actionwords_signature_directory: 'Bad Action Words signature file: the file "%{path}" is a directory'
72
72
  filter_status_without_test_run: |
@@ -86,7 +86,7 @@ en:
86
86
 
87
87
  Found: %{incorrect_value}
88
88
  invalid_tag_value_list: |
89
- %{option} should be a list of comma separated tags in HipTest
89
+ %{option} should be a list of comma separated tags from CucumberStudio
90
90
 
91
91
  Found: %{incorrect_value}
92
92
  invalid_test_run_id: 'Invalid format --test-run-id="%{test_run_id}": the test run id must be numeric'
@@ -100,7 +100,7 @@ en:
100
100
  missing_token: |
101
101
  Missing argument --token: you must specify project secret token with --token=<project-token>
102
102
 
103
- The project secret token can be found on HipTest in the settings section, under
103
+ The project secret token can be found on CucumberStudio in the settings section, under
104
104
  'Test code generation'. It is a sequence of numbers uniquely identifying your
105
105
  project.
106
106
 
@@ -128,9 +128,9 @@ en:
128
128
  no_test_runs: 'No matching test run found: this project does not have any test runs.'
129
129
  project_not_found: No project found with this secret token.
130
130
  template_not_found: no template with name %{template_name} in dirs %{dirs}
131
- test_run_list_unavailable: Cannot get the list of available test runs from HipTest. Try using --test-run-id instead of --test-run-name
131
+ test_run_list_unavailable: Cannot get the list of available test runs from CucumberStudio. Try using --test-run-id instead of --test-run-name
132
132
  exporting_file: Exporting %{name}
133
- fetching_data: Fetching data from HipTest
133
+ fetching_data: Fetching data from CucumberStudio
134
134
  using_cached_data: Using cached data from previous export
135
135
  caching_data: Caching data
136
136
  using_cache: "Using cache: %{full_path}"
@@ -148,7 +148,7 @@ en:
148
148
  hiptest-publisher --language=%{language} --only=%{first},%{second}
149
149
  description: |2
150
150
 
151
- Exports tests from HipTest for automation.
151
+ Exports tests from CucumberStudio for automation.
152
152
 
153
153
  Specific options:
154
154
  header: 'Usage: hiptest-publisher [options]'
@@ -183,9 +183,9 @@ en:
183
183
  framework: Test framework to use
184
184
  global_failure_on_missing_reports: When there is no results file to push, report a global failure
185
185
  help: Show this message
186
- http_proxy: 'Specify your http proxy to access Hiptest'
187
- keep_filenames: 'Keep the same name as in HipTest for the test files (note: may cause encoding issues)'
188
- keep_foldernames: 'Keep the same name as in HipTest for the folders (note: may cause encoding issues)'
186
+ http_proxy: 'Specify your http proxy to access CucumberStudio'
187
+ keep_filenames: 'Keep the same name as in CucumberStudio for the test files (note: may cause encoding issues)'
188
+ keep_foldernames: 'Keep the same name as in CucumberStudio for the folders (note: may cause encoding issues)'
189
189
  language: Target language
190
190
  languages_help: Show languages and framework options
191
191
  leafless_export: Use only last level action word
@@ -195,12 +195,13 @@ en:
195
195
  only: Restrict export to given file categories (--only=list to list them)
196
196
  output_directory: Output directory
197
197
  overriden_templates: Folder for overriden templates
198
+ overriden_language_configs: Folder for overriden language configs
198
199
  parameter_delimiter: Parameter delimiter (for Gherkin based export only)
199
200
  parent_folder_tags: 'Export tags from parent folders (note: if set to false, those tags are never rendered. Only available for Gherkin base exports)'
200
201
  push: Push a results file to the server
201
202
  push_format: Format of the test results (cucumber-json, junit, nunit, robot, tap)
202
203
  site: Site to fetch from
203
- sort: 'Sorting of tests in output: id will sort them by age, order will keep the same order than in hiptest (only with --with-folders option, will fallback to id otherwise), alpha will sort them by name'
204
+ sort: 'Sorting of tests in output: id will sort them by age, order will keep the same order as in CucumberStudio (only with --with-folders option, will fallback to id otherwise), alpha will sort them by name'
204
205
  split_scenarios: Export each scenario in a single file (except for Gherkin based languages)
205
206
  test_run_id: Export data from a test run identified by its id
206
207
  test_run_name: Export data from a test run identified by its name
@@ -211,9 +212,9 @@ en:
211
212
  with_dataset_names: 'Export dataset name when creating feature files (note: available only for Gherkin-based exports)'
212
213
  with_folders: Use folders hierarchy to export files in respective directories
213
214
  without: Exclude file categories from import (--only=list to list them)
214
- xml_file: XML file to use instead of fetching it from HipTest
215
- cache_dir: "Path to the directory to store cache of Hiptest data"
216
- cache_duration: "Validity of the Hiptest data cache in seconds"
215
+ xml_file: XML file to use instead of fetching it from CucumberStudio
216
+ cache_dir: "Path to the directory to store cache of CucumberStudio data"
217
+ cache_duration: "Validity of the CucumberStudio data cache in seconds"
217
218
  indentation: Customize indentation
218
219
  overwrite:
219
220
  ask_confirmation: 'File %{path} exists, do you want to overwrite it? [y/N] '
@@ -1,41 +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/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/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'
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/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/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'
@@ -0,0 +1,40 @@
1
+ [_common]
2
+ package = 'com.example'
3
+ fallback_template = 'empty'
4
+ indentation = ' '
5
+ dirname_convention = 'underscore'
6
+ filename_convention = 'camelize'
7
+ naming_convention = 'camelize_lower'
8
+
9
+ [features]
10
+ node_name = folders
11
+ template_dirs = gherkin/inlined_uids, gherkin/java, gherkin, common
12
+ named_filename = '%s.feature'
13
+ indentation = ' '
14
+ renderer_addons = 'GherkinAddon'
15
+
16
+ [step_definitions]
17
+ node_name = actionwords
18
+ template_dirs = cucumber_legacy/groovy/step-definitions, cucumber/groovy/step-definitions, groovy, java, common
19
+ filename = 'StepDefinitions.groovy'
20
+ call_prefix = 'actionwords'
21
+ renderer_addons = 'GherkinAddon'
22
+
23
+ [step_definitions_library]
24
+ node_name = libraries
25
+ call_prefix = 'actionwords'
26
+ template_dirs = cucumber_legacy/groovy/step-definitions, cucumber/groovy/step-definitions, groovy, java, common
27
+ named_filename = 'StepDefinitions%s.groovy'
28
+ renderer_addons = 'GherkinAddon'
29
+
30
+ [actionwords]
31
+ template_dirs = groovy, java, common
32
+ filename = 'Actionwords.groovy'
33
+
34
+ [library]
35
+ template_dirs = groovy, java, common
36
+ filename = 'ActionwordLibrary.groovy'
37
+
38
+ [libraries]
39
+ template_dirs = groovy, java, common
40
+ named_filename = '%sLibrary.groovy'
@@ -0,0 +1,24 @@
1
+ [_common]
2
+ package = 'com.example'
3
+ indentation = ' '
4
+ fallback_template = 'empty'
5
+
6
+ [features]
7
+ node_name = folders
8
+ template_dirs = gherkin/inlined_uids, gherkin/java, gherkin, common
9
+ named_filename = '%s.feature'
10
+ indentation = ' '
11
+ renderer_addons = 'GherkinAddon'
12
+
13
+ [step_definitions]
14
+ node_name = actionwords
15
+ template_dirs = cucumber_legacy/java, cucumber/java, java, common
16
+ filename = 'StepDefinitions.java'
17
+ naming_convention = 'camelize_lower'
18
+ call_prefix = 'actionwords'
19
+ renderer_addons = 'GherkinAddon'
20
+
21
+ [actionwords]
22
+ template_dirs = cucumber_legacy/java/actionwords, cucumber/java/actionwords, java, common
23
+ filename = 'Actionwords.java'
24
+ naming_convention = 'camelize_lower'
@@ -1,41 +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'
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_legacy/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_legacy/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'
@@ -63,6 +63,7 @@ class ConsoleFormatter
63
63
  cursor_offset = ""
64
64
  else
65
65
  return unless tty?
66
+ return if IO.console.nil?
66
67
  rows, columns = IO.console.winsize
67
68
  return if columns == 0
68
69
  @immediate_verbose = false
@@ -88,7 +88,7 @@ module Hiptest
88
88
  end
89
89
 
90
90
  def hh_join_gherkin_dataset(context, items, block, else_block = nil)
91
- items.map! {|item| item.gsub(/\|/, "\\|")}
91
+ items.map! { |item| item.gsub(/\|/, "\\|").gsub("\n", "\\n") }
92
92
 
93
93
  hh_join(context, items, ' | ', block, else_block)
94
94
  end
@@ -203,14 +203,14 @@ class OptionsParser
203
203
  {
204
204
  'Ruby' => ['Rspec', 'MiniTest'],
205
205
  'Cucumber' => ['Ruby', 'Java', 'Javascript', 'Groovy', 'TypeScript'],
206
- 'Cucumber_Expressions' => ['TypeScript'],
206
+ 'Cucumber_Legacy' => ['Java', 'Groovy', 'TypeScript'],
207
207
  'Java' => ['JUnit', 'Test NG', 'Espresso'],
208
208
  'Python' => ['Unittest'],
209
209
  'Robot Framework' => [''],
210
210
  'Selenium IDE' => [''],
211
211
  'Javascript' => ['qUnit', 'Jasmine', 'Mocha', 'Protractor', 'CodeceptJS'],
212
212
  'CSharp' => ['NUnit'],
213
- 'PHP' => ['PHPUnit', 'UnitTest'],
213
+ 'PHP' => ['PHPUnit'],
214
214
  'SpecFlow' => [''],
215
215
  'Behave' => [''],
216
216
  'Behat' => [''],
@@ -229,6 +229,7 @@ class OptionsParser
229
229
  Option.new(nil, 'filename-pattern=PATTERN', nil, String, I18n.t('options.filename_pattern'), :filename_pattern),
230
230
  Option.new('c', 'config-file=PATH', nil, String, I18n.t('options.config'), :config),
231
231
  Option.new(nil, 'overriden-templates=PATH', '', String, I18n.t('options.overriden_templates'), :overriden_templates),
232
+ Option.new(nil, 'overriden-language-configs=PATH', '', String, I18n.t('options.overriden_language_configs'), :overriden_language_configs),
232
233
  Option.new(nil, 'test-run-id=ID', '', String, I18n.t('options.test_run_id'), :test_run_id),
233
234
  Option.new(nil, 'test-run-name=NAME', '', String, I18n.t('options.test_run_name'), :test_run_name),
234
235
  Option.new(nil, 'only=CATEGORIES', nil, String, I18n.t('options.only'), :only),
@@ -251,7 +252,7 @@ class OptionsParser
251
252
  Option.new(nil, 'empty-folders', false, nil, I18n.t('options.empty_folders'), :empty_folders),
252
253
  Option.new(nil, 'split-scenarios', false, nil, I18n.t('options.split_scenarios'), :split_scenarios),
253
254
  Option.new(nil, 'leafless-export', false, nil, I18n.t('options.leafless_export'), :leafless_export),
254
- Option.new('s', 'site=SITE', 'https://app.hiptest.com', String, I18n.t('options.site'), :site),
255
+ Option.new('s', 'site=SITE', 'https://studio.cucumber.io', String, I18n.t('options.site'), :site),
255
256
  Option.new(nil, 'http-proxy=PROXY_URL', nil, String, I18n.t('options.http_proxy'), :http_proxy),
256
257
  Option.new('p', 'push=FILE.TAP', '', String, I18n.t('options.push'), :push),
257
258
  Option.new(nil, 'global-failure-on-missing-reports', false, nil, I18n.t('options.global_failure_on_missing_reports'), :global_failure_on_missing_reports),
@@ -383,6 +384,7 @@ class NodeRenderingContext
383
384
 
384
385
  def renderer_addons
385
386
  addons = @properties.renderer_addons || ""
387
+
386
388
  addons.split.map do |addon_name|
387
389
  Hiptest.const_get(addon_name)
388
390
  end
@@ -390,11 +392,12 @@ class NodeRenderingContext
390
392
  end
391
393
 
392
394
  class TemplateFinder
393
- attr_reader :template_dirs, :overriden_templates, :forced_templates, :fallback_template
395
+ attr_reader :template_dirs, :overriden_templates, :overriden_language_configs, :forced_templates, :fallback_template
394
396
 
395
397
  def initialize(
396
398
  template_dirs: nil,
397
399
  overriden_templates: nil,
400
+ overriden_language_configs: nil,
398
401
  indentation: ' ',
399
402
  forced_templates: nil,
400
403
  fallback_template: nil,
@@ -696,7 +699,21 @@ class LanguageConfigParser
696
699
  else
697
700
  "#{cli_options.language}-#{cli_options.framework}.conf"
698
701
  end
699
- config_path = File.expand_path("#{hiptest_publisher_path}/lib/config/#{config_name.downcase}")
702
+ config_path = "/lib/config/#{config_name.downcase}"
703
+ config_prefix = if !cli_options.overriden_language_configs.to_s.empty?
704
+ # If the user has specified a overiden language config path, check it first. If the config
705
+ # exists there, return that, otherwise fall back to the default setup and look for a config there.
706
+ expanded = File.expand_path("#{cli_options.overriden_language_configs}/#{config_name.downcase}")
707
+
708
+ # If the file exists in the path the user specified, set the config path to blank so we will be
709
+ # looking in the exact path that the user requested.
710
+ if File.file?(expanded)
711
+ config_path = ''
712
+ expanded
713
+ end
714
+ end
715
+
716
+ config_path = File.expand_path("#{config_prefix || hiptest_publisher_path}#{config_path}")
700
717
 
701
718
  if !File.file?(config_path)
702
719
  if cli_options.framework.to_s.empty?