pork 0.1.0 → 0.9.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 +4 -4
- data/.gitignore +1 -0
- data/CHANGES.md +9 -0
- data/README.md +580 -2
- data/lib/pork.rb +132 -94
- data/lib/pork/auto.rb +4 -0
- data/lib/pork/version.rb +1 -1
- data/pork.gemspec +12 -9
- data/task/gemgem.rb +0 -4
- data/test/test_bacon.rb +112 -106
- data/test/test_nested.rb +30 -12
- data/test/test_readme.rb +14 -0
- metadata +11 -6
- data/lib/pork/task.rb +0 -2
- data/pkg/pork-0.1.0.gem +0 -0
data/lib/pork.rb
CHANGED
@@ -1,71 +1,57 @@
|
|
1
1
|
|
2
2
|
require 'thread'
|
3
3
|
|
4
|
-
module
|
5
|
-
|
6
|
-
|
7
|
-
@mutex = Mutex.new
|
8
|
-
super(0, 0, 0, [], [])
|
9
|
-
end
|
10
|
-
def assertions= num; @mutex.synchronize{ super }; end
|
11
|
-
def tests= num; @mutex.synchronize{ super }; end
|
12
|
-
def skips= num; @mutex.synchronize{ super ; print('s')}; end
|
13
|
-
def add_failure *e ; @mutex.synchronize{ failures << e; print('F')}; end
|
14
|
-
def add_error *e ; @mutex.synchronize{ errors << e; print('E')}; end
|
15
|
-
def numbers
|
16
|
-
[tests, assertions, failures.size, errors.size, skips]
|
17
|
-
end
|
18
|
-
def start
|
19
|
-
@start ||= Time.now
|
20
|
-
end
|
21
|
-
def report
|
22
|
-
puts
|
23
|
-
puts (failures + errors).map{ |(e, m)|
|
24
|
-
"\n#{m}\n#{e.class}: #{e.message}\n #{backtrace(e)}"
|
25
|
-
}
|
26
|
-
printf("\nFinished in %f seconds.\n", Time.now - @start)
|
27
|
-
printf("%d tests, %d assertions, %d failures, %d errors, %d skips\n",
|
28
|
-
*numbers)
|
29
|
-
end
|
30
|
-
private
|
31
|
-
def backtrace e
|
32
|
-
if $VERBOSE
|
33
|
-
e.backtrace
|
34
|
-
else
|
35
|
-
e.backtrace.reject{ |line| line =~ %r{/pork\.rb:\d+} }
|
36
|
-
end.join("\n ")
|
37
|
-
end
|
4
|
+
module Kernel
|
5
|
+
def should message=nil, &checker
|
6
|
+
Pork::Should.new(self, message, &checker)
|
38
7
|
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module Pork
|
11
|
+
Error = Class.new(Exception)
|
12
|
+
Failure = Class.new(Error)
|
13
|
+
Skip = Class.new(Error)
|
39
14
|
|
40
15
|
def self.stats ; @stats ||= Stats.new; end
|
41
16
|
def self.reset ; @stats = nil ; end
|
42
17
|
def self.report; stats.report; reset ; end
|
18
|
+
def self.report_at_exit
|
19
|
+
Pork.stats.start
|
20
|
+
@report_at_exit ||= at_exit do
|
21
|
+
stats.report
|
22
|
+
exit stats.failures.size + stats.errors.size
|
23
|
+
end
|
24
|
+
end
|
43
25
|
|
44
26
|
module API
|
45
27
|
module_function
|
46
|
-
def
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
end
|
28
|
+
def before █ Executor.before(&block); end
|
29
|
+
def after █ Executor.after( &block); end
|
30
|
+
def describe desc=:default, &suite; Executor.describe(desc, &suite); end
|
31
|
+
def copy desc=:default, &suite; Executor.copy( desc, &suite); end
|
32
|
+
def paste desc=:default, *args ; Executor.paste( desc, *args ); end
|
33
|
+
def would desc=:default, &test ; Executor.would( desc, &test ); end
|
51
34
|
end
|
52
35
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
class Executor < Struct.new(:name)
|
58
|
-
extend Pork::API
|
59
|
-
def self.execute caller, desc, &suite
|
60
|
-
parent = if caller.kind_of?(Class) then caller else self end
|
61
|
-
Class.new(parent){
|
62
|
-
@desc, @before, @after = "#{desc}:", [], []
|
63
|
-
}.module_eval(&suite)
|
36
|
+
module Imp
|
37
|
+
attr_reader :stash, :desc
|
38
|
+
def before &block
|
39
|
+
if block_given? then @before << block else @before end
|
64
40
|
end
|
65
|
-
|
66
|
-
|
41
|
+
def after &block
|
42
|
+
if block_given? then @after << block else @after end
|
43
|
+
end
|
44
|
+
def describe desc=:default, &suite
|
45
|
+
Class.new(self){ init("#{desc}: ") }.module_eval(&suite)
|
46
|
+
end
|
47
|
+
def copy desc=:default, &suite; stash[desc] = suite; end
|
48
|
+
def paste desc=:default, *args
|
49
|
+
stashes = [self, super_executor].compact.map(&:stash)
|
50
|
+
module_exec(*args, &stashes.find{ |s| s[desc] }[desc])
|
51
|
+
end
|
52
|
+
def would desc=:default, &test
|
67
53
|
assertions = Pork.stats.assertions
|
68
|
-
context = new(
|
54
|
+
context = new(desc)
|
69
55
|
run_before(context)
|
70
56
|
context.instance_eval(&test)
|
71
57
|
if assertions == Pork.stats.assertions
|
@@ -74,55 +60,81 @@ module Pork
|
|
74
60
|
rescue Error, StandardError => e
|
75
61
|
case e
|
76
62
|
when Skip
|
77
|
-
Pork.stats.
|
63
|
+
Pork.stats.incr_skips
|
78
64
|
when Failure
|
79
|
-
Pork.stats.add_failure(e, description_for("would #{
|
65
|
+
Pork.stats.add_failure(e, description_for("would #{desc}"))
|
80
66
|
when Error, StandardError
|
81
|
-
Pork.stats.add_error( e, description_for("would #{
|
67
|
+
Pork.stats.add_error( e, description_for("would #{desc}"))
|
82
68
|
end
|
83
69
|
else
|
84
70
|
print '.'
|
85
71
|
ensure
|
72
|
+
Pork.stats.incr_tests
|
86
73
|
run_after(context)
|
87
74
|
end
|
88
75
|
|
89
|
-
|
90
|
-
|
76
|
+
protected
|
77
|
+
def init desc=''
|
78
|
+
@desc, @before, @after, @stash = desc, [], [], {}
|
91
79
|
end
|
92
|
-
def
|
93
|
-
|
94
|
-
end
|
95
|
-
|
96
|
-
def self.super_executor
|
97
|
-
@super_executor ||= ancestors[1..-1].find{ |a| a < Executor }
|
80
|
+
def super_executor
|
81
|
+
@super_executor ||= ancestors[1..-1].find{ |a| a <= Executor }
|
98
82
|
end
|
99
|
-
|
100
|
-
|
101
|
-
supername = if super_executor
|
102
|
-
" #{super_executor.description_for}"
|
103
|
-
else
|
104
|
-
' '
|
105
|
-
end
|
106
|
-
"#{@desc}#{supername}#{name}"
|
83
|
+
def description_for name=''
|
84
|
+
"#{desc}#{super_executor && super_executor.description_for}#{name}"
|
107
85
|
end
|
108
|
-
|
109
|
-
def self.run_before context
|
86
|
+
def run_before context
|
110
87
|
super_executor.run_before(context) if super_executor
|
111
88
|
before.each{ |b| context.instance_eval(&b) }
|
112
89
|
end
|
113
|
-
|
114
|
-
def self.run_after context
|
90
|
+
def run_after context
|
115
91
|
super_executor.run_after(context) if super_executor
|
116
92
|
after.each{ |b| context.instance_eval(&b) }
|
117
93
|
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class Executor < Struct.new(:desc)
|
97
|
+
extend Pork::Imp, Pork::API
|
98
|
+
init
|
99
|
+
def skip ; raise Skip.new("Skipping #{desc}"); end
|
100
|
+
def flunk reason='Flunked'; raise Error.new(reason) ; end
|
101
|
+
def ok ; Pork.stats.incr_assertions ; end
|
102
|
+
end
|
103
|
+
|
104
|
+
module InspectInlineError
|
105
|
+
def inspect_error object, msg, args, negate
|
106
|
+
a = args.map(&:inspect).join(', ')
|
107
|
+
"#{object.inspect}.#{msg}(#{a}) to return #{!negate}"
|
108
|
+
end
|
109
|
+
end
|
118
110
|
|
119
|
-
|
120
|
-
|
111
|
+
module InspectNewlineError
|
112
|
+
def inspect_error object, msg, args, negate
|
113
|
+
a = args.map(&:inspect).join(', ')
|
114
|
+
"\n#{object.inspect}.#{msg}(\n#{a}) to return #{!negate}"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
module InspectDiffError
|
119
|
+
def inspect_error object, msg, args, negate
|
120
|
+
::Kernel.require 'tempfile'
|
121
|
+
::Tempfile.open('pork-expect') do |expect|
|
122
|
+
::Tempfile.open('pork-was') do |was|
|
123
|
+
expect.puts(object.to_s)
|
124
|
+
expect.close
|
125
|
+
was.puts(args.map(&:to_s).join(",\n"))
|
126
|
+
was.close
|
127
|
+
name = "#{object.class}##{msg}(\n"
|
128
|
+
diff = ::Kernel.__send__(:`, "diff #{expect.path} #{was.path}")
|
129
|
+
"#{name}#{diff}) to return #{!negate}"
|
130
|
+
end
|
131
|
+
end
|
121
132
|
end
|
122
133
|
end
|
123
134
|
|
124
135
|
class Should < BasicObject
|
125
136
|
instance_methods.each{ |m| undef_method(m) unless m =~ /^__|^object_id$/ }
|
137
|
+
include ::Pork::InspectInlineError
|
126
138
|
|
127
139
|
def initialize object, message, &checker
|
128
140
|
@object = object
|
@@ -132,8 +144,7 @@ module Pork
|
|
132
144
|
end
|
133
145
|
|
134
146
|
def method_missing msg, *args, &block
|
135
|
-
satisfy(
|
136
|
-
" return #{!@negate}") do
|
147
|
+
satisfy(inspect_error(@object, msg, args, @negate)) do
|
137
148
|
@object.public_send(msg, *args, &block)
|
138
149
|
end
|
139
150
|
end
|
@@ -143,7 +154,7 @@ module Pork
|
|
143
154
|
if !!result == @negate
|
144
155
|
::Kernel.raise Failure.new("Expect #{desc}\n#{@message}".chomp)
|
145
156
|
else
|
146
|
-
::Pork.stats.
|
157
|
+
::Pork.stats.incr_assertions
|
147
158
|
end
|
148
159
|
result
|
149
160
|
end
|
@@ -154,9 +165,11 @@ module Pork
|
|
154
165
|
self
|
155
166
|
end
|
156
167
|
|
157
|
-
def eq rhs
|
158
|
-
|
159
|
-
end
|
168
|
+
def eq rhs; self == rhs; end
|
169
|
+
def lt rhs; self < rhs; end
|
170
|
+
def gt rhs; self > rhs; end
|
171
|
+
def lte rhs; self <= rhs; end
|
172
|
+
def gte rhs; self >= rhs; end
|
160
173
|
|
161
174
|
def raise exception=::RuntimeError
|
162
175
|
satisfy("#{__not__}raising #{exception}") do
|
@@ -173,18 +186,14 @@ module Pork
|
|
173
186
|
def throw msg
|
174
187
|
satisfy("#{__not__}throwing #{msg}") do
|
175
188
|
flag = true
|
176
|
-
::Kernel.catch(msg) do
|
189
|
+
data = ::Kernel.catch(msg) do
|
177
190
|
if ::Kernel.block_given? then yield else @object.call end
|
178
191
|
flag = false
|
179
192
|
end
|
180
|
-
flag
|
193
|
+
flag && [msg, data]
|
181
194
|
end
|
182
195
|
end
|
183
196
|
|
184
|
-
def flunk reason='Flunked'
|
185
|
-
::Kernel.raise Error.new(reason)
|
186
|
-
end
|
187
|
-
|
188
197
|
private
|
189
198
|
def __not__
|
190
199
|
if @negate == true
|
@@ -194,10 +203,39 @@ module Pork
|
|
194
203
|
end
|
195
204
|
end
|
196
205
|
end
|
197
|
-
end
|
198
206
|
|
199
|
-
|
200
|
-
|
201
|
-
|
207
|
+
class Stats < Struct.new(:tests, :assertions, :skips, :failures, :errors)
|
208
|
+
def initialize
|
209
|
+
@mutex = Mutex.new
|
210
|
+
super(0, 0, 0, [], [])
|
211
|
+
end
|
212
|
+
def incr_assertions; @mutex.synchronize{ self.assertions += 1 }; end
|
213
|
+
def incr_tests ; @mutex.synchronize{ self.tests += 1 }; end
|
214
|
+
def incr_skips ; @mutex.synchronize{ self.skips += 1; print('s')}; end
|
215
|
+
def add_failure *e ; @mutex.synchronize{ failures << e; print('F')}; end
|
216
|
+
def add_error *e ; @mutex.synchronize{ errors << e; print('E')}; end
|
217
|
+
def numbers
|
218
|
+
[tests, assertions, failures.size, errors.size, skips]
|
219
|
+
end
|
220
|
+
def start
|
221
|
+
@start ||= Time.now
|
222
|
+
end
|
223
|
+
def report
|
224
|
+
puts
|
225
|
+
puts (failures + errors).map{ |(e, m)|
|
226
|
+
"\n#{m}\n#{e.class}: #{e.message}\n #{backtrace(e)}"
|
227
|
+
}
|
228
|
+
printf("\nFinished in %f seconds.\n", Time.now - @start)
|
229
|
+
printf("%d tests, %d assertions, %d failures, %d errors, %d skips\n",
|
230
|
+
*numbers)
|
231
|
+
end
|
232
|
+
private
|
233
|
+
def backtrace e
|
234
|
+
if $VERBOSE
|
235
|
+
e.backtrace
|
236
|
+
else
|
237
|
+
e.backtrace.reject{ |line| line =~ %r{/pork\.rb:\d+} }
|
238
|
+
end.join("\n ")
|
239
|
+
end
|
202
240
|
end
|
203
241
|
end
|
data/lib/pork/auto.rb
ADDED
data/lib/pork/version.rb
CHANGED
data/pork.gemspec
CHANGED
@@ -1,36 +1,39 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: pork 0.
|
2
|
+
# stub: pork 0.9.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "pork"
|
6
|
-
s.version = "0.
|
6
|
+
s.version = "0.9.0"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib"]
|
10
10
|
s.authors = ["Lin Jen-Shin (godfat)"]
|
11
|
-
s.date = "2014-07-
|
12
|
-
s.description = "[Bacon][] reimplemented
|
11
|
+
s.date = "2014-07-11"
|
12
|
+
s.description = "Pork -- Simple and clean and modular testing library.\n\n[Bacon][] reimplemented around 250 lines of code.\n\n[Bacon]: https://github.com/chneukirchen/bacon"
|
13
13
|
s.email = ["godfat (XD) godfat.org"]
|
14
14
|
s.files = [
|
15
|
+
".gitignore",
|
15
16
|
".gitmodules",
|
16
17
|
".travis.yml",
|
18
|
+
"CHANGES.md",
|
17
19
|
"LICENSE",
|
18
20
|
"README.md",
|
19
21
|
"Rakefile",
|
20
22
|
"lib/pork.rb",
|
21
|
-
"lib/pork/
|
23
|
+
"lib/pork/auto.rb",
|
22
24
|
"lib/pork/version.rb",
|
23
|
-
"pkg/pork-0.1.0.gem",
|
24
25
|
"pork.gemspec",
|
25
26
|
"task/README.md",
|
26
27
|
"task/gemgem.rb",
|
27
28
|
"test/test_bacon.rb",
|
28
|
-
"test/test_nested.rb"
|
29
|
+
"test/test_nested.rb",
|
30
|
+
"test/test_readme.rb"]
|
29
31
|
s.homepage = "https://github.com/godfat/pork"
|
30
32
|
s.licenses = ["Apache License 2.0"]
|
31
33
|
s.rubygems_version = "2.3.0"
|
32
|
-
s.summary = "
|
34
|
+
s.summary = "Pork -- Simple and clean and modular testing library."
|
33
35
|
s.test_files = [
|
34
36
|
"test/test_bacon.rb",
|
35
|
-
"test/test_nested.rb"
|
37
|
+
"test/test_nested.rb",
|
38
|
+
"test/test_readme.rb"]
|
36
39
|
end
|
data/task/gemgem.rb
CHANGED
@@ -227,10 +227,6 @@ end # of gem namespace
|
|
227
227
|
desc 'Run tests'
|
228
228
|
task :test do
|
229
229
|
next if Gemgem.test_files.empty?
|
230
|
-
|
231
|
-
# require 'bacon'
|
232
|
-
# Bacon.extend(Bacon::TestUnitOutput)
|
233
|
-
# Bacon.summary_on_exit
|
234
230
|
Gemgem.test_files.each{ |file| require "#{Gemgem.dir}/#{file[0..-4]}" }
|
235
231
|
end
|
236
232
|
|
data/test/test_bacon.rb
CHANGED
@@ -1,23 +1,21 @@
|
|
1
1
|
|
2
|
-
require 'pork'
|
2
|
+
require 'pork/auto'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
block
|
8
|
-
|
9
|
-
|
10
|
-
def fail block
|
11
|
-
block.should.raise Pork::Error
|
12
|
-
end
|
4
|
+
describe Pork do
|
5
|
+
# Hooray for meta-testing.
|
6
|
+
include Module.new{
|
7
|
+
def succeed block
|
8
|
+
block.should.not.raise Pork::Error
|
9
|
+
end
|
13
10
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
11
|
+
def fail block
|
12
|
+
block.should.raise Pork::Error
|
13
|
+
end
|
18
14
|
|
19
|
-
|
20
|
-
|
15
|
+
def equal_string x
|
16
|
+
lambda{ |s| x == s.to_s }
|
17
|
+
end
|
18
|
+
}
|
21
19
|
|
22
20
|
would "have should.satisfy" do
|
23
21
|
succeed lambda { should.satisfy { 1 == 1 } }
|
@@ -221,13 +219,13 @@ Pork::API.describe Pork do
|
|
221
219
|
succeed lambda { (1+2).should.not(&f) }
|
222
220
|
end
|
223
221
|
|
224
|
-
would "have
|
225
|
-
fail lambda {
|
226
|
-
fail lambda {
|
222
|
+
would "have flunk" do
|
223
|
+
fail lambda { flunk }
|
224
|
+
fail lambda { flunk "yikes" }
|
227
225
|
end
|
228
226
|
end
|
229
227
|
|
230
|
-
|
228
|
+
describe "before/after" do
|
231
229
|
before do
|
232
230
|
@a = 1
|
233
231
|
@b = 2
|
@@ -287,89 +285,97 @@ Pork::API.describe "before/after" do
|
|
287
285
|
end
|
288
286
|
end
|
289
287
|
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
288
|
+
copy "a shared context" do
|
289
|
+
would "get called where it is included" do
|
290
|
+
true.should.eq true
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
copy "another shared context" do
|
295
|
+
would "access data" do
|
296
|
+
@magic.should.eq 42
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
300
|
+
describe "shared/behaves_like" do
|
301
|
+
paste "a shared context"
|
302
|
+
|
303
|
+
ctx = self
|
304
|
+
would "raise NameError when the context is not found" do
|
305
|
+
lambda {
|
306
|
+
ctx.paste "whoops"
|
307
|
+
}.should.raise NameError
|
308
|
+
end
|
309
|
+
|
310
|
+
paste "a shared context"
|
311
|
+
|
312
|
+
before {
|
313
|
+
@magic = 42
|
314
|
+
}
|
315
|
+
paste "another shared context"
|
316
|
+
end
|
317
|
+
|
318
|
+
describe "Methods" do
|
319
|
+
def the_meaning_of_life
|
320
|
+
42
|
321
|
+
end
|
322
|
+
|
323
|
+
def the_towels
|
324
|
+
yield "DON'T PANIC"
|
325
|
+
end
|
326
|
+
|
327
|
+
would "be accessible in a test" do
|
328
|
+
the_meaning_of_life.should.eq 42
|
329
|
+
end
|
330
|
+
|
331
|
+
describe "when in a sibling context" do
|
332
|
+
would "should be accessible in a test" do
|
333
|
+
the_meaning_of_life.should.eq 42
|
334
|
+
end
|
335
|
+
|
336
|
+
would "should pass the block" do
|
337
|
+
the_towels do |label|
|
338
|
+
label.should.eq "DON'T PANIC"
|
339
|
+
end.should.eq true
|
340
|
+
end
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
describe 'describe arguments' do
|
345
|
+
check = lambda do |ctx, desc, name=nil|
|
346
|
+
ctx.should.lt Pork::Executor
|
347
|
+
ctx.description_for(name).should.eq "#{desc}: #{name}"
|
348
|
+
end
|
349
|
+
|
350
|
+
would 'work with string' do
|
351
|
+
str = 'string'
|
352
|
+
Pork::API.describe(str) do
|
353
|
+
check[self, str]
|
354
|
+
would 'a' do check[self.class, str, 'a'] end
|
355
|
+
end
|
356
|
+
end
|
357
|
+
|
358
|
+
would 'work with symbols' do
|
359
|
+
str = 'behaviour'
|
360
|
+
Pork::API.describe(:behaviour) do
|
361
|
+
check[self, str]
|
362
|
+
would 'b' do check[self.class, str, 'b'] end
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
would 'work with modules' do
|
367
|
+
str = 'Pork'
|
368
|
+
Pork::API.describe(Pork) do
|
369
|
+
check[self, str]
|
370
|
+
would 'c' do check[self.class, str, 'c'] end
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
would 'work with namespaced modules' do
|
375
|
+
str = 'Pork::Executor'
|
376
|
+
Pork::API.describe(Pork::Executor) do
|
377
|
+
check[self, str]
|
378
|
+
would 'd' do check[self.class, str, 'd'] end
|
379
|
+
end
|
380
|
+
end
|
381
|
+
end
|