protocol 1.0.1 → 2.0.0
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 +5 -5
- data/.gitignore +3 -0
- data/.travis.yml +8 -5
- data/.utilsrc +25 -0
- data/Gemfile +0 -2
- data/README.rdoc +0 -19
- data/Rakefile +2 -19
- data/VERSION +1 -1
- data/examples/assignments.rb +0 -0
- data/examples/comparing.rb +5 -1
- data/examples/enumerating.rb +4 -11
- data/examples/game.rb +2 -0
- data/examples/hello_world_patternitis.rb +1 -3
- data/examples/indexing.rb +13 -20
- data/examples/queue.rb +7 -4
- data/examples/stack.rb +21 -21
- data/examples/synchronizing.rb +91 -0
- data/lib/protocol.rb +1 -10
- data/lib/protocol/core.rb +24 -0
- data/lib/protocol/message.rb +0 -7
- data/lib/protocol/protocol_module.rb +29 -47
- data/lib/protocol/version.rb +1 -1
- data/lib/protocol/xt.rb +10 -5
- data/protocol.gemspec +29 -25
- data/tests/protocol_core_test.rb +79 -0
- data/tests/protocol_method_parser_test.rb +51 -50
- data/tests/protocol_test.rb +19 -51
- metadata +35 -19
- data/examples/locking.rb +0 -111
data/lib/protocol/core.rb
CHANGED
@@ -20,3 +20,27 @@ Enumerating = Protocol do
|
|
20
20
|
|
21
21
|
include Enumerable
|
22
22
|
end
|
23
|
+
|
24
|
+
# Checks if indexing behaviour exists as in Array or Hash.
|
25
|
+
Indexing = Protocol do
|
26
|
+
understand :[]
|
27
|
+
|
28
|
+
understand :[]=
|
29
|
+
end
|
30
|
+
|
31
|
+
Synchronizing = Protocol do
|
32
|
+
def lock() end
|
33
|
+
|
34
|
+
def unlock() end
|
35
|
+
|
36
|
+
implementation
|
37
|
+
|
38
|
+
def synchronize
|
39
|
+
lock
|
40
|
+
begin
|
41
|
+
yield
|
42
|
+
ensure
|
43
|
+
unlock
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/protocol/message.rb
CHANGED
@@ -167,13 +167,6 @@ module Protocol
|
|
167
167
|
result = __send__('#{inner_name}', #{args} &block)
|
168
168
|
end
|
169
169
|
result
|
170
|
-
rescue Protocol::CheckError => e
|
171
|
-
case ObjectSpace._id2ref(#{__id__}).protocol.mode
|
172
|
-
when :error
|
173
|
-
raise e
|
174
|
-
when :warning
|
175
|
-
warn e
|
176
|
-
end
|
177
170
|
ensure
|
178
171
|
Thread.current[post_name].pop
|
179
172
|
Thread.current[post_name].empty? and
|
@@ -3,14 +3,11 @@ module Protocol
|
|
3
3
|
class ProtocolModule < Module
|
4
4
|
# Creates an new ProtocolModule instance.
|
5
5
|
def initialize(&block)
|
6
|
-
@descriptor
|
7
|
-
@
|
8
|
-
module_eval(&block)
|
6
|
+
@descriptor = Descriptor.new(self)
|
7
|
+
@implementation = false
|
8
|
+
block and module_eval(&block)
|
9
9
|
end
|
10
10
|
|
11
|
-
# The current check mode :none, :warning, or :error (the default).
|
12
|
-
attr_reader :mode
|
13
|
-
|
14
11
|
# Returns all the protocol descriptions to check against as an Array.
|
15
12
|
def descriptors
|
16
13
|
descriptors = []
|
@@ -30,7 +27,6 @@ module Protocol
|
|
30
27
|
# generic argument names.
|
31
28
|
def to_ruby(result = '')
|
32
29
|
result << "#{name} = Protocol do"
|
33
|
-
first = true
|
34
30
|
if messages.empty?
|
35
31
|
result << "\n"
|
36
32
|
else
|
@@ -129,39 +125,38 @@ module Protocol
|
|
129
125
|
"#<#{name}: #{messages.map { |m| m.shortcut } * ', '}>"
|
130
126
|
end
|
131
127
|
|
132
|
-
# Check the conformity of +object+ recursively
|
133
|
-
#
|
134
|
-
|
135
|
-
def check(object, mode = @mode)
|
128
|
+
# Check the conformity of +object+ recursively and raise an exception if it
|
129
|
+
# doesn't.
|
130
|
+
def check!(object)
|
136
131
|
checked = {}
|
137
|
-
result = true
|
138
132
|
errors = CheckFailed.new
|
139
133
|
each do |message|
|
140
134
|
begin
|
141
135
|
message.check(object, checked)
|
142
136
|
rescue CheckError => e
|
143
|
-
|
144
|
-
when :error
|
145
|
-
errors << e
|
146
|
-
when :warning
|
147
|
-
warn e.to_s
|
148
|
-
result = false
|
149
|
-
when :none
|
150
|
-
result = false
|
151
|
-
end
|
137
|
+
errors << e
|
152
138
|
end
|
153
139
|
end
|
154
|
-
|
155
|
-
|
140
|
+
errors.empty? or raise errors
|
141
|
+
true
|
156
142
|
end
|
157
143
|
|
158
|
-
alias =~ check
|
144
|
+
alias =~ check!
|
145
|
+
|
146
|
+
# Check the conformity of +object+ recursively and return true iff it does.
|
147
|
+
def check(object)
|
148
|
+
check!(object)
|
149
|
+
rescue CheckFailed
|
150
|
+
false
|
151
|
+
else
|
152
|
+
true
|
153
|
+
end
|
159
154
|
|
160
155
|
# Return all messages for whick a check failed.
|
161
156
|
def check_failures(object)
|
162
|
-
check
|
157
|
+
check!(object)
|
163
158
|
rescue CheckFailed => e
|
164
|
-
|
159
|
+
e.errors.map { |e| e.protocol_message }
|
165
160
|
end
|
166
161
|
|
167
162
|
# This callback is called, when a module, that was extended with Protocol,
|
@@ -173,32 +168,19 @@ module Protocol
|
|
173
168
|
# the Protocol
|
174
169
|
# module.
|
175
170
|
def included(modul)
|
176
|
-
super
|
177
|
-
if modul.is_a? Class
|
178
|
-
|
179
|
-
check modul
|
171
|
+
result = super
|
172
|
+
if modul.is_a? Class
|
173
|
+
check! modul
|
180
174
|
end
|
175
|
+
result
|
181
176
|
end
|
182
177
|
|
183
178
|
def extend_object(object)
|
184
179
|
result = super
|
185
|
-
|
186
|
-
$DEBUG and warn "#{name} is checking class #{object}"
|
187
|
-
check object
|
188
|
-
end
|
180
|
+
check! object
|
189
181
|
result
|
190
182
|
end
|
191
183
|
|
192
|
-
# Sets the check mode to +id+. +id+ should be one of :none, :warning, or
|
193
|
-
# :error. The mode to use while doing a conformity check is always the root
|
194
|
-
# module, that is, the modes of the included modules aren't important for
|
195
|
-
# the check.
|
196
|
-
def check_failure(mode)
|
197
|
-
CHECK_MODES.include?(mode) or
|
198
|
-
raise ArgumentError, "illegal check mode #{mode}"
|
199
|
-
@mode = mode
|
200
|
-
end
|
201
|
-
|
202
184
|
# This method defines one of the messages, the protocol in question
|
203
185
|
# consists of: The messages which the class, that conforms to this
|
204
186
|
# protocol, should understand and respond to. An example shows best
|
@@ -226,12 +208,12 @@ module Protocol
|
|
226
208
|
end
|
227
209
|
private :parse_instance_method_signature
|
228
210
|
|
229
|
-
#
|
211
|
+
# Infer a method signature from an instance method named +methodname+ of
|
230
212
|
# +modul+. This means that this protocol should understand these instance
|
231
213
|
# methods with their arity and block expectation. Note that automatic
|
232
214
|
# detection of blocks does not work for Ruby methods defined in C. You can
|
233
215
|
# set the +block_expected+ argument if you want to do this manually.
|
234
|
-
def
|
216
|
+
def infer(modul, methodname = modul.public_instance_methods(false), block_expected = nil)
|
235
217
|
Module === modul or
|
236
218
|
raise TypeError, "expected Module not #{modul.class} as modul argument"
|
237
219
|
methodnames = methodname.respond_to?(:to_ary) ?
|
@@ -254,7 +236,7 @@ module Protocol
|
|
254
236
|
# Return true, if the ProtocolModule is currently in implementation mode.
|
255
237
|
# Otherwise return false.
|
256
238
|
def implementation?
|
257
|
-
|
239
|
+
@implementation
|
258
240
|
end
|
259
241
|
|
260
242
|
# Switch to specification mode. Defined methods are added to the protocol
|
data/lib/protocol/version.rb
CHANGED
data/lib/protocol/xt.rb
CHANGED
@@ -6,17 +6,22 @@ module Protocol
|
|
6
6
|
# :none or :warning, and conformance of a class to a protocol should be
|
7
7
|
# checked later in runtime.
|
8
8
|
def conform_to?(protocol)
|
9
|
-
protocol.check(self
|
9
|
+
protocol.check(self)
|
10
10
|
end
|
11
11
|
|
12
|
-
def conform_to
|
12
|
+
def conform_to(protocol)
|
13
13
|
extend(protocol)
|
14
14
|
end
|
15
15
|
|
16
16
|
# Define a protocol configured by +block+. Look at the methods of
|
17
17
|
# ProtocolModule to get an idea on how to do that.
|
18
|
-
def Protocol(&block)
|
19
|
-
ProtocolModule.new(&block)
|
18
|
+
def Protocol(modul = nil, &block)
|
19
|
+
pm = ProtocolModule.new(&block)
|
20
|
+
if modul
|
21
|
+
pm.infer(modul)
|
22
|
+
else
|
23
|
+
pm
|
24
|
+
end
|
20
25
|
end
|
21
26
|
|
22
27
|
alias protocol Protocol
|
@@ -35,7 +40,7 @@ module Protocol
|
|
35
40
|
# :none or :warning, and conformance of a class to a protocol should be
|
36
41
|
# checked later in runtime.
|
37
42
|
def conform_to?(protocol)
|
38
|
-
protocol.check(self
|
43
|
+
protocol.check(self)
|
39
44
|
end
|
40
45
|
end
|
41
46
|
end
|
data/protocol.gemspec
CHANGED
@@ -1,39 +1,43 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
# stub: protocol 2.0.0 ruby lib
|
2
3
|
|
3
4
|
Gem::Specification.new do |s|
|
4
|
-
s.name = "protocol"
|
5
|
-
s.version = "
|
5
|
+
s.name = "protocol".freeze
|
6
|
+
s.version = "2.0.0"
|
6
7
|
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.
|
9
|
-
s.
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.
|
13
|
-
s.
|
14
|
-
s.
|
15
|
-
s.
|
16
|
-
s.
|
17
|
-
s.
|
18
|
-
s.rubygems_version = "
|
19
|
-
s.summary = "Method Protocols for Ruby Classes"
|
20
|
-
s.test_files = ["tests/protocol_method_parser_test.rb", "tests/protocol_test.rb", "tests/test_helper.rb"]
|
8
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
|
+
s.require_paths = ["lib".freeze]
|
10
|
+
s.authors = ["Florian Frank".freeze]
|
11
|
+
s.date = "2019-11-05"
|
12
|
+
s.description = "This library offers an implementation of protocols against which you can check\nthe conformity of your classes or instances of your classes. They are a bit\nlike Java Interfaces, but as mixin modules they can also contain already\nimplemented methods. Additionaly you can define preconditions/postconditions\nfor methods specified in a protocol.\n".freeze
|
13
|
+
s.email = "flori@ping.de".freeze
|
14
|
+
s.extra_rdoc_files = ["README.rdoc".freeze, "lib/protocol.rb".freeze, "lib/protocol/core.rb".freeze, "lib/protocol/descriptor.rb".freeze, "lib/protocol/errors.rb".freeze, "lib/protocol/message.rb".freeze, "lib/protocol/method_parser/ruby_parser.rb".freeze, "lib/protocol/post_condition.rb".freeze, "lib/protocol/protocol_module.rb".freeze, "lib/protocol/utilities.rb".freeze, "lib/protocol/version.rb".freeze, "lib/protocol/xt.rb".freeze]
|
15
|
+
s.files = [".gitignore".freeze, ".travis.yml".freeze, ".utilsrc".freeze, "CHANGES".freeze, "COPYING".freeze, "Gemfile".freeze, "README.rdoc".freeze, "Rakefile".freeze, "VERSION".freeze, "benchmarks/data/.keep".freeze, "benchmarks/method_parser.rb".freeze, "examples/assignments.rb".freeze, "examples/comparing.rb".freeze, "examples/enumerating.rb".freeze, "examples/game.rb".freeze, "examples/hello_world_patternitis.rb".freeze, "examples/indexing.rb".freeze, "examples/queue.rb".freeze, "examples/stack.rb".freeze, "examples/synchronizing.rb".freeze, "install.rb".freeze, "lib/protocol.rb".freeze, "lib/protocol/core.rb".freeze, "lib/protocol/descriptor.rb".freeze, "lib/protocol/errors.rb".freeze, "lib/protocol/message.rb".freeze, "lib/protocol/method_parser/ruby_parser.rb".freeze, "lib/protocol/post_condition.rb".freeze, "lib/protocol/protocol_module.rb".freeze, "lib/protocol/utilities.rb".freeze, "lib/protocol/version.rb".freeze, "lib/protocol/xt.rb".freeze, "protocol.gemspec".freeze, "tests/protocol_core_test.rb".freeze, "tests/protocol_method_parser_test.rb".freeze, "tests/protocol_test.rb".freeze, "tests/test_helper.rb".freeze]
|
16
|
+
s.homepage = "http://flori.github.com/protocol".freeze
|
17
|
+
s.licenses = ["GPL-2".freeze]
|
18
|
+
s.rdoc_options = ["--title".freeze, "Protocol - Method Protocols for Ruby Classes".freeze, "--main".freeze, "README.rdoc".freeze]
|
19
|
+
s.rubygems_version = "3.0.6".freeze
|
20
|
+
s.summary = "Method Protocols for Ruby Classes".freeze
|
21
|
+
s.test_files = ["tests/protocol_core_test.rb".freeze, "tests/protocol_method_parser_test.rb".freeze, "tests/protocol_test.rb".freeze, "tests/test_helper.rb".freeze]
|
21
22
|
|
22
23
|
if s.respond_to? :specification_version then
|
23
24
|
s.specification_version = 4
|
24
25
|
|
25
26
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
26
|
-
s.add_development_dependency(%q<gem_hadar
|
27
|
-
s.add_development_dependency(%q<simplecov
|
28
|
-
s.
|
27
|
+
s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.9.1"])
|
28
|
+
s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
|
29
|
+
s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
|
30
|
+
s.add_runtime_dependency(%q<ruby_parser>.freeze, ["~> 3.0"])
|
29
31
|
else
|
30
|
-
s.add_dependency(%q<gem_hadar
|
31
|
-
s.add_dependency(%q<simplecov
|
32
|
-
s.add_dependency(%q<
|
32
|
+
s.add_dependency(%q<gem_hadar>.freeze, ["~> 1.9.1"])
|
33
|
+
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
34
|
+
s.add_dependency(%q<test-unit>.freeze, [">= 0"])
|
35
|
+
s.add_dependency(%q<ruby_parser>.freeze, ["~> 3.0"])
|
33
36
|
end
|
34
37
|
else
|
35
|
-
s.add_dependency(%q<gem_hadar
|
36
|
-
s.add_dependency(%q<simplecov
|
37
|
-
s.add_dependency(%q<
|
38
|
+
s.add_dependency(%q<gem_hadar>.freeze, ["~> 1.9.1"])
|
39
|
+
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
40
|
+
s.add_dependency(%q<test-unit>.freeze, [">= 0"])
|
41
|
+
s.add_dependency(%q<ruby_parser>.freeze, ["~> 3.0"])
|
38
42
|
end
|
39
43
|
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
require 'protocol/core'
|
5
|
+
|
6
|
+
class ProtocolCoreTest < Test::Unit::TestCase
|
7
|
+
def test_comparing_numeric
|
8
|
+
assert Numeric.conform_to?(Comparing)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_comparing_complex
|
12
|
+
assert_false Complex.conform_to?(Comparing)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_comparing_array
|
16
|
+
assert Array.conform_to?(Comparing)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_comparing_string
|
20
|
+
assert String.conform_to?(Comparing)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_enumerating_array
|
24
|
+
assert Array.conform_to?(Enumerating)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_enumerating_float
|
28
|
+
assert_false Float.conform_to?(Enumerating)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_enumerating_hash
|
32
|
+
assert Hash.conform_to?(Enumerating)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_indexing_array
|
36
|
+
assert Array.conform_to?(Indexing)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_indexing_proc
|
40
|
+
assert_false Proc.conform_to?(Indexing)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_indexing_hash
|
44
|
+
assert Hash.conform_to?(Indexing)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_sychronizing_mutex
|
48
|
+
assert Mutex.conform_to?(Synchronizing)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_sychronizing_hash
|
52
|
+
assert_false Hash.conform_to?(Synchronizing)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_my_synchronizer
|
56
|
+
s = Class.new do
|
57
|
+
def initialize
|
58
|
+
@lock = false
|
59
|
+
end
|
60
|
+
|
61
|
+
def lock
|
62
|
+
@lock = true
|
63
|
+
end
|
64
|
+
|
65
|
+
def locked?
|
66
|
+
@lock
|
67
|
+
end
|
68
|
+
|
69
|
+
def unlock
|
70
|
+
@lock = false
|
71
|
+
end
|
72
|
+
|
73
|
+
conform_to Synchronizing
|
74
|
+
end.new
|
75
|
+
assert_false s.locked?
|
76
|
+
s.synchronize { assert s.locked? }
|
77
|
+
assert_false s.locked?
|
78
|
+
end
|
79
|
+
end
|
@@ -52,94 +52,95 @@ class ProtocolMethodParserTest < Test::Unit::TestCase
|
|
52
52
|
|
53
53
|
def complex_end
|
54
54
|
a = :end
|
55
|
-
foo { }
|
55
|
+
foo() { }
|
56
|
+
a
|
56
57
|
end
|
57
58
|
|
58
59
|
def complex
|
59
|
-
foo { }
|
60
|
+
foo() { }
|
60
61
|
end
|
61
62
|
end
|
62
63
|
|
63
64
|
def test_args
|
64
65
|
m = :empty; mp = MethodParser.new(A, m)
|
65
|
-
assert_equal
|
66
|
-
assert_equal
|
67
|
-
assert_equal
|
66
|
+
assert_equal(0, mp.arity, "arity failed for A##{m}")
|
67
|
+
assert_equal([ ], mp.args, "args failed for A##{m}")
|
68
|
+
assert_equal([ ], mp.arg_kinds, "args failed for A##{m}")
|
68
69
|
assert !mp.complex?
|
69
70
|
m = :none; mp = MethodParser.new(A, m)
|
70
|
-
assert_equal
|
71
|
-
assert_equal
|
72
|
-
assert_equal
|
71
|
+
assert_equal(0, mp.arity, "arity failed for A##{m}")
|
72
|
+
assert_equal([ ], mp.args, "args failed for A##{m}")
|
73
|
+
assert_equal([ ], mp.arg_kinds, "args failed for A##{m}")
|
73
74
|
assert !mp.complex?
|
74
75
|
m = :one_req; mp = MethodParser.new(A, m)
|
75
|
-
assert_equal
|
76
|
-
assert_equal
|
77
|
-
assert_equal
|
76
|
+
assert_equal(1, mp.arity, "arity failed for A##{m}")
|
77
|
+
assert_equal([ :a ], mp.args, "args failed for A##{m}")
|
78
|
+
assert_equal([ :req ], mp.arg_kinds, "args failed for A##{m}")
|
78
79
|
assert !mp.complex?
|
79
80
|
m = :two_req; mp = MethodParser.new(A, m)
|
80
|
-
assert_equal
|
81
|
-
assert_equal
|
82
|
-
assert_equal
|
81
|
+
assert_equal(2, mp.arity, "arity failed for A##{m}")
|
82
|
+
assert_equal([ :req, :req ], mp.arg_kinds, "args failed for A##{m}")
|
83
|
+
assert_equal([ :a, :b ], mp.args, "args failed for A##{m}")
|
83
84
|
assert !mp.complex?
|
84
85
|
m = :one_req_one_opt; mp = MethodParser.new(A, m)
|
85
|
-
assert_equal
|
86
|
-
assert_equal
|
87
|
-
assert_equal
|
86
|
+
assert_equal(-2, mp.arity, "arity failed for A##{m}")
|
87
|
+
assert_equal([ :a, :b ], mp.args, "args failed for A##{m}")
|
88
|
+
assert_equal([ :req, :opt ], mp.arg_kinds, "args failed for A##{m}")
|
88
89
|
assert !mp.complex?
|
89
90
|
m = :one_opt; mp = MethodParser.new(A, m)
|
90
|
-
assert_equal
|
91
|
-
assert_equal
|
92
|
-
assert_equal
|
91
|
+
assert_equal(-1, mp.arity, "arity failed for A##{m}")
|
92
|
+
assert_equal([ :a ], mp.args, "args failed for A##{m}")
|
93
|
+
assert_equal([ :opt ], mp.arg_kinds, "args failed for A##{m}")
|
93
94
|
assert !mp.complex?
|
94
95
|
m = :two_opt; mp = MethodParser.new(A, m)
|
95
|
-
assert_equal
|
96
|
-
assert_equal
|
97
|
-
assert_equal
|
96
|
+
assert_equal(-1, mp.arity, "arity failed for A##{m}")
|
97
|
+
assert_equal([ :a, :b ], mp.args, "args failed for A##{m}")
|
98
|
+
assert_equal([ :opt, :opt ], mp.arg_kinds, "args failed for A##{m}")
|
98
99
|
assert !mp.complex?
|
99
100
|
m = :one_req_rest; mp = MethodParser.new(A, m)
|
100
|
-
assert_equal
|
101
|
-
assert_equal
|
102
|
-
assert_equal
|
101
|
+
assert_equal(-2, mp.arity, "arity failed for A##{m}")
|
102
|
+
assert_equal([ :a, :'*b' ], mp.args, "args failed for A##{m}")
|
103
|
+
assert_equal([ :req, :rest ], mp.arg_kinds, "args failed for A##{m}")
|
103
104
|
assert !mp.complex?
|
104
105
|
m = :one_opt_rest; mp = MethodParser.new(A, m)
|
105
|
-
assert_equal
|
106
|
-
assert_equal
|
107
|
-
assert_equal
|
106
|
+
assert_equal(-1, mp.arity, "arity failed for A##{m}")
|
107
|
+
assert_equal([ :a, :'*b' ], mp.args, "args failed for A##{m}")
|
108
|
+
assert_equal([ :opt, :rest ], mp.arg_kinds, "args failed for A##{m}")
|
108
109
|
assert !mp.complex?
|
109
110
|
m = :block; mp = MethodParser.new(A, m)
|
110
|
-
assert_equal
|
111
|
-
assert_equal
|
112
|
-
assert_equal
|
111
|
+
assert_equal(0, mp.arity, "arity failed for A##{m}")
|
112
|
+
assert_equal([ :'&b' ], mp.args, "args failed for A##{m}")
|
113
|
+
assert_equal([ :block ], mp.arg_kinds, "args failed for A##{m}")
|
113
114
|
assert !mp.complex?
|
114
115
|
m = :one_req_block; mp = MethodParser.new(A, m)
|
115
|
-
assert_equal
|
116
|
-
assert_equal
|
117
|
-
assert_equal
|
116
|
+
assert_equal(1, mp.arity, "arity failed for A##{m}")
|
117
|
+
assert_equal([ :a, :'&b' ], mp.args, "args failed for A##{m}")
|
118
|
+
assert_equal([ :req, :block ], mp.arg_kinds, "args failed for A##{m}")
|
118
119
|
assert !mp.complex?
|
119
120
|
m = :one_opt_block; mp = MethodParser.new(A, m)
|
120
|
-
assert_equal
|
121
|
-
assert_equal
|
122
|
-
assert_equal
|
121
|
+
assert_equal(-1, mp.arity, "arity failed for A##{m}")
|
122
|
+
assert_equal([ :a, :'&b' ], mp.args, "args failed for A##{m}")
|
123
|
+
assert_equal([ :opt, :block ], mp.arg_kinds, "args failed for A##{m}")
|
123
124
|
assert !mp.complex?
|
124
125
|
m = :yield_block; mp = MethodParser.new(A, m)
|
125
|
-
assert_equal
|
126
|
-
assert_equal
|
127
|
-
assert_equal
|
126
|
+
assert_equal(0, mp.arity, "arity failed for A##{m}")
|
127
|
+
assert_equal([ :'&b' ], mp.args, "args failed for A##{m}")
|
128
|
+
assert_equal([ :block ], mp.arg_kinds, "args failed for A##{m}")
|
128
129
|
assert !mp.complex?
|
129
130
|
m = :yield; mp = MethodParser.new(A, m)
|
130
|
-
assert_equal
|
131
|
-
assert_equal
|
132
|
-
assert_equal
|
131
|
+
assert_equal(0, mp.arity, "arity failed for A##{m}")
|
132
|
+
assert_equal([ :'&block' ], mp.args, "args failed for A##{m}")
|
133
|
+
assert_equal([ :block ], mp.arg_kinds, "args failed for A##{m}")
|
133
134
|
assert !mp.complex?
|
134
135
|
m = :complex_end; mp = MethodParser.new(A, m)
|
135
|
-
assert_equal
|
136
|
-
assert_equal
|
137
|
-
assert_equal
|
136
|
+
assert_equal(0, mp.arity, "arity failed for A##{m}")
|
137
|
+
assert_equal([ ], mp.args, "args failed for A##{m}")
|
138
|
+
assert_equal([ ], mp.arg_kinds, "args failed for A##{m}")
|
138
139
|
assert mp.complex?
|
139
140
|
m = :complex; mp = MethodParser.new(A, m)
|
140
|
-
assert_equal
|
141
|
-
assert_equal
|
142
|
-
assert_equal
|
141
|
+
assert_equal(0, mp.arity, "arity failed for A##{m}")
|
142
|
+
assert_equal([ ], mp.args, "args failed for A##{m}")
|
143
|
+
assert_equal([ ], mp.arg_kinds, "args failed for A##{m}")
|
143
144
|
assert mp.complex?
|
144
145
|
end
|
145
146
|
end
|