bacon-expect 0.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.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +12 -0
  6. data/Rakefile +1 -0
  7. data/bacon-expect.gemspec +22 -0
  8. data/lib/bacon-expect.rb +9 -0
  9. data/lib/bacon-expect/bacon_context.rb +4 -0
  10. data/lib/bacon-expect/expectation.rb +39 -0
  11. data/lib/bacon-expect/failed_expectation.rb +3 -0
  12. data/lib/bacon-expect/matchers/be_false.rb +11 -0
  13. data/lib/bacon-expect/matchers/be_generic.rb +19 -0
  14. data/lib/bacon-expect/matchers/be_nil.rb +11 -0
  15. data/lib/bacon-expect/matchers/be_true.rb +11 -0
  16. data/lib/bacon-expect/matchers/change.rb +29 -0
  17. data/lib/bacon-expect/matchers/end_with.rb +15 -0
  18. data/lib/bacon-expect/matchers/eql.rb +15 -0
  19. data/lib/bacon-expect/matchers/have_generic.rb +19 -0
  20. data/lib/bacon-expect/matchers/have_items.rb +22 -0
  21. data/lib/bacon-expect/matchers/include.rb +15 -0
  22. data/lib/bacon-expect/matchers/match.rb +15 -0
  23. data/lib/bacon-expect/matchers/match_array.rb +21 -0
  24. data/lib/bacon-expect/matchers/matchers.rb +78 -0
  25. data/lib/bacon-expect/matchers/raise_error.rb +31 -0
  26. data/lib/bacon-expect/matchers/respond_to.rb +28 -0
  27. data/lib/bacon-expect/matchers/satisfy.rb +15 -0
  28. data/lib/bacon-expect/matchers/start_with.rb +15 -0
  29. data/spec_app/.repl_history +0 -0
  30. data/spec_app/Gemfile +5 -0
  31. data/spec_app/Rakefile +14 -0
  32. data/spec_app/app/app_delegate.rb +5 -0
  33. data/spec_app/resources/Default-568h@2x.png +0 -0
  34. data/spec_app/spec/helpers/bacon_context.rb +5 -0
  35. data/spec_app/spec/matchers/be_false_spec.rb +21 -0
  36. data/spec_app/spec/matchers/be_generic_spec.rb +27 -0
  37. data/spec_app/spec/matchers/be_nil_spec.rb +17 -0
  38. data/spec_app/spec/matchers/be_true_spec.rb +21 -0
  39. data/spec_app/spec/matchers/change_spec.rb +39 -0
  40. data/spec_app/spec/matchers/end_with_spec.rb +9 -0
  41. data/spec_app/spec/matchers/eql_spec.rb +19 -0
  42. data/spec_app/spec/matchers/have_generic_spec.rb +19 -0
  43. data/spec_app/spec/matchers/have_items_spec.rb +9 -0
  44. data/spec_app/spec/matchers/include_spec.rb +27 -0
  45. data/spec_app/spec/matchers/match_array_spec.rb +17 -0
  46. data/spec_app/spec/matchers/match_spec.rb +17 -0
  47. data/spec_app/spec/matchers/raise_error_spec.rb +57 -0
  48. data/spec_app/spec/matchers/respond_to_spec.rb +23 -0
  49. data/spec_app/spec/matchers/satisfy_spec.rb +13 -0
  50. data/spec_app/spec/matchers/start_with_spec.rb +9 -0
  51. metadata +121 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 05eb77e0be35a5f75668dea3a280d7c092c0f3af
4
+ data.tar.gz: ce71a32ac878eada88cf6a9a663c7112e62e7319
5
+ SHA512:
6
+ metadata.gz: bb866f01221e58378e2b17d0b861eefc27bab43271c2b40e6d738c981bc91fd831e190cc8ee26dcce4ab9eed4dffc182a86c9a7558c8b0395a411987505238e5
7
+ data.tar.gz: 94cd5f2aca9adb79aa019303f6eb99a3319a07462951ca896ab6fefc8091964877c9b712d213a2373b7c29fab66faec49b6be075f2e5e7307420b265764cd40a
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ spec_app/build/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in bacon-expect-wizard.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Ignacio Piantanida
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,12 @@
1
+ # BaconExpect
2
+
3
+ Bring RSpec 3.0 expect syntax to MacBacon
4
+
5
+ #Installation
6
+ ```
7
+ gem install bacon-expect
8
+
9
+ # or in Gemfile
10
+ gem 'bacon-expect'
11
+ ```
12
+
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,22 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "bacon-expect"
7
+ spec.version = "0.1"
8
+ spec.authors = ["Ignacio Piantanida"]
9
+ spec.email = ["ijpiantanida@gmail.com"]
10
+ spec.description = "RSpec's expect syntax in MacBacon"
11
+ spec.summary = "Bring RSpec 3.0 expect syntax to MacBacon"
12
+ spec.homepage = "https://github.com/ijpiantanida/bacon-expect"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.3"
21
+ spec.add_development_dependency "rake"
22
+ end
@@ -0,0 +1,9 @@
1
+ unless defined?(Motion::Project::Config)
2
+ raise "This file must be required within a RubyMotion project Rakefile."
3
+ end
4
+
5
+ Motion::Project::App.setup do |app|
6
+ Dir.glob(File.join(File.dirname(__FILE__), 'bacon-expect/**/*.rb')).reverse.each do |file|
7
+ app.spec_files << file
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ class Bacon::Context
2
+ include BaconExpect::Expectation::BaconContext
3
+ include BaconExpect::Matcher::BaconContext
4
+ end
@@ -0,0 +1,39 @@
1
+ module BaconExpect
2
+ class Expectation
3
+ module BaconContext
4
+ def expect(subject = nil, &block)
5
+ Expectation.new(subject, &block)
6
+ end
7
+ end
8
+
9
+ def initialize(subject, &subject_block)
10
+ @subject = subject
11
+ @subject_block = subject_block
12
+ end
13
+
14
+ def to(matcher)
15
+ unless matcher.matches?(@subject, &@subject_block)
16
+ raise matcher.fail!(@subject, &@subject_block)
17
+ end
18
+ assert
19
+ end
20
+
21
+ def not_to(matcher)
22
+ if matcher.matches?(@subject, &@subject_block)
23
+ raise matcher.fail!(@subject, &@subject_block)
24
+ end
25
+ assert
26
+ end
27
+ alias_method :to_not, :not_to
28
+
29
+ def assert
30
+ true.should == true
31
+ end
32
+ end
33
+ end
34
+
35
+ module Spector
36
+
37
+
38
+
39
+ end
@@ -0,0 +1,3 @@
1
+ module BaconExpect
2
+ class FailedExpectation < RuntimeError; end
3
+ end
@@ -0,0 +1,11 @@
1
+ module BaconExpect; module Matcher
2
+ class BeFalse
3
+ def matches?(value)
4
+ !value
5
+ end
6
+
7
+ def fail!(subject)
8
+ raise FailedExpectation.new("#{subject} expected to be false but wasn't")
9
+ end
10
+ end
11
+ end; end
@@ -0,0 +1,19 @@
1
+ module BaconExpect; module Matcher
2
+ class BeGeneric
3
+ def initialize(method_name, *args)
4
+ @method_name = method_name
5
+ @args = args
6
+ end
7
+
8
+ def matches?(value)
9
+ value.send("#{@method_name}?", *@args)
10
+ end
11
+
12
+ def fail!(subject)
13
+ message = "#{subject} expected to be #{@method_name}"
14
+ message += " with #{@args}" unless @args.empty?
15
+ message += " to return true"
16
+ raise FailedExpectation.new(message)
17
+ end
18
+ end
19
+ end; end
@@ -0,0 +1,11 @@
1
+ module BaconExpect; module Matcher
2
+ class BeNil
3
+ def matches?(value)
4
+ value == nil
5
+ end
6
+
7
+ def fail!(subject)
8
+ raise FailedExpectation.new("#{subject} expected to be nil but wasn't")
9
+ end
10
+ end
11
+ end; end
@@ -0,0 +1,11 @@
1
+ module BaconExpect; module Matcher
2
+ class BeTrue
3
+ def matches?(value)
4
+ value == true
5
+ end
6
+
7
+ def fail!(subject)
8
+ raise FailedExpectation.new("#{subject} expected to be true but wasn't")
9
+ end
10
+ end
11
+ end; end
@@ -0,0 +1,29 @@
1
+ module BaconExpect; module Matcher
2
+ class Change
3
+ def initialize(change_block)
4
+ @change_block = change_block
5
+ end
6
+
7
+ def by(amount)
8
+ @change_amount = amount
9
+ self
10
+ end
11
+
12
+ def matches?(subject, &expectation_block)
13
+ old_value = @change_block.call
14
+ expectation_block.call
15
+ new_value = @change_block.call
16
+ if @change_amount
17
+ new_value - @change_amount == old_value
18
+ else
19
+ new_value != old_value
20
+ end
21
+ end
22
+
23
+ def fail!(subject)
24
+ message = "Block expected to change value"
25
+ message += " by #{@change_amount}" if @change_amount
26
+ raise FailedExpectation.new(message)
27
+ end
28
+ end
29
+ end; end
@@ -0,0 +1,15 @@
1
+ module BaconExpect; module Matcher
2
+ class EndWith
3
+ def initialize(end_string)
4
+ @end_string = end_string
5
+ end
6
+
7
+ def matches?(subject)
8
+ subject[-@end_string.size..-1] == @end_string
9
+ end
10
+
11
+ def fail!(subject)
12
+ raise FailedExpectation.new("#{subject} expected to end with #{@start_string}")
13
+ end
14
+ end
15
+ end; end
@@ -0,0 +1,15 @@
1
+ module BaconExpect; module Matcher
2
+ class Eql
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
@@ -0,0 +1,19 @@
1
+ module BaconExpect; module Matcher
2
+ class HaveGeneric
3
+ def initialize(method_name, *args)
4
+ @method_name = method_name
5
+ @args = args
6
+ end
7
+
8
+ def matches?(subject)
9
+ subject.send("has_#{@method_name}?", *@args)
10
+ end
11
+
12
+ def fail!(subject)
13
+ message = "#{subject} has_#{@method_name}?"
14
+ message += " with #{@args}" unless @args.empty?
15
+ message += " to return true"
16
+ raise FailedExpectation.new(message)
17
+ end
18
+ end
19
+ end; end
@@ -0,0 +1,22 @@
1
+ module BaconExpect; module Matcher
2
+ class HaveItems
3
+ def initialize(number_of_items)
4
+ @number_of_items = number_of_items
5
+ end
6
+
7
+ def matches?(value)
8
+ value.size == @number_of_items
9
+ end
10
+
11
+ def items
12
+ self
13
+ end
14
+
15
+ alias_method :keys, :items
16
+ alias_method :values, :items
17
+
18
+ def fail!(subject)
19
+ raise FailedExpectation.new("#{subject} expected to have #{@number_of_items} items")
20
+ end
21
+ end
22
+ end; end
@@ -0,0 +1,15 @@
1
+ module BaconExpect; module Matcher
2
+ class Include
3
+ def initialize(*values)
4
+ @values = *values
5
+ end
6
+
7
+ def matches?(subject)
8
+ @values.all?{|v| subject.include?(v)}
9
+ end
10
+
11
+ def fail!(subject)
12
+ raise FailedExpectation.new("\"#{subject}\" expected to include #{@values}")
13
+ end
14
+ end
15
+ end; end
@@ -0,0 +1,15 @@
1
+ module BaconExpect; module Matcher
2
+ class Match
3
+ def initialize(regex)
4
+ @regex = regex
5
+ end
6
+
7
+ def matches?(subject)
8
+ subject.match(@regex)
9
+ end
10
+
11
+ def fail!(subject)
12
+ raise FailedExpectation.new("\"#{subject}\" expected to match #{@regex}")
13
+ end
14
+ end
15
+ end; end
@@ -0,0 +1,21 @@
1
+ module BaconExpect; module Matcher
2
+ class MatchArray
3
+ def initialize(array)
4
+ @array = array
5
+ end
6
+
7
+ def matches?(subject_array)
8
+ return false unless subject_array.size == @array.size
9
+ array_copy = subject_array.dup
10
+ @array.all? do |item|
11
+ has = array_copy.include?(item)
12
+ array_copy.delete(item) if has
13
+ has
14
+ end
15
+ end
16
+
17
+ def fail!(subject_array)
18
+ raise FailedExpectation.new("\"#{subject_array}\" expected to have same items as #{@array}")
19
+ end
20
+ end
21
+ end; end
@@ -0,0 +1,78 @@
1
+ module BaconExpect
2
+ module Matcher
3
+ module BaconContext
4
+ def be_nil
5
+ BeNil.new
6
+ end
7
+
8
+ def be_true
9
+ BeTrue.new
10
+ end
11
+
12
+ def be_false
13
+ BeFalse.new
14
+ end
15
+
16
+ def raise_error(exception_class = Exception, message = "")
17
+ RaiseError.new(exception_class, message)
18
+ end
19
+
20
+ def eql(value)
21
+ Eql.new(value)
22
+ end
23
+ alias_method :be, :eql
24
+
25
+ def match(regex)
26
+ Match.new(regex)
27
+ end
28
+
29
+ def match_array(array)
30
+ MatchArray.new(array)
31
+ end
32
+ alias_method :contain_exactly, :match_array
33
+
34
+ def include(*values)
35
+ Include.new(*values)
36
+ end
37
+
38
+ def have(number)
39
+ HaveItems.new(number)
40
+ end
41
+
42
+ def satisfy(&block)
43
+ Satisfy.new(&block)
44
+ end
45
+
46
+ def respond_to(method_name)
47
+ RespondTo.new(method_name)
48
+ end
49
+
50
+ def start_with(substring)
51
+ StartWith.new(substring)
52
+ end
53
+
54
+ def end_with(substring)
55
+ EndWith.new(substring)
56
+ end
57
+
58
+ def change(&change_block)
59
+ Change.new(change_block)
60
+ end
61
+
62
+ def method_missing(method_name, *args, &block)
63
+ string_method_name = method_name.to_s
64
+ match_be = string_method_name.match(/^be_(.*)/)
65
+ if match_be
66
+ BeGeneric.new(match_be[1], *args)
67
+ else
68
+ match_have = string_method_name.match(/^have_(.*)/)
69
+ if match_have
70
+ HaveGeneric.new(match_have[1], *args)
71
+ else
72
+ super
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,31 @@
1
+ module BaconExpect; module Matcher
2
+ class RaiseError
3
+ def initialize(error_class = Exception, message = "")
4
+ @error_class = error_class.is_a?(Class) ? error_class : Exception
5
+ @error_message = (error_class.is_a?(String) || error_class.is_a?(Regexp)) ? error_class : message
6
+ end
7
+
8
+ def matches?(value, &block)
9
+ begin
10
+ block.call
11
+ false
12
+ rescue Exception => e
13
+ @rescued_exception = e
14
+ exception_matches(e)
15
+ end
16
+ end
17
+
18
+ def exception_matches(e)
19
+ e.is_a?(@error_class) && (
20
+ (@error_message.is_a?(String) && e.message.include?(@error_message)) ||
21
+ (@error_message.is_a?(Regexp) && @error_message.match(e.message))
22
+ )
23
+ end
24
+
25
+ def fail!(subject)
26
+ message = "Block expected to raise exception of type #{@error_class}"
27
+ message += " but was #{@rescued_exception.class} #{@rescued_exception}" if @rescued_exception
28
+ raise FailedExpectation.new(message)
29
+ end
30
+ end
31
+ end; end
@@ -0,0 +1,28 @@
1
+ module BaconExpect; module Matcher
2
+ class RespondTo
3
+ def initialize(method_name)
4
+ @method_name = method_name
5
+ end
6
+
7
+ def with(number_of_args)
8
+ @number_of_args = number_of_args
9
+ self
10
+ end
11
+
12
+ def arguments
13
+ self
14
+ end
15
+ alias_method :argument, :arguments
16
+
17
+ def matches?(subject)
18
+ valid = true
19
+ valid &&= subject.respond_to?(@method_name)
20
+ valid &&= subject.method(@method_name).arity == @number_of_args if valid && @number_of_args
21
+ valid
22
+ end
23
+
24
+ def fail!(subject)
25
+ raise FailedExpectation.new("\"#{subject}\" expected to respond_to? #{@method_name}")
26
+ end
27
+ end
28
+ end; end
@@ -0,0 +1,15 @@
1
+ module BaconExpect; module Matcher
2
+ class Satisfy
3
+ def initialize(&condition_block)
4
+ @condition_block = condition_block
5
+ end
6
+
7
+ def matches?(*values)
8
+ @condition_block.call(*values)
9
+ end
10
+
11
+ def fail!(subject)
12
+ raise FailedExpectation.new("\"#{subject}\" expected to satisfy condition")
13
+ end
14
+ end
15
+ end; end
@@ -0,0 +1,15 @@
1
+ module BaconExpect; module Matcher
2
+ class StartWith
3
+ def initialize(start_string)
4
+ @start_string = start_string
5
+ end
6
+
7
+ def matches?(subject)
8
+ subject[0...@start_string.size] == @start_string
9
+ end
10
+
11
+ def fail!(subject)
12
+ raise FailedExpectation.new("#{subject} expected to start with #{@start_string}")
13
+ end
14
+ end
15
+ end; end
File without changes
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rake'
4
+ # Add your dependencies here:
5
+ gem 'bacon-expect', :path => ".."
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*-
2
+ $:.unshift("/Library/RubyMotion/lib")
3
+ require 'motion/project/template/ios'
4
+
5
+ begin
6
+ require 'bundler'
7
+ Bundler.require
8
+ rescue LoadError
9
+ end
10
+
11
+ Motion::Project::App.setup do |app|
12
+ # Use `rake config' to see complete project settings.
13
+ app.name = 'sample'
14
+ end
@@ -0,0 +1,5 @@
1
+ class AppDelegate
2
+ def application(application, didFinishLaunchingWithOptions:launchOptions)
3
+ true
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class Bacon::Context
2
+ def expect_failure(&block)
3
+ expect(&block).to raise_error(BaconExpect::FailedExpectation)
4
+ end
5
+ end
@@ -0,0 +1,21 @@
1
+ describe "Matcher::BeFalse" do
2
+ it 'be_false passes when value is false' do
3
+ expect(false).to be_false
4
+ end
5
+
6
+ it "be_false fails when value is true" do
7
+ expect_failure{ expect(true).to be_false }
8
+ end
9
+
10
+ it "be_false fails when value is an Object" do
11
+ expect_failure{ expect(Object.new).to be_false }
12
+ end
13
+
14
+ it "be_false fails when value is false but asked for not_to" do
15
+ expect_failure{ expect(false).not_to be_false }
16
+ end
17
+
18
+ it "be_false passes when value is true but asked for not_to" do
19
+ expect(true).not_to be_false
20
+ end
21
+ end
@@ -0,0 +1,27 @@
1
+ describe "Matcher::BeGeneric" do
2
+ it 'be_empty passes when value is empty' do
3
+ expect([]).to be_empty
4
+ end
5
+
6
+ it "be_empty fails when value is not empty" do
7
+ expect_failure{ expect([2, 3]).to be_empty }
8
+ end
9
+
10
+ it "be_kind_of passes when value is of the given type" do
11
+ expect("i'm a string").to be_kind_of(String)
12
+ end
13
+
14
+ it "be_kind_of fails when value is not of the given type" do
15
+ expect_failure{ expect("i'm a string").to be_kind_of(TrueClass) }
16
+ end
17
+
18
+ it "be_amazing passes when the value responds to amazing? and returns true" do
19
+ class TestClass; def amazing?; true; end; end
20
+ expect(TestClass.new).to be_amazing
21
+ end
22
+
23
+ it "be_amazing fails when the value responds to amazing? and returns false" do
24
+ class TestClass; def amazing?; false; end; end
25
+ expect_failure{ expect(TestClass.new).to be_amazing }
26
+ end
27
+ end
@@ -0,0 +1,17 @@
1
+ describe "Matcher::BeNil" do
2
+ it 'be_nil passes when value is nil' do
3
+ expect(nil).to be_nil
4
+ end
5
+
6
+ it "be_nil fails when value is true" do
7
+ expect_failure{ expect(true).to be_nil }
8
+ end
9
+
10
+ it "be_nil fails when value is false" do
11
+ expect_failure{ expect(false).to be_nil }
12
+ end
13
+
14
+ it "be_nil fails when value is an Object" do
15
+ expect_failure{ expect(Object.new).to be_nil }
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ describe "Matcher::BeTrue" do
2
+ it 'be_true passes when value is true' do
3
+ expect(true).to be_true
4
+ end
5
+
6
+ it "be_true fails when value is false" do
7
+ expect_failure{ expect(false).to be_true }
8
+ end
9
+
10
+ it "be_true fails when value is an Object" do
11
+ expect_failure{ expect(Object.new).to be_true }
12
+ end
13
+
14
+ it "be_true fails when value is true but asked for not_to" do
15
+ expect_failure{ expect(true).not_to be_true }
16
+ end
17
+
18
+ it "be_true passes when value is false but asked for not_to" do
19
+ expect(false).to_not be_true
20
+ end
21
+ end
@@ -0,0 +1,39 @@
1
+ describe "Matcher::Change" do
2
+ class TestClass
3
+ attr_reader :counter
4
+ def initialize
5
+ @counter = 0
6
+ end
7
+
8
+ def add
9
+ @counter += 1
10
+ end
11
+
12
+ def dont_add; end
13
+ end
14
+
15
+ it 'change passes when the expected block changes the result of the argument block' do
16
+ test_object = TestClass.new
17
+ expect{ test_object.add }.to change{ test_object.counter }
18
+ end
19
+
20
+ it "change fails when the expected block doesn't change the result of the argument block" do
21
+ test_object = TestClass.new
22
+ expect_failure{ expect{ test_object.dont_add }.to change{ test_object.counter } }
23
+ end
24
+
25
+ it "change passes when the expected block doesn't change the result of the argument block but asked not_to" do
26
+ test_object = TestClass.new
27
+ expect{ test_object.dont_add }.not_to change{ test_object.counter }
28
+ end
29
+
30
+ it "change when specified 'by' passes when the expected block changes the result of the argument block by the given amount" do
31
+ test_object = TestClass.new
32
+ expect{ test_object.add; test_object.add }.to change{ test_object.counter }.by(2)
33
+ end
34
+
35
+ it "change when specified 'by' fails when the expected block changes the result of the argument block by a different amount" do
36
+ test_object = TestClass.new
37
+ expect_failure{ expect{ test_object.add; test_object.add }.to change{ test_object.counter }.by(6) }
38
+ end
39
+ end
@@ -0,0 +1,9 @@
1
+ describe "Matcher::EndWith" do
2
+ it 'end_with passes when the subject ends with the given string' do
3
+ expect("super").to end_with("per")
4
+ end
5
+
6
+ it "end_with fails when the subject doesn't end with the given string" do
7
+ expect_failure{ expect("super").to end_with("key") }
8
+ end
9
+ end
@@ -0,0 +1,19 @@
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
@@ -0,0 +1,19 @@
1
+ describe "Matcher::HaveGeneric" do
2
+ it "have_key passes if the hash includes the given key" do
3
+ expect({a: 1, b: 2, c: 3}).to have_key(:c)
4
+ end
5
+
6
+ it "have_key fails if the hash doesn't include the given key" do
7
+ expect_failure{ expect({a: 1, b: 2, c: 3}).to have_key(:h) }
8
+ end
9
+
10
+ it "have_color passes when the value responds to has_color? and returns true" do
11
+ class TestClass; def has_color?(color); color == :red; end; end
12
+ expect(TestClass.new).to have_color(:red)
13
+ end
14
+
15
+ it "have_color fails when the value responds to has_color? and returns false" do
16
+ class TestClass; def has_color?(color); color == :red; end; end
17
+ expect_failure{ expect(TestClass.new).to have_color(:blue) }
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ describe "Matcher::HaveItems" do
2
+ it 'have passes when subject has the same number of items' do
3
+ expect([1,2,3]).to have(3).items
4
+ end
5
+
6
+ it 'have fails when subject has the a different number of items' do
7
+ expect_failure{ expect([1,2,3]).to have(10).items }
8
+ end
9
+ end
@@ -0,0 +1,27 @@
1
+ describe "Matcher::Include" do
2
+ it 'include passes when subject include? responds true' do
3
+ expect([1,2,3,4]).to include(4)
4
+ end
5
+
6
+ it 'include fails when subject include? responds false' do
7
+ expect_failure{ expect([1,2,3,4]).to include("asd") }
8
+ end
9
+
10
+ it 'include passes when an object responds true to include?' do
11
+ class TestClass; def include?(value); true; end; end
12
+ expect(TestClass.new).to include(3)
13
+ end
14
+
15
+ it 'include passes when an object responds false to include?' do
16
+ class TestClass; def include?(value); false; end; end
17
+ expect_failure{ expect(TestClass.new).to include(3) }
18
+ end
19
+
20
+ it "include passes when all values are included in subject" do
21
+ expect([1,2,3,4]).to include(2,3,4)
22
+ end
23
+
24
+ it "include fails when some values are not included in subject" do
25
+ expect_failure{ expect([1,2,3,4]).to include(2,3,4, 6) }
26
+ end
27
+ end
@@ -0,0 +1,17 @@
1
+ describe "Matcher::MatchArray" do
2
+ it 'match_array passes when subject has the same items as value' do
3
+ expect([1,2,3,4]).to match_array([4,2,1,3])
4
+ end
5
+
6
+ it "match_array fails when subject has less items than value" do
7
+ expect_failure{ expect([1,2,3]).to match_array([1,2,3,4]) }
8
+ end
9
+
10
+ it "match_array fails when subject has more items than value" do
11
+ expect_failure{ expect([1,2,3,4]).to match_array([1,2,4,4,3]) }
12
+ end
13
+
14
+ it "match_array fails when subject has different items" do
15
+ expect_failure{ expect([1,2,3,4]).to match_array([Object.new, "a", 2, 3]) }
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ describe "Matcher::Match" do
2
+ it 'match passes when subject is a string and matches the regex' do
3
+ expect("asd asd asd").to match(/asd/)
4
+ end
5
+
6
+ it "match fails when subject is a string and doesn't match the regex" do
7
+ expect_failure{ expect("qwerty qwerty").to match(/asd/) }
8
+ end
9
+
10
+ it "match passes when subject is a regex and matches the given string" do
11
+ expect(/foo/).to match("food")
12
+ end
13
+
14
+ it "match fails when subject is a regex and doesn't matche the given string" do
15
+ expect_failure{ expect(/foo/).to match("drink") }
16
+ end
17
+ end
@@ -0,0 +1,57 @@
1
+ describe "Matcher::RaiseError" do
2
+ it 'raise_error without argument passes when the block raises any exception' do
3
+ expect{ 1/0 }.to raise_error
4
+ end
5
+
6
+ it "raise_error without argument failes when the block doesn't raise any exception" do
7
+ expect_failure{ expect{ Object.new }.to raise_error }
8
+ end
9
+
10
+ it "raise_error with a class argument passes when the block raises an exception of the argument class" do
11
+ expect{ 1/0 }.to raise_error(ZeroDivisionError)
12
+ end
13
+
14
+ it "raise_error with a class argument fails when the block raises an exception of a different class" do
15
+ expect_failure{ expect{ 1/0 }.to raise_error(ArgumentError) }
16
+ end
17
+
18
+ it "raise_error with a string argument passes when the block raises an exception with a message that includes the string" do
19
+ expect{ raise "one message" }.to raise_error("one message")
20
+ end
21
+
22
+ it "raise_error with a string argument fails when the block raises an exception with a message that doesn't include the string" do
23
+ expect_failure{ expect{ raise "one message" }.to raise_error("different") }
24
+ end
25
+
26
+ it "raise_error with a Regex argument passes when the block raises an exception with a message that matches the Regex" do
27
+ expect{ raise "one message" }.to raise_error(/message/)
28
+ end
29
+
30
+ it "raise_error with a Regex argument fails when the block raises an exception with a message that doesn't match the Regex" do
31
+ expect_failure{ expect{ raise "one message" }.to raise_error(/different/) }
32
+ end
33
+
34
+ it "raise_error with a class and a string argument passes if the block raises an exception of the same class and includes the string in its message" do
35
+ expect{ raise ArgumentError.new("with a message") }.to raise_error(ArgumentError, "message")
36
+ end
37
+
38
+ it "raise_error with a class and a string argument fails if the block raises an exception of the same class and but doesn't include the string in its message" do
39
+ expect_failure{ expect{ raise ArgumentError.new("with a message") }.to raise_error(ArgumentError, "different") }
40
+ end
41
+
42
+ it "raise_error with a class and a string argument fails if the block raises an exception of a different class" do
43
+ expect_failure{ expect{ raise ArgumentError.new("with a message") }.to raise_error(ZeroDivisionError, "message") }
44
+ end
45
+
46
+ it "raise_error with a class and a regex argument passes if the block raises an exception of the same class and includes the string in its message" do
47
+ expect{ raise ArgumentError.new("with a message") }.to raise_error(ArgumentError, /message/)
48
+ end
49
+
50
+ it "raise_error with a class and a regex argument fails if the block raises an exception of the same class and but doesn't include the string in its message" do
51
+ expect_failure{ expect{ raise ArgumentError.new("with a message") }.to raise_error(ArgumentError, /different/) }
52
+ end
53
+
54
+ it "raise_error with a class and a regex argument fails if the block raises an exception of a different class" do
55
+ expect_failure{ expect{ raise ArgumentError.new("with a message") }.to raise_error(ZeroDivisionError, /message/) }
56
+ end
57
+ end
@@ -0,0 +1,23 @@
1
+ describe "Matcher::RespondTo" do
2
+ it 'respond_to passes when subject responds to method name' do
3
+ expect("string").to respond_to(:upcase)
4
+ end
5
+
6
+ it "respond_to fails when subject doesn't respond to method name" do
7
+ expect_failure{ expect("string").to respond_to(:floor) }
8
+ end
9
+
10
+ it "respond_to when given number of arguments fails when subject doesn't respond to method name" do
11
+ expect_failure{ expect("string").to respond_to(:floor).with(2).arguments }
12
+ end
13
+
14
+ it "respond_to when given number of arguments passes when subject responds to method name with exactly the same number of arguments" do
15
+ class TestCase; def call_me(a,b,c); end; end
16
+ expect(TestCase.new).to respond_to(:call_me).with(3).arguments
17
+ end
18
+
19
+ it "respond_to when given number of arguments fails when subject responds to method name with different number of arguments" do
20
+ class TestCase; def call_me(a,b,c); end; end
21
+ expect_failure{ expect(TestCase.new).to respond_to(:call_me).with(1).argument }
22
+ end
23
+ end
@@ -0,0 +1,13 @@
1
+ describe "Matcher::Satisfy" do
2
+ it 'satisfy passes when the block returns true' do
3
+ expect(1).to satisfy{|v| v == 1}
4
+ end
5
+
6
+ it 'satisfy fails when the block returns false' do
7
+ expect_failure{ expect(1).to satisfy{|v| v == 3} }
8
+ end
9
+
10
+ it 'satisfy fails when the block raises an exception' do
11
+ expect{ expect(1).to satisfy{|v| 1/0 } }.to raise_error(ZeroDivisionError)
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ describe "Matcher::StartWith" do
2
+ it 'start_with passes when the subject starts with the given string' do
3
+ expect("super").to start_with("sup")
4
+ end
5
+
6
+ it "start_with fails when the subject doesn't start with the given string" do
7
+ expect_failure{ expect("super").to start_with("key") }
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bacon-expect
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Ignacio Piantanida
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: RSpec's expect syntax in MacBacon
42
+ email:
43
+ - ijpiantanida@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - .gitignore
49
+ - Gemfile
50
+ - LICENSE.txt
51
+ - README.md
52
+ - Rakefile
53
+ - bacon-expect.gemspec
54
+ - lib/bacon-expect.rb
55
+ - lib/bacon-expect/bacon_context.rb
56
+ - lib/bacon-expect/expectation.rb
57
+ - lib/bacon-expect/failed_expectation.rb
58
+ - lib/bacon-expect/matchers/be_false.rb
59
+ - lib/bacon-expect/matchers/be_generic.rb
60
+ - lib/bacon-expect/matchers/be_nil.rb
61
+ - lib/bacon-expect/matchers/be_true.rb
62
+ - lib/bacon-expect/matchers/change.rb
63
+ - lib/bacon-expect/matchers/end_with.rb
64
+ - lib/bacon-expect/matchers/eql.rb
65
+ - lib/bacon-expect/matchers/have_generic.rb
66
+ - lib/bacon-expect/matchers/have_items.rb
67
+ - lib/bacon-expect/matchers/include.rb
68
+ - lib/bacon-expect/matchers/match.rb
69
+ - lib/bacon-expect/matchers/match_array.rb
70
+ - lib/bacon-expect/matchers/matchers.rb
71
+ - lib/bacon-expect/matchers/raise_error.rb
72
+ - lib/bacon-expect/matchers/respond_to.rb
73
+ - lib/bacon-expect/matchers/satisfy.rb
74
+ - lib/bacon-expect/matchers/start_with.rb
75
+ - spec_app/.repl_history
76
+ - spec_app/Gemfile
77
+ - spec_app/Rakefile
78
+ - spec_app/app/app_delegate.rb
79
+ - spec_app/resources/Default-568h@2x.png
80
+ - spec_app/spec/helpers/bacon_context.rb
81
+ - spec_app/spec/matchers/be_false_spec.rb
82
+ - spec_app/spec/matchers/be_generic_spec.rb
83
+ - spec_app/spec/matchers/be_nil_spec.rb
84
+ - spec_app/spec/matchers/be_true_spec.rb
85
+ - spec_app/spec/matchers/change_spec.rb
86
+ - spec_app/spec/matchers/end_with_spec.rb
87
+ - spec_app/spec/matchers/eql_spec.rb
88
+ - spec_app/spec/matchers/have_generic_spec.rb
89
+ - spec_app/spec/matchers/have_items_spec.rb
90
+ - spec_app/spec/matchers/include_spec.rb
91
+ - spec_app/spec/matchers/match_array_spec.rb
92
+ - spec_app/spec/matchers/match_spec.rb
93
+ - spec_app/spec/matchers/raise_error_spec.rb
94
+ - spec_app/spec/matchers/respond_to_spec.rb
95
+ - spec_app/spec/matchers/satisfy_spec.rb
96
+ - spec_app/spec/matchers/start_with_spec.rb
97
+ homepage: https://github.com/ijpiantanida/bacon-expect
98
+ licenses:
99
+ - MIT
100
+ metadata: {}
101
+ post_install_message:
102
+ rdoc_options: []
103
+ require_paths:
104
+ - lib
105
+ required_ruby_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ requirements: []
116
+ rubyforge_project:
117
+ rubygems_version: 2.1.5
118
+ signing_key:
119
+ specification_version: 4
120
+ summary: Bring RSpec 3.0 expect syntax to MacBacon
121
+ test_files: []