rspec-given 2.0.0 → 2.1.0.beta.1

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/Gemfile CHANGED
@@ -1,3 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
  gem 'rspec', '>= 2.0'
3
- gem 'rake', '>= 0.9.2.2'
3
+ gem 'rake', '>= 0.9.2.2'
4
+
5
+ group :test do
6
+ gem 'flexmock'
7
+ end
data/Gemfile.lock CHANGED
@@ -2,6 +2,7 @@ GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
4
  diff-lcs (1.1.3)
5
+ flexmock (1.0.2)
5
6
  rake (0.9.2.2)
6
7
  rspec (2.11.0)
7
8
  rspec-core (~> 2.11.0)
@@ -16,5 +17,6 @@ PLATFORMS
16
17
  ruby
17
18
 
18
19
  DEPENDENCIES
20
+ flexmock
19
21
  rake (>= 0.9.2.2)
20
22
  rspec (>= 2.0)
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # rspec-given
2
2
 
3
- Covering rspec-given, version 2.0.0.
3
+ Covering rspec-given, version 2.1.0.beta.1.
4
4
 
5
5
  rspec-given is an RSpec extension to allow Given/When/Then notation in
6
6
  RSpec specifications. It is a natural extension of the experimental
@@ -46,7 +46,7 @@ describe Stack do
46
46
  When { stack.push(:an_item) }
47
47
 
48
48
  Then { stack.depth.should == 1 }
49
- Then { stack.top.should == :an_item }
49
+ Also { stack.top.should == :an_item }
50
50
  end
51
51
 
52
52
  context "when popping" do
@@ -62,7 +62,7 @@ describe Stack do
62
62
  When(:pop_result) { stack.pop }
63
63
 
64
64
  Then { pop_result.should == :an_item }
65
- Then { stack.depth.should == 0 }
65
+ Also { stack.depth.should == 0 }
66
66
  end
67
67
  end
68
68
 
@@ -241,9 +241,9 @@ in term of <tt>size</tt>. Whenever <tt>size</tt> is 0,
241
241
  <tt>empty?</tt> should be false.
242
242
 
243
243
  You can conceptually think of an _Invariant_ block as a _Then_ block
244
- that automatically gets added to every _When_ within its scope.
244
+ that automatically gets added to every _Then_ within its scope.
245
245
 
246
- Invariants nested within a context only apply to the _When_ blocks in
246
+ Invariants nested within a context only apply to the _Then_ blocks in
247
247
  that context.
248
248
 
249
249
  Invariants that reference a _Given_ precondition accessor must only be
@@ -255,11 +255,7 @@ I really like the way the Given framework is working out. I feel my
255
255
  tests are much more like specifications when I use it. However, I'm
256
256
  not entirely happy with it.
257
257
 
258
- First, I would like to introduce invariants. An _Invariant_ block
259
- would essentially be a post-conditions that should be true after
260
- _Then_ block in the same (or nested) context as the invariant.
261
-
262
- Second, I would like to remove the need for the ".should" in all the
258
+ I would like to remove the need for the ".should" in all the
263
259
  _Then_ blocks. In other words, instead of saying:
264
260
 
265
261
  Then { x.should == y }
@@ -0,0 +1,48 @@
1
+ require 'rspec/given'
2
+ require 'spec_helper'
3
+
4
+ describe "Also" do
5
+ Given(:info) { [] }
6
+ Given(:mock) { flexmock("mock") }
7
+
8
+ describe "Also is called after Then" do
9
+ Given { mock.should_receive(:also_ran).once }
10
+ Then { info << "T" }
11
+ Also {
12
+ info.should == ["T"]
13
+ mock.also_ran
14
+ }
15
+ end
16
+
17
+ describe "Also is called only once with multiple Thens" do
18
+ Then { info << "T" }
19
+ Then { info << "T2" }
20
+ Also { info.should == ["T"] }
21
+ end
22
+
23
+ describe "Inherited Alsos are not run" do
24
+ Then { info << "T-OUTER" }
25
+ Also { info << "A-OUTER" }
26
+ Also { info.should == ["T-OUTER", "A-OUTER"] }
27
+
28
+ context "inner" do
29
+ Then { info << "T-INNER" }
30
+ Also { info << "A-INNER" }
31
+ Also { info.should == ["T-INNER", "A-INNER"] }
32
+ end
33
+ end
34
+
35
+ describe "Alsos require a Then" do
36
+ begin
37
+ Also { }
38
+ rescue StandardError => ex
39
+ @message = ex.message
40
+ end
41
+
42
+ it "should define a message" do
43
+ message = self.class.instance_eval { @message }
44
+ message.should =~ /also.*without.*then/i
45
+ end
46
+ end
47
+
48
+ end
@@ -1,2 +1,6 @@
1
1
  require 'rspec/given'
2
2
  $LOAD_PATH << './examples/stack'
3
+
4
+ RSpec.configure do |c|
5
+ c.mock_with :flexmock
6
+ end
@@ -20,7 +20,7 @@ describe Stack do
20
20
  When { stack.push(:an_item) }
21
21
 
22
22
  Then { stack.depth.should == 1 }
23
- Then { stack.top.should == :an_item }
23
+ Also { stack.top.should == :an_item }
24
24
  end
25
25
 
26
26
  context "when popping" do
@@ -36,7 +36,7 @@ describe Stack do
36
36
  When(:pop_result) { stack.pop }
37
37
 
38
38
  Then { pop_result.should == :an_item }
39
- Then { stack.depth.should == 0 }
39
+ Also { stack.depth.should == 0 }
40
40
  end
41
41
  end
42
42
 
@@ -31,11 +31,20 @@ module RSpec
31
31
  end
32
32
  end
33
33
 
34
+ def _rg_check_alsos # :nodoc:
35
+ return if self.class._rg_context_info[:also_ran]
36
+ self.class._rg_alsos.each do |block|
37
+ instance_eval(&block)
38
+ end
39
+ self.class._rg_context_info[:also_ran] = true
40
+ end
41
+
34
42
  # Implement the run-time semantics of the Then clause.
35
43
  def _rg_then(&block) # :nodoc:
36
44
  _rg_establish_givens
37
45
  _rg_check_invariants
38
46
  instance_eval(&block)
47
+ _rg_check_alsos
39
48
  end
40
49
  end
41
50
 
@@ -53,6 +62,14 @@ module RSpec
53
62
  @_rg_invariants ||= []
54
63
  end
55
64
 
65
+ def _rg_alsos
66
+ @_rg_alsos ||= []
67
+ end
68
+
69
+ def _rg_context_info
70
+ @_rg_contet_info ||= {}
71
+ end
72
+
56
73
  # Trigger the evaluation of a Given! block by referencing its
57
74
  # name.
58
75
  def _rg_trigger_given(name) # :nodoc:
@@ -145,6 +162,7 @@ module RSpec
145
162
  file = eval "__FILE__", b
146
163
  line = eval "__LINE__", b
147
164
  eval %{specify do _rg_then(&block) end}, binding, file, line
165
+ _rg_context_info[:then_defined] = true
148
166
  end
149
167
 
150
168
  # Establish an invariant that must be true for all Then blocks
@@ -152,6 +170,11 @@ module RSpec
152
170
  def Invariant(&block)
153
171
  _rg_invariants << block
154
172
  end
173
+
174
+ def Also(&block)
175
+ fail "Also defined without a Then" unless _rg_context_info[:then_defined]
176
+ _rg_alsos << block
177
+ end
155
178
  end
156
179
  end
157
180
  end
@@ -2,8 +2,10 @@ module RSpec
2
2
  module Given
3
3
  VERSION_NUMBERS = [
4
4
  VERSION_MAJOR = 2,
5
- VERSION_MINOR = 0,
5
+ VERSION_MINOR = 1,
6
6
  VERSION_BUILD = 0,
7
+ VERSION_BETA = 'beta',
8
+ VERSION_BETANUM = '1'
7
9
  ]
8
10
  VERSION = VERSION_NUMBERS.join(".")
9
11
  end
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-given
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
5
- prerelease:
4
+ version: 2.1.0.beta.1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jim Weirich
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-08 00:00:00.000000000 Z
12
+ date: 2012-09-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70178365108520 !ruby/object:Gem::Requirement
16
+ requirement: &70227316783380 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>'
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.2.8
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70178365108520
24
+ version_requirements: *70227316783380
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bluecloth
27
- requirement: &70178365107200 !ruby/object:Gem::Requirement
27
+ requirement: &70227316782580 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70178365107200
35
+ version_requirements: *70227316782580
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rdoc
38
- requirement: &70178365103560 !ruby/object:Gem::Requirement
38
+ requirement: &70227316781360 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>'
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: 2.4.2
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70178365103560
46
+ version_requirements: *70227316781360
47
47
  description: ! 'Given is an RSpec extension that allows explicit definition of the
48
48
 
49
49
  pre and post-conditions for code under test.
@@ -67,6 +67,7 @@ files:
67
67
  - lib/rspec/given/rspec1_given.rb
68
68
  - lib/rspec/given/version.rb
69
69
  - lib/rspec/given.rb
70
+ - examples/integration/also_spec.rb
70
71
  - examples/integration/focused_line_spec.rb
71
72
  - examples/integration/given_spec.rb
72
73
  - examples/integration/invariant_spec.rb
@@ -96,9 +97,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
96
97
  required_rubygems_version: !ruby/object:Gem::Requirement
97
98
  none: false
98
99
  requirements:
99
- - - ! '>='
100
+ - - ! '>'
100
101
  - !ruby/object:Gem::Version
101
- version: '0'
102
+ version: 1.3.1
102
103
  requirements: []
103
104
  rubyforge_project: given
104
105
  rubygems_version: 1.8.15