rspec-given 2.4.1 → 2.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2526965146d0b14ab9961e98cd410bcbc2778294
4
+ data.tar.gz: 34ec57d90eb5e434f33932b35cc029ca38933822
5
+ SHA512:
6
+ metadata.gz: a5e34bc27ea98957e2494940ede0550dc77199ccf77bd44d3e9bce24d7561c9ebdbfaeb15994a3a9fb9ff3be01b35194ab947b0011d6cc48051a924adf11d74c
7
+ data.tar.gz: cfbbcf7d2975f67a2487d08da61c58622688a73f607a97250cb77e548fee7f0c080a38fc19e336af6d2219bd3b725b0ff8a13551b91698ff65d004a8ab6c20ba
data/Gemfile CHANGED
@@ -1,11 +1,3 @@
1
1
  source 'https://rubygems.org'
2
- gem 'rspec', '>= 2.12'
3
- gem 'rake', '>= 0.9.2.2'
4
- gem 'sorcerer'
5
-
6
- group :dev do
7
- gem 'bluecloth'
8
- gem 'ghpreview'
9
- gem 'flog'
10
- gem 'flay'
11
- end
2
+ gemspec
3
+ gem 'rake'
data/Gemfile.lock CHANGED
@@ -1,54 +1,15 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ rspec-given (2.4.1)
5
+ rspec (>= 2.12)
6
+ sorcerer (>= 0.3.7)
7
+
1
8
  GEM
2
9
  remote: https://rubygems.org/
3
10
  specs:
4
- activesupport (3.2.12)
5
- i18n (~> 0.6)
6
- multi_json (~> 1.0)
7
- blankslate (3.1.2)
8
- bluecloth (2.2.0)
9
- charlock_holmes (0.6.9.1)
10
- diff-lcs (1.2.1)
11
- escape_utils (0.2.4)
12
- ffi (1.0.11)
13
- flay (2.1.0)
14
- ruby_parser (~> 3.0)
15
- sexp_processor (~> 4.0)
16
- flog (3.2.2)
17
- ruby_parser (~> 3.1, > 3.1.0)
18
- sexp_processor (~> 4.0)
19
- gemoji (1.4.0)
20
- ghpreview (0.0.6)
21
- github-linguist (= 2.1)
22
- html-pipeline (= 0.0.6)
23
- httpclient
24
- listen
25
- rb-fsevent
26
- github-linguist (2.1.0)
27
- charlock_holmes (~> 0.6.6)
28
- escape_utils (~> 0.2.3)
29
- mime-types (~> 1.18)
30
- pygments.rb (~> 0.2.13)
31
- github-markdown (0.5.3)
32
- html-pipeline (0.0.6)
33
- activesupport (>= 2)
34
- escape_utils (~> 0.2)
35
- gemoji (~> 1.0)
36
- github-linguist (~> 2.1)
37
- github-markdown (~> 0.5)
38
- nokogiri (~> 1.4)
39
- rinku (~> 1.7)
40
- sanitize (~> 2.0)
41
- httpclient (2.3.3)
42
- i18n (0.6.4)
43
- listen (0.7.3)
44
- mime-types (1.21)
45
- multi_json (1.6.1)
46
- nokogiri (1.5.6)
47
- pygments.rb (0.2.13)
48
- rubypython (~> 0.5.3)
49
- rake (10.0.3)
50
- rb-fsevent (0.9.3)
51
- rinku (1.7.2)
11
+ diff-lcs (1.2.4)
12
+ rake (10.0.4)
52
13
  rspec (2.13.0)
53
14
  rspec-core (~> 2.13.0)
54
15
  rspec-expectations (~> 2.13.0)
@@ -56,25 +17,12 @@ GEM
56
17
  rspec-core (2.13.1)
57
18
  rspec-expectations (2.13.0)
58
19
  diff-lcs (>= 1.1.3, < 2.0)
59
- rspec-mocks (2.13.0)
60
- ruby_parser (3.1.1)
61
- sexp_processor (~> 4.1)
62
- rubypython (0.5.3)
63
- blankslate (>= 2.1.2.3)
64
- ffi (~> 1.0.7)
65
- sanitize (2.0.3)
66
- nokogiri (>= 1.4.4, < 1.6)
67
- sexp_processor (4.1.5)
20
+ rspec-mocks (2.13.1)
68
21
  sorcerer (0.3.10)
69
22
 
70
23
  PLATFORMS
71
24
  ruby
72
25
 
73
26
  DEPENDENCIES
74
- bluecloth
75
- flay
76
- flog
77
- ghpreview
78
- rake (>= 0.9.2.2)
79
- rspec (>= 2.12)
80
- sorcerer
27
+ rake
28
+ rspec-given!
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010, 2011 Jim Weirich
1
+ Copyright (c) 2011, 2012, 2013 by Jim Weirich
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -18,4 +18,3 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
18
  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
19
  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
20
  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
-
data/README.md CHANGED
@@ -4,12 +4,11 @@
4
4
  | :----: |
5
5
  | [![Master Build Status](https://secure.travis-ci.org/jimweirich/rspec-given.png?branch=master)](https://travis-ci.org/jimweirich/rspec-given) |
6
6
 
7
- Covering rspec-given, version 2.4.1.
7
+ Covering rspec-given, version 2.4.2.
8
8
 
9
9
  rspec-given is an RSpec extension to allow Given/When/Then notation in
10
10
  RSpec specifications. It is a natural extension of the experimental
11
- work done on the Given framework. It turns out that 90% of the Given
12
- framework can be trivially implemented on top of RSpec.
11
+ work done on the Given framework.
13
12
 
14
13
  # Why Given/When/Then
15
14
 
@@ -645,8 +644,22 @@ file:
645
644
  # ... even when should/expect are detected
646
645
  ```
647
646
 
647
+ # License
648
+
649
+ RSpec-Given is available under the MIT License. See the MIT-LICENSE
650
+ file in the source distribution.
651
+
648
652
  # History
649
653
 
654
+ * Version 2.4.2
655
+
656
+ * Minor adjustment to natural assertion error messages to better
657
+ handle multi-line values.
658
+
659
+ * Remove flog, flay and other development tools from the bundle and
660
+ gemspec. The Rakefile was updated to suggest installing them if
661
+ they are not there.
662
+
650
663
  * Version 2.4.1
651
664
 
652
665
  * Fix bug where constants from nested modules were not properly
data/Rakefile CHANGED
@@ -2,18 +2,13 @@
2
2
 
3
3
  require 'rake/clean'
4
4
  require './lib/rspec/given/version'
5
+ require './lib/rspec/given/module_methods'
5
6
 
6
7
  CLEAN.include("pkg/rspec-given-*").exclude("pkg/*.gem")
7
8
  CLOBBER.include("*.gemspec", "html", "README", "README.old")
8
9
 
9
10
  # README Formatting --------------------------------------------------
10
11
 
11
- begin
12
- require 'bluecloth'
13
- rescue LoadError => ex
14
- puts "WARNING: BlueCloth not available"
15
- end
16
-
17
12
  task :default => :ex2
18
13
 
19
14
  def version
@@ -69,6 +64,11 @@ end
69
64
  EXAMPLES = FileList['examples/**/*_spec.rb'].
70
65
  exclude('examples/failing/*.rb').
71
66
  exclude('examples/integration/failing/*.rb')
67
+
68
+ unless RSpec::Given::NATURAL_ASSERTIONS_SUPPORTED
69
+ EXAMPLES.exclude("examples/stack/*.rb")
70
+ end
71
+
72
72
  FAILING_EXAMPLES = FileList['examples/failing/**/*_spec.rb']
73
73
 
74
74
  desc "Run the examples in RSpec 2"
@@ -96,7 +96,7 @@ task :verify_rspec2 do
96
96
  end
97
97
 
98
98
  task :load_check do
99
- SRC_FILES = FileList['lib/rspec/given/*.rb'].exclude(/rspec1/)
99
+ SRC_FILES = FileList['lib/rspec/given/*.rb'].exclude(%r(rspec1))
100
100
  SRC_FILES.each do |fn|
101
101
  sh %{ruby -Ilib -e 'load "#{fn}"'}
102
102
  end
@@ -108,7 +108,9 @@ directory 'html'
108
108
 
109
109
  desc "Display the README file"
110
110
  task :readme => ["README.md"] do
111
- sh "ghpreview README.md"
111
+ Bundler.with_clean_env do
112
+ sh "ghpreview README.md"
113
+ end
112
114
  end
113
115
 
114
116
  desc "Generate an RDoc README"
@@ -147,9 +149,13 @@ end
147
149
 
148
150
  # RDoc ---------------------------------------------------------------
149
151
  begin
150
- gem "rdoc"
151
152
  require 'rdoc/task'
152
- RDOC_ENABLED = true
153
+ if RDoc::VERSION > "2.4.2"
154
+ RDOC_ENABLED = true
155
+ else
156
+ puts "Version of RDoc is too old, please gem install a later version"
157
+ RDOC_ENABLED = false
158
+ end
153
159
  rescue LoadError => ex
154
160
  RDOC_ENABLED = false
155
161
  end
@@ -205,7 +211,7 @@ if RDOC_ENABLED
205
211
  rdoc.title = "RSpec/Given -- A Given/When/Then extension for RSpec"
206
212
  rdoc.options = [
207
213
  '--line-numbers',
208
- '--main' , 'README',
214
+ '--main' , 'doc/main.rdoc',
209
215
  '--title', 'RSpec::Given - Given/When/Then Extensions for RSpec'
210
216
  ]
211
217
  rdoc.options << '-SHN' << '-f' << 'darkfish' if DARKFISH_ENABLED
data/doc/main.rdoc ADDED
@@ -0,0 +1,7 @@
1
+ = Given/When/Then for RSpec
2
+
3
+ rspec-given is an RSpec extension to allow Given/When/Then notation in
4
+ RSpec specifications. It is a natural extension of the experimental
5
+ work done on the Given framework.
6
+
7
+ For more information see http://github.com/jimweirich/rspec-given
@@ -2,25 +2,24 @@ require 'rspec/given'
2
2
  require 'example_helper'
3
3
  require 'stack'
4
4
 
5
+ RSpec::Given.use_natural_assertions
6
+
5
7
  describe Stack do
6
- def stack_with(initial_contents)
7
- stack = Stack.new
8
- initial_contents.each do |item| stack.push(item) end
9
- stack
10
- end
8
+ Given(:stack) { Stack.new }
9
+ Given(:initial_contents) { [] }
10
+ Given { initial_contents.each do |item| stack.push(item) end }
11
11
 
12
- Given(:stack) { stack_with(initial_contents) }
13
- Invariant { stack.empty?.should == (stack.depth == 0) }
12
+ Invariant { stack.empty? == (stack.depth == 0) }
14
13
 
15
- context "when empty" do
14
+ context "with an empty stack" do
16
15
  Given(:initial_contents) { [] }
17
- Then { stack.depth.should == 0 }
16
+ Then { stack.depth == 0 }
18
17
 
19
18
  context "when pushing" do
20
19
  When { stack.push(:an_item) }
21
20
 
22
- Then { stack.depth.should == 1 }
23
- Then { stack.top.should == :an_item }
21
+ Then { stack.depth == 1 }
22
+ Then { stack.top == :an_item }
24
23
  end
25
24
 
26
25
  context "when popping" do
@@ -35,8 +34,8 @@ describe Stack do
35
34
  context "when popping" do
36
35
  When(:pop_result) { stack.pop }
37
36
 
38
- Then { pop_result.should == :an_item }
39
- Then { stack.depth.should == 0 }
37
+ Then { pop_result == :an_item }
38
+ Then { stack.depth == 0 }
40
39
  end
41
40
  end
42
41
 
@@ -47,16 +46,16 @@ describe Stack do
47
46
  context "when pushing" do
48
47
  When { stack.push(:new_item) }
49
48
 
50
- Then { stack.top.should == :new_item }
51
- Then { stack.depth.should == original_depth + 1 }
49
+ Then { stack.top == :new_item }
50
+ Then { stack.depth == original_depth + 1 }
52
51
  end
53
52
 
54
53
  context "when popping" do
55
54
  When(:pop_result) { stack.pop }
56
55
 
57
- Then { pop_result.should == :top_item }
58
- Then { stack.top.should == :second_item }
59
- Then { stack.depth.should == original_depth - 1 }
56
+ Then { pop_result == :top_item }
57
+ Then { stack.top == :second_item }
58
+ Then { stack.depth == original_depth - 1 }
60
59
  end
61
60
  end
62
61
  end
@@ -0,0 +1,39 @@
1
+ module RSpec
2
+ module Given
3
+ class EvalErr
4
+ def initialize(str)
5
+ @string = str
6
+ end
7
+ def size
8
+ inspect.size
9
+ end
10
+ def to_s
11
+ @string
12
+ end
13
+ def inspect
14
+ @string
15
+ end
16
+ end
17
+
18
+ class Evaluator
19
+ def initialize(example, block)
20
+ @example = example
21
+ @block = block
22
+ end
23
+
24
+ def eval_string(exp_string)
25
+ eval_in_context(exp_string).inspect
26
+ rescue StandardError => ex
27
+ EvalErr.new("#{ex.class}: #{ex.message}")
28
+ end
29
+
30
+ private
31
+
32
+ def eval_in_context(exp_string)
33
+ exp_proc = "proc { #{exp_string} }"
34
+ blk = eval(exp_proc, @block.binding)
35
+ @example.instance_eval(&blk)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,5 +1,6 @@
1
1
  require 'rspec'
2
2
  require 'rspec/given/module_methods'
3
+ require 'rspec/given/evaluator'
3
4
 
4
5
  if RSpec::Given::NATURAL_ASSERTIONS_SUPPORTED
5
6
  require 'ripper'
@@ -12,29 +13,13 @@ module RSpec
12
13
 
13
14
  InvalidThenError = Class.new(StandardError)
14
15
 
15
- class EvalErr
16
- def initialize(str)
17
- @string = str
18
- end
19
- def size
20
- inspect.size
21
- end
22
- def to_s
23
- @string
24
- end
25
- def inspect
26
- @string
27
- end
28
- end
29
-
30
16
  class NaturalAssertion
31
17
 
32
18
  def initialize(clause_type, block, example, line_extractor)
33
19
  @clause_type = clause_type
34
- @block = block
35
- @example = example
20
+ @evaluator = Evaluator.new(example, block)
36
21
  @line_extractor = line_extractor
37
- set_file_and_line
22
+ set_file_and_line(block)
38
23
  end
39
24
 
40
25
  VOID_SEXP = [:void_stmt]
@@ -56,10 +41,6 @@ module RSpec
56
41
  @output
57
42
  end
58
43
 
59
- def evaluate(expr_string)
60
- eval_in_context(expr_string)
61
- end
62
-
63
44
  private
64
45
 
65
46
  def using_should?
@@ -96,7 +77,7 @@ module RSpec
96
77
 
97
78
  def expression_value_pairs
98
79
  assertion_subexpressions.map { |exp|
99
- [exp, eval_string(exp)]
80
+ [exp, @evaluator.eval_string(exp)]
100
81
  }
101
82
  end
102
83
 
@@ -112,8 +93,8 @@ module RSpec
112
93
  @source ||= @line_extractor.line(@code_file, @code_line)
113
94
  end
114
95
 
115
- def set_file_and_line
116
- @code_file, @code_line = eval "[__FILE__, __LINE__]", @block.binding
96
+ def set_file_and_line(block)
97
+ @code_file, @code_line = eval "[__FILE__, __LINE__]", block.binding
117
98
  @code_line = @code_line.to_i
118
99
  end
119
100
 
@@ -168,20 +149,8 @@ module RSpec
168
149
  end
169
150
 
170
151
  def eval_sexp(sexp)
171
- expr = Sorcerer.source(sexp)
172
- eval_string(expr)
173
- end
174
-
175
- def eval_string(exp_string)
176
- eval_in_context(exp_string).inspect
177
- rescue StandardError => ex
178
- EvalErr.new("#{ex.class}: #{ex.message}")
179
- end
180
-
181
- def eval_in_context(exp_string)
182
- exp_proc = "proc { #{exp_string} }"
183
- blk = eval(exp_proc, @block.binding)
184
- @example.instance_eval(&blk)
152
+ expr_string = Sorcerer.source(sexp)
153
+ @evaluator.eval_string(expr_string)
185
154
  end
186
155
 
187
156
  WRAP_WIDTH = 20
@@ -189,13 +158,22 @@ module RSpec
189
158
  def display_pairs(pairs)
190
159
  width = suggest_width(pairs)
191
160
  pairs.each do |x, v|
192
- fmt = (v.size > WRAP_WIDTH) ?
193
- " %-#{width+2}s\n #{' '*(width+2)} <- %s\n" :
194
- " %-#{width+2}s <- %s\n"
161
+ v = adjust_indentation(v)
162
+ fmt = multi_line?(v) ?
163
+ "%-#{width+2}s\n #{' '*(width+2)} <- %s\n" :
164
+ "%-#{width+2}s <- %s\n"
195
165
  @output << sprintf(fmt, v, x)
196
166
  end
197
167
  end
198
168
 
169
+ def adjust_indentation(string)
170
+ string.to_s.gsub(/^/, ' ')
171
+ end
172
+
173
+ def multi_line?(string)
174
+ (string.size > WRAP_WIDTH) || (string =~ /\n/)
175
+ end
176
+
199
177
  def suggest_width(pairs)
200
178
  pairs.map { |x,v| v.size }.select { |n| n < WRAP_WIDTH }.max || 10
201
179
  end