specdown 0.1.7 → 0.2.0

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.
Files changed (33) hide show
  1. data/CHANGELOG.markdown +9 -0
  2. data/README.markdown +32 -8
  3. data/VERSION +1 -1
  4. data/features/command.feature +29 -9
  5. data/features/config.feature +9 -5
  6. data/features/specdown_examples/after_hooks/specdown/env.rb +1 -1
  7. data/features/specdown_examples/around_hooks/specdown/env.rb +1 -1
  8. data/features/specdown_examples/before_hooks/specdown/env.rb +1 -1
  9. data/features/specdown_examples/format_switch_test/specdown/env.rb +0 -1
  10. data/features/specdown_examples/nested_directories_test/specdown/env.rb +1 -1
  11. data/features/specdown_examples/no_ruby/specdown/env.rb +1 -1
  12. data/features/specdown_examples/scoped_hooks/specdown/env.rb +1 -1
  13. data/features/specdown_examples/with_ruby/specdown/env.rb +1 -1
  14. data/features/step_definitions/command.rb +107 -4
  15. data/lib/specdown/command/option_parser.rb +17 -5
  16. data/lib/specdown/config.rb +7 -1
  17. data/lib/specdown/event_handlers/command_complete.rb +1 -0
  18. data/lib/specdown/event_handlers/run_complete.rb +2 -1
  19. data/lib/specdown/event_handlers/run_started.rb +3 -0
  20. data/lib/specdown/reporter.rb +53 -0
  21. data/lib/specdown/reporters/color_terminal_reporter.rb +16 -0
  22. data/lib/specdown/{reporter → reporters}/terminal_reporter.rb +26 -13
  23. data/lib/specdown/reporters/text_reporter.rb +45 -0
  24. data/lib/specdown/runner.rb +1 -1
  25. data/lib/specdown/specdown.rb +1 -1
  26. data/lib/specdown/templates/color_summary.erb +6 -6
  27. data/lib/specdown.rb +4 -4
  28. metadata +9 -13
  29. data/features/reporter.feature +0 -92
  30. data/features/reporter_factory.feature +0 -65
  31. data/lib/specdown/reporter/color_terminal_reporter.rb +0 -29
  32. data/lib/specdown/reporter_factory.rb +0 -18
  33. data/lib/specdown/runner/reporter.rb +0 -27
data/CHANGELOG.markdown CHANGED
@@ -1,5 +1,14 @@
1
1
  ## CHANGELOG
2
2
 
3
+ ## 0.2.0
4
+
5
+ New reporting and formating options at the command line.
6
+
7
+ -c, --colorized Colorize the terminal output
8
+ -n, --non-colorized Display plain terminal output
9
+ -o, --output=text|terminal output to either the terminal or a text file "specdown_report.txt". Defaults to "terminal".
10
+ -f, --format=short|condensed length and style of output. Defaults to "short".
11
+
3
12
  ## 0.1.7
4
13
 
5
14
  Working on all Rubies.
data/README.markdown CHANGED
@@ -239,27 +239,51 @@ You can use the `-r` flag to specify the root of the specdown directory (it defa
239
239
  $ specdown test.markdown -r specdown_environment/
240
240
  ```
241
241
 
242
- ### Output Format
242
+ ### Colorization
243
243
 
244
- By default, `specdown` will output colorized terminal output. If you'd rather the output not be colorized, you can use the `-f terminal` switch:
244
+ By default, `specdown` will output colorized terminal output. If you'd rather the output not be colorized, you can use the `-n` or `--non-colorized` switch:
245
245
 
246
246
  ```sh
247
- $ specdown -f plain
247
+ $ specdown -n
248
248
  ```
249
249
 
250
- The default format is `color`.
250
+ You can also configure colorization in your env.rb by setting the
251
+ reporter to `Specdown::TerminalReporter`:
251
252
 
252
- You can also configure the report format in your Ruby code:
253
+ ```ruby
254
+ Specdown::Config.reporter = Specdown::TerminalReporter
255
+ ```
256
+
257
+ The reporter defaults to `Specdown::ColorTerminalReporter`.
258
+
259
+ ### Report format: short or condensed
260
+
261
+ Currently, we offer two report formats: short, or condensed. Short
262
+ offers only the most basic information, whereas `condensed` will provide
263
+ you with summary details per file.
264
+
265
+ You can toggle between the two either by setting switches at the command
266
+ line:
267
+
268
+ ```sh
269
+ $ specdown -f short
270
+ $ specdown --format=short
271
+ $ specdown -f condensed
272
+ $ specdown --format=condensed
273
+ ```
274
+
275
+ You can also configure this in your env.rb by setting
276
+ `Specdown::Config.format` to either `:short` or `:condensed`:
253
277
 
254
278
  ```ruby
255
- Specdown::Config.reporter = :terminal
279
+ Specdown::Config.format = :condensed
256
280
  ```
257
281
 
258
- Note that this defaults to `:color_terminal`. Also, please note that command line options take precedence.
282
+ The default it `short`.
259
283
 
260
284
  ## TODO
261
285
 
262
- This library is still very new, but we are rapidly adding features to it. Here's what is on the immediate horizon:
286
+ This library is still very new, but I am rapidly adding features to it. Here's what is on the immediate horizon:
263
287
 
264
288
  * offer the option of outputing the actual markdown while it executes, instead of "..F....FF......"
265
289
  * Better stack traces / reporting
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.7
1
+ 0.2.0
@@ -108,13 +108,33 @@ Feature: `specdown` command
108
108
  0 failures
109
109
  """
110
110
 
111
-
111
+ Scenario: colorized output switches
112
+ * The following commands should yield colorized output:
113
+ * `specdown -c`
114
+ * `specdown --colorized`
115
+
116
+ Scenario: plain output (non-colorized) switches
117
+ * The following commands should yield non-colorized output:
118
+ * `specdown -n`
119
+ * `specdown --non-colorized`
120
+
121
+ Scenario: text output
122
+ * The following commands should output reports to a text file, 'specdown_report.txt':
123
+ * `specdown -o text`
124
+ * `specdown --output=text`
125
+
126
+ Scenario: terminal output
127
+ * The following commands should output reports to STDOUT:
128
+ * `specdown -o terminal`
129
+ * `specdown --output=terminal`
130
+
131
+ Scenario: short summary output
132
+ * The following commands should output only the most basic summary information to STDOUT:
133
+ * `specdown -f short`
134
+ * `specdown --format=short`
135
+
112
136
  @focus
113
- Scenario: -f terminal format switch
114
- Given I am in a directory with a 'specdown' folder
115
- When I run `specdown -f plain`
116
- Then I should not see colorized output
117
- When I run `specdown`
118
- Then I should see colorized output
119
- When I run `specdown -f color`
120
- Then I should see colorized output
137
+ Scenario: short summary output
138
+ * The following commands should output summary information for each file run to STDOUT:
139
+ * `specdown -f condensed`
140
+ * `specdown --format=condensed`
@@ -39,7 +39,7 @@ Feature: Specdown::Config
39
39
 
40
40
  By default, Specdown will colorize your terminal output. If you'd prefer Specdown not to colorize your terminal output, simply set the `reporter` to `:terminal`:
41
41
 
42
- Specdown.reporter == :terminal
42
+ Specdown::Config.reporter == Specdown::TerminalReporter
43
43
 
44
44
  \## Other reporting formats
45
45
 
@@ -48,16 +48,17 @@ Feature: Specdown::Config
48
48
 
49
49
  Scenario: Specdown::Config defaults
50
50
  * Specdown::Config.expectations #==> nil
51
- * Specdown::Config.reporter #==> :color_terminal
51
+ * Specdown::Config.reporter #==> Specdown::ColorTerminalReporter
52
52
  * Specdown::Config.root #==> "specdown"
53
-
53
+ * Specdown::Config.format #==> :short
54
54
 
55
55
  Scenario: Reset the Specdown::Config
56
56
  Given I have configured Specdown:
57
57
  """
58
58
  Specdown::Config.expectations = :rspec
59
- Specdown::Config.reporter = :html
59
+ Specdown::Config.reporter = Specdown::TerminalReporter
60
60
  Specdown::Config.root = "dir/"
61
+ Specdown::Config.format = :condensed
61
62
  """
62
63
 
63
64
  When I reset Specdown:
@@ -67,8 +68,11 @@ Feature: Specdown::Config
67
68
 
68
69
  Then my specdown configuration should return to its defaults:
69
70
  * Specdown::Config.expectations #==> nil
70
- * Specdown::Config.reporter #==> :color_terminal
71
+ * Specdown::Config.reporter #==> Specdown::ColorTerminalReporter
71
72
  * Specdown::Config.root #==> "specdown"
73
+ * Specdown::Config.format #==> :short
74
+
75
+
72
76
 
73
77
  Scenario: Default to Rspec expectations
74
78
 
@@ -1,2 +1,2 @@
1
1
  Specdown::Config.expectations = :rspec
2
- Specdown::Config.reporter = :terminal
2
+ Specdown::Config.reporter = Specdown::TerminalReporter
@@ -1,2 +1,2 @@
1
1
  Specdown::Config.expectations = :rspec
2
- Specdown::Config.reporter = :terminal
2
+ Specdown::Config.reporter = Specdown::TerminalReporter
@@ -1,2 +1,2 @@
1
1
  Specdown::Config.expectations = :rspec
2
- Specdown::Config.reporter = :terminal
2
+ Specdown::Config.reporter = Specdown::TerminalReporter
@@ -1 +0,0 @@
1
- Specdown::Config.reporter = :color_terminal
@@ -1,2 +1,2 @@
1
1
  Specdown::Config.expectations = :test_unit
2
- Specdown::Config.reporter = :terminal
2
+ Specdown::Config.reporter = Specdown::TerminalReporter
@@ -1 +1 @@
1
- Specdown::Config.reporter = :terminal
1
+ Specdown::Config.reporter = Specdown::TerminalReporter
@@ -1,2 +1,2 @@
1
1
  Specdown::Config.expectations = :rspec
2
- Specdown::Config.reporter = :terminal
2
+ Specdown::Config.reporter = Specdown::TerminalReporter
@@ -1,2 +1,2 @@
1
1
  Specdown::Config.expectations = :test_unit
2
- Specdown::Config.reporter = :terminal
2
+ Specdown::Config.reporter = Specdown::TerminalReporter
@@ -13,7 +13,7 @@ Given /^I have a specdown directory containing a (?:single )?markdown file:$/ do
13
13
  end
14
14
 
15
15
  When /^I run `specdown` with no arguments$/ do
16
- @output = `cd #{@directory} && bundle exec ruby -I ../../../lib ../../../bin/specdown`
16
+ @output = bundle_exec! "specdown"
17
17
  end
18
18
 
19
19
  Given /^a single ruby file:$/ do |string|
@@ -29,17 +29,120 @@ Given /^I am in a directory with a 'specdown' folder$/ do
29
29
  end
30
30
 
31
31
  When /^I run `(.*)`$/ do |command|
32
- @output = `cd #{@directory} && bundle exec ruby -I ../../../lib ../../../bin/#{command}`
32
+ @output = bundle_exec! command
33
33
  end
34
34
 
35
35
  Then /^I should not see colorized output$/ do
36
- raise "Oops! Output is colorized!" if colorized?(@output)
36
+ ensure_plain! @output
37
37
  end
38
38
 
39
39
  Then /^I should see colorized output$/ do
40
- raise "Oops! Output is not colorized!" unless colorized?(@output)
40
+ ensure_colorized! @output
41
+ end
42
+
43
+ Given /^The following commands should yield colorized output:$/ do
44
+ end
45
+
46
+ Given /^`specdown \-c`$/ do
47
+ ensure_colorized! bundle_exec!("specdown -c")
48
+ end
49
+
50
+ Given /^`specdown \-\-colorized`$/ do
51
+ ensure_colorized! bundle_exec!("specdown --colorized")
52
+ end
53
+
54
+ Given /^The following commands should yield non\-colorized output:$/ do
55
+ end
56
+
57
+ Given /^`specdown \-n`$/ do
58
+ ensure_plain! bundle_exec!("specdown -n")
59
+ end
60
+
61
+ Given /^`specdown \-\-non\-colorized`$/ do
62
+ ensure_plain! bundle_exec!("specdown --non-colorized")
63
+ end
64
+
65
+ Given /^The following commands should output reports to a text file, 'specdown_report\.txt':$/ do
66
+ end
67
+
68
+ Given /^`specdown \-o text`$/ do
69
+ ensure_text! "specdown -o text"
70
+ end
71
+
72
+ Given /^`specdown \-\-output=text`$/ do
73
+ ensure_text! "specdown --output=text"
74
+ end
75
+
76
+ Given /^The following commands should output reports to STDOUT:$/ do
77
+ end
78
+
79
+ Given /^`specdown \-o terminal`$/ do
80
+ ensure_colorized! bundle_exec!("specdown -o terminal")
81
+ end
82
+
83
+ Given /^`specdown \-\-output=terminal`$/ do
84
+ ensure_colorized! bundle_exec!("specdown --output=terminal")
85
+ end
86
+
87
+ Given /^The following commands should output only the most basic summary information to STDOUT:$/ do
88
+ end
89
+
90
+ Given /^`specdown \-f short`$/ do
91
+ ensure_short! bundle_exec!("specdown -f short")
92
+ end
93
+
94
+ Given /^`specdown \-\-format=short`$/ do
95
+ ensure_short! bundle_exec!("specdown --format=short")
96
+ end
97
+
98
+ Given /^The following commands should output summary information for each file run to STDOUT:$/ do
99
+ end
100
+
101
+ Given /^`specdown \-f condensed`$/ do
102
+ ensure_condensed! bundle_exec!("specdown -f condensed")
103
+ end
104
+
105
+ Given /^`specdown \-\-format=condensed`$/ do
106
+ ensure_condensed! bundle_exec!("specdown --format=condensed")
107
+ end
108
+
109
+ def ensure_condensed!(output)
110
+ output.strip.should_not be_empty
111
+ output.should match(/^[^\. ]+\.markdown: .*$/)
112
+ end
113
+
114
+ def ensure_short!(output)
115
+ output.strip.should_not be_empty
116
+ output.should_not match(/^[^\. ]+\.markdown: .*$/)
117
+ end
118
+
119
+ def ensure_text!(command)
120
+ output = bundle_exec! command
121
+ file_name = File.join directory, "specdown_report.txt"
122
+ proc { File.read(file_name) }.should_not raise_exception
123
+ File.delete(file_name)
124
+ end
125
+
126
+ def ensure_colorized!(output)
127
+ raise "Oops! Output is not colorized!" unless colorized?(output)
128
+ end
129
+
130
+ def ensure_plain!(output)
131
+ raise "Oops! Output is colorized!" if colorized?(output)
41
132
  end
42
133
 
43
134
  def colorized?(output)
44
135
  output.include? "\e[1m"
45
136
  end
137
+
138
+ def bundle_exec(command)
139
+ "cd #{directory} && bundle exec ruby -I ../../../lib ../../../bin/#{command}"
140
+ end
141
+
142
+ def bundle_exec!(command)
143
+ `#{bundle_exec(command)}`
144
+ end
145
+
146
+ def directory
147
+ @directory ||= "features/specdown_examples/no_ruby/"
148
+ end
@@ -16,11 +16,12 @@ module Specdown
16
16
  Specdown::Config.root = root
17
17
  end
18
18
 
19
- opts.on '-f', '--format plain|color', 'defaults to "color"' do |format|
20
- case format
21
- when 'plain' then Specdown::Config.reporter = :terminal
22
- when 'color' then Specdown::Config.reporter = :color_terminal
23
- end
19
+ opts.on '-c', '--colorized', 'Colorize the terminal output' do
20
+ Specdown::Config.reporter = Specdown::ColorTerminalReporter
21
+ end
22
+
23
+ opts.on '-n', '--non-colorized', 'Display plain terminal output' do
24
+ Specdown::Config.reporter = Specdown::TerminalReporter
24
25
  end
25
26
 
26
27
  opts.on_tail '-h', '--help', 'Display this screen' do
@@ -28,6 +29,17 @@ module Specdown
28
29
  exit
29
30
  end
30
31
 
32
+ opts.on '-o', '--output=text|terminal', ["text", "terminal"], 'output to either the terminal or a text file "specdown_report.txt". Defaults to "terminal".' do |output_format|
33
+ case output_format
34
+ when "text" then Specdown::Config.reporter = Specdown::TextReporter
35
+ when "terminal" then Specdown::Config.reporter = Specdown::ColorTerminalReporter
36
+ end
37
+ end
38
+
39
+ opts.on '-f', '--format=short|condensed', [:short, :condensed], 'length and style of output. Defaults to "short".' do
40
+ Specdown::Config.format = format
41
+ end
42
+
31
43
  opts.on_tail "-v", "--version", "Show version" do
32
44
  puts File.read(File.join(File.dirname(__FILE__), "../../../VERSION"))
33
45
  exit
@@ -6,15 +6,21 @@ module Specdown
6
6
  attr_accessor :tests
7
7
  attr_accessor :root
8
8
  attr_accessor :reporter
9
+ attr_accessor :format
10
+
11
+ def format
12
+ @format ||= :short
13
+ end
9
14
 
10
15
  def reporter
11
- @reporter ||= :color_terminal
16
+ @reporter ||= Specdown::ColorTerminalReporter
12
17
  end
13
18
 
14
19
  def reset!
15
20
  @expectations = nil
16
21
  @reporter = nil
17
22
  @root = nil
23
+ @format = nil
18
24
  end
19
25
 
20
26
  def root
@@ -1,3 +1,4 @@
1
1
  Specdown::EventServer.register :command_complete do |results|
2
2
  Specdown.reporter.print_summary(results)
3
+ Specdown.reporter.print_end
3
4
  end
@@ -1,2 +1,3 @@
1
- Specdown::EventServer.register :run_complete do
1
+ Specdown::EventServer.register :run_complete do |runner|
2
+ Specdown.reporter.print_runner_end runner if Specdown::Config.format == :condensed
2
3
  end
@@ -0,0 +1,3 @@
1
+ Specdown::EventServer.register :run_started do |runner|
2
+ Specdown.reporter.print_runner_start runner if Specdown::Config.format == :condensed
3
+ end
@@ -0,0 +1,53 @@
1
+ module Specdown
2
+ module Reporter
3
+ def summary(runners)
4
+ ReportSummary.new(runners)
5
+ end
6
+
7
+ def print_start
8
+ raise NotImplementedError
9
+ end
10
+
11
+ def print_runner_start(runner)
12
+ raise NotImplementedError
13
+ end
14
+
15
+ def print_runner_summary(runner)
16
+ raise NotImplementedError
17
+ end
18
+
19
+ def print_runner_end(runner)
20
+ raise NotImplementedError
21
+ end
22
+
23
+ def print_test_start(test)
24
+ raise NotImplementedError
25
+ end
26
+
27
+ def print_test_end(test)
28
+ raise NotImplementedError
29
+ end
30
+
31
+ def print_summary(runners)
32
+ raise NotImplementedError
33
+ end
34
+
35
+ def print_success(test)
36
+ raise NotImplementedError
37
+ end
38
+
39
+ def print_failure(test)
40
+ raise NotImplementedError
41
+ end
42
+
43
+ def print_end
44
+ raise NotImplementedError
45
+ end
46
+
47
+ private
48
+ def format_stat(word, number)
49
+ plural_word = word[-2..-1] == "ss" ? "#{word}es" : "#{word}s"
50
+ "#{number} #{number == 1 ? word : plural_word}"
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,16 @@
1
+ module Specdown
2
+ class ColorTerminalReporter < TerminalReporter
3
+ def success
4
+ Term::ANSIColor.green super
5
+ end
6
+
7
+ def failure
8
+ Term::ANSIColor.red(Term::ANSIColor.bold super)
9
+ end
10
+
11
+ private
12
+ def template
13
+ ERB.new File.read(File.join(File.dirname(__FILE__), "../templates/color_summary.erb"))
14
+ end
15
+ end
16
+ end
@@ -1,5 +1,7 @@
1
1
  module Specdown
2
- module TerminalReporter
2
+ class TerminalReporter
3
+ include Specdown::Reporter
4
+
3
5
  def success
4
6
  "."
5
7
  end
@@ -8,6 +10,29 @@ module Specdown
8
10
  "F"
9
11
  end
10
12
 
13
+ def print_start
14
+ end
15
+
16
+ def print_end
17
+ end
18
+
19
+ def print_runner_start(runner)
20
+ print "#{runner.file_name}: "
21
+ end
22
+
23
+ def print_runner_summary(runner)
24
+ end
25
+
26
+ def print_runner_end(runner)
27
+ print "\n"
28
+ end
29
+
30
+ def print_test_start(test)
31
+ end
32
+
33
+ def print_test_end(test)
34
+ end
35
+
11
36
  def print_success(test)
12
37
  print success
13
38
  end
@@ -26,17 +51,5 @@ module Specdown
26
51
  def template
27
52
  ERB.new File.read(File.join(File.dirname(__FILE__), "../templates/summary.erb"))
28
53
  end
29
-
30
- def format_stat(word, number)
31
- plural_word = word[-2..-1] == "ss" ? "#{word}es" : "#{word}s"
32
- "#{number} #{number == 1 ? word : plural_word}"
33
- end
34
- end
35
- end
36
-
37
- Specdown::ReporterFactory.decorate do |reporter|
38
- if Specdown::Config.reporter == :terminal
39
- reporter.extend Specdown::TerminalReporter
40
54
  end
41
- reporter
42
55
  end
@@ -0,0 +1,45 @@
1
+ module Specdown
2
+ class TextReporter
3
+ include Specdown::Reporter
4
+
5
+ def initialize
6
+ @file = File.new "specdown_report.txt", "w"
7
+ end
8
+
9
+ def print_start
10
+ @file.write Time.now.to_s
11
+ @file.write "\n\n"
12
+ end
13
+
14
+ def print_runner_start(runner)
15
+ @file.write(runner.file_name + ": ")
16
+ end
17
+
18
+ def print_runner_end(runner)
19
+ @file.write "\n\n"
20
+ end
21
+
22
+ def print_success(test)
23
+ @file.write "."
24
+ end
25
+
26
+ def print_failure(test)
27
+ @file.write "F"
28
+ end
29
+
30
+ def print_end
31
+ @file.close
32
+ end
33
+
34
+ def print_summary(runners)
35
+ @report_summary = summary(runners)
36
+ bounding = binding rescue proc {}
37
+ @file.write template.result(bounding)
38
+ end
39
+
40
+ private
41
+ def template
42
+ ERB.new File.read(File.join(File.dirname(__FILE__), "../templates/summary.erb"))
43
+ end
44
+ end
45
+ end
@@ -13,7 +13,7 @@ module Specdown
13
13
  end
14
14
 
15
15
  def run
16
- EventServer.event :run_starting, self
16
+ EventServer.event :run_started, self
17
17
  depth_first_search @tree.root
18
18
  EventServer.event :run_complete, self
19
19
  self
@@ -11,7 +11,7 @@ module Specdown
11
11
  end
12
12
 
13
13
  def reporter
14
- @reporter ||= ReporterFactory.generate
14
+ @reporter ||= Config.reporter.new
15
15
  end
16
16
 
17
17
  def before(*filters, &callback)
@@ -1,15 +1,15 @@
1
1
 
2
2
 
3
3
  ---------------------------------------------------------------------------
4
- <%= format_stat("markdown", @report_summary.num_markdowns).bold %>
5
- <%= format_stat("test", @report_summary.num_tests).bold %>
6
- <%= format_stat("success", @report_summary.num_successes).green %>
7
- <%= format_stat("failure", @report_summary.num_failures).red %>
4
+ <%= Term::ANSIColor.bold format_stat("markdown", @report_summary.num_markdowns) %>
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) %>
8
8
  ---------------------------------------------------------------------------
9
9
 
10
10
  <% runners.map(&:stats).each do |stat| %>
11
11
  <% stat.exceptions.each do |e| %>
12
- <%= "In #{e.test_filename}".blue.bold %>: <%= "#<#{e.exception_class}>:".red.bold%> <%=e.exception_message%>
13
- <%= e.exception_backtrace.join("\n").red %>
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.red e.exception_backtrace.join("\n") %>
14
14
  <% end %>
15
15
  <% end %>
data/lib/specdown.rb CHANGED
@@ -6,7 +6,7 @@ require 'specdown/parser'
6
6
  require 'specdown/node'
7
7
  require 'specdown/tree'
8
8
  require 'specdown/runner'
9
- require 'specdown/runner/reporter'
9
+ require 'specdown/reporter'
10
10
  require 'specdown/runner/stats'
11
11
  require 'specdown/command'
12
12
  require 'specdown/event_server'
@@ -23,11 +23,11 @@ require 'specdown/sandbox_factory'
23
23
  require 'specdown/hooks'
24
24
  require 'specdown/hook'
25
25
  require 'specdown/command/option_parser'
26
- require 'specdown/reporter_factory'
27
26
  require 'specdown/runner/report_summary'
28
27
  require 'specdown/runner/exception_facade'
29
- require 'specdown/reporter/terminal_reporter'
30
- require 'specdown/reporter/color_terminal_reporter'
28
+ require 'specdown/reporters/terminal_reporter'
29
+ require 'specdown/reporters/color_terminal_reporter'
30
+ require 'specdown/reporters/text_reporter'
31
31
  require 'specdown/sandbox_decorators/default_assertion_library'
32
32
  require 'specdown/sandbox_decorators/rspec_expectations'
33
33
  require 'specdown/sandbox_decorators/test_unit_assertions'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: specdown
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 7
10
- version: 0.1.7
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matt Parker
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-01-10 00:00:00 Z
18
+ date: 2012-01-13 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: kramdown
@@ -103,12 +103,12 @@ files:
103
103
  - lib/specdown/hooks.rb
104
104
  - lib/specdown/node.rb
105
105
  - lib/specdown/parser.rb
106
- - lib/specdown/reporter/color_terminal_reporter.rb
107
- - lib/specdown/reporter/terminal_reporter.rb
108
- - lib/specdown/reporter_factory.rb
106
+ - lib/specdown/reporter.rb
107
+ - lib/specdown/reporters/color_terminal_reporter.rb
108
+ - lib/specdown/reporters/terminal_reporter.rb
109
+ - lib/specdown/reporters/text_reporter.rb
109
110
  - lib/specdown/runner/exception_facade.rb
110
111
  - lib/specdown/runner/report_summary.rb
111
- - lib/specdown/runner/reporter.rb
112
112
  - lib/specdown/runner/stats.rb
113
113
  - lib/specdown/runner.rb
114
114
  - lib/specdown/sandbox_decorators/default_assertion_library.rb
@@ -131,8 +131,6 @@ files:
131
131
  - features/hooks.feature
132
132
  - features/parser.feature
133
133
  - features/report_summary.feature
134
- - features/reporter.feature
135
- - features/reporter_factory.feature
136
134
  - features/runner.feature
137
135
  - features/sandbox_factory.feature
138
136
  - features/specdown_examples/after_hooks/specdown/env.rb
@@ -214,8 +212,6 @@ test_files:
214
212
  - features/hooks.feature
215
213
  - features/parser.feature
216
214
  - features/report_summary.feature
217
- - features/reporter.feature
218
- - features/reporter_factory.feature
219
215
  - features/runner.feature
220
216
  - features/sandbox_factory.feature
221
217
  - features/specdown_examples/after_hooks/specdown/env.rb
@@ -1,92 +0,0 @@
1
- Feature: Reporter
2
-
3
- Specdown comes with a generic reporting class. By itself, the Specdown::Reporter does little (most methods throw a `NotImplementedError` exception). However, the `Specdown::ReporterFactory` will generate an instance of this class, then decorate based on your configuration.
4
-
5
- For example, suppose we have the following markdown file:
6
-
7
- \# Specdown Example
8
-
9
- This is an example specdown file.
10
-
11
- \## Child Node
12
-
13
- This section is a child node. It contains some ruby code:
14
-
15
- "simple code".should_not == nil
16
-
17
- \### First Leaf
18
-
19
- This section has a failure simulation:
20
-
21
- raise "specdown error simulation!"
22
-
23
- \## Last Leaf
24
-
25
- This section is a leaf node. It contains some ruby code:
26
-
27
- 1.should == 1
28
-
29
- If we create a Specdown::Runner instance from it and run it:
30
-
31
- runner = Specdown::Runner.new("/features/fixtures/parser_example.markdown")
32
- runner.run
33
-
34
- We could then retrieve a report summary like so:
35
-
36
- Specdown::Reporter.new.summary(runner).class.should == Specdown::ReportSummary
37
-
38
- The generic reporter doesn't actually print anything:
39
-
40
- proc { Specdown::Reporter.new.print_summary(runner) }.should raise_exception(NotImplementedError)
41
- proc { Specdown::Reporter.new.print_success(test) }.should raise_exception(NotImplementedError)
42
- proc { Specdown::Reporter.new.print_failure(test) }.should raise_exception(NotImplementedError)
43
-
44
- Scenario: A Specdown::Reporter instantiated with a single stats object
45
-
46
- Given the following specdown example file located at 'features/fixtures/parser_example.markdown':
47
- """
48
- # Specdown Example
49
-
50
- This is an example specdown file.
51
-
52
- ## Child Node
53
-
54
- This section is a child node. It contains some ruby code:
55
-
56
- "simple code".should_not == nil
57
-
58
- ### First Leaf
59
-
60
- This section has a failure simulation:
61
-
62
- raise "specdown error simulation!"
63
-
64
- ## Last Leaf
65
-
66
- This section is a leaf node. It contains some ruby code:
67
-
68
- 1.should == 1
69
- """
70
-
71
- And the following runner:
72
- """
73
- @runner = Specdown::Runner.new("features/fixtures/parser_example.markdown")
74
- """
75
-
76
- When I run the tests in the runner:
77
- """
78
- @runner.run
79
- """
80
-
81
- Then `Specdown::Reporter.new.summary(@runner)` should return a report summary object:
82
- """
83
- @reporter = Specdown::Reporter.new
84
- @reporter.summary(@runner).class.should == Specdown::ReportSummary
85
- """
86
-
87
- And the generic reporter shouldn't actually print anything:
88
- """
89
- proc { @reporter.print_summary(nil) }.should raise_exception(NotImplementedError)
90
- proc { @reporter.print_success(nil) }.should raise_exception(NotImplementedError)
91
- proc { @reporter.print_failure(nil) }.should raise_exception(NotImplementedError)
92
- """
@@ -1,65 +0,0 @@
1
- Feature: Specdown::ReporterFactory
2
-
3
- The `Specdown::ReporterFactory` will generate a `Specdown::Reporter` instance, then decorate it in various ways depending on your specdown configuration.
4
-
5
- The `Specdown::ReporterFactory` has an API that allows you to configure new decorators for reports. Use the `Specdown::ReporterFactory.decorate` method:
6
-
7
- Specdown::ReporterFactory.decorate do |reporter|
8
- if Specdown::Config.reporter == :color_terminal
9
- reporter.extend MyDecoratorModule
10
- end
11
-
12
- reporter
13
- end
14
-
15
- For example, if you configure specdown to output colorized terminal output (the default value for Specdown::Config.reporter, :color_terminal), then `Specdown::ReporterFactory` will mix the `Specdown::AnsiColor` decorator into your `Specdown::Reporter` instance.
16
-
17
- Specdown::Config.reporter = :color_terminal
18
- Specdown::ReporterFactory.generate.should be_kind_of(Specdown::AnsiColor)
19
-
20
-
21
- Scenario: Adding a new decorator to Specdown::ReporterFactory
22
-
23
- Given I have added the following decorator to `Specdown::ReporterFactory`:
24
- """
25
- Specdown::ReporterFactory.decorate do |reporter|
26
- module FactoryTester
27
- end
28
-
29
- reporter.extend FactoryTester
30
-
31
- reporter
32
- end
33
- """
34
-
35
- Then reporters should be decorated with my new decorator:
36
- """
37
- Specdown::ReporterFactory.generate.kind_of?(FactoryTester).should be(true)
38
- """
39
-
40
-
41
- Scenario: Specdown::Config.reporter = :terminal
42
-
43
- Given that I want a non-colorized text output report:
44
- """
45
- Specdown::Config.reporter = :terminal
46
- """
47
-
48
- Then `Specdown::ReporterFactory.generate` should return a `Specdown::Reporter` decorated with `Specdown::TerminalReporter`:
49
- """
50
- Specdown::ReporterFactory.generate.kind_of?(Specdown::TerminalReporter).should be(true)
51
- """
52
-
53
-
54
- Scenario: Specdown::Config.reporter = :color_terminal
55
-
56
- Given that I want a colorized Specdown::Reporter:
57
- """
58
- Specdown::Config.reporter = :color_terminal
59
- """
60
-
61
- Then `Specdown::ReporterFactory.generate` should return a `Specdown::Reporter` decorated with `Specdown::TerminalReporter` and `Specdown::ColorTerminalReporter`:
62
- """
63
- Specdown::ReporterFactory.generate.kind_of?(Specdown::TerminalReporter).should be(true)
64
- Specdown::ReporterFactory.generate.kind_of?(Specdown::ColorTerminalReporter).should be(true)
65
- """
@@ -1,29 +0,0 @@
1
- module Specdown
2
- module ColorTerminalReporter
3
- def success
4
- super.green
5
- end
6
-
7
- def failure
8
- super.red.bold
9
- end
10
-
11
- private
12
- def template
13
- ERB.new File.read(File.join(File.dirname(__FILE__), "../templates/color_summary.erb"))
14
- end
15
- end
16
- end
17
-
18
- Specdown::ReporterFactory.decorate do |reporter|
19
- if Specdown::Config.reporter == :color_terminal
20
- class ::String
21
- include ::Term::ANSIColor
22
- end
23
-
24
- reporter.extend Specdown::TerminalReporter
25
- reporter.extend Specdown::ColorTerminalReporter
26
- end
27
-
28
- reporter
29
- end
@@ -1,18 +0,0 @@
1
- module Specdown
2
- module ReporterFactory
3
- extend self
4
-
5
- def decorate(&block)
6
- decorators << block
7
- end
8
-
9
- def generate
10
- decorators.inject(Reporter.new) {|reporter, decorator| decorator.call(reporter) }
11
- end
12
-
13
- private
14
- def decorators
15
- @decorators ||= []
16
- end
17
- end
18
- end
@@ -1,27 +0,0 @@
1
- module Specdown
2
- class Reporter
3
- def summary(runners)
4
- ReportSummary.new(runners)
5
- end
6
-
7
- def success
8
- raise NotImplementedError
9
- end
10
-
11
- def failure
12
- raise NotImplementedError
13
- end
14
-
15
- def print_summary(runners)
16
- raise NotImplementedError
17
- end
18
-
19
- def print_success(test)
20
- raise NotImplementedError
21
- end
22
-
23
- def print_failure(test)
24
- raise NotImplementedError
25
- end
26
- end
27
- end