specdown 0.1.5 → 0.1.6

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.
data/CHANGELOG.markdown CHANGED
@@ -1,5 +1,13 @@
1
1
  ## CHANGELOG
2
2
 
3
+ ## 0.1.6
4
+
5
+ Command line option (-f or --format) for output format (plain|color).
6
+
7
+ Command line option (-v or --version) for specdown version.
8
+
9
+ Also, created an API for sandbox decoration. Send me your pull requests :-)
10
+
3
11
  ## 0.1.5
4
12
 
5
13
  Terminal output is now colorized, by default. To turn it off, add the following to your env.rb:
@@ -16,7 +24,7 @@ The `specdown` command now allows you to pass off directories of tests as well a
16
24
 
17
25
  The `specdown` command now accepts two options: -h and -r.
18
26
 
19
- Usage: specdown [file1 [file2 [file3....]]]
27
+ Usage: specdown [file|dir [file|dir [file|dir....]]]
20
28
  -r, --root SPECDOWN_DIR defaults to ./specdown
21
29
  -h, --help Display this screen
22
30
 
data/README.markdown CHANGED
@@ -220,6 +220,8 @@ You can run `specdown -h` at the command line to get USAGE and options.
220
220
 
221
221
  If you run `specdown` without any arguments, specdown will look for a "specdown" directory inside your current working directory, then search for any markdown files inside of it, and also load any ruby files inside of it.
222
222
 
223
+ ### Running specific files (or directories)
224
+
223
225
  If you want to run just a single file or a set of files, or a directory of files, simply pass them on the command line:
224
226
 
225
227
  ```sh
@@ -227,12 +229,32 @@ $ specdown specdown/test.markdown
227
229
  $ specdown specdown/unit_tests
228
230
  ```
229
231
 
232
+ ### Overriding the default root directory
233
+
230
234
  You can use the `-r` flag to specify the root of the specdown directory (it defaults to "specdown/").
231
235
 
232
236
  ```sh
233
237
  $ specdown test.markdown -r specdown_environment/
234
238
  ```
235
239
 
240
+ ### Output Format
241
+
242
+ By default, `specdown` will output colorized terminal output. If you'd rather the output not be colorized, you can use the `-f terminal` switch:
243
+
244
+ ```sh
245
+ $ specdown -f plain
246
+ ```
247
+
248
+ The default format is `color`.
249
+
250
+ You can also configure the report format in your Ruby code:
251
+
252
+ ```ruby
253
+ Specdown::Config.reporter = :terminal
254
+ ```
255
+
256
+ Note that this defaults to `:color_terminal`. Also, please note that command line options take precedence.
257
+
236
258
  ## TODO
237
259
 
238
260
  This library is still very new, but we are rapidly adding features to it. Here's what is on the immediate horizon:
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.6
@@ -96,7 +96,6 @@ Feature: `specdown` command
96
96
  """
97
97
 
98
98
 
99
- @focus
100
99
  Scenario: `specdown` command invoked with a directory
101
100
  Given I have a specdown directory 'specdown/tests' containing 3 markdown files, each with 1 passing test
102
101
  When I run `specdown specdown/tests`
@@ -108,3 +107,14 @@ Feature: `specdown` command
108
107
  3 tests
109
108
  0 failures
110
109
  """
110
+
111
+
112
+ @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
@@ -4,16 +4,18 @@ Feature: Specdown::ReporterFactory
4
4
 
5
5
  The `Specdown::ReporterFactory` has an API that allows you to configure new decorators for reports. Use the `Specdown::ReporterFactory.decorate` method:
6
6
 
7
- Specdown::ReporterFactory.decorate do |report|
7
+ Specdown::ReporterFactory.decorate do |reporter|
8
8
  if Specdown::Config.reporter == :color_terminal
9
- report.extend MyDecoratorModule
9
+ reporter.extend MyDecoratorModule
10
10
  end
11
+
12
+ reporter
11
13
  end
12
14
 
13
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.
14
16
 
15
17
  Specdown::Config.reporter = :color_terminal
16
- Specdown::ReporterFactory.generate.ancestors.should include(Specdown::AnsiColor)
18
+ Specdown::ReporterFactory.generate.should be_kind_of(Specdown::AnsiColor)
17
19
 
18
20
 
19
21
  Scenario: Adding a new decorator to Specdown::ReporterFactory
@@ -0,0 +1,55 @@
1
+ Feature: Specdown::SandboxFactory
2
+
3
+ All of your tests run in a sandbox - a protected object namespace, configurable via a simple API.
4
+
5
+ For example, let's imagine we've written an assertion library called `SimpleAssert`:
6
+
7
+ module SimpleAssert
8
+ def simple_assert(&block)
9
+ raise "failed!" if block.call == false
10
+ end
11
+ end
12
+
13
+ We can configure Specdown to include our library in the sandbox via the `Specdown::SandboxFactory.decorate` API:
14
+
15
+ Specdown::SandboxFactory.decorate do |sandbox|
16
+ sandbox.extend SimpleAssert
17
+ end
18
+
19
+ Now all sandboxes will respond to the `simple_assert` method. We could even make this configurable:
20
+
21
+ Specdown::SandboxFactory.decorate do |sandbox|
22
+ if Specdown::Config.expectations == :simple_assert
23
+ sandbox.extend SimpleAssert
24
+ end
25
+ end
26
+
27
+ Now you could add `Specdown::Config.expectations = :simple_assert` to your `specdown/support/env.rb` to use your own SimpleAssert library in your tests.
28
+
29
+
30
+ Scenario: decorate sandbox with module
31
+
32
+ Given the following module:
33
+ """
34
+ module SimpleAssert
35
+ def simple_assert(&block)
36
+ raise "failed!" if block.call == false
37
+ end
38
+ end
39
+ """
40
+
41
+ When I decorate the sandbox with it:
42
+ """
43
+ Specdown::SandboxFactory.decorate do |sandbox|
44
+ sandbox.extend SimpleAssert
45
+ end
46
+ """
47
+
48
+ Then all sandboxes should include my module methods:
49
+ """
50
+ proc {
51
+ Specdown::SandboxFactory.generate.instance_eval do
52
+ simple_assert { 1 == 1 }
53
+ end
54
+ }.should_not raise_exception
55
+ """
@@ -0,0 +1 @@
1
+ Specdown::Config.reporter = :color_terminal
@@ -24,6 +24,22 @@ Given /^I have a specdown directory 'specdown\/tests' containing 3 markdown file
24
24
  @directory = "features/specdown_examples/nested_directories_test/"
25
25
  end
26
26
 
27
+ Given /^I am in a directory with a 'specdown' folder$/ do
28
+ @directory = "features/specdown_examples/format_switch_test/"
29
+ end
30
+
27
31
  When /^I run `(.*)`$/ do |command|
28
32
  @output = `cd #{@directory} && bundle exec ruby -I ../../../lib ../../../bin/#{command}`
29
33
  end
34
+
35
+ Then /^I should not see colorized output$/ do
36
+ raise "Oops! Output is colorized!" if colorized?(@output)
37
+ end
38
+
39
+ Then /^I should see colorized output$/ do
40
+ raise "Oops! Output is not colorized!" unless colorized?(@output)
41
+ end
42
+
43
+ def colorized?(output)
44
+ output.include? "\e[1m"
45
+ end
@@ -0,0 +1,11 @@
1
+ Given /^the following module:$/ do |string|
2
+ eval string
3
+ end
4
+
5
+ When /^I decorate the sandbox with it:$/ do |string|
6
+ eval string
7
+ end
8
+
9
+ Then /^all sandboxes should include my module methods:$/ do |string|
10
+ eval string
11
+ end
@@ -16,10 +16,22 @@ module Specdown
16
16
  Specdown::Config.root = root
17
17
  end
18
18
 
19
- opts.on '-h', '--help', 'Display this screen' do
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
24
+ end
25
+
26
+ opts.on_tail '-h', '--help', 'Display this screen' do
20
27
  puts opts
21
28
  exit
22
29
  end
30
+
31
+ opts.on_tail "-v", "--version", "Show version" do
32
+ puts File.read(File.join(File.dirname(__FILE__), "../../../VERSION"))
33
+ exit
34
+ end
23
35
  end
24
36
  end
25
37
  end
@@ -1,8 +1,8 @@
1
1
  module Specdown
2
2
  class Command
3
3
  def execute
4
- parse_options
5
4
  load_test_environment
5
+ parse_options
6
6
  run
7
7
  end
8
8
 
@@ -27,7 +27,8 @@ module Specdown
27
27
  end
28
28
 
29
29
  def format_stat(word, number)
30
- "#{number} #{number == 1 ? word : word + "s"}"
30
+ plural_word = word[-2..-1] == "ss" ? "#{word}es" : "#{word}s"
31
+ "#{number} #{number == 1 ? word : plural_word}"
31
32
  end
32
33
  end
33
34
  end
@@ -0,0 +1,11 @@
1
+ Specdown::SandboxFactory.decorate do |sandbox|
2
+ if Specdown::Config.expectations.nil?
3
+ begin
4
+ require 'rspec/expectations'
5
+ sandbox.extend ::RSpec::Matchers
6
+ rescue LoadError => e
7
+ require 'test/unit/assertions'
8
+ sandbox.extend ::Test::Unit::Assertions
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ Specdown::SandboxFactory.decorate do |sandbox|
2
+ if Specdown::Config.expectations == :rspec
3
+ require 'rspec/expectations'
4
+ sandbox.extend ::RSpec::Matchers
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ Specdown::SandboxFactory.decorate do |sandbox|
2
+ if Specdown::Config.expectations == :test_unit
3
+ require 'test/unit/assertions'
4
+ sandbox.extend ::Test::Unit::Assertions
5
+ end
6
+ end
@@ -4,53 +4,19 @@ module Specdown
4
4
 
5
5
  def generate
6
6
  Module.new {}.tap do |sandbox|
7
- setup_expectation_library.call(sandbox)
8
- end
9
- end
10
-
11
- private
12
- def setup_expectation_library
13
- expectation_library_setups[Config.expectations]
14
- end
15
-
16
- def expectation_library_setups
17
- Hash.new(default_expectations_setup).tap do |setups|
18
- setups[:rspec] = rspec_expectations_setup
19
- setups[:test_unit] = test_unit_expectations_setup
20
- end
21
- end
22
-
23
- def rspec_installed?
24
- require_rspec
25
- end
26
-
27
- def require_rspec
28
- begin
29
- require('rspec/expectations')
30
- true
31
- rescue LoadError
32
- false
7
+ decorators.each do |decorator|
8
+ decorator.call sandbox
9
+ end
33
10
  end
34
11
  end
35
12
 
36
- def default_expectations_setup
37
- if rspec_installed?
38
- rspec_expectations_setup
39
- else
40
- test_unit_expectations_setup
41
- end
13
+ def decorate(&block)
14
+ decorators << block
42
15
  end
43
16
 
44
- def rspec_expectations_setup
45
- require_rspec
46
- proc {|sandbox| sandbox.extend ::RSpec::Matchers}
47
- end
48
-
49
- def test_unit_expectations_setup
50
- proc do |sandbox|
51
- require 'test/unit/assertions'
52
- sandbox.extend ::Test::Unit::Assertions
53
- end
17
+ private
18
+ def decorators
19
+ @decorators ||= []
54
20
  end
55
21
  end
56
22
  end
data/lib/specdown.rb CHANGED
@@ -28,3 +28,6 @@ require 'specdown/runner/report_summary'
28
28
  require 'specdown/runner/exception_facade'
29
29
  require 'specdown/reporter/terminal_reporter'
30
30
  require 'specdown/reporter/color_terminal_reporter'
31
+ require 'specdown/sandbox_decorators/default_assertion_library'
32
+ require 'specdown/sandbox_decorators/rspec_expectations'
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: 17
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 5
10
- version: 0.1.5
9
+ - 6
10
+ version: 0.1.6
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-08 00:00:00 Z
18
+ date: 2012-01-10 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: kramdown
@@ -87,6 +87,7 @@ extra_rdoc_files:
87
87
  - CHANGELOG.markdown
88
88
  - README.markdown
89
89
  files:
90
+ - VERSION
90
91
  - lib/specdown/command/option_parser.rb
91
92
  - lib/specdown/command.rb
92
93
  - lib/specdown/config.rb
@@ -110,6 +111,9 @@ files:
110
111
  - lib/specdown/runner/reporter.rb
111
112
  - lib/specdown/runner/stats.rb
112
113
  - lib/specdown/runner.rb
114
+ - lib/specdown/sandbox_decorators/default_assertion_library.rb
115
+ - lib/specdown/sandbox_decorators/rspec_expectations.rb
116
+ - lib/specdown/sandbox_decorators/test_unit_assertions.rb
113
117
  - lib/specdown/sandbox_factory.rb
114
118
  - lib/specdown/specdown.rb
115
119
  - lib/specdown/templates/color_summary.erb
@@ -130,6 +134,7 @@ files:
130
134
  - features/reporter.feature
131
135
  - features/reporter_factory.feature
132
136
  - features/runner.feature
137
+ - features/sandbox_factory.feature
133
138
  - features/specdown_examples/after_hooks/specdown/env.rb
134
139
  - features/specdown_examples/after_hooks/specdown/hooks.rb
135
140
  - features/specdown_examples/after_hooks/specdown/parser_example.markdown
@@ -139,6 +144,7 @@ files:
139
144
  - features/specdown_examples/before_hooks/specdown/env.rb
140
145
  - features/specdown_examples/before_hooks/specdown/hooks.rb
141
146
  - features/specdown_examples/before_hooks/specdown/parser_example.markdown
147
+ - features/specdown_examples/format_switch_test/specdown/env.rb
142
148
  - features/specdown_examples/nested_directories_test/specdown/env.rb
143
149
  - features/specdown_examples/nested_directories_test/specdown/tests/1.markdown
144
150
  - features/specdown_examples/nested_directories_test/specdown/tests/2.markdown
@@ -163,6 +169,7 @@ files:
163
169
  - features/step_definitions/reporter.rb
164
170
  - features/step_definitions/reporter_factory.rb
165
171
  - features/step_definitions/runner.rb
172
+ - features/step_definitions/sandbox_factory.rb
166
173
  - features/support/env.rb
167
174
  - features/support/hooks.rb
168
175
  homepage: http://github.com/moonmaster9000/specdown
@@ -210,6 +217,7 @@ test_files:
210
217
  - features/reporter.feature
211
218
  - features/reporter_factory.feature
212
219
  - features/runner.feature
220
+ - features/sandbox_factory.feature
213
221
  - features/specdown_examples/after_hooks/specdown/env.rb
214
222
  - features/specdown_examples/after_hooks/specdown/hooks.rb
215
223
  - features/specdown_examples/after_hooks/specdown/parser_example.markdown
@@ -219,6 +227,7 @@ test_files:
219
227
  - features/specdown_examples/before_hooks/specdown/env.rb
220
228
  - features/specdown_examples/before_hooks/specdown/hooks.rb
221
229
  - features/specdown_examples/before_hooks/specdown/parser_example.markdown
230
+ - features/specdown_examples/format_switch_test/specdown/env.rb
222
231
  - features/specdown_examples/nested_directories_test/specdown/env.rb
223
232
  - features/specdown_examples/nested_directories_test/specdown/tests/1.markdown
224
233
  - features/specdown_examples/nested_directories_test/specdown/tests/2.markdown
@@ -243,5 +252,6 @@ test_files:
243
252
  - features/step_definitions/reporter.rb
244
253
  - features/step_definitions/reporter_factory.rb
245
254
  - features/step_definitions/runner.rb
255
+ - features/step_definitions/sandbox_factory.rb
246
256
  - features/support/env.rb
247
257
  - features/support/hooks.rb