rspec-given 2.4.5 → 3.0.0.beta.2
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.
- checksums.yaml +4 -4
- data/Gemfile +6 -2
- data/Gemfile.lock +8 -10
- data/README.md +50 -34
- data/README.old +720 -0
- data/Rakefile +23 -17
- data/TODO +13 -0
- data/examples/example_helper.rb +8 -1
- data/examples/integration/and_spec.rb +6 -11
- data/examples/integration/focused_line_spec.rb +2 -1
- data/examples/integration/given_spec.rb +19 -9
- data/examples/integration/invariant_spec.rb +6 -6
- data/examples/integration/then_spec.rb +0 -1
- data/examples/loader.rb +4 -0
- data/examples/minitest_helper.rb +38 -0
- data/examples/stack/stack_spec.rb +2 -3
- data/lib/given.rb +2 -0
- data/lib/rspec/given.rb +1 -19
- data/rakelib/bundler_fix.rb +17 -0
- data/rakelib/gemspec.rake +161 -0
- data/rakelib/metrics.rake +30 -0
- data/rakelib/preview.rake +14 -0
- data/spec/lib/{rspec/given → given}/evaluator_spec.rb +1 -1
- data/spec/lib/{rspec/given → given}/ext/numeric_spec.rb +2 -2
- data/spec/lib/{rspec/given → given}/ext/numeric_specifications.rb +0 -0
- data/spec/lib/{rspec/given → given}/extensions_spec.rb +2 -2
- data/spec/lib/given/failure_matcher_spec.rb +77 -0
- data/spec/lib/given/failure_spec.rb +49 -0
- data/spec/lib/given/file_cache_spec.rb +26 -0
- data/spec/lib/{rspec/given → given}/fuzzy_number_spec.rb +2 -2
- data/spec/lib/{rspec/given → given}/have_failed_spec.rb +5 -4
- data/spec/lib/{rspec/given → given}/lexical_purity_spec.rb +0 -0
- data/spec/lib/given/line_extractor_spec.rb +84 -0
- data/spec/lib/{rspec/given → given}/module_methods_spec.rb +2 -2
- data/spec/lib/{rspec/given → given}/natural_assertion_spec.rb +4 -36
- data/spec/lib/{rspec/given → given}/options_spec.rb +33 -33
- data/spec/spec_helper.rb +20 -0
- data/spec/support/faux_then.rb +2 -2
- data/spec/support/natural_assertion_control.rb +1 -1
- metadata +35 -42
- data/examples/integration/failing_spec.rb +0 -5
- data/lib/rspec/given/configure.rb +0 -20
- data/lib/rspec/given/core.rb +0 -9
- data/lib/rspec/given/evaluator.rb +0 -39
- data/lib/rspec/given/ext/numeric.rb +0 -32
- data/lib/rspec/given/extensions.rb +0 -262
- data/lib/rspec/given/failure.rb +0 -53
- data/lib/rspec/given/file_cache.rb +0 -19
- data/lib/rspec/given/fuzzy_number.rb +0 -70
- data/lib/rspec/given/fuzzy_shortcuts.rb +0 -1
- data/lib/rspec/given/have_failed.rb +0 -77
- data/lib/rspec/given/line_extractor.rb +0 -43
- data/lib/rspec/given/module_methods.rb +0 -70
- data/lib/rspec/given/monkey.rb +0 -42
- data/lib/rspec/given/natural_assertion.rb +0 -193
- data/lib/rspec/given/rspec1_given.rb +0 -11
- data/lib/rspec/given/version.rb +0 -10
- data/spec/lib/rspec/given/failure_spec.rb +0 -17
- data/spec/lib/rspec/given/file_cache_spec.rb +0 -28
- data/spec/lib/rspec/given/line_extractor_spec.rb +0 -86
@@ -0,0 +1,30 @@
|
|
1
|
+
require './rakelib/bundler_fix'
|
2
|
+
|
3
|
+
METRICS_FILES = FileList['lib/**/*.rb']
|
4
|
+
|
5
|
+
task :check_flog do
|
6
|
+
sh "type flog >/dev/null 2>&1", :verbose => false do |status|
|
7
|
+
fail "Install flog to generate complexity metrics" unless status
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
task :check_flay do
|
12
|
+
sh "type flay >/dev/null 2>&1", :verbose => false do |status|
|
13
|
+
fail "Install flay to generate complexity metrics" unless status
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run complexity metrics"
|
18
|
+
task :flog, [:all] => :check_flog do |t, args|
|
19
|
+
flags = args.all ? "--all" : ""
|
20
|
+
nobundle do
|
21
|
+
sh "flog #{flags} #{METRICS_FILES}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "Run duplication metrics"
|
26
|
+
task :flay => :check_flay do
|
27
|
+
nobundle do
|
28
|
+
sh "flay #{METRICS_FILES}"
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require './rakelib/bundler_fix'
|
2
|
+
|
3
|
+
task :check_preview do
|
4
|
+
sh "type ghpreview >/dev/null 2>&1", :verbose => false do |status|
|
5
|
+
fail "Install ghpreview to generate a local REAMDE preview page" unless status
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
desc "Generate the GitHub readme locally"
|
10
|
+
task :preview => :check_preview do
|
11
|
+
nobundle do
|
12
|
+
sh "ghpreview #{FileList['README.*']}"
|
13
|
+
end
|
14
|
+
end
|
@@ -26,6 +26,6 @@ end
|
|
26
26
|
describe "Evaluator with error object" do
|
27
27
|
FauxThen { 1 }
|
28
28
|
When(:result) { ev.eval_string("fail 'XYZ'") }
|
29
|
-
Then { result.class.should ==
|
29
|
+
Then { result.class.should == Given::EvalErr }
|
30
30
|
Then { result.inspect.should == "RuntimeError: XYZ" }
|
31
31
|
end
|
File without changes
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe Given::ClassExtensions do
|
4
4
|
let(:trace) { [] }
|
5
5
|
|
6
6
|
describe "Given with var" do
|
@@ -195,7 +195,7 @@ describe "use_natural_assertions" do
|
|
195
195
|
|
196
196
|
When(:result) { CONTEXT.use_natural_assertions }
|
197
197
|
|
198
|
-
if
|
198
|
+
if ::Given::NATURAL_ASSERTIONS_SUPPORTED
|
199
199
|
Then { result.should_not have_failed }
|
200
200
|
else
|
201
201
|
Then { result.should have_failed(ArgumentError) }
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'given/failure_matcher'
|
3
|
+
|
4
|
+
module FailureMatcherSpec
|
5
|
+
OtherError = Class.new(StandardError)
|
6
|
+
CustomError = Class.new(StandardError)
|
7
|
+
SubError = Class.new(CustomError)
|
8
|
+
NotMetError = RSpec::Expectations::ExpectationNotMetError
|
9
|
+
|
10
|
+
describe Given::FailureMatcher do
|
11
|
+
Given(:error) { CustomError.new("CUSTOM") }
|
12
|
+
|
13
|
+
Given(:failure_result) { Given::Failure.new(error) }
|
14
|
+
|
15
|
+
context "with matching failure results" do
|
16
|
+
Then { Failure(CustomError, "CUSTOM").matches?(failure_result) }
|
17
|
+
Then { Failure(CustomError, /CUSTOM/).matches?(failure_result) }
|
18
|
+
Then { Failure(CustomError).matches?(failure_result) }
|
19
|
+
Then { Failure(StandardError).matches?(failure_result) }
|
20
|
+
Then { Failure().matches?(failure_result) }
|
21
|
+
end
|
22
|
+
|
23
|
+
context "with non-matching results" do
|
24
|
+
Then {
|
25
|
+
expect {
|
26
|
+
Failure(StandardError).matches?(Object.new)
|
27
|
+
}.to raise_error(NotMetError,
|
28
|
+
/Expected.*StandardError, but nothing failed/)
|
29
|
+
}
|
30
|
+
|
31
|
+
Then {
|
32
|
+
expect {
|
33
|
+
Failure(StandardError, /CUSTOM/).matches?(Object.new)
|
34
|
+
}.to raise_error(NotMetError,
|
35
|
+
/Expected.*StandardError.*matching.*CUSTOM.*, but nothing failed/)
|
36
|
+
}
|
37
|
+
|
38
|
+
Then {
|
39
|
+
expect {
|
40
|
+
Failure(StandardError, /OTHER/).matches?(failure_result)
|
41
|
+
}.to raise_error(NotMetError,
|
42
|
+
/Expected.*StandardError matching.*OTHER.*, but got.*CustomError.*CUSTOM/)
|
43
|
+
}
|
44
|
+
|
45
|
+
Then {
|
46
|
+
expect {
|
47
|
+
Failure(OtherError, /CUSTOM/).matches?(failure_result)
|
48
|
+
}.to raise_error(NotMetError,
|
49
|
+
/Expected.*OtherError matching.*CUSTOM.*, but got.*CustomError.*CUSTOM/)
|
50
|
+
}
|
51
|
+
|
52
|
+
Then {
|
53
|
+
expect {
|
54
|
+
Failure(SubError, /CUSTOM/).matches?(failure_result)
|
55
|
+
}.to raise_error(NotMetError,
|
56
|
+
/Expected.*SubError matching.*CUSTOM.*, but got.*CustomError.*CUSTOM/)
|
57
|
+
}
|
58
|
+
|
59
|
+
Then {
|
60
|
+
expect {
|
61
|
+
Failure(OtherError).matches?(failure_result)
|
62
|
+
}.to raise_error(NotMetError,
|
63
|
+
/Expected.*OtherError, but got.*CustomError.*CUSTOM/)
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "==" do
|
68
|
+
Then { failure_result == Failure(CustomError) }
|
69
|
+
Then { Failure(CustomError) == failure_result }
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "!=" do
|
73
|
+
Then { failure_result != Failure(SubError) }
|
74
|
+
Then { Failure(SubError) == failure_result }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'given/failure'
|
3
|
+
|
4
|
+
describe Given::Failure do
|
5
|
+
OtherError = Class.new(StandardError)
|
6
|
+
|
7
|
+
Given(:exception) { StandardError.new("Oops") }
|
8
|
+
Given(:failure) { Given::Failure.new(exception) }
|
9
|
+
|
10
|
+
Then { failure.is_a?(Given::Failure).should be_true }
|
11
|
+
|
12
|
+
describe "general operations" do
|
13
|
+
Then { expect { failure.to_s }.to raise_error(StandardError, "Oops") }
|
14
|
+
Then { expect { failure.call }.to raise_error(StandardError, "Oops") }
|
15
|
+
Then { expect { failure.nil? }.to raise_error(StandardError, "Oops") }
|
16
|
+
Then { expect { failure == 0 }.to raise_error(StandardError, "Oops") }
|
17
|
+
Then { expect { failure != 0 }.to raise_error(StandardError, "Oops") }
|
18
|
+
Then { expect { failure =~ 0 }.to raise_error(StandardError, "Oops") }
|
19
|
+
Then { expect { ! failure }.to raise_error(StandardError, "Oops") }
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "should raise error" do
|
23
|
+
Then { failure.should raise_error(StandardError, "Oops") }
|
24
|
+
Then { failure.should raise_error(StandardError) }
|
25
|
+
Then { failure.should raise_error }
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "== have_failed" do
|
29
|
+
Then { failure == have_failed(StandardError, "Oops") }
|
30
|
+
Then { failure == have_failed(StandardError) }
|
31
|
+
Then { failure == have_failed }
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "!= have_failed" do
|
35
|
+
Then { failure != have_failed() }
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "== Failure" do
|
39
|
+
Then { failure == Failure(StandardError, "Oops") }
|
40
|
+
Then { failure == Failure(StandardError) }
|
41
|
+
Then { failure == Failure() }
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "!= Failure" do
|
45
|
+
Then { expect { failure != Object.new }.to raise_error(StandardError) }
|
46
|
+
Then { failure != Failure() }
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Given
|
4
|
+
|
5
|
+
DESCRIBE_LINE = __LINE__
|
6
|
+
describe FileCache do
|
7
|
+
Given(:file_name) { __FILE__ }
|
8
|
+
Given(:cache) { FileCache.new }
|
9
|
+
|
10
|
+
When(:result) { cache.get(file_name) }
|
11
|
+
|
12
|
+
context "when reading the file" do
|
13
|
+
Then { result[DESCRIBE_LINE].should =~ /describe FileCache do/ }
|
14
|
+
Then { result.size.should == MAX_LINE }
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when getting the same file twice" do
|
18
|
+
Given { cache.should_receive(:read_lines).once.and_return(["A"]) }
|
19
|
+
When(:result2) { cache.get(file_name) }
|
20
|
+
Then { result.should == ["A"] }
|
21
|
+
Then { result2.should == ["A"] }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
MAX_LINE = __LINE__
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe Given::Fuzzy::FuzzyNumber do
|
4
4
|
use_natural_assertions_if_supported
|
5
|
-
include
|
5
|
+
include Given::Fuzzy
|
6
6
|
|
7
7
|
describe "attributes" do
|
8
8
|
Given(:number) { about(10).delta(0.0001) }
|
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
3
|
+
module HaveFailedSpec
|
4
4
|
CustomError = Class.new(StandardError)
|
5
5
|
DifferentError = Class.new(StandardError)
|
6
6
|
ExpectationError = RSpec::Expectations::ExpectationNotMetError
|
7
7
|
|
8
|
+
describe "#have_failed" do
|
8
9
|
context "with a failure" do
|
9
10
|
When(:result) { fail CustomError, "Ouch" }
|
10
11
|
|
@@ -40,7 +41,7 @@ describe "#have_failed" do
|
|
40
41
|
|
41
42
|
context "with a pending exception" do
|
42
43
|
When(:result) { fail RSpec::Core::Pending::PendingDeclaredInExample, "Required pending in example ... please ignore" }
|
43
|
-
Then {
|
44
|
+
Then { Given.fail_with "This example should have been pending" }
|
44
45
|
end
|
45
46
|
|
46
47
|
context "with a non-failure" do
|
@@ -55,15 +56,15 @@ describe "#have_failed" do
|
|
55
56
|
context "with failure" do
|
56
57
|
When(:result) { fail CustomError, "Ouch" }
|
57
58
|
Then { result == have_failed(CustomError, "Ouch") }
|
58
|
-
Then { ! (result != have_failed
|
59
|
+
Then { ! (result != have_failed) }
|
59
60
|
Then { expect { result == :something }.to raise_error(CustomError, "Ouch") }
|
60
61
|
end
|
61
62
|
|
62
63
|
context "with different failure" do
|
63
64
|
When(:result) { fail DifferentError, "Ouch" }
|
64
65
|
Then { ! (result == have_failed(CustomError, "Ouch")) }
|
65
|
-
Then { result != have_failed(CustomError, "Ouch") }
|
66
66
|
end
|
67
67
|
|
68
68
|
end
|
69
69
|
end
|
70
|
+
end
|
File without changes
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Given
|
4
|
+
|
5
|
+
describe LineExtractor do
|
6
|
+
|
7
|
+
class FauxFileCache
|
8
|
+
def initialize(lines)
|
9
|
+
@lines = lines.split(/\n/).map { |ln| ln + "\n" }
|
10
|
+
end
|
11
|
+
def get(file_name)
|
12
|
+
@lines
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
Given(:line) { 2 }
|
17
|
+
Given(:file_cache) { FauxFileCache.new(input) }
|
18
|
+
Given(:extractor) { LineExtractor.new(file_cache) }
|
19
|
+
|
20
|
+
When(:result) { extractor.line("FILENAME", line) }
|
21
|
+
|
22
|
+
describe "reading a line" do
|
23
|
+
Given(:input) {
|
24
|
+
" Now is the time\n" +
|
25
|
+
" for all good men\n" +
|
26
|
+
" to come to the aid\n" +
|
27
|
+
" of their fellowmen\n"
|
28
|
+
}
|
29
|
+
Given(:expected_line) { " for all good men\n" }
|
30
|
+
Then { result.should == expected_line }
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when the line doesn't exist" do
|
34
|
+
Given(:input) { "" }
|
35
|
+
Then { result.should be_nil }
|
36
|
+
end
|
37
|
+
|
38
|
+
context "when the line has leading and trailing white space" do
|
39
|
+
Given(:input) {
|
40
|
+
" Then { y } \n" +
|
41
|
+
" Then { x }\n"
|
42
|
+
}
|
43
|
+
Then { result.should == " Then { x }\n" }
|
44
|
+
end
|
45
|
+
|
46
|
+
context "when the Then is split over several lines with {}" do
|
47
|
+
Given(:input) {
|
48
|
+
"describe 'foobar' do\n" +
|
49
|
+
" Then {\n" +
|
50
|
+
" x\n" +
|
51
|
+
" }\n" +
|
52
|
+
"end\n"
|
53
|
+
}
|
54
|
+
Then { result.should == " Then {\n x\n }\n" }
|
55
|
+
end
|
56
|
+
|
57
|
+
context "when the Then is has blank lines" do
|
58
|
+
Given(:input) {
|
59
|
+
"describe 'foobar' do\n" +
|
60
|
+
" Then {\n\n" +
|
61
|
+
" x\n" +
|
62
|
+
" }\n" +
|
63
|
+
"end\n"
|
64
|
+
}
|
65
|
+
Then { result.should == " Then {\n\n x\n }\n" }
|
66
|
+
end
|
67
|
+
|
68
|
+
context "when the Then is split over several lines with do/end" do
|
69
|
+
Given(:input) {
|
70
|
+
"describe 'foobar' do\n" +
|
71
|
+
" Then do\n" +
|
72
|
+
" x\n" +
|
73
|
+
" end\n" +
|
74
|
+
"end\n"
|
75
|
+
}
|
76
|
+
Then { result.should == " Then do\n x\n end\n" }
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "converting to a string" do
|
80
|
+
Given(:input) { "" }
|
81
|
+
Then { extractor.to_s.should =~ /line *extractor/i }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -2,9 +2,9 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe "RSpec::Given.use_natural_assertions" do
|
4
4
|
context "when in JRuby" do
|
5
|
-
When(:result) {
|
5
|
+
When(:result) { ::Given.use_natural_assertions }
|
6
6
|
|
7
|
-
if
|
7
|
+
if ::Given::NATURAL_ASSERTIONS_SUPPORTED
|
8
8
|
Then { result.should_not have_failed }
|
9
9
|
else
|
10
10
|
Then { result.should have_failed(ArgumentError) }
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'rspec/given'
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
describe
|
4
|
+
describe Given::NaturalAssertion do
|
5
5
|
before do
|
6
|
-
pending "Natural Assertions disabled for JRuby" unless
|
6
|
+
pending "Natural Assertions disabled for JRuby" unless Given::NATURAL_ASSERTIONS_SUPPORTED
|
7
7
|
end
|
8
8
|
|
9
9
|
describe "#content?" do
|
@@ -17,38 +17,6 @@ describe RSpec::Given::NaturalAssertion do
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
describe "detecting RSpec Assertions" do
|
21
|
-
context "with should" do
|
22
|
-
FauxThen { a.should == 1 }
|
23
|
-
Then { na.should be_using_rspec_assertion }
|
24
|
-
end
|
25
|
-
|
26
|
-
context "with should_not" do
|
27
|
-
FauxThen { a.should_not == 1 }
|
28
|
-
Then { na.should be_using_rspec_assertion }
|
29
|
-
end
|
30
|
-
|
31
|
-
context "with expect/to" do
|
32
|
-
FauxThen { expect(a).to eq(1) }
|
33
|
-
Then { na.should be_using_rspec_assertion }
|
34
|
-
end
|
35
|
-
|
36
|
-
context "with expect/not_to" do
|
37
|
-
FauxThen { expect(a).not_to eq(1) }
|
38
|
-
Then { na.should be_using_rspec_assertion }
|
39
|
-
end
|
40
|
-
|
41
|
-
context "with expect and block" do
|
42
|
-
FauxThen { expect { a }.to eq(1) }
|
43
|
-
Then { na.should be_using_rspec_assertion }
|
44
|
-
end
|
45
|
-
|
46
|
-
context "with natural assertion" do
|
47
|
-
FauxThen { a == 1 }
|
48
|
-
Then { na.should_not be_using_rspec_assertion }
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
20
|
describe "failure messages" do
|
53
21
|
let(:msg) { na.message }
|
54
22
|
Invariant { msg.should =~ /^FauxThen expression/ }
|
@@ -166,7 +134,7 @@ describe RSpec::Given::NaturalAssertion do
|
|
166
134
|
context "with no statements" do
|
167
135
|
FauxThen { }
|
168
136
|
When(:result) { na.message }
|
169
|
-
Then { result.should_not have_failed
|
137
|
+
Then { result.should_not have_failed }
|
170
138
|
end
|
171
139
|
|
172
140
|
context "with multiple statements" do
|
@@ -175,7 +143,7 @@ describe RSpec::Given::NaturalAssertion do
|
|
175
143
|
ary[1] == 3
|
176
144
|
}
|
177
145
|
When(:result) { na.message }
|
178
|
-
Then { result.should have_failed(
|
146
|
+
Then { result.should have_failed(Given::InvalidThenError, /multiple.*statements/i) }
|
179
147
|
end
|
180
148
|
|
181
149
|
end
|