turnip_formatter 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -39,6 +39,10 @@ module Turnip
39
39
  def run(feature_file)
40
40
  Turnip::Builder.build(feature_file).features.each do |feature|
41
41
  describe feature.name, feature.metadata_hash do
42
+ let :background_steps do
43
+ feature.backgrounds.map(&:steps).flatten
44
+ end
45
+
42
46
  before do
43
47
  example.metadata[:file_path] = feature_file
44
48
  initialize_scenario_metadata
@@ -46,8 +50,8 @@ module Turnip
46
50
  feature.backgrounds.each do |background|
47
51
  push_scenario_metadata(background)
48
52
  end
49
-
50
- feature.backgrounds.map(&:steps).flatten.each.with_index do |step, index|
53
+
54
+ background_steps.each.with_index do |step, index|
51
55
  run_step(feature_file, step, index)
52
56
  end
53
57
  end
@@ -58,7 +62,7 @@ module Turnip
58
62
  end
59
63
 
60
64
  it scenario.steps.map(&:description).join(' -> ') do
61
- scenario.steps.each.with_index do |step, index|
65
+ scenario.steps.each.with_index(background_steps.size) do |step, index|
62
66
  run_step(feature_file, step, index)
63
67
  end
64
68
  end
@@ -9,13 +9,24 @@ module TurnipFormatter
9
9
  # @param [TurnipFormatter::Step] step
10
10
  #
11
11
  def extended(step)
12
- ::TurnipFormatter::Step.templates[status].each do |style, block|
13
- step.docs[style] = step.instance_eval(&block)
12
+ templates.each do |style, template|
13
+ step.docs[style] = {
14
+ klass: template[:klass],
15
+ value: step.instance_eval(&template[:block])
16
+ }
14
17
  end
15
18
  end
16
19
 
17
- def add_template(style, &block)
18
- ::TurnipFormatter::Step.add_template(status, style, &block)
20
+ def add_template(style, template = nil, &block)
21
+ ::TurnipFormatter::Step.add_template(status, style, template, &block)
22
+ end
23
+
24
+ def remove_template(style)
25
+ ::TurnipFormatter::Step.remove_template(status, style)
26
+ end
27
+
28
+ def templates
29
+ ::TurnipFormatter::Step.templates[status]
19
30
  end
20
31
  end
21
32
  end
@@ -9,9 +9,14 @@ module TurnipFormatter
9
9
  @templates ||= {}
10
10
  end
11
11
 
12
- def add_template(status, style, &block)
12
+ def add_template(status, style, klass = nil, &block)
13
13
  templates[status] ||= {}
14
- templates[status][style] = block
14
+ templates[status][style] = { klass: klass, block: block }
15
+ end
16
+
17
+ def remove_template(status, style)
18
+ templates[status].delete(style)
19
+ templates.delete(status.to_sym) if templates[status.to_sym].empty?
15
20
  end
16
21
 
17
22
  def status
@@ -26,7 +31,7 @@ module TurnipFormatter
26
31
  def initialize(example, description)
27
32
  @example = example
28
33
  @name = description[:keyword] + description[:name]
29
- @docs = { extra_args: description[:extra_args] }
34
+ @docs = { extra_args: { klass: nil, value: description[:extra_args] } }
30
35
  end
31
36
 
32
37
  def attention?
@@ -95,13 +95,11 @@ module TurnipFormatter
95
95
  def step_args(step)
96
96
  output = []
97
97
 
98
- step.docs.each do |style, value|
98
+ step.docs.each do |style, template|
99
99
  if style == :extra_args
100
- output << step_extra_args(value)
100
+ output << step_extra_args(template[:value])
101
101
  else
102
- # call StepException, StepSource, etc...
103
- klass = ['step', style.to_s].map(&:capitalize).join
104
- output << self.class.const_get(klass).build(value)
102
+ output << step_template(style, template[:klass]).build(template[:value])
105
103
  end
106
104
  end
107
105
 
@@ -115,6 +113,14 @@ module TurnipFormatter
115
113
  end.join("\n")
116
114
  end
117
115
 
116
+ def step_template(style, klass)
117
+ return klass if !!klass
118
+
119
+ # call Built-in template (StepException, StepSource, etc...)
120
+ klass = ['step', style.to_s].map(&:capitalize).join
121
+ self.class.const_get(klass)
122
+ end
123
+
118
124
  def report_area
119
125
  <<-EOS
120
126
  <div id="report">
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  module TurnipFormatter
4
- VERSION = "0.0.4"
4
+ VERSION = "0.0.5"
5
5
  end
@@ -15,3 +15,12 @@ Feature: Battle a monster with weapon
15
15
  Then it should die
16
16
  And Fanfare
17
17
 
18
+ Scenario: boss monster
19
+
20
+ This scenario will error
21
+ So, fanfare is not...oh...
22
+
23
+ Given there is a boss monster
24
+ When I attack it
25
+ Then it should die
26
+ And Fanfare
@@ -8,6 +8,10 @@ step "there is a strong monster" do
8
8
  @monster = 2
9
9
  end
10
10
 
11
+ step "there is a boss monster" do
12
+ @monster = 3
13
+ end
14
+
11
15
  step "I attack it" do
12
16
  @attack ||= 1 # no weapon
13
17
  @monster -= @attack
@@ -15,6 +15,28 @@ module TurnipFormatter
15
15
  step
16
16
  end
17
17
 
18
+ it 'exists built-in step template' do
19
+ templates = TurnipFormatter::Step::Failure.templates
20
+ expect(templates.keys).to eq([:source, :exception])
21
+ end
22
+
23
+ context 'add custom step template' do
24
+ before do
25
+ TurnipFormatter::Step::Failure.add_template :custom do
26
+ example.example_group.description
27
+ end
28
+ end
29
+
30
+ after do
31
+ TurnipFormatter::Step::Failure.remove_template :custom
32
+ end
33
+
34
+ it 'should get custom step template' do
35
+ templates = TurnipFormatter::Step::Failure.templates
36
+ expect(templates.keys).to eq([:source, :exception, :custom])
37
+ end
38
+ end
39
+
18
40
  describe '#attention?' do
19
41
  subject { step.attention? }
20
42
  it { should be_true }
@@ -13,6 +13,28 @@ module TurnipFormatter
13
13
  step
14
14
  end
15
15
 
16
+ it 'exists built-in step template' do
17
+ templates = TurnipFormatter::Step::Pending.templates
18
+ expect(templates.keys).to eq([:exception])
19
+ end
20
+
21
+ context 'add custom step template' do
22
+ before do
23
+ TurnipFormatter::Step::Pending.add_template :custom do
24
+ example.example_group.description
25
+ end
26
+ end
27
+
28
+ after do
29
+ TurnipFormatter::Step::Failure.remove_template :custom
30
+ end
31
+
32
+ it 'should get custom step template' do
33
+ templates = TurnipFormatter::Step::Pending.templates
34
+ expect(templates.keys).to eq([:exception, :custom])
35
+ end
36
+ end
37
+
16
38
  describe '#attention?' do
17
39
  subject { step.attention? }
18
40
  it { should be_true }
@@ -21,5 +21,53 @@ module TurnipFormatter
21
21
  subject { step.docs }
22
22
  it { should include :extra_args }
23
23
  end
24
+
25
+ describe '#add_template' do
26
+ let :custom_template do
27
+ Module.new do
28
+ def self.build(hoge)
29
+ hoge * 3
30
+ end
31
+ end
32
+ end
33
+
34
+ before do
35
+ TurnipFormatter::Step.add_template :hoge, :source1 do
36
+ 'aiueo'
37
+ end
38
+
39
+ TurnipFormatter::Step.add_template :hoge, :source2, custom_template do
40
+ '12345'
41
+ end
42
+ end
43
+
44
+ after do
45
+ TurnipFormatter::Step.remove_template(:hoge, :source1)
46
+ TurnipFormatter::Step.remove_template(:hoge, :source2)
47
+ end
48
+
49
+ it 'can add step template' do
50
+ style = TurnipFormatter::Step.templates[:hoge][:source1]
51
+ expect(style[:block].call).to eq('aiueo')
52
+
53
+ style = TurnipFormatter::Step.templates[:hoge][:source2]
54
+ expect(style[:klass].build(style[:block].call)).to eq('123451234512345')
55
+ end
56
+ end
57
+
58
+ describe '#remove_template' do
59
+ it 'can remove step template' do
60
+ TurnipFormatter::Step.add_template :hoge, :style1 do ; 'aiueo' end
61
+ TurnipFormatter::Step.add_template :hoge, :style2 do ; '12345' end
62
+ expect(TurnipFormatter::Step.templates[:hoge]).to have_key :style1
63
+ expect(TurnipFormatter::Step.templates[:hoge]).to have_key :style2
64
+
65
+ TurnipFormatter::Step.remove_template(:hoge, :style1)
66
+ expect(TurnipFormatter::Step.templates[:hoge]).to have_key :style2
67
+
68
+ TurnipFormatter::Step.remove_template(:hoge, :style2)
69
+ expect(TurnipFormatter::Step.templates).not_to have_key(:hoge)
70
+ end
71
+ end
24
72
  end
25
73
  end
@@ -56,24 +56,61 @@ module TurnipFormatter
56
56
  end
57
57
 
58
58
  context 'Step has arguments' do
59
- describe '#step_args' do
60
- let(:table) { Turnip::Table.new [] }
59
+ let(:table) { Turnip::Table.new [] }
61
60
 
62
- let(:step) do
63
- step = double
64
- step.stub(:docs).and_return(
65
- extra_args: ['a', table], source: 'b', exception: 'c'
66
- )
67
- step
61
+ context 'original template' do
62
+ describe '#step_args' do
63
+ let(:step) do
64
+ step = double
65
+ step.stub(:docs).and_return(
66
+ extra_args: { klass: nil, value: ['a', table] },
67
+ source: { klass: nil, value: 'b' },
68
+ exception: { klass: nil, value: 'c' }
69
+ )
70
+ step
71
+ end
72
+
73
+ it 'should call corresponding method in step' do
74
+ Template::StepMultiline.should_receive(:build).with('a').and_return('extra_args1')
75
+ Template::StepOutline.should_receive(:build).with(table).and_return('extra_args2')
76
+ Template::StepSource.should_receive(:build).with('b').and_return('source')
77
+ Template::StepException.should_receive(:build).with('c').and_return('exception')
78
+
79
+ expect(template.send(:step_args, step)).to eq("extra_args1\nextra_args2\nsource\nexception")
80
+ end
68
81
  end
69
-
70
- it 'should call corresponding method in step' do
71
- Template::StepMultiline.should_receive(:build).with('a').and_return('extra_args1')
72
- Template::StepOutline.should_receive(:build).with(table).and_return('extra_args2')
73
- Template::StepSource.should_receive(:build).with('b').and_return('source')
74
- Template::StepException.should_receive(:build).with('c').and_return('exception')
82
+ end
83
+
84
+ context 'custom template' do
85
+ describe '#step_args' do
86
+ let(:custom_template_1) do
87
+ Module.new do
88
+ def self.build(value)
89
+ "<html>#{value}</html>"
90
+ end
91
+ end
92
+ end
93
+
94
+ let(:custom_template_2) do
95
+ Module.new do
96
+ def self.build(value)
97
+ "<strong>#{value}</strong>"
98
+ end
99
+ end
100
+ end
75
101
 
76
- expect(template.send(:step_args, step)).to eq("extra_args1\nextra_args2\nsource\nexception")
102
+ let(:step) do
103
+ step = double
104
+ step.stub(:docs).and_return(
105
+ source: { klass: custom_template_1, value: 'aiueo' },
106
+ exception: { klass: custom_template_2, value: '12345' }
107
+ )
108
+ step
109
+ end
110
+
111
+ it 'should call corresponding method in step' do
112
+ expect(template.send(:step_args, step)).to eq("<html>aiueo</html>\n<strong>12345</strong>")
113
+ end
77
114
  end
78
115
  end
79
116
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turnip_formatter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -172,7 +172,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
172
172
  version: '0'
173
173
  segments:
174
174
  - 0
175
- hash: -795170829
175
+ hash: -1609512988288769776
176
176
  required_rubygems_version: !ruby/object:Gem::Requirement
177
177
  none: false
178
178
  requirements:
@@ -181,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
181
  version: '0'
182
182
  segments:
183
183
  - 0
184
- hash: -795170829
184
+ hash: -1609512988288769776
185
185
  requirements: []
186
186
  rubyforge_project:
187
187
  rubygems_version: 1.8.23