rspec-longrun 0.0.2 → 0.0.3

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/README.md CHANGED
@@ -22,14 +22,13 @@ Specify the custom output format when invoking RSpec, as follows:
22
22
 
23
23
  The resulting test output looks something like:
24
24
 
25
- Example group
26
- * First example
27
- OK
28
- * Second example
29
- OK
30
- * Third example
31
- PENDING (Not implemented yet)
25
+ Example group {
26
+ First example OK (1.2s)
27
+ Second example OK (3.4s)
28
+ Third example PENDING (Not implemented yet) (0.2s)
29
+ } (5.2s)
32
30
 
31
+ (though a little more colourful).
33
32
 
34
33
  ### Tracking progress
35
34
 
@@ -61,12 +60,13 @@ Include RSpec::Longrun::DSL to define the 'step' method, which can be used to gr
61
60
 
62
61
  The resulting test output looks something like:
63
62
 
64
- Account management
65
- * Log in and alter preferences
66
- - Log in
67
- - Navigate to preferences page
68
- - Change preferences
69
- OK
63
+ Account management {
64
+ Log in and alter preferences {
65
+ Log in (0.5s)
66
+ Navigate to preferences page (0.2s)
67
+ Change preferences (5.2s)
68
+ } OK (7.1s)
69
+ } OK (7.2s)
70
70
 
71
71
  which gives you some extra context in the event that something fails, or hangs, during the test run.
72
72
 
@@ -0,0 +1,52 @@
1
+ require 'rspec'
2
+ require 'rspec/longrun'
3
+
4
+ describe "Underpants gnomes" do
5
+
6
+ include RSpec::Longrun::DSL
7
+
8
+ it "The plan" do
9
+ step "Collect underpants" do
10
+ end
11
+ step "Umm ..." do
12
+ sleep 0.3 # thinking
13
+ end
14
+ step "Profit!" do
15
+ pending "need a real business plan"
16
+ end
17
+ end
18
+
19
+ end
20
+
21
+ describe "Killer app" do
22
+
23
+ include RSpec::Longrun::DSL
24
+
25
+ describe "Some feature" do
26
+
27
+ it "Scenario 1" do
28
+ step "Step 1" do
29
+ end
30
+ step "Step 2" do
31
+ end
32
+ step "Step 3" do
33
+ end
34
+ end
35
+
36
+ it "Scenario 2" do
37
+ end
38
+
39
+ end
40
+
41
+ describe "Another feature" do
42
+
43
+ it "Scenario" do
44
+ step "Step 1" do
45
+ end
46
+ step "Step 2" do
47
+ end
48
+ end
49
+
50
+ end
51
+
52
+ end
@@ -7,12 +7,12 @@ module RSpec
7
7
 
8
8
  def initialize(output)
9
9
  super(output)
10
- @indent_level = 0
10
+ @blocks = [Block.new(true)]
11
11
  end
12
12
 
13
13
  def example_group_started(example_group)
14
14
  super(example_group)
15
- start_block(example_group.description)
15
+ begin_block(example_group.description)
16
16
  end
17
17
 
18
18
  def example_group_finished(example_group)
@@ -22,7 +22,7 @@ module RSpec
22
22
 
23
23
  def example_started(example)
24
24
  super(example)
25
- start_block('* ' + cyan(example.description))
25
+ begin_block(cyan(example.description))
26
26
  end
27
27
 
28
28
  def example_passed(example)
@@ -41,7 +41,7 @@ module RSpec
41
41
  end
42
42
 
43
43
  def step_started(description)
44
- start_block(faint('- ' + description))
44
+ begin_block(description)
45
45
  end
46
46
 
47
47
  def step_finished(description)
@@ -50,28 +50,70 @@ module RSpec
50
50
 
51
51
  private
52
52
 
53
- def start_block(message)
54
- emit(message.strip)
55
- @indent_level += 1
53
+ def current_block
54
+ @blocks.last
56
55
  end
57
56
 
58
- def end_block(message = nil)
59
- emit(message.strip) if message
60
- @indent_level -= 1
57
+ def begin_block(message)
58
+ unless current_block.nested?
59
+ output << faint("{\n")
60
+ current_block.nested!
61
+ end
62
+ output << current_indentation
63
+ output << message.strip
64
+ output << ' '
65
+ @blocks.push(Block.new)
61
66
  end
62
67
 
63
- def emit(message)
64
- output.puts(message.gsub(/^/, current_indentation))
68
+ def end_block(message = nil)
69
+ block = @blocks.pop
70
+ block.finished!
71
+ if block.nested?
72
+ output << current_indentation
73
+ output << faint('} ')
74
+ end
75
+ if message
76
+ output << message.strip
77
+ output << ' '
78
+ end
79
+ output << faint('(' + block.timing + ')')
80
+ output << "\n"
65
81
  end
66
82
 
67
83
  def current_indentation
68
- ' ' * @indent_level
84
+ ' ' * (@blocks.size - 1)
69
85
  end
70
86
 
71
87
  def faint(text)
72
88
  color(text, "\e[2m")
73
89
  end
74
90
 
91
+ class Block
92
+
93
+ def initialize(nested = false)
94
+ @began_at = Time.now
95
+ @nested = nested
96
+ end
97
+
98
+ def finished!
99
+ @finished_at = Time.now
100
+ end
101
+
102
+ def timing
103
+ delta = @finished_at - @began_at
104
+ '%.2fs' % delta
105
+ end
106
+
107
+ def nested!
108
+ @nested = true
109
+ end
110
+
111
+ def nested?
112
+ @nested
113
+ end
114
+
115
+ end
116
+
75
117
  end
76
118
 
77
119
  end
@@ -1,5 +1,5 @@
1
1
  module RSpec
2
2
  module Longrun
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
@@ -3,8 +3,6 @@ require "stringio"
3
3
 
4
4
  describe RSpec::Longrun::Formatter do
5
5
 
6
- include RSpec::Longrun::DSL
7
-
8
6
  let(:output_buffer) { StringIO.new }
9
7
  let(:formatter) { described_class.new(output_buffer) }
10
8
 
@@ -47,12 +45,14 @@ describe RSpec::Longrun::Formatter do
47
45
  end
48
46
  end
49
47
 
50
- it "outputs nested group name" do
48
+ it "outputs nested group names" do
51
49
  output.should eql(undent(<<-EOF))
52
- foo
53
- bar
54
- baz
55
- qux
50
+ foo {
51
+ bar {
52
+ baz (0.00s)
53
+ } (0.00s)
54
+ qux (0.00s)
55
+ } (0.00s)
56
56
  EOF
57
57
  end
58
58
 
@@ -74,13 +74,11 @@ describe RSpec::Longrun::Formatter do
74
74
 
75
75
  it "outputs example names and status" do
76
76
  output.should eql(undent(<<-EOF))
77
- suite
78
- * works
79
- OK
80
- * is unimplemented
81
- PENDING: implement me
82
- * fails
83
- FAILED
77
+ suite {
78
+ works OK (0.00s)
79
+ is unimplemented PENDING: implement me (0.00s)
80
+ fails FAILED (0.00s)
81
+ } (0.00s)
84
82
  EOF
85
83
  end
86
84
 
@@ -104,16 +102,16 @@ describe RSpec::Longrun::Formatter do
104
102
  end
105
103
 
106
104
  it "outputs steps" do
107
- step "try steps" do
108
- output.should eql(undent(<<-EOF))
109
- suite
110
- * has steps
111
- - Collect underpants
112
- - Er ...
113
- - (thinking)
114
- PENDING: Profit!
115
- EOF
116
- end
105
+ output.should eql(undent(<<-EOF))
106
+ suite {
107
+ has steps {
108
+ Collect underpants (0.00s)
109
+ Er ... {
110
+ (thinking) (0.00s)
111
+ } (0.00s)
112
+ } PENDING: Profit! (0.00s)
113
+ } (0.00s)
114
+ EOF
117
115
  end
118
116
 
119
117
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-longrun
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:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-24 00:00:00.000000000 Z
12
+ date: 2012-10-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec-core
@@ -40,6 +40,7 @@ files:
40
40
  - LICENSE
41
41
  - README.md
42
42
  - Rakefile
43
+ - examples/example_spec.rb
43
44
  - lib/rspec/longrun.rb
44
45
  - lib/rspec/longrun/core_ext.rb
45
46
  - lib/rspec/longrun/dsl.rb
@@ -61,7 +62,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
61
62
  version: '0'
62
63
  segments:
63
64
  - 0
64
- hash: -1671641901183265154
65
+ hash: -2839138365557975715
65
66
  required_rubygems_version: !ruby/object:Gem::Requirement
66
67
  none: false
67
68
  requirements:
@@ -70,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
70
71
  version: '0'
71
72
  segments:
72
73
  - 0
73
- hash: -1671641901183265154
74
+ hash: -2839138365557975715
74
75
  requirements: []
75
76
  rubyforge_project:
76
77
  rubygems_version: 1.8.23