hiptest-publisher 1.8.0 → 1.9.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
2
  SHA1:
3
- metadata.gz: 7060a45b500229208b1aab41f027f613a16cfaeb
4
- data.tar.gz: 5e2e1810d7b3d7ced4b7f60fb4396b9fd9e636aa
3
+ metadata.gz: b6d19d39df5ed77a98c6c2030280dfa7937241ae
4
+ data.tar.gz: 69d4a19484003825943dd8f2dee47b45331f4b6d
5
5
  SHA512:
6
- metadata.gz: f5070ded6342524ea605b5cb9a44344fecbfb09efb34a943929775638dd782e76764b2eec229779c1d48bef7e0a9fa9aa2cffa35bd8ca4bd6bcd0f152820532c
7
- data.tar.gz: 47c9e6af92a1d2838477959a629a3742abe86a6e50cc3a08ee74749d5f54daa6afcc99e33cb1dd866608621e76e3d9c0d610565fd1790f3af12e37451bc19d1b
6
+ metadata.gz: cf59dddeda807a69e100601c578125ffe5066f05fa7dc47d6fda475d9162f445defd5fdaa71c312e19c3ef381c75c38055b8da597ed4b0073018326a8705e78a
7
+ data.tar.gz: 9b7650ce40ee03605aece39b984783f79dae990bd85bcba65b2a49a6e6e9c25708e35c60427560fb75e65451b0a9f1594bcf61980a7dca9dbce1bbe94fe4587e
data/README.md CHANGED
@@ -210,4 +210,4 @@ See the [CONTRIBUTING](https://github.com/hiptest/hiptest-publisher/blob/master/
210
210
  Contributors
211
211
  ------------
212
212
 
213
- The @hiptest team, @mhfrantz, @tikolakin, @atulhm, @etorreborre, @daniel-kun, @weeksghost
213
+ The @hiptest team, @mhfrantz, @tikolakin, @atulhm, @etorreborre, @daniel-kun, @weeksghost, @lostiniceland
@@ -4,6 +4,7 @@ indentation = ' '
4
4
  dirname_convention = 'underscore'
5
5
  filename_convention = 'camelize'
6
6
  naming_convention = 'camelize_lower'
7
+ custom_renderer = 'groovy/spock/renderer'
7
8
 
8
9
  [tests]
9
10
  filename = 'ProjectSpec.groovy'
@@ -145,7 +145,7 @@ module Hiptest
145
145
 
146
146
  def write_node_to_file(path, node, context, message, ask_overwrite: false)
147
147
  write_to_file(path, message, ask_overwrite: ask_overwrite) do
148
- Hiptest::Renderer.render(node, context)
148
+ context.get_renderer.render(node, context)
149
149
  end
150
150
  end
151
151
 
@@ -0,0 +1,110 @@
1
+ require 'ruby-handlebars'
2
+
3
+ require 'hiptest-publisher/gherkin_adder'
4
+ require 'hiptest-publisher/nodes_walker'
5
+ require 'hiptest-publisher/handlebars_helper'
6
+ require 'hiptest-publisher/render_context_maker'
7
+
8
+ module Hiptest
9
+ class BaseRenderer < Hiptest::Nodes::Walker
10
+ attr_reader :rendered
11
+ include RenderContextMaker
12
+
13
+ def self.render(node, context)
14
+ renderer = self.new(context)
15
+ renderer.walk_node(node)
16
+ renderer.rendered[node]
17
+ end
18
+
19
+ def initialize(context)
20
+ @rendered = {}
21
+ @context = context
22
+ @template_finder = context.template_finder
23
+ end
24
+
25
+ def walk_call(call)
26
+ # For Gherkin, we need the special arguments rendered.
27
+ if call.free_text_arg
28
+ @rendered_children[:free_text_arg] = @rendered[call.free_text_arg.children[:value]]
29
+ end
30
+
31
+ if call.datatable_arg
32
+ @rendered_children[:datatable_arg] = @rendered[call.datatable_arg.children[:value]]
33
+ end
34
+
35
+ super(call)
36
+ end
37
+
38
+ def walk_scenarios(scs)
39
+ walk_scenario_container(scs)
40
+ super(scs)
41
+ end
42
+
43
+ def walk_actionword(aw)
44
+ add_splitted_tags(aw)
45
+ super(aw)
46
+ end
47
+
48
+ def walk_folder(folder)
49
+ ancestor_tags = folder.ancestors.map {|f| f.children[:tags]}.flatten.uniq
50
+ @rendered_children[:ancestor_tags] = ancestor_tags.map {|t| Hiptest::Renderer.render(t, @context)}
51
+
52
+ walk_scenario_container(folder)
53
+ super(folder)
54
+ end
55
+
56
+ def call_node_walker(node)
57
+ if node.is_a? Hiptest::Nodes::Node
58
+ @rendered_children = {}
59
+
60
+ node.children.each {|name, child| @rendered_children[name] = @rendered[child]}
61
+ @rendered[node] = render_node(node, super(node))
62
+ elsif node.is_a? Array
63
+ @rendered[node] = node.map {|item| @rendered[item]}
64
+ else
65
+ @rendered[node] = node
66
+ end
67
+ end
68
+
69
+ def render_node(node, render_context)
70
+ render_context ||= {}
71
+ render_context[:node] = node
72
+ render_context[:rendered_children] = @rendered_children
73
+ render_context[:context] = @context
74
+
75
+ @template_finder.get_compiled_handlebars(node.kind).call(render_context)
76
+ end
77
+
78
+ private
79
+
80
+ def add_splitted_tags(context)
81
+ @rendered_children[:splitted_tags] = context.children[:tags].map do |tag|
82
+ @rendered[tag]
83
+ end
84
+ end
85
+
86
+ def walk_scenario_container(container)
87
+ # For Robot framework, we need direct access to every scenario
88
+ # datatables and body rendered.
89
+
90
+ @rendered_children[:splitted_scenarios] = container.children[:scenarios].map {|sc|
91
+ {
92
+ name: @rendered[sc.children[:name]],
93
+ tags: sc.children[:tags].map {|tag| @rendered[tag]},
94
+ uid: @rendered[sc.children[:uid]],
95
+ datatable: @rendered[sc.children[:datatable]],
96
+ datasets: sc.children[:datatable].children[:datasets].map {|dataset|
97
+ {
98
+ scenario_name: @rendered[sc.children[:name]],
99
+ name: @rendered[dataset.children[:name]],
100
+ uid: @rendered[dataset.children[:uid]],
101
+ arguments: @rendered[dataset.children[:arguments]]
102
+ }
103
+ },
104
+ parameters: @rendered[sc.children[:parameters]],
105
+ body: @rendered[sc.children[:body]]
106
+ }
107
+ }
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,28 @@
1
+ require 'hiptest-publisher/nodes'
2
+ require 'hiptest-publisher/base_renderer'
3
+
4
+ module Hiptest
5
+ class Renderer < Hiptest::BaseRenderer
6
+
7
+ def walk_call(call)
8
+ base = super(call)
9
+ base[:use_expect_annotation] = needs_fixing?(call)
10
+ base[:use_main_annotation?] = !(call.children[:annotation].nil? || ['and', 'but'].include?(call.children[:annotation]))
11
+
12
+ return base
13
+ end
14
+
15
+ private
16
+
17
+ def needs_fixing?(call)
18
+ scenario = call.parent
19
+
20
+ return false unless scenario.is_a?(Hiptest::Nodes::Scenario)
21
+ return false unless call.children[:annotation].nil? || call.children[:annotation].downcase == 'then'
22
+
23
+ return call.parent.children[:body].select do |step|
24
+ step.is_a?(Hiptest::Nodes::Call) && !step.children[:annotation].nil? && step.children[:annotation].downcase == 'when'
25
+ end.empty?
26
+ end
27
+ end
28
+ end
@@ -2,7 +2,6 @@ require 'set'
2
2
 
3
3
  require 'hiptest-publisher/string'
4
4
  require 'hiptest-publisher/utils'
5
- require 'hiptest-publisher/renderer'
6
5
 
7
6
  module Hiptest
8
7
  module Nodes
@@ -15,7 +14,7 @@ module Hiptest
15
14
  end
16
15
 
17
16
  def render(rendering_context)
18
- return Hiptest::Renderer.render(self, rendering_context)
17
+ return rendering_context.get_renderer.render(self, rendering_context)
19
18
  end
20
19
 
21
20
  def each_sub_nodes(*types, deep: false)
@@ -308,7 +308,6 @@ end
308
308
 
309
309
 
310
310
  class NodeRenderingContext
311
-
312
311
  def initialize(properties)
313
312
  # should contain :node, :path, :description, :indentation
314
313
  @properties = OpenStruct.new(properties)
@@ -341,6 +340,16 @@ class NodeRenderingContext
341
340
  def relative_folder
342
341
  File.dirname(@properties.relative_path)
343
342
  end
343
+
344
+ def get_renderer
345
+ if @properties.renderer_path.nil?
346
+ require 'hiptest-publisher/renderer'
347
+ else
348
+ require "hiptest-publisher/language_specifics/#{@properties.renderer_path}"
349
+ end
350
+
351
+ Hiptest::Renderer
352
+ end
344
353
  end
345
354
 
346
355
 
@@ -549,7 +558,8 @@ class LanguageGroupConfig
549
558
  call_prefix: @language_group_params[:call_prefix],
550
559
  package: @language_group_params[:package],
551
560
  namespace: @language_group_params[:namespace],
552
- uids: @user_params[:uids]
561
+ uids: @user_params[:uids],
562
+ renderer_path: @language_group_params[:custom_renderer]
553
563
  )
554
564
  end
555
565
 
@@ -88,7 +88,6 @@ module Hiptest
88
88
  {
89
89
  :has_arguments? => !c.children[:arguments].empty?,
90
90
  :has_annotation? => !c.children[:annotation].nil?,
91
- :use_main_annotation? => !(c.children[:annotation].nil? || ['and', 'but'].include?(c.children[:annotation])),
92
91
  :in_actionword? => c.parent.is_a?(Hiptest::Nodes::Actionword),
93
92
  :in_datatabled_scenario? => c.parent.is_a?(Hiptest::Nodes::Scenario) && has_datasets?(c.parent),
94
93
  :chunks => c.chunks || [],
@@ -1,110 +1,6 @@
1
- require 'ruby-handlebars'
2
-
3
- require 'hiptest-publisher/gherkin_adder'
4
- require 'hiptest-publisher/nodes_walker'
5
- require 'hiptest-publisher/handlebars_helper'
6
- require 'hiptest-publisher/render_context_maker'
1
+ require 'hiptest-publisher/base_renderer'
7
2
 
8
3
  module Hiptest
9
- class Renderer < Hiptest::Nodes::Walker
10
- attr_reader :rendered
11
- include RenderContextMaker
12
-
13
- def self.render(node, context)
14
- renderer = Hiptest::Renderer.new(context)
15
- renderer.walk_node(node)
16
- renderer.rendered[node]
17
- end
18
-
19
- def initialize(context)
20
- @rendered = {}
21
- @context = context
22
- @template_finder = context.template_finder
23
- end
24
-
25
- def walk_call(call)
26
- # For Gherkin, we need the special arguments rendered.
27
- if call.free_text_arg
28
- @rendered_children[:free_text_arg] = @rendered[call.free_text_arg.children[:value]]
29
- end
30
-
31
- if call.datatable_arg
32
- @rendered_children[:datatable_arg] = @rendered[call.datatable_arg.children[:value]]
33
- end
34
-
35
- super(call)
36
- end
37
-
38
- def walk_scenarios(scs)
39
- walk_scenario_container(scs)
40
- super(scs)
41
- end
42
-
43
- def walk_actionword(aw)
44
- add_splitted_tags(aw)
45
- super(aw)
46
- end
47
-
48
- def walk_folder(folder)
49
- ancestor_tags = folder.ancestors.map {|f| f.children[:tags]}.flatten.uniq
50
- @rendered_children[:ancestor_tags] = ancestor_tags.map {|t| Hiptest::Renderer.render(t, @context)}
51
-
52
- walk_scenario_container(folder)
53
- super(folder)
54
- end
55
-
56
- def call_node_walker(node)
57
- if node.is_a? Hiptest::Nodes::Node
58
- @rendered_children = {}
59
-
60
- node.children.each {|name, child| @rendered_children[name] = @rendered[child]}
61
- @rendered[node] = render_node(node, super(node))
62
- elsif node.is_a? Array
63
- @rendered[node] = node.map {|item| @rendered[item]}
64
- else
65
- @rendered[node] = node
66
- end
67
- end
68
-
69
- def render_node(node, render_context)
70
- render_context ||= {}
71
- render_context[:node] = node
72
- render_context[:rendered_children] = @rendered_children
73
- render_context[:context] = @context
74
-
75
- @template_finder.get_compiled_handlebars(node.kind).call(render_context)
76
- end
77
-
78
- private
79
-
80
- def add_splitted_tags(context)
81
- @rendered_children[:splitted_tags] = context.children[:tags].map do |tag|
82
- @rendered[tag]
83
- end
84
- end
85
-
86
- def walk_scenario_container(container)
87
- # For Robot framework, we need direct access to every scenario
88
- # datatables and body rendered.
89
-
90
- @rendered_children[:splitted_scenarios] = container.children[:scenarios].map {|sc|
91
- {
92
- name: @rendered[sc.children[:name]],
93
- tags: sc.children[:tags].map {|tag| @rendered[tag]},
94
- uid: @rendered[sc.children[:uid]],
95
- datatable: @rendered[sc.children[:datatable]],
96
- datasets: sc.children[:datatable].children[:datasets].map {|dataset|
97
- {
98
- scenario_name: @rendered[sc.children[:name]],
99
- name: @rendered[dataset.children[:name]],
100
- uid: @rendered[dataset.children[:uid]],
101
- arguments: @rendered[dataset.children[:arguments]]
102
- }
103
- },
104
- parameters: @rendered[sc.children[:parameters]],
105
- body: @rendered[sc.children[:body]]
106
- }
107
- }
108
- end
4
+ class Renderer < Hiptest::BaseRenderer
109
5
  end
110
6
  end
@@ -1,2 +1,2 @@
1
- {{#unless in_actionword?}}{{#if use_main_annotation?}}{{rendered_children.annotation}}:
1
+ {{#unless in_actionword?}}{{#if use_main_annotation?}}{{#if use_expect_annotation}}expect{{else}}{{rendered_children.annotation}}{{/if}}:
2
2
  {{/if}}{{/unless}}{{#if context.call_prefix}}{{{context.call_prefix}}}.{{/if}}{{{ camelize_lower rendered_children.actionword }}}({{{ join rendered_children.all_arguments ', '}}})
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: 1.8.0
4
+ version: 1.9.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: 2017-11-08 00:00:00.000000000 Z
11
+ date: 2017-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -248,6 +248,7 @@ files:
248
248
  - lib/config/specflow.conf
249
249
  - lib/hiptest-publisher.rb
250
250
  - lib/hiptest-publisher/actionword_indexer.rb
251
+ - lib/hiptest-publisher/base_renderer.rb
251
252
  - lib/hiptest-publisher/call_arguments_adder.rb
252
253
  - lib/hiptest-publisher/cli_options_checker.rb
253
254
  - lib/hiptest-publisher/client.rb
@@ -257,6 +258,7 @@ files:
257
258
  - lib/hiptest-publisher/gherkin_adder.rb
258
259
  - lib/hiptest-publisher/handlebars_helper.rb
259
260
  - lib/hiptest-publisher/items_orderer.rb
261
+ - lib/hiptest-publisher/language_specifics/groovy/spock/renderer.rb
260
262
  - lib/hiptest-publisher/nodes.rb
261
263
  - lib/hiptest-publisher/nodes_walker.rb
262
264
  - lib/hiptest-publisher/options_parser.rb