bacon-expect 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +23 -1
- data/bacon-expect.gemspec +1 -1
- data/lib/bacon-expect/{failed_expectation.rb → exceptions.rb} +1 -0
- data/lib/bacon-expect/expectation.rb +11 -13
- data/lib/bacon-expect/matchers/be.rb +15 -0
- data/lib/bacon-expect/matchers/be_within.rb +21 -0
- data/lib/bacon-expect/matchers/eq.rb +15 -0
- data/lib/bacon-expect/matchers/eql.rb +2 -2
- data/lib/bacon-expect/matchers/matchers.rb +14 -1
- data/spec_app/spec/matchers/be_within_spec.rb +21 -0
- data/spec_app/spec/matchers/equality_spec.rb +30 -0
- data/spec_app/spec/matchers/raise_error_spec.rb +4 -0
- metadata +7 -3
- data/spec_app/spec/matchers/eql_spec.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc5cacf63327158e64370a0bf0b59175b23f9f19
|
4
|
+
data.tar.gz: fd37fa78e8247be2d729564a724826ee41a240bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d33f8128f35925f2b4a511ac1c9ef9bb23ce367ae90a74ce5b9413e3d9f686539436d4be12762b4ca072369cbfdf86534f9f760922aa8a323a713877f67250f
|
7
|
+
data.tar.gz: ed8b806dbcbe20d5d87c16f59db77b93678e9328c157ba93f7c513bdda72a0106396f742f37927f75c13d9072576957080833deb572b6db83c874718e0491883
|
data/README.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
# BaconExpect
|
2
2
|
|
3
|
-
Bring RSpec 3.0 expect syntax to MacBacon
|
3
|
+
Bring [RSpec 3.0 expect syntax](https://www.relishapp.com/rspec/rspec-expectations/v/3-0/docs/built-in-matchers) to RubyMotion's MacBacon.
|
4
|
+
```ruby
|
5
|
+
expect(view("Tap me")).not_to be_hidden
|
6
|
+
```
|
7
|
+
|
8
|
+
Expect syntax allows a cleaner implementation because it doesn't need to monkey-patch the Object class to install the `should` method.
|
4
9
|
|
5
10
|
#Installation
|
6
11
|
```
|
@@ -10,3 +15,20 @@ gem install bacon-expect
|
|
10
15
|
gem 'bacon-expect'
|
11
16
|
```
|
12
17
|
|
18
|
+
#Usage
|
19
|
+
This gem ports most of the built-in matchers found in [RSpec 3.0](https://www.relishapp.com/rspec/rspec-expectations/v/3-0/docs/built-in-matchers)
|
20
|
+
|
21
|
+
**A full list of matchers examples can be found in the [sample app specs.](spec_app/spec/matchers)**
|
22
|
+
|
23
|
+
Examples:
|
24
|
+
```ruby
|
25
|
+
expect(nil).to be_nil
|
26
|
+
expect(true).not_to be_false
|
27
|
+
|
28
|
+
expect("super").to end_with("per")
|
29
|
+
expect{ 1/0 }.to raise_error(ZeroDivisionError)
|
30
|
+
expect{ raise ArgumentError.new("with a message") }.to raise_error(ArgumentError, /message/)
|
31
|
+
expect([1,2,3]).to have(3).items
|
32
|
+
expect("string").to respond_to(:upcase)
|
33
|
+
```
|
34
|
+
|
data/bacon-expect.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "bacon-expect"
|
7
|
-
spec.version = "1.0.
|
7
|
+
spec.version = "1.0.2"
|
8
8
|
spec.authors = ["Ignacio Piantanida"]
|
9
9
|
spec.email = ["ijpiantanida@gmail.com"]
|
10
10
|
spec.description = "RSpec's expect syntax in MacBacon"
|
@@ -12,28 +12,26 @@ module BaconExpect
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def to(matcher)
|
15
|
-
unless matcher
|
16
|
-
raise matcher.fail!(@subject, &@subject_block)
|
17
|
-
end
|
15
|
+
fail(matcher) unless matcher_passes(matcher)
|
18
16
|
assert
|
19
17
|
end
|
20
18
|
|
21
19
|
def not_to(matcher)
|
22
|
-
if matcher
|
23
|
-
raise matcher.fail!(@subject, &@subject_block)
|
24
|
-
end
|
20
|
+
fail(matcher) if matcher_passes(matcher)
|
25
21
|
assert
|
26
22
|
end
|
27
23
|
alias_method :to_not, :not_to
|
28
24
|
|
25
|
+
def matcher_passes(matcher)
|
26
|
+
matcher.matches?(@subject, &@subject_block)
|
27
|
+
end
|
28
|
+
|
29
|
+
def fail(matcher)
|
30
|
+
raise matcher.fail!(@subject, &@subject_block)
|
31
|
+
end
|
32
|
+
|
29
33
|
def assert
|
30
34
|
true.should == true
|
31
35
|
end
|
32
36
|
end
|
33
|
-
end
|
34
|
-
|
35
|
-
module Spector
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
end
|
37
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module BaconExpect; module Matcher
|
2
|
+
class Be
|
3
|
+
def initialize(value)
|
4
|
+
@value = value
|
5
|
+
end
|
6
|
+
|
7
|
+
def matches?(subject)
|
8
|
+
subject.equal?(@value)
|
9
|
+
end
|
10
|
+
|
11
|
+
def fail!(subject)
|
12
|
+
raise FailedExpectation.new("#{subject} expected to be equal? to #{@value}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end; end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module BaconExpect; module Matcher
|
2
|
+
class BeWithin
|
3
|
+
def initialize(range)
|
4
|
+
@range = range
|
5
|
+
end
|
6
|
+
|
7
|
+
def of(center_value)
|
8
|
+
@center_value = center_value
|
9
|
+
self
|
10
|
+
end
|
11
|
+
|
12
|
+
def matches?(subject)
|
13
|
+
raise InvalidMatcher.new("be_within matcher incomplete. Missing .of value") unless @center_value
|
14
|
+
(subject - @center_value).abs <= @range
|
15
|
+
end
|
16
|
+
|
17
|
+
def fail!(subject)
|
18
|
+
raise FailedExpectation.new("#{subject} expected to be within #{@range} of #{@center_value}")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end; end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module BaconExpect; module Matcher
|
2
|
+
class Eq
|
3
|
+
def initialize(value)
|
4
|
+
@value = value
|
5
|
+
end
|
6
|
+
|
7
|
+
def matches?(subject)
|
8
|
+
subject == @value
|
9
|
+
end
|
10
|
+
|
11
|
+
def fail!(subject)
|
12
|
+
raise FailedExpectation.new("#{subject} expected to be == to #{@value}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end; end
|
@@ -5,11 +5,11 @@ module BaconExpect; module Matcher
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def matches?(subject)
|
8
|
-
subject
|
8
|
+
subject.eql?(@value)
|
9
9
|
end
|
10
10
|
|
11
11
|
def fail!(subject)
|
12
|
-
raise FailedExpectation.new("#{subject} expected to be
|
12
|
+
raise FailedExpectation.new("#{subject} expected to be eql? to #{@value}")
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end; end
|
@@ -16,11 +16,20 @@ module BaconExpect
|
|
16
16
|
def raise_error(exception_class = Exception, message = "")
|
17
17
|
RaiseError.new(exception_class, message)
|
18
18
|
end
|
19
|
+
alias_method :raise_exception, :raise_error
|
19
20
|
|
20
21
|
def eql(value)
|
21
22
|
Eql.new(value)
|
22
23
|
end
|
23
|
-
|
24
|
+
|
25
|
+
def be(value)
|
26
|
+
Be.new(value)
|
27
|
+
end
|
28
|
+
alias_method :equal, :be
|
29
|
+
|
30
|
+
def eq(value)
|
31
|
+
Eq.new(value)
|
32
|
+
end
|
24
33
|
|
25
34
|
def match(regex)
|
26
35
|
Match.new(regex)
|
@@ -59,6 +68,10 @@ module BaconExpect
|
|
59
68
|
Change.new(change_block)
|
60
69
|
end
|
61
70
|
|
71
|
+
def be_within(range)
|
72
|
+
BeWithin.new(range)
|
73
|
+
end
|
74
|
+
|
62
75
|
def method_missing(method_name, *args, &block)
|
63
76
|
string_method_name = method_name.to_s
|
64
77
|
match_be = string_method_name.match(/^be_(.*)/)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
describe "Matcher::BeWithin" do
|
2
|
+
it "passes when subject is within range" do
|
3
|
+
expect(27.5).to be_within(0.5).of(27.9)
|
4
|
+
expect(27.5).to be_within(0.5).of(28.0)
|
5
|
+
expect(27.5).to be_within(0.5).of(27.1)
|
6
|
+
expect(27.5).to be_within(0.5).of(27.0)
|
7
|
+
expect(27.5).not_to be_within(0.5).of(28.1)
|
8
|
+
expect(27.5).not_to be_within(0.5).of(26.9)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "fails when subject is not within range" do
|
12
|
+
expect_failure{ expect(27.5).not_to be_within(0.5).of(28) }
|
13
|
+
expect_failure{ expect(27.5).not_to be_within(0.5).of(27) }
|
14
|
+
expect_failure{ expect(27.5).to be_within(0.5).of(28.1) }
|
15
|
+
expect_failure{ expect(27.5).to be_within(0.5).of(26.9) }
|
16
|
+
end
|
17
|
+
|
18
|
+
it "raises an exception when the matcher is not complete" do
|
19
|
+
expect{ expect(1).to be_within(10) }.to raise_error(BaconExpect::InvalidMatcher)
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
describe "Matcher::Equality" do
|
2
|
+
it 'eql passes when value is eql? to subject' do
|
3
|
+
expect(1).to eql(1)
|
4
|
+
end
|
5
|
+
|
6
|
+
it "eql fails when value is not eql? subject" do
|
7
|
+
expect_failure{ expect(1).to eql(1.0) }
|
8
|
+
end
|
9
|
+
|
10
|
+
it "eq passes if value is == to subject" do
|
11
|
+
expect(1).to eq(1.0)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "eq fails if value is == to subject" do
|
15
|
+
expect_failure{ expect(1).to eq(2.0) }
|
16
|
+
end
|
17
|
+
|
18
|
+
it "be passes if value is same object as subject" do
|
19
|
+
object = Object.new
|
20
|
+
expect(object).to be(object)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "be fails if value is not the same object as subject" do
|
24
|
+
expect_failure{ expect("super").to be("super") }
|
25
|
+
end
|
26
|
+
|
27
|
+
it "equal fails if value is not the same object as subject" do
|
28
|
+
expect_failure{ expect("super").to equal("super") }
|
29
|
+
end
|
30
|
+
end
|
@@ -54,4 +54,8 @@ describe "Matcher::RaiseError" do
|
|
54
54
|
it "raise_error with a class and a regex argument fails if the block raises an exception of a different class" do
|
55
55
|
expect_failure{ expect{ raise ArgumentError.new("with a message") }.to raise_error(ZeroDivisionError, /message/) }
|
56
56
|
end
|
57
|
+
|
58
|
+
it "raise_exception is an alias of raise_error " do
|
59
|
+
expect{ 1/0 }.to raise_exception(ZeroDivisionError)
|
60
|
+
end
|
57
61
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bacon-expect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ignacio Piantanida
|
@@ -53,14 +53,17 @@ files:
|
|
53
53
|
- bacon-expect.gemspec
|
54
54
|
- lib/bacon-expect.rb
|
55
55
|
- lib/bacon-expect/bacon_context.rb
|
56
|
+
- lib/bacon-expect/exceptions.rb
|
56
57
|
- lib/bacon-expect/expectation.rb
|
57
|
-
- lib/bacon-expect/
|
58
|
+
- lib/bacon-expect/matchers/be.rb
|
58
59
|
- lib/bacon-expect/matchers/be_false.rb
|
59
60
|
- lib/bacon-expect/matchers/be_generic.rb
|
60
61
|
- lib/bacon-expect/matchers/be_nil.rb
|
61
62
|
- lib/bacon-expect/matchers/be_true.rb
|
63
|
+
- lib/bacon-expect/matchers/be_within.rb
|
62
64
|
- lib/bacon-expect/matchers/change.rb
|
63
65
|
- lib/bacon-expect/matchers/end_with.rb
|
66
|
+
- lib/bacon-expect/matchers/eq.rb
|
64
67
|
- lib/bacon-expect/matchers/eql.rb
|
65
68
|
- lib/bacon-expect/matchers/have_generic.rb
|
66
69
|
- lib/bacon-expect/matchers/have_items.rb
|
@@ -82,9 +85,10 @@ files:
|
|
82
85
|
- spec_app/spec/matchers/be_generic_spec.rb
|
83
86
|
- spec_app/spec/matchers/be_nil_spec.rb
|
84
87
|
- spec_app/spec/matchers/be_true_spec.rb
|
88
|
+
- spec_app/spec/matchers/be_within_spec.rb
|
85
89
|
- spec_app/spec/matchers/change_spec.rb
|
86
90
|
- spec_app/spec/matchers/end_with_spec.rb
|
87
|
-
- spec_app/spec/matchers/
|
91
|
+
- spec_app/spec/matchers/equality_spec.rb
|
88
92
|
- spec_app/spec/matchers/have_generic_spec.rb
|
89
93
|
- spec_app/spec/matchers/have_items_spec.rb
|
90
94
|
- spec_app/spec/matchers/include_spec.rb
|
@@ -1,19 +0,0 @@
|
|
1
|
-
describe "Matcher::Eql" do
|
2
|
-
it 'eql passes when value is == to subject' do
|
3
|
-
obj = Object.new
|
4
|
-
expect(obj).to eql(obj)
|
5
|
-
end
|
6
|
-
|
7
|
-
it "eql fails when value is not == subject" do
|
8
|
-
expect_failure{ expect(Object.new).to eql(Object.new) }
|
9
|
-
end
|
10
|
-
|
11
|
-
it "eql fails when value is nil and subject an Object" do
|
12
|
-
expect_failure{ expect(Object.new).to eql(nil) }
|
13
|
-
end
|
14
|
-
|
15
|
-
it "be is an alias of eql" do
|
16
|
-
obj = Object.new
|
17
|
-
expect(obj).to be(obj)
|
18
|
-
end
|
19
|
-
end
|