specdown 0.3.0 → 0.4.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/CHANGELOG.markdown +7 -0
  2. data/README.markdown +84 -8
  3. data/VERSION +1 -1
  4. data/features/command.feature +3 -1
  5. data/features/config.feature +3 -3
  6. data/features/fixtures/codeblocks_and_implicits.markdown +7 -0
  7. data/features/implicit_parser.feature +113 -0
  8. data/features/implicit_specs.feature +135 -0
  9. data/features/parser.feature +69 -1
  10. data/features/pending_specs.feature +49 -0
  11. data/features/report_summary.feature +1 -1
  12. data/features/specdown_examples/complete_implicit/specdown/implicit.specdown +4 -0
  13. data/features/specdown_examples/complete_implicit/specdown/test.markdown +3 -0
  14. data/features/specdown_examples/no_implicit/specdown/test.markdown +3 -0
  15. data/features/specdown_examples/pending_implicit/specdown/implicit.specdown +4 -0
  16. data/features/specdown_examples/pending_implicit/specdown/test.markdown +3 -0
  17. data/features/specdown_examples/pending_specs/specdown/test.markdown +7 -0
  18. data/features/step_definitions/command.rb +7 -3
  19. data/features/step_definitions/implicit_parser.rb +19 -0
  20. data/features/step_definitions/implicit_specs.rb +18 -0
  21. data/features/step_definitions/parser.rb +24 -0
  22. data/features/step_definitions/pending_specs.rb +7 -0
  23. data/features/support/env.rb +6 -0
  24. data/lib/specdown.rb +6 -0
  25. data/lib/specdown/config.rb +12 -1
  26. data/lib/specdown/event_handlers/test_pending.rb +3 -0
  27. data/lib/specdown/event_handlers/test_undefined.rb +3 -0
  28. data/lib/specdown/implicit_parser.rb +47 -0
  29. data/lib/specdown/node.rb +2 -1
  30. data/lib/specdown/parser.rb +40 -6
  31. data/lib/specdown/pending.rb +7 -0
  32. data/lib/specdown/pending_exception.rb +4 -0
  33. data/lib/specdown/reporter.rb +8 -0
  34. data/lib/specdown/reporters/color_terminal_reporter.rb +12 -0
  35. data/lib/specdown/reporters/terminal_reporter.rb +16 -0
  36. data/lib/specdown/reporters/text_reporter.rb +8 -0
  37. data/lib/specdown/runner.rb +25 -16
  38. data/lib/specdown/runner/report_summary.rb +8 -0
  39. data/lib/specdown/runner/stats.rb +13 -2
  40. data/lib/specdown/sandbox_decorators/pending.rb +3 -0
  41. data/lib/specdown/templates/color_summary.erb +20 -4
  42. data/lib/specdown/templates/summary.erb +17 -0
  43. metadata +45 -9
@@ -0,0 +1,7 @@
1
+ module Specdown
2
+ module Pending
3
+ def pending
4
+ raise Specdown::PendingException
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ module Specdown
2
+ class PendingException < StandardError
3
+ end
4
+ end
@@ -40,6 +40,14 @@ module Specdown
40
40
  raise NotImplementedError
41
41
  end
42
42
 
43
+ def print_pending(test)
44
+ raise NotImplementedError
45
+ end
46
+
47
+ def print_undefined(test)
48
+ raise NotImplementedError
49
+ end
50
+
43
51
  def print_end
44
52
  raise NotImplementedError
45
53
  end
@@ -8,6 +8,18 @@ module Specdown
8
8
  Term::ANSIColor.red(Term::ANSIColor.bold super)
9
9
  end
10
10
 
11
+ def success
12
+ Term::ANSIColor.blue super
13
+ end
14
+
15
+ def undefined
16
+ Term::ANSIColor.yellow super
17
+ end
18
+
19
+ def print_runner_start(runner)
20
+ print Term::ANSIColor.bold("#{runner.file_name}: ")
21
+ end
22
+
11
23
  private
12
24
  def template
13
25
  ERB.new File.read(File.join(File.dirname(__FILE__), "../templates/color_summary.erb"))
@@ -10,6 +10,14 @@ module Specdown
10
10
  "F"
11
11
  end
12
12
 
13
+ def pending
14
+ "P"
15
+ end
16
+
17
+ def undefined
18
+ "U"
19
+ end
20
+
13
21
  def print_start
14
22
  end
15
23
 
@@ -37,10 +45,18 @@ module Specdown
37
45
  print success
38
46
  end
39
47
 
48
+ def print_pending(test)
49
+ print pending
50
+ end
51
+
40
52
  def print_failure(test)
41
53
  print failure
42
54
  end
43
55
 
56
+ def print_undefined(test)
57
+ print undefined
58
+ end
59
+
44
60
  def print_summary(runners)
45
61
  @report_summary = summary(runners)
46
62
  bounding = binding rescue proc {}
@@ -27,6 +27,14 @@ module Specdown
27
27
  @file.write "F"
28
28
  end
29
29
 
30
+ def print_pending(test)
31
+ @file.write "P"
32
+ end
33
+
34
+ def print_undefined(test)
35
+ @file.write "U"
36
+ end
37
+
30
38
  def print_end
31
39
  @file.close
32
40
  end
@@ -4,7 +4,7 @@ module Specdown
4
4
 
5
5
  def initialize(file_path)
6
6
  @file_path = file_path
7
- @tree = Parser.parse File.read(file_path)
7
+ @tree = Parser.parse File.read(file_path), Specdown::Config.implicit_specs
8
8
  @stats = Stats.new self
9
9
  end
10
10
 
@@ -20,32 +20,41 @@ module Specdown
20
20
  end
21
21
 
22
22
  private
23
- def depth_first_search(node, code=[])
23
+ def depth_first_search(node, code=[], undefined_implicits=[])
24
24
  if node.children.empty?
25
25
  EventServer.event :before_test, self
26
- execute_test(code + [node.code])
26
+ execute_test(code + [node.code], undefined_implicits + node.undefined_implicits)
27
27
  EventServer.event :after_test, self
28
28
  else
29
29
  node.children.each do |child|
30
- depth_first_search(child, (code + [node.code]))
30
+ depth_first_search(child, (code + [node.code]), (undefined_implicits + node.undefined_implicits))
31
31
  end
32
32
  end
33
33
  end
34
34
 
35
- def execute_test(code)
35
+ def execute_test(code, undefined_implicits)
36
36
  @stats.tests += 1
37
-
38
- begin
39
- Specdown.sandbox.instance_eval <<-CODE, file_name
40
- #{code.join("\n")}
41
- CODE
42
-
43
- EventServer.event :test_passed, self
44
-
45
- rescue Exception => e
46
- @stats.exceptions << ExceptionFacade.new(e, self)
47
37
 
48
- EventServer.event :test_failed, self
38
+ if !undefined_implicits.empty?
39
+ @stats.undefined_tests += 1
40
+ @stats.undefined_implicits += undefined_implicits
41
+ EventServer.event :test_undefined, self
42
+ else
43
+
44
+ begin
45
+ Specdown.sandbox.instance_eval <<-CODE, file_name
46
+ #{code.join("\n")}
47
+ CODE
48
+ EventServer.event :test_passed, self
49
+
50
+ rescue Specdown::PendingException => e
51
+ @stats.pending_exceptions << ExceptionFacade.new(e, self)
52
+ EventServer.event :test_pending, self
53
+
54
+ rescue Exception => e
55
+ @stats.exceptions << ExceptionFacade.new(e, self)
56
+ EventServer.event :test_failed, self
57
+ end
49
58
  end
50
59
  end
51
60
  end
@@ -14,6 +14,14 @@ module Specdown
14
14
  @num_tests ||= @runners.map(&:stats).map(&:tests).inject(0, &:+)
15
15
  end
16
16
 
17
+ def num_pendings
18
+ @num_pendings ||= @runners.map(&:stats).map(&:pendings).inject(0, &:+)
19
+ end
20
+
21
+ def num_undefined
22
+ @num_undefined ||= @runners.map(&:stats).map(&:undefined).inject(0, &:+)
23
+ end
24
+
17
25
  def num_failures
18
26
  @num_failures ||= @runners.map(&:stats).map(&:failures).inject(0, &:+)
19
27
  end
@@ -1,20 +1,31 @@
1
1
  module Specdown
2
2
  class Stats
3
- attr_accessor :tests, :exceptions
3
+ attr_accessor :tests, :exceptions, :pending_exceptions, :undefined_implicits, :undefined_tests
4
4
  attr_reader :runner
5
5
 
6
6
  def initialize(source_runner=nil)
7
7
  @runner = source_runner
8
8
  @tests = 0
9
9
  @exceptions = []
10
+ @pending_exceptions = []
11
+ @undefined_implicits = []
12
+ @undefined_tests = 0
10
13
  end
11
14
 
12
15
  def successes
13
- @tests - @exceptions.count
16
+ @tests - failures - pendings - undefined_tests
14
17
  end
15
18
 
16
19
  def failures
17
20
  @exceptions.count
18
21
  end
22
+
23
+ def pendings
24
+ @pending_exceptions.count
25
+ end
26
+
27
+ def undefined
28
+ @undefined_implicits.count
29
+ end
19
30
  end
20
31
  end
@@ -0,0 +1,3 @@
1
+ Specdown::SandboxFactory.decorate do |sandbox|
2
+ sandbox.extend Specdown::Pending
3
+ end
@@ -3,13 +3,29 @@
3
3
  ---------------------------------------------------------------------------
4
4
  <%= Term::ANSIColor.bold format_stat("markdown", @report_summary.num_markdowns) %>
5
5
  <%= Term::ANSIColor.bold format_stat("test", @report_summary.num_tests) %>
6
- <%= Term::ANSIColor.green format_stat("success", @report_summary.num_successes) %>
7
- <%= Term::ANSIColor.red format_stat("failure", @report_summary.num_failures) %>
6
+ <%= Term::ANSIColor.cyan format_stat("pending test", @report_summary.num_pendings) %>
7
+ <%= Term::ANSIColor.green format_stat("success", @report_summary.num_successes) %>
8
+ <%= Term::ANSIColor.red format_stat("failure", @report_summary.num_failures) %>
9
+ <%= Term::ANSIColor.yellow(@report_summary.num_undefined.to_s + " undefined") %>
8
10
  ---------------------------------------------------------------------------
9
-
10
11
  <% runners.map(&:stats).each do |stat| %>
11
12
  <% stat.exceptions.each do |e| %>
12
- <%= Term::ANSIColor.bold(Term::ANSIColor.blue "In #{e.test_filename}") %>: <%= Term::ANSIColor.bold(Term::ANSIColor.red "#<#{e.exception_class}>:") %> <%=e.exception_message%>
13
+ <%= Term::ANSIColor.bold(Term::ANSIColor.cyan "In #{e.test_filename}") %>: <%= Term::ANSIColor.bold(Term::ANSIColor.red "#<#{e.exception_class}>:") %> <%=e.exception_message%>
13
14
  <%= Term::ANSIColor.red e.exception_backtrace.join("\n") %>
14
15
  <% end %>
15
16
  <% end %>
17
+ <% runners.collect(&:stats).collect(&:pending_exceptions).flatten.each do |pending_exception| %>
18
+ <%= Term::ANSIColor.bold(Term::ANSIColor.cyan "In #{pending_exception.test_filename}") %>: <%= Term::ANSIColor.bold(Term::ANSIColor.red "#<#{pending_exception.exception_class}>:") %> <%=pending_exception.exception_message%>
19
+ <%= Term::ANSIColor.red pending_exception.exception_backtrace.join("\n") %>
20
+ <% end %>
21
+ <% if @report_summary.num_undefined > 0 %>
22
+ <%= Term::ANSIColor.yellow 'Now add the following implicit spec definition to a file suffixed with ".specdown":'%>
23
+ <% end %>
24
+ <% runners.collect(&:stats).collect(&:undefined_implicits).flatten.each do |implicit_key| %>
25
+ <%= Term::ANSIColor.yellow implicit_key %>
26
+ <%= Term::ANSIColor.yellow("-" * implicit_key.length) %>
27
+
28
+ <%= Term::ANSIColor.yellow " pending # replace this with the code you wish you had" %>
29
+
30
+
31
+ <% end %>
@@ -3,12 +3,29 @@
3
3
  ---------------------------------------------------------------------------
4
4
  <%= format_stat("markdown", @report_summary.num_markdowns) %>
5
5
  <%= format_stat("test", @report_summary.num_tests) %>
6
+ <%= format_stat("pending test", @report_summary.num_pendings)%>
6
7
  <%= format_stat("success", @report_summary.num_successes) %>
7
8
  <%= format_stat("failure", @report_summary.num_failures) %>
9
+ <%= @report_summary.num_undefined %> undefined
8
10
  ---------------------------------------------------------------------------
9
11
  <% runners.map(&:stats).each do |stat| %>
10
12
  <% stat.exceptions.each do |e| %>
11
13
  In <%=e.test_filename%>: <#<%=e.exception_class%>> <%=e.exception_message%>
12
14
  <%= e.exception_backtrace.join "\n" %>
13
15
  <% end %>
16
+ <% stat.pending_exceptions.each do |e| %>
17
+ In <%=e.test_filename%>: <#<%=e.exception_class%>> <%=e.exception_message%>
18
+ <%= e.exception_backtrace.join "\n" %>
19
+ <% end %>
20
+ <% end %>
21
+ <% if @report_summary.num_undefined > 0 %>
22
+ Now add the following implicit spec definition to a file suffixed with ".specdown":
23
+ <% end %>
24
+ <% runners.collect(&:stats).collect(&:undefined_implicits).flatten.each do |implicit_key| %>
25
+ <%= implicit_key %>
26
+ <%= "-" * implicit_key.length %>
27
+
28
+ pending # replace this with the code you wish you had
29
+
30
+
14
31
  <% end %>
metadata CHANGED
@@ -1,13 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: specdown
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
5
- prerelease:
4
+ hash: -1605695984
5
+ prerelease: 6
6
6
  segments:
7
7
  - 0
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 0.3.0
10
+ - beta
11
+ - 1
12
+ version: 0.4.0.beta.1
11
13
  platform: ruby
12
14
  authors:
13
15
  - Matt Parker
@@ -15,7 +17,7 @@ autorequire:
15
17
  bindir: bin
16
18
  cert_chain: []
17
19
 
18
- date: 2012-01-16 00:00:00 Z
20
+ date: 2012-01-22 00:00:00 Z
19
21
  dependencies:
20
22
  - !ruby/object:Gem::Dependency
21
23
  name: gitdown
@@ -98,11 +100,16 @@ files:
98
100
  - lib/specdown/event_handlers/run_started.rb
99
101
  - lib/specdown/event_handlers/test_failed.rb
100
102
  - lib/specdown/event_handlers/test_passed.rb
103
+ - lib/specdown/event_handlers/test_pending.rb
104
+ - lib/specdown/event_handlers/test_undefined.rb
101
105
  - lib/specdown/event_server.rb
102
106
  - lib/specdown/hook.rb
103
107
  - lib/specdown/hooks.rb
108
+ - lib/specdown/implicit_parser.rb
104
109
  - lib/specdown/node.rb
105
110
  - lib/specdown/parser.rb
111
+ - lib/specdown/pending.rb
112
+ - lib/specdown/pending_exception.rb
106
113
  - lib/specdown/reporter.rb
107
114
  - lib/specdown/reporters/color_terminal_reporter.rb
108
115
  - lib/specdown/reporters/terminal_reporter.rb
@@ -112,6 +119,7 @@ files:
112
119
  - lib/specdown/runner/stats.rb
113
120
  - lib/specdown/runner.rb
114
121
  - lib/specdown/sandbox_decorators/default_assertion_library.rb
122
+ - lib/specdown/sandbox_decorators/pending.rb
115
123
  - lib/specdown/sandbox_decorators/rspec_expectations.rb
116
124
  - lib/specdown/sandbox_decorators/test_unit_assertions.rb
117
125
  - lib/specdown/sandbox_factory.rb
@@ -127,11 +135,15 @@ files:
127
135
  - features/config.feature
128
136
  - features/event_server.feature
129
137
  - features/exception_facade.feature
138
+ - features/fixtures/codeblocks_and_implicits.markdown
130
139
  - features/fixtures/multiple_codeblocks_per_section_example.markdown
131
140
  - features/fixtures/non_executing_example.markdown
132
141
  - features/fixtures/parser_example.markdown
133
142
  - features/hooks.feature
143
+ - features/implicit_parser.feature
144
+ - features/implicit_specs.feature
134
145
  - features/parser.feature
146
+ - features/pending_specs.feature
135
147
  - features/report_summary.feature
136
148
  - features/runner.feature
137
149
  - features/sandbox_factory.feature
@@ -144,13 +156,19 @@ files:
144
156
  - features/specdown_examples/before_hooks/specdown/env.rb
145
157
  - features/specdown_examples/before_hooks/specdown/hooks.rb
146
158
  - features/specdown_examples/before_hooks/specdown/parser_example.markdown
159
+ - features/specdown_examples/complete_implicit/specdown/implicit.specdown
160
+ - features/specdown_examples/complete_implicit/specdown/test.markdown
147
161
  - features/specdown_examples/format_switch_test/specdown/env.rb
148
162
  - features/specdown_examples/nested_directories_test/specdown/env.rb
149
163
  - features/specdown_examples/nested_directories_test/specdown/tests/1.markdown
150
164
  - features/specdown_examples/nested_directories_test/specdown/tests/2.markdown
151
165
  - features/specdown_examples/nested_directories_test/specdown/tests/3.markdown
166
+ - features/specdown_examples/no_implicit/specdown/test.markdown
152
167
  - features/specdown_examples/no_ruby/specdown/env.rb
153
168
  - features/specdown_examples/no_ruby/specdown/parser_example.markdown
169
+ - features/specdown_examples/pending_implicit/specdown/implicit.specdown
170
+ - features/specdown_examples/pending_implicit/specdown/test.markdown
171
+ - features/specdown_examples/pending_specs/specdown/test.markdown
154
172
  - features/specdown_examples/scoped_hooks/specdown/env.rb
155
173
  - features/specdown_examples/scoped_hooks/specdown/hooks.rb
156
174
  - features/specdown_examples/scoped_hooks/specdown/parser_example.markdown
@@ -164,7 +182,10 @@ files:
164
182
  - features/step_definitions/event_server.rb
165
183
  - features/step_definitions/exception_facade.rb
166
184
  - features/step_definitions/hooks.rb
185
+ - features/step_definitions/implicit_parser.rb
186
+ - features/step_definitions/implicit_specs.rb
167
187
  - features/step_definitions/parser.rb
188
+ - features/step_definitions/pending_specs.rb
168
189
  - features/step_definitions/report_summary.rb
169
190
  - features/step_definitions/reporter.rb
170
191
  - features/step_definitions/reporter_factory.rb
@@ -192,12 +213,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
192
213
  required_rubygems_version: !ruby/object:Gem::Requirement
193
214
  none: false
194
215
  requirements:
195
- - - ">="
216
+ - - ">"
196
217
  - !ruby/object:Gem::Version
197
- hash: 3
218
+ hash: 25
198
219
  segments:
199
- - 0
200
- version: "0"
220
+ - 1
221
+ - 3
222
+ - 1
223
+ version: 1.3.1
201
224
  requirements: []
202
225
 
203
226
  rubyforge_project:
@@ -210,11 +233,15 @@ test_files:
210
233
  - features/config.feature
211
234
  - features/event_server.feature
212
235
  - features/exception_facade.feature
236
+ - features/fixtures/codeblocks_and_implicits.markdown
213
237
  - features/fixtures/multiple_codeblocks_per_section_example.markdown
214
238
  - features/fixtures/non_executing_example.markdown
215
239
  - features/fixtures/parser_example.markdown
216
240
  - features/hooks.feature
241
+ - features/implicit_parser.feature
242
+ - features/implicit_specs.feature
217
243
  - features/parser.feature
244
+ - features/pending_specs.feature
218
245
  - features/report_summary.feature
219
246
  - features/runner.feature
220
247
  - features/sandbox_factory.feature
@@ -227,13 +254,19 @@ test_files:
227
254
  - features/specdown_examples/before_hooks/specdown/env.rb
228
255
  - features/specdown_examples/before_hooks/specdown/hooks.rb
229
256
  - features/specdown_examples/before_hooks/specdown/parser_example.markdown
257
+ - features/specdown_examples/complete_implicit/specdown/implicit.specdown
258
+ - features/specdown_examples/complete_implicit/specdown/test.markdown
230
259
  - features/specdown_examples/format_switch_test/specdown/env.rb
231
260
  - features/specdown_examples/nested_directories_test/specdown/env.rb
232
261
  - features/specdown_examples/nested_directories_test/specdown/tests/1.markdown
233
262
  - features/specdown_examples/nested_directories_test/specdown/tests/2.markdown
234
263
  - features/specdown_examples/nested_directories_test/specdown/tests/3.markdown
264
+ - features/specdown_examples/no_implicit/specdown/test.markdown
235
265
  - features/specdown_examples/no_ruby/specdown/env.rb
236
266
  - features/specdown_examples/no_ruby/specdown/parser_example.markdown
267
+ - features/specdown_examples/pending_implicit/specdown/implicit.specdown
268
+ - features/specdown_examples/pending_implicit/specdown/test.markdown
269
+ - features/specdown_examples/pending_specs/specdown/test.markdown
237
270
  - features/specdown_examples/scoped_hooks/specdown/env.rb
238
271
  - features/specdown_examples/scoped_hooks/specdown/hooks.rb
239
272
  - features/specdown_examples/scoped_hooks/specdown/parser_example.markdown
@@ -247,7 +280,10 @@ test_files:
247
280
  - features/step_definitions/event_server.rb
248
281
  - features/step_definitions/exception_facade.rb
249
282
  - features/step_definitions/hooks.rb
283
+ - features/step_definitions/implicit_parser.rb
284
+ - features/step_definitions/implicit_specs.rb
250
285
  - features/step_definitions/parser.rb
286
+ - features/step_definitions/pending_specs.rb
251
287
  - features/step_definitions/report_summary.rb
252
288
  - features/step_definitions/reporter.rb
253
289
  - features/step_definitions/reporter_factory.rb