protocol 0.9.0 → 1.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 +7 -0
- data/.gitignore +6 -0
- data/.travis.yml +11 -0
- data/Gemfile +7 -0
- data/{doc-main.txt → README.rdoc} +12 -12
- data/Rakefile +29 -89
- data/VERSION +1 -1
- data/benchmarks/data/.keep +0 -0
- data/benchmarks/method_parser.rb +3 -0
- data/examples/assignments.rb +59 -0
- data/examples/game.rb +1 -1
- data/examples/hello_world_patternitis.rb +1 -1
- data/examples/locking.rb +1 -1
- data/lib/protocol/descriptor.rb +34 -0
- data/lib/protocol/errors.rb +95 -0
- data/lib/protocol/message.rb +219 -0
- data/lib/protocol/method_parser/ruby_parser.rb +5 -2
- data/lib/protocol/post_condition.rb +57 -0
- data/lib/protocol/protocol_module.rb +291 -0
- data/lib/protocol/utilities.rb +21 -0
- data/lib/protocol/version.rb +1 -1
- data/lib/protocol/xt.rb +41 -0
- data/lib/protocol.rb +8 -741
- data/protocol.gemspec +32 -22
- data/tests/{test_protocol_method_parser.rb → protocol_method_parser_test.rb} +2 -3
- data/tests/{test_protocol.rb → protocol_test.rb} +106 -107
- data/tests/test_helper.rb +8 -0
- metadata +105 -65
- data/lib/protocol/method_parser/parse_tree.rb +0 -124
- data/make_doc.rb +0 -5
data/protocol.gemspec
CHANGED
@@ -1,28 +1,38 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
|
2
3
|
Gem::Specification.new do |s|
|
3
|
-
|
4
|
-
|
5
|
-
s.files = ["CHANGES", "COPYING", "Rakefile", "VERSION", "benchmarks", "benchmarks/data", "benchmarks/method_parser.rb", "doc-main.txt", "examples", "examples/comparing.rb", "examples/enumerating.rb", "examples/game.rb", "examples/hello_world_patternitis.rb", "examples/indexing.rb", "examples/locking.rb", "examples/queue.rb", "examples/stack.rb", "install.rb", "lib", "lib/protocol", "lib/protocol.rb", "lib/protocol/core.rb", "lib/protocol/method_parser", "lib/protocol/method_parser/parse_tree.rb", "lib/protocol/method_parser/ruby_parser.rb", "lib/protocol/version.rb", "make_doc.rb", "protocol.gemspec", "tests", "tests/test_protocol.rb", "tests/test_protocol_method_parser.rb"]
|
6
|
-
s.summary = 'Method Protocols for Ruby Classes'
|
7
|
-
s.description = <<EOT
|
8
|
-
This library offers an implementation of protocols against which you can check
|
9
|
-
the conformity of your classes or instances of your classes. They are a bit
|
10
|
-
like Java Interfaces, but as mixin modules they can also contain already
|
11
|
-
implemented methods. Additionaly you can define preconditions/postconditions
|
12
|
-
for methods specified in a protocol.
|
13
|
-
EOT
|
4
|
+
s.name = "protocol"
|
5
|
+
s.version = "1.0.0"
|
14
6
|
|
15
|
-
|
16
|
-
|
17
|
-
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Florian Frank"]
|
9
|
+
s.date = "2013-07-18"
|
10
|
+
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"
|
11
|
+
s.email = "flori@ping.de"
|
12
|
+
s.extra_rdoc_files = ["README.rdoc", "lib/protocol.rb", "lib/protocol/core.rb", "lib/protocol/descriptor.rb", "lib/protocol/errors.rb", "lib/protocol/message.rb", "lib/protocol/method_parser/ruby_parser.rb", "lib/protocol/post_condition.rb", "lib/protocol/protocol_module.rb", "lib/protocol/utilities.rb", "lib/protocol/version.rb", "lib/protocol/xt.rb"]
|
13
|
+
s.files = [".gitignore", ".travis.yml", "CHANGES", "COPYING", "Gemfile", "README.rdoc", "Rakefile", "VERSION", "benchmarks/data/.keep", "benchmarks/method_parser.rb", "examples/assignments.rb", "examples/comparing.rb", "examples/enumerating.rb", "examples/game.rb", "examples/hello_world_patternitis.rb", "examples/indexing.rb", "examples/locking.rb", "examples/queue.rb", "examples/stack.rb", "install.rb", "lib/protocol.rb", "lib/protocol/core.rb", "lib/protocol/descriptor.rb", "lib/protocol/errors.rb", "lib/protocol/message.rb", "lib/protocol/method_parser/ruby_parser.rb", "lib/protocol/post_condition.rb", "lib/protocol/protocol_module.rb", "lib/protocol/utilities.rb", "lib/protocol/version.rb", "lib/protocol/xt.rb", "protocol.gemspec", "tests/protocol_method_parser_test.rb", "tests/protocol_test.rb", "tests/test_helper.rb"]
|
14
|
+
s.homepage = "http://flori.github.com/protocol"
|
15
|
+
s.rdoc_options = ["--title", "Protocol - Method Protocols for Ruby Classes", "--main", "README.rdoc"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubygems_version = "2.0.4"
|
18
|
+
s.summary = "Method Protocols for Ruby Classes"
|
19
|
+
s.test_files = ["tests/protocol_method_parser_test.rb", "tests/protocol_test.rb", "tests/test_helper.rb"]
|
18
20
|
|
19
|
-
|
20
|
-
s.
|
21
|
-
s.extra_rdoc_files << 'doc-main.txt'
|
22
|
-
s.test_files << 'tests/test_protocol.rb'
|
21
|
+
if s.respond_to? :specification_version then
|
22
|
+
s.specification_version = 4
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
25
|
+
s.add_development_dependency(%q<gem_hadar>, ["~> 0.1.8"])
|
26
|
+
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
27
|
+
s.add_runtime_dependency(%q<ruby_parser>, ["~> 3.0"])
|
28
|
+
else
|
29
|
+
s.add_dependency(%q<gem_hadar>, ["~> 0.1.8"])
|
30
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
31
|
+
s.add_dependency(%q<ruby_parser>, ["~> 3.0"])
|
32
|
+
end
|
33
|
+
else
|
34
|
+
s.add_dependency(%q<gem_hadar>, ["~> 0.1.8"])
|
35
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
36
|
+
s.add_dependency(%q<ruby_parser>, ["~> 3.0"])
|
28
37
|
end
|
38
|
+
end
|
@@ -1,67 +1,66 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'protocol'
|
3
|
+
require 'test_helper'
|
5
4
|
|
6
|
-
class
|
7
|
-
|
5
|
+
class ProtocolTest < Test::Unit::TestCase
|
6
|
+
ProtocolTest_foo = Protocol do
|
8
7
|
check_failure :none
|
9
8
|
|
10
9
|
understand :foo
|
11
10
|
end
|
12
11
|
|
13
|
-
|
12
|
+
ProtocolTest_foo_fail = Protocol do
|
14
13
|
understand :foo
|
15
14
|
end
|
16
15
|
|
17
|
-
|
16
|
+
ProtocolTest_bar = Protocol do
|
18
17
|
understand :bar
|
19
18
|
end
|
20
19
|
|
21
|
-
|
22
|
-
include
|
20
|
+
ProtocolTest_foo_bar_1 = Protocol do
|
21
|
+
include ProtocolTest::ProtocolTest_foo
|
23
22
|
understand :bar
|
24
23
|
end
|
25
24
|
|
26
|
-
|
27
|
-
include
|
25
|
+
ProtocolTest_foo_bar_1_fail = Protocol do
|
26
|
+
include ProtocolTest::ProtocolTest_foo
|
28
27
|
understand :bar
|
29
28
|
end
|
30
29
|
|
31
|
-
|
32
|
-
include
|
33
|
-
include
|
30
|
+
ProtocolTest_foo_bar_2 = Protocol do
|
31
|
+
include ProtocolTest::ProtocolTest_foo
|
32
|
+
include ProtocolTest::ProtocolTest_bar
|
34
33
|
end
|
35
34
|
|
36
|
-
|
35
|
+
ProtocolTest_foo_bar_2_fail = Protocol do
|
37
36
|
check_failure :error
|
38
37
|
|
39
|
-
include
|
40
|
-
include
|
38
|
+
include ProtocolTest::ProtocolTest_foo
|
39
|
+
include ProtocolTest::ProtocolTest_bar
|
41
40
|
end
|
42
41
|
|
43
|
-
|
42
|
+
ProtocolTestArgs = Protocol do
|
44
43
|
understand :bar, 2
|
45
44
|
understand :baz, 3
|
46
45
|
understand :foo, -1
|
47
46
|
end
|
48
47
|
|
49
|
-
|
50
|
-
include
|
48
|
+
ProtocolTestArgsOverwritten = Protocol do
|
49
|
+
include ProtocolTest::ProtocolTestArgs
|
51
50
|
|
52
51
|
def bar(a, b, c)
|
53
52
|
end
|
54
|
-
|
53
|
+
|
55
54
|
def foo(a)
|
56
55
|
end
|
57
56
|
end
|
58
57
|
|
59
|
-
|
58
|
+
ProtocolTestBlock = Protocol do
|
60
59
|
def foo(x, &block)
|
61
60
|
end
|
62
61
|
end
|
63
62
|
|
64
|
-
|
63
|
+
ProtocolTestPartial = Protocol do
|
65
64
|
check_failure :none
|
66
65
|
|
67
66
|
implementation
|
@@ -77,7 +76,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
77
76
|
def each(&block) end
|
78
77
|
end
|
79
78
|
|
80
|
-
|
79
|
+
ProtocolTestPartial_fail = Protocol do
|
81
80
|
check_failure :error
|
82
81
|
|
83
82
|
def each(&block) end
|
@@ -91,22 +90,22 @@ class TestProtocol < Test::Unit::TestCase
|
|
91
90
|
end
|
92
91
|
end
|
93
92
|
|
94
|
-
|
93
|
+
ProtocolTestWrapMethodPassedFoo = Protocol do
|
95
94
|
def foo(foo, *rest) end
|
96
95
|
end
|
97
96
|
|
98
|
-
|
97
|
+
ProtocolTestWrapMethodPassedBar = Protocol do
|
99
98
|
def bar() end
|
100
99
|
end
|
101
100
|
|
102
|
-
|
101
|
+
ProtocolTestWrapMethod = Protocol do
|
103
102
|
def foo_bar(foo, bar)
|
104
|
-
::
|
105
|
-
::
|
103
|
+
::ProtocolTest::ProtocolTestWrapMethodPassedFoo =~ foo
|
104
|
+
::ProtocolTest::ProtocolTestWrapMethodPassedBar =~ bar
|
106
105
|
end
|
107
106
|
end
|
108
107
|
|
109
|
-
|
108
|
+
ProtocolTestPostcondition = Protocol do
|
110
109
|
def foo_bar(foo, bar)
|
111
110
|
postcondition { foo + bar == result }
|
112
111
|
end
|
@@ -116,7 +115,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
116
115
|
end
|
117
116
|
end
|
118
117
|
|
119
|
-
|
118
|
+
ProtocolTestPrecondition = Protocol do
|
120
119
|
def foo_bar(foo, bar)
|
121
120
|
precondition { foo == 5 }
|
122
121
|
precondition { bar == 7 }
|
@@ -127,11 +126,11 @@ class TestProtocol < Test::Unit::TestCase
|
|
127
126
|
def one_with_block(foo, &block) end
|
128
127
|
end
|
129
128
|
|
130
|
-
|
131
|
-
inherit
|
129
|
+
ProtocolTestInheritance = Protocol do
|
130
|
+
inherit ProtocolTest::MyClass, :one_with_block
|
132
131
|
end
|
133
132
|
|
134
|
-
|
133
|
+
ProtocolTestInheritanceC = Protocol do
|
135
134
|
inherit ::Array, :each, true
|
136
135
|
end
|
137
136
|
|
@@ -170,46 +169,46 @@ class TestProtocol < Test::Unit::TestCase
|
|
170
169
|
c1 = Class.new do
|
171
170
|
def foo; end
|
172
171
|
|
173
|
-
conform_to
|
172
|
+
conform_to ProtocolTest_foo
|
174
173
|
end
|
175
|
-
assert c1.conform_to?(
|
176
|
-
assert c1.new.conform_to?(
|
177
|
-
assert !c1.conform_to?(
|
178
|
-
assert !c1.new.conform_to?(
|
179
|
-
assert !c1.conform_to?(
|
180
|
-
assert !c1.new.conform_to?(
|
181
|
-
assert_equal 2,
|
182
|
-
assert_equal 2,
|
183
|
-
assert_equal 1,
|
184
|
-
assert_equal 1,
|
174
|
+
assert c1.conform_to?(ProtocolTest_foo)
|
175
|
+
assert c1.new.conform_to?(ProtocolTest_foo)
|
176
|
+
assert !c1.conform_to?(ProtocolTest_foo_bar_1)
|
177
|
+
assert !c1.new.conform_to?(ProtocolTest_foo_bar_1)
|
178
|
+
assert !c1.conform_to?(ProtocolTest_bar)
|
179
|
+
assert !c1.new.conform_to?(ProtocolTest_bar)
|
180
|
+
assert_equal 2, ProtocolTest_foo_bar_1.check_failures(Object).size
|
181
|
+
assert_equal 2, ProtocolTest_foo_bar_1.check_failures(Object.new).size
|
182
|
+
assert_equal 1, ProtocolTest_foo_bar_1.check_failures(c1).size
|
183
|
+
assert_equal 1, ProtocolTest_foo_bar_1.check_failures(c1.new).size
|
185
184
|
|
186
185
|
c2 = Class.new do
|
187
|
-
conform_to
|
186
|
+
conform_to ProtocolTest_foo
|
188
187
|
end
|
189
|
-
assert !c2.conform_to?(
|
190
|
-
assert !c2.new.conform_to?(
|
191
|
-
assert !c2.conform_to?(
|
192
|
-
assert !c2.new.conform_to?(
|
193
|
-
assert !c2.conform_to?(
|
194
|
-
assert !c2.new.conform_to?(
|
188
|
+
assert !c2.conform_to?(ProtocolTest_foo)
|
189
|
+
assert !c2.new.conform_to?(ProtocolTest_foo)
|
190
|
+
assert !c2.conform_to?(ProtocolTest_foo_bar_1)
|
191
|
+
assert !c2.new.conform_to?(ProtocolTest_foo_bar_1)
|
192
|
+
assert !c2.conform_to?(ProtocolTest_bar)
|
193
|
+
assert !c2.new.conform_to?(ProtocolTest_bar)
|
195
194
|
end
|
196
195
|
|
197
196
|
def test_simple_with_fail
|
198
197
|
c1 = Class.new do
|
199
198
|
def foo; end
|
200
199
|
|
201
|
-
conform_to
|
200
|
+
conform_to ProtocolTest_foo_fail
|
202
201
|
end
|
203
|
-
assert c1.conform_to?(
|
204
|
-
assert c1.new.conform_to?(
|
205
|
-
assert !c1.conform_to?(
|
206
|
-
assert !c1.new.conform_to?(
|
207
|
-
assert !c1.conform_to?(
|
208
|
-
assert !c1.new.conform_to?(
|
202
|
+
assert c1.conform_to?(ProtocolTest_foo_fail)
|
203
|
+
assert c1.new.conform_to?(ProtocolTest_foo_fail)
|
204
|
+
assert !c1.conform_to?(ProtocolTest_foo_bar_1)
|
205
|
+
assert !c1.new.conform_to?(ProtocolTest_foo_bar_1)
|
206
|
+
assert !c1.conform_to?(ProtocolTest_bar)
|
207
|
+
assert !c1.new.conform_to?(ProtocolTest_bar)
|
209
208
|
|
210
209
|
begin
|
211
210
|
c2 = Class.new do
|
212
|
-
conform_to
|
211
|
+
conform_to ProtocolTest_foo_fail
|
213
212
|
end
|
214
213
|
assert(false)
|
215
214
|
rescue Protocol::CheckFailed
|
@@ -223,7 +222,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
223
222
|
begin
|
224
223
|
c = Class.new do
|
225
224
|
def bar; end
|
226
|
-
conform_to
|
225
|
+
conform_to ProtocolTest_foo_bar_1_fail
|
227
226
|
end
|
228
227
|
assert(false)
|
229
228
|
rescue Protocol::CheckFailed
|
@@ -237,18 +236,18 @@ class TestProtocol < Test::Unit::TestCase
|
|
237
236
|
c = Class.new do
|
238
237
|
def foo; end
|
239
238
|
def bar; end
|
240
|
-
conform_to
|
239
|
+
conform_to ProtocolTest_foo_bar_1
|
241
240
|
end
|
242
241
|
assert(true)
|
243
|
-
assert c.conform_to?(
|
242
|
+
assert c.conform_to?(ProtocolTest_foo_bar_1)
|
244
243
|
end
|
245
244
|
|
246
245
|
def test_inclusion3
|
247
246
|
c = Class.new do
|
248
247
|
def bar; end
|
249
|
-
conform_to
|
248
|
+
conform_to ProtocolTest_foo_bar_2
|
250
249
|
end
|
251
|
-
assert !c.conform_to?(
|
250
|
+
assert !c.conform_to?(ProtocolTest_foo_bar_2)
|
252
251
|
assert(false)
|
253
252
|
rescue Protocol::CheckFailed
|
254
253
|
assert(true)
|
@@ -264,10 +263,10 @@ class TestProtocol < Test::Unit::TestCase
|
|
264
263
|
def foo(*x) x end
|
265
264
|
def baz(x, y, z) Math.sqrt(x * x + y * y + z * z) end
|
266
265
|
|
267
|
-
conform_to
|
266
|
+
conform_to ProtocolTestArgs
|
268
267
|
end
|
269
|
-
assert c.conform_to?(
|
270
|
-
assert c.new.conform_to?(
|
268
|
+
assert c.conform_to?(ProtocolTestArgs)
|
269
|
+
assert c.new.conform_to?(ProtocolTestArgs)
|
271
270
|
rescue
|
272
271
|
assert(false)
|
273
272
|
end
|
@@ -278,7 +277,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
278
277
|
def baz(x, y, z) Math.sqrt(x * x + y * y + z * z) end
|
279
278
|
def foo(x) x end
|
280
279
|
|
281
|
-
conform_to
|
280
|
+
conform_to ProtocolTestArgs
|
282
281
|
end
|
283
282
|
assert(false)
|
284
283
|
rescue Protocol::CheckFailed
|
@@ -293,7 +292,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
293
292
|
def baz(x, y, z) Math.sqrt(x * x + y * y + z * z) end
|
294
293
|
def foo(x) x end
|
295
294
|
|
296
|
-
conform_to
|
295
|
+
conform_to ProtocolTestArgs
|
297
296
|
end
|
298
297
|
rescue Protocol::CheckFailed
|
299
298
|
assert(true)
|
@@ -306,7 +305,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
306
305
|
c1 = Class.new do
|
307
306
|
def foo(x) end
|
308
307
|
|
309
|
-
conform_to
|
308
|
+
conform_to ProtocolTestBlock
|
310
309
|
end
|
311
310
|
rescue Protocol::CheckFailed
|
312
311
|
assert(true)
|
@@ -316,12 +315,12 @@ class TestProtocol < Test::Unit::TestCase
|
|
316
315
|
c1b = Class.new do
|
317
316
|
def foo(x) end
|
318
317
|
end
|
319
|
-
assert !c1b.new.conform_to?(
|
318
|
+
assert !c1b.new.conform_to?(ProtocolTestBlock)
|
320
319
|
begin
|
321
320
|
c2 = Class.new do
|
322
321
|
def foo(x, &block) block[x] end
|
323
322
|
|
324
|
-
conform_to
|
323
|
+
conform_to ProtocolTestBlock
|
325
324
|
end
|
326
325
|
assert(true)
|
327
326
|
rescue Protocol::CheckFailed
|
@@ -333,7 +332,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
333
332
|
c3 = Class.new do
|
334
333
|
def foo(x) yield x end
|
335
334
|
|
336
|
-
conform_to
|
335
|
+
conform_to ProtocolTestBlock
|
337
336
|
end
|
338
337
|
assert(true)
|
339
338
|
rescue Protocol::CheckFailed
|
@@ -342,9 +341,9 @@ class TestProtocol < Test::Unit::TestCase
|
|
342
341
|
assert(false)
|
343
342
|
end
|
344
343
|
obj = Object.new
|
345
|
-
assert !obj.conform_to?(
|
344
|
+
assert !obj.conform_to?(ProtocolTestBlock)
|
346
345
|
def obj.foo(x, &b) end
|
347
|
-
assert obj.conform_to?(
|
346
|
+
assert obj.conform_to?(ProtocolTestBlock)
|
348
347
|
end
|
349
348
|
|
350
349
|
def test_partial_without_fail
|
@@ -354,19 +353,19 @@ class TestProtocol < Test::Unit::TestCase
|
|
354
353
|
self
|
355
354
|
end
|
356
355
|
|
357
|
-
conform_to
|
356
|
+
conform_to ProtocolTestPartial
|
358
357
|
end
|
359
358
|
obj = c1.new
|
360
|
-
assert c1.conform_to?(
|
361
|
-
assert obj.conform_to?(
|
359
|
+
assert c1.conform_to?(ProtocolTestPartial)
|
360
|
+
assert obj.conform_to?(ProtocolTestPartial)
|
362
361
|
assert_equal [ 1, 4, 9], obj.map { |x| x * x }
|
363
362
|
assert_equal obj, obj.each { |x| x * x }
|
364
363
|
|
365
364
|
c2 = Class.new do
|
366
|
-
conform_to
|
365
|
+
conform_to ProtocolTestPartial
|
367
366
|
end
|
368
|
-
assert !c2.conform_to?(
|
369
|
-
assert !c2.new.conform_to?(
|
367
|
+
assert !c2.conform_to?(ProtocolTestPartial)
|
368
|
+
assert !c2.new.conform_to?(ProtocolTestPartial)
|
370
369
|
assert_raises(NoMethodError) { c2.new.map { |x| x * x } }
|
371
370
|
assert_equal obj, obj.each { |x| x * x }
|
372
371
|
end
|
@@ -378,17 +377,17 @@ class TestProtocol < Test::Unit::TestCase
|
|
378
377
|
self
|
379
378
|
end
|
380
379
|
|
381
|
-
conform_to
|
380
|
+
conform_to ProtocolTestPartial_fail
|
382
381
|
end
|
383
382
|
obj = c1.new
|
384
|
-
assert c1.conform_to?(
|
385
|
-
assert obj.conform_to?(
|
383
|
+
assert c1.conform_to?(ProtocolTestPartial)
|
384
|
+
assert obj.conform_to?(ProtocolTestPartial)
|
386
385
|
assert_equal [ 1, 4, 9], obj.map { |x| x * x }
|
387
386
|
assert_equal obj, obj.each { |x| x * x }
|
388
387
|
|
389
388
|
begin
|
390
389
|
c2 = Class.new do
|
391
|
-
conform_to
|
390
|
+
conform_to ProtocolTestPartial_fail
|
392
391
|
end
|
393
392
|
assert(false)
|
394
393
|
rescue Protocol::CheckFailed
|
@@ -404,9 +403,9 @@ class TestProtocol < Test::Unit::TestCase
|
|
404
403
|
def baz(x, y, z) Math.sqrt(x * x + y * y + z * z) end
|
405
404
|
def foo(x) x end
|
406
405
|
|
407
|
-
conform_to
|
406
|
+
conform_to ProtocolTestArgsOverwritten
|
408
407
|
end
|
409
|
-
assert c.conform_to?(
|
408
|
+
assert c.conform_to?(ProtocolTestArgsOverwritten)
|
410
409
|
rescue Protocol::CheckFailed
|
411
410
|
assert(false)
|
412
411
|
rescue
|
@@ -414,12 +413,12 @@ class TestProtocol < Test::Unit::TestCase
|
|
414
413
|
end
|
415
414
|
|
416
415
|
def test_messages
|
417
|
-
assert_equal %w[bar baz foo],
|
418
|
-
assert_equal [2, 3, -1],
|
419
|
-
assert_equal "
|
420
|
-
assert_equal %w[bar baz foo],
|
421
|
-
assert_equal [3, 3, 1],
|
422
|
-
assert_equal "
|
416
|
+
assert_equal %w[bar baz foo], ProtocolTestArgs.messages.map { |x| x.name }
|
417
|
+
assert_equal [2, 3, -1], ProtocolTestArgs.messages.map { |x| x.arity }
|
418
|
+
assert_equal "ProtocolTest::ProtocolTestArgs#bar(2), ProtocolTest::ProtocolTestArgs#baz(3), ProtocolTest::ProtocolTestArgs#foo(-1)", ProtocolTestArgs.to_s
|
419
|
+
assert_equal %w[bar baz foo], ProtocolTestArgsOverwritten.messages.map { |x| x.name }
|
420
|
+
assert_equal [3, 3, 1], ProtocolTestArgsOverwritten.messages.map { |x| x.arity }
|
421
|
+
assert_equal "ProtocolTest::ProtocolTestArgsOverwritten#bar(3), ProtocolTest::ProtocolTestArgs#baz(3), ProtocolTest::ProtocolTestArgsOverwritten#foo(1)", ProtocolTestArgsOverwritten.to_s
|
423
422
|
end
|
424
423
|
|
425
424
|
def test_wrapped_method
|
@@ -427,7 +426,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
427
426
|
c1 = Class.new do
|
428
427
|
def foo(foo, *rest) foo end
|
429
428
|
|
430
|
-
conform_to
|
429
|
+
conform_to ProtocolTestWrapMethodPassedFoo
|
431
430
|
end
|
432
431
|
assert(true)
|
433
432
|
rescue Protocol::CheckFailed
|
@@ -439,7 +438,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
439
438
|
c2 = Class.new do
|
440
439
|
def bar() :bar end
|
441
440
|
|
442
|
-
conform_to
|
441
|
+
conform_to ProtocolTestWrapMethodPassedBar
|
443
442
|
end
|
444
443
|
assert(true)
|
445
444
|
rescue Protocol::CheckFailed
|
@@ -453,7 +452,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
453
452
|
[ foo.foo(:foo, :baz), bar.bar ]
|
454
453
|
end
|
455
454
|
|
456
|
-
conform_to
|
455
|
+
conform_to ProtocolTestWrapMethod
|
457
456
|
end
|
458
457
|
assert(true)
|
459
458
|
rescue Protocol::CheckFailed
|
@@ -485,7 +484,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
485
484
|
foo + bar
|
486
485
|
end
|
487
486
|
|
488
|
-
conform_to
|
487
|
+
conform_to ProtocolTestPrecondition
|
489
488
|
end
|
490
489
|
assert(true)
|
491
490
|
rescue Protocol::CheckFailed
|
@@ -508,7 +507,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
508
507
|
bars.unshift foo
|
509
508
|
end
|
510
509
|
|
511
|
-
conform_to
|
510
|
+
conform_to ProtocolTestPostcondition
|
512
511
|
end
|
513
512
|
c2 = Class.new do
|
514
513
|
def foo_bar(foo, bar)
|
@@ -519,7 +518,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
519
518
|
bars.unshift foo
|
520
519
|
end
|
521
520
|
|
522
|
-
conform_to
|
521
|
+
conform_to ProtocolTestPostcondition
|
523
522
|
end
|
524
523
|
assert(true)
|
525
524
|
rescue Protocol::CheckFailed
|
@@ -538,7 +537,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
538
537
|
def o1.foo_bars(foo, *bars)
|
539
538
|
bars.unshift foo
|
540
539
|
end
|
541
|
-
assert
|
540
|
+
assert ProtocolTestPostcondition =~ o1
|
542
541
|
assert_equal [5, 7], o1.foo_bars(5, 7)
|
543
542
|
assert_equal 5 + 7, o1.foo_bar(5, 7)
|
544
543
|
o2 = Object.new
|
@@ -548,7 +547,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
548
547
|
def o2.foo_bars(foo, *bars)
|
549
548
|
bars.unshift foo
|
550
549
|
end
|
551
|
-
assert
|
550
|
+
assert ProtocolTestPostcondition =~ o2
|
552
551
|
assert_equal [5, 7], o2.foo_bars(5, 7)
|
553
552
|
assert_raises(Protocol::PostconditionCheckError) { o2.foo_bar(5, 7) }
|
554
553
|
end
|
@@ -556,7 +555,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
556
555
|
def test_inheritance
|
557
556
|
begin
|
558
557
|
c1 = Class.new do
|
559
|
-
conform_to
|
558
|
+
conform_to ProtocolTestInheritance
|
560
559
|
end
|
561
560
|
rescue Protocol::CheckFailed
|
562
561
|
assert(true)
|
@@ -566,7 +565,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
566
565
|
begin
|
567
566
|
c2 = Class.new do
|
568
567
|
def one_with_block() end
|
569
|
-
conform_to
|
568
|
+
conform_to ProtocolTestInheritance
|
570
569
|
end
|
571
570
|
rescue Protocol::CheckFailed
|
572
571
|
assert(true)
|
@@ -576,7 +575,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
576
575
|
begin
|
577
576
|
c3 = Class.new do
|
578
577
|
def one_with_block(foo) end
|
579
|
-
conform_to
|
578
|
+
conform_to ProtocolTestInheritance
|
580
579
|
end
|
581
580
|
rescue Protocol::CheckFailed
|
582
581
|
assert(true)
|
@@ -586,7 +585,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
586
585
|
begin
|
587
586
|
c4 = Class.new do
|
588
587
|
def one_with_block(foo, &block) end
|
589
|
-
conform_to
|
588
|
+
conform_to ProtocolTestInheritance
|
590
589
|
end
|
591
590
|
assert(true)
|
592
591
|
rescue Protocol::CheckFailed
|
@@ -597,7 +596,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
597
596
|
begin
|
598
597
|
c5 = Class.new do
|
599
598
|
def each() end
|
600
|
-
conform_to
|
599
|
+
conform_to ProtocolTestInheritanceC
|
601
600
|
end
|
602
601
|
rescue Protocol::CheckFailed
|
603
602
|
assert(true)
|
@@ -607,7 +606,7 @@ class TestProtocol < Test::Unit::TestCase
|
|
607
606
|
begin
|
608
607
|
c6 = Class.new do
|
609
608
|
def each(&block) end
|
610
|
-
conform_to
|
609
|
+
conform_to ProtocolTestInheritanceC
|
611
610
|
end
|
612
611
|
assert(true)
|
613
612
|
rescue Protocol::CheckFailed
|