flatware 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,22 @@
1
+ module Flatware
2
+ class Checkpoint
3
+ attr_reader :steps, :scenarios
4
+ def initialize(steps, scenarios)
5
+ @steps, @scenarios = serialize_steps(steps), serialize_scenarios(scenarios)
6
+ end
7
+
8
+ private
9
+
10
+ def serialize_steps(steps)
11
+ steps.map do |step|
12
+ StepResult.new step.status, step.exception
13
+ end
14
+ end
15
+
16
+ def serialize_scenarios(scenarios)
17
+ scenarios.map do |scenario|
18
+ ScenarioResult.new scenario.status
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,149 +1,49 @@
1
1
  require 'cucumber/formatter/console'
2
+ require 'flatware/checkpoint'
2
3
  module Flatware
3
4
  module Cucumber
4
5
  class Formatter
5
6
  def initialize(step_mother, *)
6
- @step_mother = step_mother
7
+ @collector = Collector.new step_mother
7
8
  end
8
9
 
9
- def scenario_name(keyword, name, file_colon_line, source_indent)
10
- @current_scenario = file_colon_line
10
+ def after_features(*)
11
+ Sink.push collector.checkpoint
11
12
  end
12
13
 
13
- def before_feature_element(feature_element)
14
- case feature_element
15
- when ::Cucumber::Ast::ScenarioOutline
16
- @outline_steps = feature_element
17
- end
18
- end
19
-
20
- def after_feature_element(feature_element)
21
- @outline_steps = nil
22
- end
23
-
24
- def after_feature(*)
25
- background_steps.each do |step|
26
- Sink.push step
27
- end unless current_scenario
28
- end
29
-
30
- # keyword,
31
- # step_match,
32
- # multiline_arg,
33
- # status,
34
- # exception,
35
- # source_indent,
36
- # background,
37
- # file_colon_line
38
- def after_step_result(_, _, _, status, exception, _, background, _)
39
- result = if status_only? background
40
- background_steps << Result.background(status, exception)
41
- Result.status status
42
- else
43
- Result.step status, exception, current_scenario
44
- end
45
-
46
- Sink.push result
47
- end
48
-
49
- def before_outline_table(outline_table)
50
- @outline_table = outline_table
51
- end
52
-
53
- def after_outline_table(outline_table)
54
- @outline_table = nil
55
- end
56
-
57
- def before_table_row(table_row)
58
- if example_row? table_row
59
- @step_collector = StepCollector.new(step_mother)
60
- end
61
- end
62
-
63
- def after_table_row(table_row)
64
- if example_row? table_row
65
- step_collector.stop table_row
66
- Sink.push Result.new step_collector.progress, step_collector.steps
67
- end
14
+ def after_step_result(_, _, _, status, *)
15
+ send_progress(status)
68
16
  end
69
17
 
70
18
  def table_cell_value(_, status)
71
- Sink.push Result.status status if example_cell? status
19
+ send_progress(status) if status
72
20
  end
73
21
 
74
22
  private
23
+ attr_reader :collector
75
24
 
76
- attr_reader :step_mother, :step_collector, :current_scenario
77
-
78
- def background_steps
79
- @background_steps ||= []
25
+ def send_progress(status)
26
+ Sink.push Result.status status
80
27
  end
81
28
 
82
- def status_only?(background)
83
- scenario_outline? or (background and not current_scenario)
84
- end
85
-
86
- def scenario_outline?
87
- !!@outline_steps
88
- end
89
-
90
- def example_row?(table_row)
91
- table_row.respond_to? :failed? and outline_table? and not table_header_row? table_row
92
- end
93
-
94
- def example_cell?(status)
95
- outline_table? and not table_header_cell? status
96
- end
97
-
98
- def table_header_cell?(status)
99
- status == :skipped_param
100
- end
101
-
102
- def outline_table?
103
- !!@outline_table
104
- end
105
-
106
- def table_header_row?(table_row)
107
- table_row.failed?
108
- rescue ::Cucumber::Ast::OutlineTable::ExampleRow::InvalidForHeaderRowError
109
- true
110
- else
111
- false
112
- end
113
-
114
- class StepCollector
29
+ class Collector
115
30
  attr_reader :step_mother
116
31
  def initialize(step_mother)
117
32
  @step_mother = step_mother
118
- snapshot_steps
119
- end
120
-
121
- def stop(table_row)
122
- @scenario_id = extract_scenario(table_row)
123
- @example_row_steps = step_mother.steps - ran_steps
33
+ snapshot
124
34
  end
125
35
 
126
- def steps
127
- example_row_steps or raise('stop collecting first')
128
- example_row_steps.map do |step|
129
- StepResult.new(step.status, step.exception, scenario_id)
36
+ def checkpoint
37
+ Checkpoint.new(step_mother.steps - @ran_steps, step_mother.scenarios - @ran_scenarios).tap do
38
+ snapshot
130
39
  end
131
40
  end
132
41
 
133
- def progress
134
- ''
135
- end
136
-
137
42
  private
138
43
 
139
- attr_reader :example_row_steps, :scenario_id, :ran_steps
140
-
141
- def extract_scenario(table_row)
142
- table_row.scenario_outline.file_colon_line(table_row.line)
143
- end
144
-
145
- def snapshot_steps
44
+ def snapshot
146
45
  @ran_steps = step_mother.steps.dup
46
+ @ran_scenarios = step_mother.scenarios.dup
147
47
  end
148
48
  end
149
49
  end
@@ -1,24 +1,16 @@
1
1
  module Flatware
2
2
  class ScenarioResult
3
- attr_reader :id, :steps
4
-
5
- def initialize(id, steps=[])
6
- @id = id
7
- @steps = steps
8
- end
9
-
10
- def status
11
- first(:failed) || first(:undefined) || :passed
3
+ attr_reader :status
4
+ def initialize(status)
5
+ @status = status
12
6
  end
13
7
 
14
- private
15
-
16
- def first(status)
17
- statuses.detect {|s| s == status}
8
+ def passed?
9
+ status == :passed
18
10
  end
19
11
 
20
- def statuses
21
- steps.map &:status
12
+ def failed?
13
+ status == :failed
22
14
  end
23
15
  end
24
16
  end
@@ -41,7 +41,8 @@ module Flatware
41
41
  case (result = Marshal.load message)
42
42
  when Result
43
43
  print result.progress
44
- steps.push *result.steps
44
+ when Checkpoint
45
+ checkpoints << result
45
46
  when Job
46
47
  completed_jobs << result
47
48
  log "COMPLETED SCENARIO"
@@ -67,7 +68,9 @@ module Flatware
67
68
  end
68
69
 
69
70
  def summarize
70
- Summary.new(steps, out).summarize
71
+ steps = checkpoints.map(&:steps).flatten
72
+ scenarios = checkpoints.map(&:scenarios).flatten
73
+ Summary.new(steps, scenarios, out).summarize
71
74
  end
72
75
 
73
76
  def summarize_remaining
@@ -91,8 +94,8 @@ module Flatware
91
94
  die.send 'seppuku'
92
95
  end
93
96
 
94
- def steps
95
- @steps ||= []
97
+ def checkpoints
98
+ @checkpoints ||= []
96
99
  end
97
100
 
98
101
  def completed_jobs
@@ -1,9 +1,9 @@
1
1
  module Flatware
2
2
  class StepResult
3
- attr_reader :status, :exception, :scenario_id
3
+ attr_reader :status, :exception
4
4
 
5
- def initialize(status, exception, scenario_id=nil)
6
- @status, @exception, @scenario_id = status, serialized(exception), scenario_id
5
+ def initialize(status, exception)
6
+ @status, @exception = status, serialized(exception)
7
7
  end
8
8
 
9
9
  def passed?
@@ -1,18 +1,14 @@
1
1
  require 'cucumber/formatter/console'
2
+ require 'flatware/checkpoint'
2
3
  module Flatware
3
4
  class Summary
4
5
  include ::Cucumber::Formatter::Console
5
- attr_reader :io, :steps
6
+ attr_reader :io, :steps, :scenarios
6
7
 
7
- def initialize(steps, io=StringIO.new)
8
+ def initialize(steps, scenarios=[], io=StringIO.new)
8
9
  @io = io
9
10
  @steps = steps
10
- end
11
-
12
- def scenarios
13
- @scenarios ||= scenario_steps.group_by(&:scenario_id).map do |scenario, steps|
14
- ScenarioResult.new(scenario, steps)
15
- end
11
+ @scenarios = scenarios
16
12
  end
17
13
 
18
14
  def summarize
@@ -24,10 +20,6 @@ module Flatware
24
20
 
25
21
  private
26
22
 
27
- def scenario_steps
28
- steps.select &:scenario_id
29
- end
30
-
31
23
  def print_steps(status)
32
24
  print_elements steps.select(&with_status(status)), status, 'steps'
33
25
  end
@@ -53,9 +45,5 @@ module Flatware
53
45
 
54
46
  " (#{status_counts})"
55
47
  end
56
-
57
- def count(status)
58
- completed_scenarios.select {|scenario| scenario.status == status}.count
59
- end
60
48
  end
61
49
  end
@@ -0,0 +1,3 @@
1
+ module Flatware
2
+ VERSION = '0.0.3'
3
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flatware
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -123,6 +123,7 @@ extra_rdoc_files:
123
123
  - README.rdoc
124
124
  files:
125
125
  - lib/flatware.rb
126
+ - lib/flatware/checkpoint.rb
126
127
  - lib/flatware/cli.rb
127
128
  - lib/flatware/cucumber.rb
128
129
  - lib/flatware/cucumber/formatter.rb
@@ -134,6 +135,7 @@ files:
134
135
  - lib/flatware/sink.rb
135
136
  - lib/flatware/step_result.rb
136
137
  - lib/flatware/summary.rb
138
+ - lib/flatware/version.rb
137
139
  - lib/flatware/worker.rb
138
140
  - LICENSE.txt
139
141
  - README.rdoc