code-spec 0.2.3 → 0.2.4
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/Rakefile +1 -0
- data/VERSION +1 -1
- data/code-spec.gemspec +13 -2
- data/lib/code-spec.rb +3 -1
- data/lib/code_spec/matchers/have_call.rb +1 -1
- data/lib/code_spec/matchers/multi/have_classes_modules.rb +73 -0
- data/lib/code_spec/matchers/multi/have_methods.rb +85 -0
- data/spec/code-spec/matchers/have_call_args.rb +1 -0
- data/spec/code-spec/matchers/multi/have_classes_spec.rb +49 -0
- data/spec/code-spec/matchers/multi/have_methods_spec.rb +45 -0
- data/spec/code-spec/matchers/multi/have_modules_spec.rb +49 -0
- metadata +28 -5
data/Rakefile
CHANGED
@@ -9,6 +9,7 @@ begin
|
|
9
9
|
gem.authors = ["Kristian Mandrup"]
|
10
10
|
gem.add_development_dependency "rspec", "~> 2.0.0.beta.22"
|
11
11
|
gem.add_dependency "require_all", "~> 1.1.0"
|
12
|
+
gem.add_dependency "sugar-high", "~> 0.2.10"
|
12
13
|
gem.add_dependency "activesupport", "~> 3.0.0"
|
13
14
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
14
15
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.4
|
data/code-spec.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{code-spec}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kristian Mandrup"]
|
12
|
-
s.date = %q{2010-09-
|
12
|
+
s.date = %q{2010-09-18}
|
13
13
|
s.description = %q{Code file RSpec 2 matchers that make it easy to spec Ruby code files, fx updated or generated by a Thor generator}
|
14
14
|
s.email = %q{kmandrup@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -42,6 +42,8 @@ Gem::Specification.new do |s|
|
|
42
42
|
"lib/code_spec/matchers/include_module.rb",
|
43
43
|
"lib/code_spec/matchers/inherit_from.rb",
|
44
44
|
"lib/code_spec/matchers/match_lines.rb",
|
45
|
+
"lib/code_spec/matchers/multi/have_classes_modules.rb",
|
46
|
+
"lib/code_spec/matchers/multi/have_methods.rb",
|
45
47
|
"spec/code-spec/fixtures/logfile.log",
|
46
48
|
"spec/code-spec/matchers/class_self_spec.rb",
|
47
49
|
"spec/code-spec/matchers/have_block_spec.rb",
|
@@ -56,6 +58,9 @@ Gem::Specification.new do |s|
|
|
56
58
|
"spec/code-spec/matchers/include_module_spec.rb",
|
57
59
|
"spec/code-spec/matchers/inherit_from_spec.rb",
|
58
60
|
"spec/code-spec/matchers/match_content_spec.rb",
|
61
|
+
"spec/code-spec/matchers/multi/have_classes_spec.rb",
|
62
|
+
"spec/code-spec/matchers/multi/have_methods_spec.rb",
|
63
|
+
"spec/code-spec/matchers/multi/have_modules_spec.rb",
|
59
64
|
"spec/spec_helper.rb"
|
60
65
|
]
|
61
66
|
s.homepage = %q{http://github.com/kristianmandrup/code-spec}
|
@@ -77,6 +82,9 @@ Gem::Specification.new do |s|
|
|
77
82
|
"spec/code-spec/matchers/include_module_spec.rb",
|
78
83
|
"spec/code-spec/matchers/inherit_from_spec.rb",
|
79
84
|
"spec/code-spec/matchers/match_content_spec.rb",
|
85
|
+
"spec/code-spec/matchers/multi/have_classes_spec.rb",
|
86
|
+
"spec/code-spec/matchers/multi/have_methods_spec.rb",
|
87
|
+
"spec/code-spec/matchers/multi/have_modules_spec.rb",
|
80
88
|
"spec/spec_helper.rb"
|
81
89
|
]
|
82
90
|
|
@@ -87,15 +95,18 @@ Gem::Specification.new do |s|
|
|
87
95
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
88
96
|
s.add_development_dependency(%q<rspec>, ["~> 2.0.0.beta.22"])
|
89
97
|
s.add_runtime_dependency(%q<require_all>, ["~> 1.1.0"])
|
98
|
+
s.add_runtime_dependency(%q<sugar-high>, ["~> 0.2.10"])
|
90
99
|
s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.0"])
|
91
100
|
else
|
92
101
|
s.add_dependency(%q<rspec>, ["~> 2.0.0.beta.22"])
|
93
102
|
s.add_dependency(%q<require_all>, ["~> 1.1.0"])
|
103
|
+
s.add_dependency(%q<sugar-high>, ["~> 0.2.10"])
|
94
104
|
s.add_dependency(%q<activesupport>, ["~> 3.0.0"])
|
95
105
|
end
|
96
106
|
else
|
97
107
|
s.add_dependency(%q<rspec>, ["~> 2.0.0.beta.22"])
|
98
108
|
s.add_dependency(%q<require_all>, ["~> 1.1.0"])
|
109
|
+
s.add_dependency(%q<sugar-high>, ["~> 0.2.10"])
|
99
110
|
s.add_dependency(%q<activesupport>, ["~> 3.0.0"])
|
100
111
|
end
|
101
112
|
end
|
data/lib/code-spec.rb
CHANGED
@@ -31,7 +31,7 @@ module RSpec::RubyContentMatchers
|
|
31
31
|
when String
|
32
32
|
args_expr
|
33
33
|
when Array
|
34
|
-
args.inject("") do |res, arg|
|
34
|
+
args.flatten.inject("") do |res, arg|
|
35
35
|
arg_val = (arg.kind_of?(String) && arg[0] == '#') ? arg[1..-1] : arg.inspect
|
36
36
|
res << '(\s|,|\w|:)*' + arg_val
|
37
37
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module RSpec::RubyContentMatchers
|
2
|
+
class HaveModules < RSpec::RubyContentMatcher
|
3
|
+
attr_reader :name, :names, :type, :postfix
|
4
|
+
|
5
|
+
def initialize(*names)
|
6
|
+
postfix = last_arg_value({:postfix => ''}, names)
|
7
|
+
@names = names.to_strings
|
8
|
+
@postfix = postfix.to_s.camelize if postfix
|
9
|
+
@type = :module
|
10
|
+
end
|
11
|
+
|
12
|
+
def matches? content, &block
|
13
|
+
return false if names.empty?
|
14
|
+
|
15
|
+
@content = content
|
16
|
+
|
17
|
+
names.each do |name|
|
18
|
+
@name = name.camelize
|
19
|
+
@end_option = name
|
20
|
+
match = is_match? content
|
21
|
+
return false if !match
|
22
|
+
end
|
23
|
+
true
|
24
|
+
end
|
25
|
+
|
26
|
+
def is_match? content
|
27
|
+
expr = get_expr(content)
|
28
|
+
debug "match expression: #{expr}"
|
29
|
+
match = (content =~ expr)
|
30
|
+
@content_matches = [$1, $2, $3]
|
31
|
+
match
|
32
|
+
end
|
33
|
+
|
34
|
+
def failure_message
|
35
|
+
super
|
36
|
+
"Expected there to be the #{type} #{name}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def negative_failure_message
|
40
|
+
super
|
41
|
+
"Did not expected there to be the #{type} #{name}"
|
42
|
+
end
|
43
|
+
|
44
|
+
protected
|
45
|
+
|
46
|
+
def main_expr
|
47
|
+
"#{type}" + SPACES + "#{name}#{postfix}" + SPACES + ANY_GROUP
|
48
|
+
end
|
49
|
+
|
50
|
+
def alt_end
|
51
|
+
type
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class HaveClasses < HaveModules
|
56
|
+
|
57
|
+
def initialize *names
|
58
|
+
super *names
|
59
|
+
@type = :class
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# can take :postfix hash arg
|
64
|
+
def have_modules *names
|
65
|
+
HaveModules.new names
|
66
|
+
end
|
67
|
+
|
68
|
+
# can take :postfix hash arg
|
69
|
+
def have_classes *names
|
70
|
+
HaveClasses.new *names
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# This method tries to see if a specific method is contained in the generated file.
|
2
|
+
# It can operate (should) on either a file name or the raw content
|
3
|
+
#
|
4
|
+
# generated_file_name.should have_method "hello" # 'my/path/say_hello.rb'.should have_method "hello"
|
5
|
+
#
|
6
|
+
# say_hello_file_content.should have_method "hello"
|
7
|
+
#
|
8
|
+
module RSpec::RubyContentMatchers
|
9
|
+
class HaveMethods < RSpec::RubyContentMatcher
|
10
|
+
attr_reader :method, :type, :args, :names
|
11
|
+
|
12
|
+
def initialize *methods
|
13
|
+
options = last_option methods
|
14
|
+
@names = methods.to_strings
|
15
|
+
@type = options[:type]
|
16
|
+
@args = options[:args]
|
17
|
+
end
|
18
|
+
|
19
|
+
def matches? content, &block
|
20
|
+
return false if names.empty?
|
21
|
+
|
22
|
+
@content = content
|
23
|
+
names.each do |name|
|
24
|
+
@method = name
|
25
|
+
@end_option = name
|
26
|
+
match = is_match? content
|
27
|
+
return false if !match
|
28
|
+
end
|
29
|
+
true
|
30
|
+
end
|
31
|
+
|
32
|
+
def is_match? content
|
33
|
+
expr = get_expr(content)
|
34
|
+
debug "match expression: #{expr}"
|
35
|
+
match = (content =~ expr)
|
36
|
+
@content_matches = [$1, $2, $3]
|
37
|
+
match
|
38
|
+
end
|
39
|
+
|
40
|
+
def index
|
41
|
+
1
|
42
|
+
end
|
43
|
+
|
44
|
+
def failure_message
|
45
|
+
super
|
46
|
+
"Expected there to be the #{class_msg} method #{method}, but there wasn't"
|
47
|
+
end
|
48
|
+
|
49
|
+
def negative_failure_message
|
50
|
+
super
|
51
|
+
"Did not expect there to be the #{class_msg} method #{method}, but there was"
|
52
|
+
end
|
53
|
+
|
54
|
+
protected
|
55
|
+
|
56
|
+
def class_msg
|
57
|
+
(type == :class) ? 'class' : ''
|
58
|
+
end
|
59
|
+
|
60
|
+
def main_expr
|
61
|
+
'def' + SPACES + "#{self_expr}#{method}#{args_expr}" + ANY_GROUP
|
62
|
+
end
|
63
|
+
|
64
|
+
def args_expr
|
65
|
+
return super if args
|
66
|
+
any_args_expr
|
67
|
+
end
|
68
|
+
|
69
|
+
def self_expr
|
70
|
+
type == :class ? 'self.' : ''
|
71
|
+
end
|
72
|
+
|
73
|
+
def alt_end
|
74
|
+
'def'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def have_methods *methods
|
79
|
+
HaveMethods.new methods
|
80
|
+
end
|
81
|
+
|
82
|
+
def have_class_methods *methods
|
83
|
+
have_methods *methods, :type => :class
|
84
|
+
end
|
85
|
+
end
|
@@ -17,6 +17,7 @@ describe 'method call matcher with args' do
|
|
17
17
|
}
|
18
18
|
it "should have call to hello" do
|
19
19
|
call.should have_call :devise, :args => ['#confirm_me', "hello"]
|
20
|
+
call.should have_call :devise, :args => [['#confirm_me', "hello"]]
|
20
21
|
call.should_not have_call :devise, :args => ['#hello']
|
21
22
|
end
|
22
23
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'classes matcher' do
|
4
|
+
context "no class" do
|
5
|
+
no_class = %q{
|
6
|
+
module X
|
7
|
+
hello
|
8
|
+
hi
|
9
|
+
end
|
10
|
+
}
|
11
|
+
|
12
|
+
it "should not have class X" do
|
13
|
+
no_class.should_not have_classes :x
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "content with class X" do
|
18
|
+
class_x = %q{
|
19
|
+
class X
|
20
|
+
def hello
|
21
|
+
blip
|
22
|
+
end
|
23
|
+
end
|
24
|
+
}
|
25
|
+
it "should have class x" do
|
26
|
+
class_x.should have_classes [:x]
|
27
|
+
class_x.should_not have_classes :x, :y
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "content with class X and Y" do
|
32
|
+
classs_x_y = %q{
|
33
|
+
class X
|
34
|
+
def hello
|
35
|
+
blip
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class Y
|
40
|
+
def hello
|
41
|
+
blip
|
42
|
+
end
|
43
|
+
end
|
44
|
+
}
|
45
|
+
it "should have classs x and y" do
|
46
|
+
classs_x_y.should have_classes :x, :y
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'method matcher' do
|
4
|
+
context "content without method" do
|
5
|
+
no_method = %q{
|
6
|
+
class X
|
7
|
+
hello
|
8
|
+
hi
|
9
|
+
end}
|
10
|
+
|
11
|
+
it "should not have method hello" do
|
12
|
+
no_method.should_not have_methods :hello, :hi do |content|
|
13
|
+
content.should_not be_empty
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "content with method hello" do
|
19
|
+
with_method = %q{
|
20
|
+
def hello
|
21
|
+
blip
|
22
|
+
end
|
23
|
+
}
|
24
|
+
it "should have method hello" do
|
25
|
+
with_method.should have_methods :hello
|
26
|
+
with_method.should_not have_methods :hi
|
27
|
+
with_method.should_not have_methods :hello, :hi
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "content with method hello" do
|
32
|
+
with_method = %q{
|
33
|
+
def hello
|
34
|
+
blip
|
35
|
+
end
|
36
|
+
|
37
|
+
def hi
|
38
|
+
blip
|
39
|
+
end
|
40
|
+
}
|
41
|
+
it "should have method hello" do
|
42
|
+
with_method.should have_methods :hello, :hi
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'modules matcher' do
|
4
|
+
context "no module" do
|
5
|
+
no_module = %q{
|
6
|
+
class X
|
7
|
+
hello
|
8
|
+
hi
|
9
|
+
end
|
10
|
+
}
|
11
|
+
|
12
|
+
it "should not have module X" do
|
13
|
+
no_module.should_not have_modules :x
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "content with module X" do
|
18
|
+
module_x = %q{
|
19
|
+
module X
|
20
|
+
def hello
|
21
|
+
blip
|
22
|
+
end
|
23
|
+
end
|
24
|
+
}
|
25
|
+
it "should have module x" do
|
26
|
+
module_x.should have_modules :x
|
27
|
+
module_x.should_not have_modules :x, :y
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "content with module X and Y" do
|
32
|
+
modules_x_y = %q{
|
33
|
+
module X
|
34
|
+
def hello
|
35
|
+
blip
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
module Y
|
40
|
+
def hello
|
41
|
+
blip
|
42
|
+
end
|
43
|
+
end
|
44
|
+
}
|
45
|
+
it "should have modules x and y" do
|
46
|
+
modules_x_y.should have_modules :x, :y
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 4
|
9
|
+
version: 0.2.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Kristian Mandrup
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-09-
|
17
|
+
date: 2010-09-18 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -50,9 +50,24 @@ dependencies:
|
|
50
50
|
type: :runtime
|
51
51
|
version_requirements: *id002
|
52
52
|
- !ruby/object:Gem::Dependency
|
53
|
-
name:
|
53
|
+
name: sugar-high
|
54
54
|
prerelease: false
|
55
55
|
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ~>
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
- 2
|
63
|
+
- 10
|
64
|
+
version: 0.2.10
|
65
|
+
type: :runtime
|
66
|
+
version_requirements: *id003
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: activesupport
|
69
|
+
prerelease: false
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
56
71
|
none: false
|
57
72
|
requirements:
|
58
73
|
- - ~>
|
@@ -63,7 +78,7 @@ dependencies:
|
|
63
78
|
- 0
|
64
79
|
version: 3.0.0
|
65
80
|
type: :runtime
|
66
|
-
version_requirements: *
|
81
|
+
version_requirements: *id004
|
67
82
|
description: Code file RSpec 2 matchers that make it easy to spec Ruby code files, fx updated or generated by a Thor generator
|
68
83
|
email: kmandrup@gmail.com
|
69
84
|
executables: []
|
@@ -99,6 +114,8 @@ files:
|
|
99
114
|
- lib/code_spec/matchers/include_module.rb
|
100
115
|
- lib/code_spec/matchers/inherit_from.rb
|
101
116
|
- lib/code_spec/matchers/match_lines.rb
|
117
|
+
- lib/code_spec/matchers/multi/have_classes_modules.rb
|
118
|
+
- lib/code_spec/matchers/multi/have_methods.rb
|
102
119
|
- spec/code-spec/fixtures/logfile.log
|
103
120
|
- spec/code-spec/matchers/class_self_spec.rb
|
104
121
|
- spec/code-spec/matchers/have_block_spec.rb
|
@@ -113,6 +130,9 @@ files:
|
|
113
130
|
- spec/code-spec/matchers/include_module_spec.rb
|
114
131
|
- spec/code-spec/matchers/inherit_from_spec.rb
|
115
132
|
- spec/code-spec/matchers/match_content_spec.rb
|
133
|
+
- spec/code-spec/matchers/multi/have_classes_spec.rb
|
134
|
+
- spec/code-spec/matchers/multi/have_methods_spec.rb
|
135
|
+
- spec/code-spec/matchers/multi/have_modules_spec.rb
|
116
136
|
- spec/spec_helper.rb
|
117
137
|
has_rdoc: true
|
118
138
|
homepage: http://github.com/kristianmandrup/code-spec
|
@@ -160,4 +180,7 @@ test_files:
|
|
160
180
|
- spec/code-spec/matchers/include_module_spec.rb
|
161
181
|
- spec/code-spec/matchers/inherit_from_spec.rb
|
162
182
|
- spec/code-spec/matchers/match_content_spec.rb
|
183
|
+
- spec/code-spec/matchers/multi/have_classes_spec.rb
|
184
|
+
- spec/code-spec/matchers/multi/have_methods_spec.rb
|
185
|
+
- spec/code-spec/matchers/multi/have_modules_spec.rb
|
163
186
|
- spec/spec_helper.rb
|