rspec-deep-matchers 0.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.
- data/.gitignore +6 -0
- data/Gemfile +4 -0
- data/Guardfile +8 -0
- data/Rakefile +2 -0
- data/lib/rspec-deep-matchers.rb +1 -0
- data/lib/rspec/matchers.rb +1 -0
- data/lib/rspec/matchers/deep_eql.rb +45 -0
- data/lib/version.rb +7 -0
- data/rspec-deep-matchers.gemspec +26 -0
- data/spec/lib/rspec/matchers/deep_eql_spec.rb +137 -0
- data/spec/spec_helper.rb +2 -0
- metadata +122 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard 'rspec', :version => 2, :cli => "--color --format nested" do
|
5
|
+
watch(%r{^spec/.+_spec\.rb})
|
6
|
+
watch(%r{^lib/(.+)\.rb}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
7
|
+
watch('spec/spec_helper.rb') { "spec" }
|
8
|
+
end
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "rspec/matchers/deep_eql"
|
@@ -0,0 +1 @@
|
|
1
|
+
require "rspec/matchers/deep_eql.rb"
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module RSpec
|
2
|
+
module Matchers
|
3
|
+
|
4
|
+
def deep_eql(expected)
|
5
|
+
DeepEql.new(expected)
|
6
|
+
end
|
7
|
+
|
8
|
+
class DeepEql
|
9
|
+
|
10
|
+
def initialize(expectation)
|
11
|
+
@expectation = expectation
|
12
|
+
end
|
13
|
+
|
14
|
+
def matches?(target)
|
15
|
+
result = true
|
16
|
+
@target = target
|
17
|
+
case @expectation
|
18
|
+
when Hash
|
19
|
+
result &&= @target.is_a?(Hash) && @target.keys.count == @expectation.keys.count
|
20
|
+
@expectation.keys.each do |key|
|
21
|
+
result &&= @target.has_key?(key) &&
|
22
|
+
DeepEql.new(@expectation[key]).matches?(@target[key])
|
23
|
+
end
|
24
|
+
when Array
|
25
|
+
result &&= @target.is_a?(Array) && @target.count == @expectation.count
|
26
|
+
@expectation.each_index do |index|
|
27
|
+
result &&= DeepEql.new(@expectation[index]).matches?(@target[index])
|
28
|
+
end
|
29
|
+
else
|
30
|
+
result &&= @target == @expectation
|
31
|
+
end
|
32
|
+
result
|
33
|
+
end
|
34
|
+
|
35
|
+
def failure_message_for_should
|
36
|
+
"expected #{@target.inspect} to be deep_eql with #{@expectation.inspect}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def failure_message_for_should_not
|
40
|
+
"expected #{@target.inspect} not to be in deep_eql with #{@expectation.inspect}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
data/lib/version.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "rspec-deep-matchers"
|
7
|
+
s.version = RSpec::Deep::Matchers::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["vitalish"]
|
10
|
+
s.email = ["vitalish@4life.com.ua"]
|
11
|
+
s.homepage = "http://github.com/vitalish/rspec-deep-matchers"
|
12
|
+
s.summary = %q{Deep Hash matcher for rspec}
|
13
|
+
s.description = s.summary
|
14
|
+
|
15
|
+
s.rubyforge_project = "rspec-deep-matchers"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_dependency 'rspec', '>= 2.0.0'
|
23
|
+
|
24
|
+
s.add_development_dependency('guard-rspec')
|
25
|
+
s.add_development_dependency('growl')
|
26
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'deep_eql' do
|
4
|
+
|
5
|
+
context "should match" do
|
6
|
+
after(:each) do
|
7
|
+
@actual.should deep_eql(@expect)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "eql strings" do
|
11
|
+
@actual = "true"
|
12
|
+
@expect = "true"
|
13
|
+
end
|
14
|
+
|
15
|
+
context "arrays" do
|
16
|
+
|
17
|
+
it "that are eql" do
|
18
|
+
@actual = [1,2,3]
|
19
|
+
@expect = [1,2,3]
|
20
|
+
end
|
21
|
+
|
22
|
+
it "with hash with different order" do
|
23
|
+
@actual = [1, 2, {"one" => 1, "two" => 2, "three" => 3 }]
|
24
|
+
@expect = [1, 2, {"three" => 3, "one" => 1, "two" => 2 }]
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
context "hash with" do
|
30
|
+
|
31
|
+
it "differen key order" do
|
32
|
+
@actual = {:yes => 'yes', :no => 'no'}
|
33
|
+
@expect = {:no => 'no', :yes => 'yes'}
|
34
|
+
end
|
35
|
+
|
36
|
+
it "same key order" do
|
37
|
+
@actual = {:yes => 'yes', :no => 'no'}
|
38
|
+
@expect = {:yes => 'yes', :no => 'no'}
|
39
|
+
end
|
40
|
+
|
41
|
+
context "nested hash" do
|
42
|
+
|
43
|
+
it "with differen key order" do
|
44
|
+
@actual = {:yes => 'yes', :no => {:label => "name", :name => "Name"} }
|
45
|
+
@expect = {:no => {:label => "name", :name => "Name"}, :yes => 'yes'}
|
46
|
+
end
|
47
|
+
|
48
|
+
it "with differen key order in nested hashes" do
|
49
|
+
@actual = {:yes => 'yes', :no => {:label => "name", :name => "Name"} }
|
50
|
+
@expect = {:no => {:name => "Name", :label => "name"}, :yes => 'yes'}
|
51
|
+
end
|
52
|
+
|
53
|
+
it "with 3 levels" do
|
54
|
+
@actual = {:yes => 'yes', :no => {:label => "name", :name => {:first_name => "John", :last_name => "Smith"} } }
|
55
|
+
@expect = {:no => {:name => {:first_name => "John", :last_name => "Smith"}, :label => "name"}, :yes => 'yes'}
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
context "array" do
|
61
|
+
|
62
|
+
it "with strict order" do
|
63
|
+
@actual = {:yes => 'yes', :maybe => [:true, :false] }
|
64
|
+
@expect = {:maybe => [:true, :false], :yes => 'yes'}
|
65
|
+
end
|
66
|
+
|
67
|
+
it "2 level" do
|
68
|
+
@actual = {:yes => 'yes', :maybe => [[:true, :false], [:yes, :no]] }
|
69
|
+
@expect = {:maybe => [[:true, :false], [:yes, :no]], :yes => 'yes'}
|
70
|
+
end
|
71
|
+
|
72
|
+
it "that has hash with different order" do
|
73
|
+
@actual = {:yes => 'yes', :maybe => [{:true => "yes", :false => "no"}, [:yes, :no]] }
|
74
|
+
@expect = {:maybe => [{:false => "no", :true => "yes"}, [:yes, :no]], :yes => 'yes'}
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
context "should not match" do
|
86
|
+
|
87
|
+
after(:each) do
|
88
|
+
@actual.should_not deep_eql(@expect)
|
89
|
+
end
|
90
|
+
|
91
|
+
it "different strings" do
|
92
|
+
@actual = "true"
|
93
|
+
@expect = "false"
|
94
|
+
end
|
95
|
+
|
96
|
+
context "hash with" do
|
97
|
+
|
98
|
+
it "differen key number ( @actual < @expect)" do
|
99
|
+
@actual = {:yes => 'yes', :no => 'no'}
|
100
|
+
@expect = {:yes => 'yes', :no => 'no', :maybe =>'maybe'}
|
101
|
+
end
|
102
|
+
|
103
|
+
it "differen key number ( @actual > @expect)" do
|
104
|
+
@actual = {:yes => 'yes', :no => 'no', :maybe =>'maybe'}
|
105
|
+
@expect = {:yes => 'yes', :no => 'no'}
|
106
|
+
end
|
107
|
+
|
108
|
+
it "differen value" do
|
109
|
+
@actual = {:yes => 'yes', :no => 'maybe'}
|
110
|
+
@expect = {:yes => 'yes', :no => 'no'}
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
context "array with" do
|
116
|
+
|
117
|
+
it "different size ( @actual < @expect)" do
|
118
|
+
@actual = [1,2,3]
|
119
|
+
@expect = [1,2,3,4]
|
120
|
+
end
|
121
|
+
|
122
|
+
it "different size ( @actual > @expect)" do
|
123
|
+
@actual = [1,2,3,4]
|
124
|
+
@expect = [1,2,3]
|
125
|
+
end
|
126
|
+
|
127
|
+
it "differen value" do
|
128
|
+
@actual = [1,2,4]
|
129
|
+
@expect = [1,2,3]
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rspec-deep-matchers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- vitalish
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-06-02 00:00:00 +03:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rspec
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 15
|
30
|
+
segments:
|
31
|
+
- 2
|
32
|
+
- 0
|
33
|
+
- 0
|
34
|
+
version: 2.0.0
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: guard-rspec
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 3
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
version: "0"
|
49
|
+
type: :development
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: growl
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 3
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
type: :development
|
64
|
+
version_requirements: *id003
|
65
|
+
description: Deep Hash matcher for rspec
|
66
|
+
email:
|
67
|
+
- vitalish@4life.com.ua
|
68
|
+
executables: []
|
69
|
+
|
70
|
+
extensions: []
|
71
|
+
|
72
|
+
extra_rdoc_files: []
|
73
|
+
|
74
|
+
files:
|
75
|
+
- .gitignore
|
76
|
+
- Gemfile
|
77
|
+
- Guardfile
|
78
|
+
- Rakefile
|
79
|
+
- lib/rspec-deep-matchers.rb
|
80
|
+
- lib/rspec/matchers.rb
|
81
|
+
- lib/rspec/matchers/deep_eql.rb
|
82
|
+
- lib/version.rb
|
83
|
+
- rspec-deep-matchers.gemspec
|
84
|
+
- spec/lib/rspec/matchers/deep_eql_spec.rb
|
85
|
+
- spec/spec_helper.rb
|
86
|
+
has_rdoc: true
|
87
|
+
homepage: http://github.com/vitalish/rspec-deep-matchers
|
88
|
+
licenses: []
|
89
|
+
|
90
|
+
post_install_message:
|
91
|
+
rdoc_options: []
|
92
|
+
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
hash: 3
|
101
|
+
segments:
|
102
|
+
- 0
|
103
|
+
version: "0"
|
104
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
hash: 3
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
version: "0"
|
113
|
+
requirements: []
|
114
|
+
|
115
|
+
rubyforge_project: rspec-deep-matchers
|
116
|
+
rubygems_version: 1.3.7
|
117
|
+
signing_key:
|
118
|
+
specification_version: 3
|
119
|
+
summary: Deep Hash matcher for rspec
|
120
|
+
test_files:
|
121
|
+
- spec/lib/rspec/matchers/deep_eql_spec.rb
|
122
|
+
- spec/spec_helper.rb
|