aquarium 0.5.1 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGES +240 -215
- data/README +61 -44
- data/RELEASE-PLAN +21 -23
- data/Rakefile +64 -94
- data/UPGRADE +45 -35
- data/aquarium.gemspec +50 -0
- data/examples/README.txt +6 -0
- data/examples/aspect_design_example_spec.rb +2 -2
- data/examples/design_by_contract_example_spec.rb +3 -3
- data/examples/exception_wrapping_example_spec.rb +2 -2
- data/examples/introductions_example_spec.rb +1 -1
- data/examples/method_tracing_example_spec.rb +17 -16
- data/examples/reusable_aspect_hack_example_spec.rb +5 -5
- data/jruby/Rakefile +61 -0
- data/jruby/java/example/Worker.java +9 -0
- data/jruby/java/example/sorter/StringListSorter.java +22 -0
- data/jruby/java/example/sorter/converter/StringListCaseConverterAndSorter.java +42 -0
- data/jruby/java/example/visibility/Visibility.java +13 -0
- data/jruby/spec/java_class_aspects_spec.rb +434 -0
- data/jruby/spec/java_visibility_spec.rb +122 -0
- data/jruby/spec/spec_helper.rb +5 -0
- data/lib/aquarium/aspects/aspect.rb +8 -4
- data/lib/aquarium/utils/type_utils.rb +4 -1
- data/lib/aquarium/version.rb +29 -28
- data/previous_failures.txt +0 -0
- data/rspec.watchr +60 -0
- data/spec/aquarium/aspects/advice_spec.rb +10 -10
- data/spec/aquarium/aspects/aspect_invocation_spec.rb +79 -79
- data/spec/aquarium/aspects/aspect_spec.rb +73 -73
- data/spec/aquarium/aspects/aspect_with_nested_types_spec.rb +5 -5
- data/spec/aquarium/aspects/concurrent_aspects_spec.rb +1 -1
- data/spec/aquarium/aspects/default_objects_handler_spec.rb +5 -5
- data/spec/aquarium/aspects/join_point_spec.rb +40 -40
- data/spec/aquarium/aspects/pointcut_and_composition_spec.rb +8 -8
- data/spec/aquarium/aspects/pointcut_spec.rb +25 -25
- data/spec/aquarium/extensions/regex_spec.rb +6 -6
- data/spec/aquarium/extras/design_by_contract_spec.rb +6 -6
- data/spec/aquarium/finders/finder_result_spec.rb +2 -2
- data/spec/aquarium/finders/method_finder_spec.rb +24 -24
- data/spec/aquarium/finders/pointcut_finder_spec.rb +10 -10
- data/spec/aquarium/finders/pointcut_finder_spec_test_classes.rb +4 -4
- data/spec/aquarium/finders/type_finder_spec.rb +5 -5
- data/spec/aquarium/finders/type_finder_with_descendents_and_ancestors_spec.rb +6 -5
- data/spec/aquarium/finders/type_finder_with_nested_types_spec.rb +2 -2
- data/spec/aquarium/utils/logic_error_spec.rb +1 -1
- data/spec/aquarium/utils/method_utils_spec.rb +38 -38
- data/spec/aquarium/utils/nil_object_spec.rb +11 -11
- data/spec/aquarium/utils/options_utils_spec.rb +8 -8
- data/spec/aquarium/utils/type_utils_spec.rb +3 -3
- metadata +238 -57
@@ -432,9 +432,13 @@ module Aquarium
|
|
432
432
|
end
|
433
433
|
|
434
434
|
#--
|
435
|
-
#
|
436
|
-
#
|
437
|
-
#
|
435
|
+
# Previous versions of Aquarium did NOT dup the join_point here, because it saved about 25%
|
436
|
+
# on the overhead on circa 2005 machines. However, that seriously compromised thread safety,
|
437
|
+
# primarily because the join_point's context object changes during execution.
|
438
|
+
# We now dup the joinpoint, because the improved performance of circa 2013 machines seems to
|
439
|
+
# have largely made the extra overhead small enough to be inconsequential. There are possible
|
440
|
+
# improvements, such as decoupling the mutable and immutable parts and reusing the later.
|
441
|
+
# Feedback is welcome.
|
438
442
|
# Note that we have to assign the parameters and block to the context object in case
|
439
443
|
# the advice calls "proceed" or "invoke_original_join_point" without arguments.
|
440
444
|
#++
|
@@ -445,7 +449,7 @@ module Aquarium
|
|
445
449
|
alias_method :#{alias_method_name}, :#{join_point.method_name}
|
446
450
|
def #{join_point.method_name} *args, &block_for_method
|
447
451
|
advice_chain = #{type_being_advised_text}.send :class_variable_get, "#{advice_chain_attr_sym}"
|
448
|
-
join_point = advice_chain.static_join_point
|
452
|
+
join_point = advice_chain.static_join_point.dup
|
449
453
|
join_point.context.parameters = args
|
450
454
|
join_point.context.block_for_method = block_for_method
|
451
455
|
join_point.context.advised_object = #{target_self}
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'set'
|
2
|
+
require 'rbconfig'
|
2
3
|
|
3
4
|
module Aquarium
|
4
5
|
module Utils
|
@@ -59,7 +60,9 @@ module Aquarium
|
|
59
60
|
end
|
60
61
|
|
61
62
|
def self.use_underscore_methods? mod
|
62
|
-
|
63
|
+
#TODO
|
64
|
+
false
|
65
|
+
# mod.respond_to?(:__constants__)
|
63
66
|
end
|
64
67
|
|
65
68
|
def self.responds_to_ancestors? mod
|
data/lib/aquarium/version.rb
CHANGED
@@ -1,28 +1,29 @@
|
|
1
|
-
module Aquarium
|
2
|
-
module VERSION
|
3
|
-
def self.build_tag
|
4
|
-
tag = "REL_" + [MAJOR, MINOR, TINY].join('_')
|
5
|
-
tag << "_" << RELEASE_CANDIDATE unless RELEASE_CANDIDATE.nil? or RELEASE_CANDIDATE.empty?
|
6
|
-
tag
|
7
|
-
end
|
8
|
-
|
9
|
-
unless defined? MAJOR
|
10
|
-
MAJOR = 0
|
11
|
-
MINOR =
|
12
|
-
TINY = 1
|
13
|
-
RELEASE_CANDIDATE = nil
|
14
|
-
|
15
|
-
# RANDOM_TOKEN: 0.598704893979657
|
16
|
-
REV = "$LastChangedRevision: 7 $".match(/LastChangedRevision: (\d+)/)[1]
|
17
|
-
|
18
|
-
STRING = [MAJOR, MINOR, TINY].join('.')
|
19
|
-
FULL_VERSION = "#{STRING} (r#{REV})"
|
20
|
-
TAG = build_tag
|
21
|
-
|
22
|
-
NAME = "Aquarium"
|
23
|
-
URL = "http://aquarium.rubyforge.org"
|
24
|
-
|
25
|
-
DESCRIPTION = "#{NAME}-#{FULL_VERSION} - Aspect-Oriented Programming toolkit for Ruby\n#{URL}"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
1
|
+
module Aquarium
|
2
|
+
module VERSION
|
3
|
+
def self.build_tag
|
4
|
+
tag = "REL_" + [MAJOR, MINOR, TINY].join('_')
|
5
|
+
tag << "_" << RELEASE_CANDIDATE unless RELEASE_CANDIDATE.nil? or RELEASE_CANDIDATE.empty?
|
6
|
+
tag
|
7
|
+
end
|
8
|
+
|
9
|
+
unless defined? MAJOR
|
10
|
+
MAJOR = 0
|
11
|
+
MINOR = 7
|
12
|
+
TINY = 1
|
13
|
+
RELEASE_CANDIDATE = nil
|
14
|
+
|
15
|
+
# RANDOM_TOKEN: 0.598704893979657
|
16
|
+
REV = "$LastChangedRevision: 7 $".match(/LastChangedRevision: (\d+)/)[1]
|
17
|
+
|
18
|
+
STRING = [MAJOR, MINOR, TINY].join('.')
|
19
|
+
FULL_VERSION = "#{STRING} (r#{REV})"
|
20
|
+
TAG = build_tag
|
21
|
+
|
22
|
+
NAME = "Aquarium"
|
23
|
+
URL = "http://aquarium.rubyforge.org"
|
24
|
+
|
25
|
+
DESCRIPTION = "#{NAME}-#{FULL_VERSION} - Aspect-Oriented Programming toolkit for Ruby\n#{URL}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
File without changes
|
data/rspec.watchr
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env watchr
|
2
|
+
# Run me with:
|
3
|
+
#
|
4
|
+
# $ watchr rspec.watchr
|
5
|
+
|
6
|
+
# --------------------------------------------------
|
7
|
+
# Convenience Methods
|
8
|
+
# --------------------------------------------------
|
9
|
+
def all_test_files
|
10
|
+
Dir['spec/**/*_spec.rb']
|
11
|
+
end
|
12
|
+
|
13
|
+
def run_test_matching(thing_to_match)
|
14
|
+
matches = all_test_files.grep(/#{thing_to_match}/i)
|
15
|
+
if matches.empty?
|
16
|
+
run_all_tests
|
17
|
+
else
|
18
|
+
run matches.join(' ')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def run(files_to_run)
|
23
|
+
puts("Running: #{files_to_run}")
|
24
|
+
system("clear;rspec -cfs #{files_to_run}")
|
25
|
+
no_int_for_you
|
26
|
+
end
|
27
|
+
|
28
|
+
def run_all_tests
|
29
|
+
run(all_test_files.join(' '))
|
30
|
+
end
|
31
|
+
#
|
32
|
+
# --------------------------------------------------
|
33
|
+
# Watchr Rules
|
34
|
+
# --------------------------------------------------
|
35
|
+
watch('^spec/(.*)_spec\.rb' ) { |m| run_test_matching(m[1]) }
|
36
|
+
watch('^lib/(.*)\.rb' ) { |m| run_test_matching(m[1]) }
|
37
|
+
watch('^spec/spec_helper\.rb') { run_all_tests }
|
38
|
+
# --------------------------------------------------
|
39
|
+
# Signal Handling
|
40
|
+
# --------------------------------------------------
|
41
|
+
|
42
|
+
def no_int_for_you
|
43
|
+
@sent_an_int = nil
|
44
|
+
end
|
45
|
+
|
46
|
+
Signal.trap 'INT' do
|
47
|
+
if @sent_an_int then
|
48
|
+
puts " Shutting down now."
|
49
|
+
exit
|
50
|
+
else
|
51
|
+
puts " Hit ^C again to exit."
|
52
|
+
@sent_an_int = true
|
53
|
+
Kernel.sleep 1.5
|
54
|
+
run_all_tests
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
run_all_tests
|
59
|
+
|
60
|
+
# vim:ft=ruby
|
@@ -115,7 +115,7 @@ describe Advice, "that raises an exception" do
|
|
115
115
|
aspect = Aspect.new :before, :pointcut => {:type => Watchful, :methods => :public_class_watchful_method, :method_options => [:class]} do |jp, obj, *args|
|
116
116
|
raise MyException1.new("advice called with args: #{args.inspect}")
|
117
117
|
end
|
118
|
-
|
118
|
+
expect { Watchful.public_class_watchful_method :a1, :a2 }.to raise_error(MyException1)
|
119
119
|
aspect.unadvise
|
120
120
|
end
|
121
121
|
|
@@ -208,7 +208,7 @@ describe Advice, "#invoke_original_join_point that raises an exception" do
|
|
208
208
|
:method_options => [:class]} do |jp, obj, *args|
|
209
209
|
jp.invoke_original_join_point
|
210
210
|
end
|
211
|
-
|
211
|
+
expect { InvokeOriginalJoinPointRaisingException.class_raise_exception :a1, :a2 }.to raise_error(InvokeOriginalJoinPointRaisingException::IOJPRException)
|
212
212
|
aspect.unadvise
|
213
213
|
end
|
214
214
|
|
@@ -272,17 +272,17 @@ end
|
|
272
272
|
|
273
273
|
describe AdviceChainNodeFactory, "#make_node" do
|
274
274
|
it "should raise if an unknown advice kind is specified" do
|
275
|
-
|
275
|
+
expect {AdviceChainNodeFactory.make_node :advice_kind => :foo}.to raise_error(Aquarium::Utils::InvalidOptions)
|
276
276
|
end
|
277
277
|
|
278
278
|
it "should return a node of the type corresponding to the input advice kind" do
|
279
|
-
AdviceChainNodeFactory.make_node(:advice_kind => :no).kind_of?(NoAdviceChainNode).should
|
280
|
-
AdviceChainNodeFactory.make_node(:advice_kind => :none).kind_of?(NoAdviceChainNode).should
|
281
|
-
AdviceChainNodeFactory.make_node(:advice_kind => :before).kind_of?(BeforeAdviceChainNode).should
|
282
|
-
AdviceChainNodeFactory.make_node(:advice_kind => :after).kind_of?(AfterAdviceChainNode).should
|
283
|
-
AdviceChainNodeFactory.make_node(:advice_kind => :after_raising).kind_of?(AfterRaisingAdviceChainNode).should
|
284
|
-
AdviceChainNodeFactory.make_node(:advice_kind => :after_returning).kind_of?(AfterReturningAdviceChainNode).should
|
285
|
-
AdviceChainNodeFactory.make_node(:advice_kind => :around).kind_of?(AroundAdviceChainNode).should
|
279
|
+
AdviceChainNodeFactory.make_node(:advice_kind => :no).kind_of?(NoAdviceChainNode).should be_truthy
|
280
|
+
AdviceChainNodeFactory.make_node(:advice_kind => :none).kind_of?(NoAdviceChainNode).should be_truthy
|
281
|
+
AdviceChainNodeFactory.make_node(:advice_kind => :before).kind_of?(BeforeAdviceChainNode).should be_truthy
|
282
|
+
AdviceChainNodeFactory.make_node(:advice_kind => :after).kind_of?(AfterAdviceChainNode).should be_truthy
|
283
|
+
AdviceChainNodeFactory.make_node(:advice_kind => :after_raising).kind_of?(AfterRaisingAdviceChainNode).should be_truthy
|
284
|
+
AdviceChainNodeFactory.make_node(:advice_kind => :after_returning).kind_of?(AfterReturningAdviceChainNode).should be_truthy
|
285
|
+
AdviceChainNodeFactory.make_node(:advice_kind => :around).kind_of?(AroundAdviceChainNode).should be_truthy
|
286
286
|
end
|
287
287
|
end
|
288
288
|
|
@@ -73,15 +73,15 @@ describe Aspect, "methods" do
|
|
73
73
|
end
|
74
74
|
|
75
75
|
it "should warn about no join point matches if the :ignore_no_matching_join_points is not specified." do
|
76
|
-
|
76
|
+
expect {Aspect.new(:after, :logger_stream => @log_stream) {true}}.to raise_error(Aquarium::Utils::InvalidOptions)
|
77
77
|
@log_stream.string.should_not be_empty
|
78
78
|
end
|
79
79
|
it "should warn about no join point matches if :ignore_no_matching_join_points => false is specified." do
|
80
|
-
|
80
|
+
expect {Aspect.new(:after, :logger_stream => @log_stream, :ignore_no_matching_join_points => false) {true}}.to raise_error(Aquarium::Utils::InvalidOptions)
|
81
81
|
@log_stream.string.should_not be_empty
|
82
82
|
end
|
83
83
|
it "should not warn about no join point matches if :ignore_no_matching_join_points => true is specified." do
|
84
|
-
|
84
|
+
expect {Aspect.new(:after, :logger_stream => @log_stream, :ignore_no_matching_join_points => true) {true}}.to raise_error(Aquarium::Utils::InvalidOptions)
|
85
85
|
@log_stream.string.should be_empty
|
86
86
|
end
|
87
87
|
end
|
@@ -92,48 +92,48 @@ describe Aspect, "methods" do
|
|
92
92
|
end
|
93
93
|
|
94
94
|
it "should require the kind of advice as the first parameter." do
|
95
|
-
|
95
|
+
expect { Aspect.new :pointcut => @pointcut_opts }.to raise_error(Aquarium::Utils::InvalidOptions)
|
96
96
|
end
|
97
97
|
|
98
98
|
it "should contain no other advice types if :around advice specified." do
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
99
|
+
expect { Aspect.new :around, :before, :pointcut => @pointcut_opts }.to raise_error(Aquarium::Utils::InvalidOptions)
|
100
|
+
expect { Aspect.new :around, :after, :pointcut => @pointcut_opts }.to raise_error(Aquarium::Utils::InvalidOptions)
|
101
|
+
expect { Aspect.new :around, :after_returning, :pointcut => @pointcut_opts }.to raise_error(Aquarium::Utils::InvalidOptions)
|
102
|
+
expect { Aspect.new :around, :after_raising, :pointcut => @pointcut_opts }.to raise_error(Aquarium::Utils::InvalidOptions)
|
103
103
|
end
|
104
104
|
|
105
105
|
it "should allow only one of :after, :after_returning, or :after_raising advice to be specified." do
|
106
|
-
|
107
|
-
|
108
|
-
|
106
|
+
expect { Aspect.new :after, :after_returning, :pointcut => @pointcut_opts }.to raise_error(Aquarium::Utils::InvalidOptions)
|
107
|
+
expect { Aspect.new :after, :after_raising, :pointcut => @pointcut_opts }.to raise_error(Aquarium::Utils::InvalidOptions)
|
108
|
+
expect { Aspect.new :after_returning, :after_raising, :pointcut => @pointcut_opts }.to raise_error(Aquarium::Utils::InvalidOptions)
|
109
109
|
end
|
110
110
|
|
111
111
|
it "should allow :before to be specified with :after." do
|
112
|
-
|
112
|
+
expect { Aspect.new :before, :after, :pointcut => @pointcut_opts, :noop => true }.not_to raise_error
|
113
113
|
end
|
114
114
|
|
115
115
|
it "should allow :before to be specified with :after_returning." do
|
116
|
-
|
116
|
+
expect { Aspect.new :before, :after_returning, :pointcut => @pointcut_opts, :noop => true }.not_to raise_error
|
117
117
|
end
|
118
118
|
|
119
119
|
it "should allow :before to be specified with :after_raising." do
|
120
|
-
|
120
|
+
expect { Aspect.new :before, :after_raising, :pointcut => @pointcut_opts, :noop => true }.not_to raise_error
|
121
121
|
end
|
122
122
|
|
123
123
|
it "should accept a single exception specified with :after_raising." do
|
124
|
-
|
124
|
+
expect { Aspect.new :before, :after_raising => Exception, :pointcut => @pointcut_opts, :noop => true }.not_to raise_error
|
125
125
|
end
|
126
126
|
|
127
127
|
it "should accept a list of exceptions specified with :after_raising." do
|
128
|
-
|
128
|
+
expect { Aspect.new :before, :after_raising => [Exception, String], :pointcut => @pointcut_opts, :noop => true }.not_to raise_error
|
129
129
|
end
|
130
130
|
|
131
131
|
it "should accept a separate :exceptions => list of exceptions specified with :after_raising." do
|
132
|
-
|
132
|
+
expect { Aspect.new :before, :after_raising, :exceptions => [Exception, String], :pointcut => @pointcut_opts, :noop => true }.not_to raise_error
|
133
133
|
end
|
134
134
|
|
135
135
|
it "should reject the :exceptions argument unless specified with :after_raising." do
|
136
|
-
|
136
|
+
expect { Aspect.new :before, :after, :exceptions => [Exception, String], :pointcut => @pointcut_opts, :noop => true }.to raise_error(Aquarium::Utils::InvalidOptions)
|
137
137
|
end
|
138
138
|
end
|
139
139
|
|
@@ -143,7 +143,7 @@ describe Aspect, "methods" do
|
|
143
143
|
end
|
144
144
|
|
145
145
|
it "should contain at least one of :method(s), :pointcut(s), :named_pointcut(s), :type(s), or :object(s)." do
|
146
|
-
|
146
|
+
expect {Aspect.new(:after, :ignore_no_matching_join_points => true) {true}}.to raise_error(Aquarium::Utils::InvalidOptions)
|
147
147
|
end
|
148
148
|
|
149
149
|
it "should contain at least one of :pointcut(s), :named_pointcut(s), :type(s), or :object(s) unless :default_objects => object is given." do
|
@@ -227,15 +227,15 @@ describe Aspect, "methods" do
|
|
227
227
|
end
|
228
228
|
|
229
229
|
it "should not contain :pointcut(s) and either :type(s) or :object(s)." do
|
230
|
-
|
231
|
-
|
230
|
+
expect {Aspect.new(:after, :pointcuts => @pointcut_opts, :type => Aquarium::AspectInvocationTestClass, :method => :public_test_method) {true}}.to raise_error(Aquarium::Utils::InvalidOptions)
|
231
|
+
expect {Aspect.new(:after, :pointcuts => @pointcut_opts, :object => Aquarium::AspectInvocationTestClass.new, :method => :public_test_method) {true}}.to raise_error(Aquarium::Utils::InvalidOptions)
|
232
232
|
end
|
233
233
|
end
|
234
234
|
|
235
235
|
describe Aspect, ".new (parameters that specify named constant and/or class variable pointcuts)" do
|
236
236
|
it "should contain at least one :types or TypeFinder synonym for :types." do
|
237
|
-
|
238
|
-
|
237
|
+
expect {Aspect.new(:after, :named_pointcuts => {}, :noop => true) {true}}.to raise_error(Aquarium::Utils::InvalidOptions)
|
238
|
+
expect {Aspect.new(:after, :named_pointcuts => {:types => Aquarium::PointcutFinderTestClasses.all_pointcut_classes}, :noop => true) {true}}.not_to raise_error
|
239
239
|
end
|
240
240
|
|
241
241
|
it "should ignore the :default_objects if at least one :named_pointcut is given even if the :default_objects => object are given." do
|
@@ -261,8 +261,8 @@ describe Aspect, "methods" do
|
|
261
261
|
end
|
262
262
|
|
263
263
|
it "should not contain :named_pointcut(s) and either :type(s) or :object(s)." do
|
264
|
-
|
265
|
-
|
264
|
+
expect {Aspect.new(:after, :named_pointcuts => {:types => Aquarium::PointcutFinderTestClasses::PointcutClassVariableHolder1}, :type => Aquarium::AspectInvocationTestClass, :method => :public_test_method) {true}}.to raise_error(Aquarium::Utils::InvalidOptions)
|
265
|
+
expect {Aspect.new(:after, :named_pointcuts => {:types => Aquarium::PointcutFinderTestClasses::PointcutClassVariableHolder1}, :object => Aquarium::AspectInvocationTestClass.new, :method => :public_test_method) {true}}.to raise_error(Aquarium::Utils::InvalidOptions)
|
266
266
|
end
|
267
267
|
end
|
268
268
|
|
@@ -272,7 +272,7 @@ describe Aspect, "methods" do
|
|
272
272
|
aspect = Aspect.new :before, :types => Aquarium::AspectInvocationTestClass, :method => :public_test_method do; @advice_called = true; end
|
273
273
|
Aquarium::AspectInvocationTestClass.new.public_test_method
|
274
274
|
aspect.unadvise
|
275
|
-
@advice_called.should
|
275
|
+
@advice_called.should be_truthy
|
276
276
|
end
|
277
277
|
|
278
278
|
Aspect::CANONICAL_OPTIONS["types"].each do |key|
|
@@ -289,7 +289,7 @@ describe Aspect, "methods" do
|
|
289
289
|
aspect = Aspect.new :before, :pointcuts => {:types => Aquarium::AspectInvocationTestClass, :method => :public_test_method} do; @advice_called = true; end
|
290
290
|
Aquarium::AspectInvocationTestClass.new.public_test_method
|
291
291
|
aspect.unadvise
|
292
|
-
@advice_called.should
|
292
|
+
@advice_called.should be_truthy
|
293
293
|
end
|
294
294
|
|
295
295
|
Aspect::CANONICAL_OPTIONS["pointcuts"].each do |key|
|
@@ -307,7 +307,7 @@ describe Aspect, "methods" do
|
|
307
307
|
aspect = Aspect.new :before, :objects => object, :method => :public_test_method do; @advice_called = true; end
|
308
308
|
object.public_test_method
|
309
309
|
aspect.unadvise
|
310
|
-
@advice_called.should
|
310
|
+
@advice_called.should be_truthy
|
311
311
|
end
|
312
312
|
|
313
313
|
Aspect::CANONICAL_OPTIONS["objects"].each do |key|
|
@@ -325,7 +325,7 @@ describe Aspect, "methods" do
|
|
325
325
|
aspect = Aspect.new :before, :types => Aquarium::AspectInvocationTestClass, :methods => :public_test_method do; @advice_called = true; end
|
326
326
|
Aquarium::AspectInvocationTestClass.new.public_test_method
|
327
327
|
aspect.unadvise
|
328
|
-
@advice_called.should
|
328
|
+
@advice_called.should be_truthy
|
329
329
|
end
|
330
330
|
|
331
331
|
Aspect::CANONICAL_OPTIONS["methods"].each do |key|
|
@@ -348,14 +348,14 @@ describe Aspect, "methods" do
|
|
348
348
|
|
349
349
|
it "should require the values for :reading => ... and :writing => ... to be equal if both are specified." do
|
350
350
|
@advice = Proc.new {}
|
351
|
-
|
352
|
-
:reading => :public_test_method_args, :writing => :public_test_method_args2, :advice => @advice}.
|
351
|
+
expect {Aspect.new :before, :type => Aquarium::AspectInvocationTestClass3,
|
352
|
+
:reading => :public_test_method_args, :writing => :public_test_method_args2, :advice => @advice}.to raise_error(Aquarium::Utils::InvalidOptions)
|
353
353
|
end
|
354
354
|
|
355
355
|
it "should require the values for :reading => ... and :changing => ... to be equal if both are specified." do
|
356
356
|
@advice = Proc.new {}
|
357
|
-
|
358
|
-
:reading => :public_test_method_args, :changing => :public_test_method_args2, :advice => @advice}.
|
357
|
+
expect {Aspect.new :before, :type => Aquarium::AspectInvocationTestClass3,
|
358
|
+
:reading => :public_test_method_args, :changing => :public_test_method_args2, :advice => @advice}.to raise_error(Aquarium::Utils::InvalidOptions)
|
359
359
|
end
|
360
360
|
|
361
361
|
it "should accept :reading => ... as a synonym for :attributes => ..., :attribute_options => [:readers]." do
|
@@ -411,7 +411,7 @@ describe Aspect, "methods" do
|
|
411
411
|
else
|
412
412
|
Aquarium::AspectInvocationTestClass.new.method("#{@protection}_test_method").call :a1, :a2, :a3, :h1 => 'h1', :h2 => 'h2'
|
413
413
|
end
|
414
|
-
advice_called.should
|
414
|
+
advice_called.should be_truthy
|
415
415
|
aspect.unadvise
|
416
416
|
end
|
417
417
|
|
@@ -599,7 +599,7 @@ describe Aspect, "methods" do
|
|
599
599
|
object.method("#{@protection}_test_method_args".intern).call
|
600
600
|
@expected_args = :a1
|
601
601
|
object.method("#{@protection}_test_method_args=".intern).call @expected_args
|
602
|
-
advice_called.should
|
602
|
+
advice_called.should be_truthy
|
603
603
|
aspect.unadvise
|
604
604
|
end
|
605
605
|
|
@@ -733,7 +733,7 @@ describe Aspect, "methods" do
|
|
733
733
|
make_array(@object_spec).each do |object|
|
734
734
|
object.method("#{@protection}_test_method".intern).call :a1, :a2, :a3, :h1 => 'h1', :h2 => 'h2'
|
735
735
|
end
|
736
|
-
advice_called.should
|
736
|
+
advice_called.should be_truthy
|
737
737
|
aspect.unadvise
|
738
738
|
end
|
739
739
|
|
@@ -829,7 +829,7 @@ describe Aspect, "methods" do
|
|
829
829
|
object.method("#{@protection}_test_method_args".intern).call
|
830
830
|
@expected_args = :a1
|
831
831
|
object.method("#{@protection}_test_method_args=".intern).call @expected_args
|
832
|
-
advice_called.should
|
832
|
+
advice_called.should be_truthy
|
833
833
|
end
|
834
834
|
aspect.unadvise
|
835
835
|
end
|
@@ -926,7 +926,7 @@ describe Aspect, "methods" do
|
|
926
926
|
else
|
927
927
|
Aquarium::AspectInvocationTestClass.new.method("#{@protection}_test_method".intern).call :a1, :a2, :a3, :h1 => 'h1', :h2 => 'h2'
|
928
928
|
end
|
929
|
-
advice_called.should
|
929
|
+
advice_called.should be_truthy
|
930
930
|
aspect.unadvise
|
931
931
|
end
|
932
932
|
|
@@ -1117,7 +1117,7 @@ describe Aspect, "methods" do
|
|
1117
1117
|
args.should == [:a1, :a2, :a3, {:h1 => 'h1', :h2 => 'h2'}]
|
1118
1118
|
end
|
1119
1119
|
Aquarium::AspectInvocationTestClass.new.public_test_method :a1, :a2, :a3, :h1 => 'h1', :h2 => 'h2'
|
1120
|
-
advice_called.should
|
1120
|
+
advice_called.should be_truthy
|
1121
1121
|
aspect.unadvise
|
1122
1122
|
end
|
1123
1123
|
|
@@ -1423,7 +1423,7 @@ describe Aspect, "methods" do
|
|
1423
1423
|
args.should == [:a1, :a2, :a3, {:h1 => 'h1', :h2 => 'h2'}]
|
1424
1424
|
end
|
1425
1425
|
object.public_test_method :a1, :a2, :a3, :h1 => 'h1', :h2 => 'h2'
|
1426
|
-
advice_called.should
|
1426
|
+
advice_called.should be_truthy
|
1427
1427
|
aspect.unadvise
|
1428
1428
|
end
|
1429
1429
|
|
@@ -1438,7 +1438,7 @@ describe Aspect, "methods" do
|
|
1438
1438
|
}
|
1439
1439
|
aspect = Aspect.new :before, :object => object, :methods => :public_test_method, :advice => advice
|
1440
1440
|
object.public_test_method :a1, :a2, :a3, :h1 => 'h1', :h2 => 'h2'
|
1441
|
-
advice_called.should
|
1441
|
+
advice_called.should be_truthy
|
1442
1442
|
aspect.unadvise
|
1443
1443
|
end
|
1444
1444
|
|
@@ -1454,7 +1454,7 @@ describe Aspect, "methods" do
|
|
1454
1454
|
}
|
1455
1455
|
aspect = Aspect.new :before, :object => object, :methods => :public_test_method, key.intern => advice
|
1456
1456
|
object.public_test_method :a1, :a2, :a3, :h1 => 'h1', :h2 => 'h2'
|
1457
|
-
advice_called.should
|
1457
|
+
advice_called.should be_truthy
|
1458
1458
|
aspect.unadvise
|
1459
1459
|
end
|
1460
1460
|
end
|
@@ -1464,7 +1464,7 @@ describe Aspect, "methods" do
|
|
1464
1464
|
advice_called = false
|
1465
1465
|
advice1 = Proc.new {|jp, obj, *args| fail "advice1"}
|
1466
1466
|
advice2 = Proc.new {|jp, obj, *args| fail "advice2"}
|
1467
|
-
|
1467
|
+
expect {Aspect.new :before, :object => object, :methods => :public_test_method, :advice => advice1, :invoke => advice2}.to raise_error(Aquarium::Utils::InvalidOptions)
|
1468
1468
|
end
|
1469
1469
|
|
1470
1470
|
it "should allow ignore an :advice option if a block is given." do
|
@@ -1476,18 +1476,18 @@ describe Aspect, "methods" do
|
|
1476
1476
|
advice_called = true
|
1477
1477
|
end
|
1478
1478
|
object.public_test_method :a1, :a2, :a3, :h1 => 'h1', :h2 => 'h2'
|
1479
|
-
advice_called.should
|
1479
|
+
advice_called.should be_truthy
|
1480
1480
|
aspect.unadvise
|
1481
1481
|
end
|
1482
1482
|
end
|
1483
1483
|
|
1484
1484
|
describe Aspect, ".new (advice block or proc parameter list)" do
|
1485
1485
|
it "should raise unless an advice block or :advice => advice parameter is specified." do
|
1486
|
-
|
1486
|
+
expect { Aspect.new(:after, :type => Aquarium::AspectInvocationTestClass, :methods => :public_test_method)}.to raise_error(Aquarium::Utils::InvalidOptions)
|
1487
1487
|
end
|
1488
1488
|
|
1489
1489
|
it "should raise if obsolete |jp, *args| list is used." do
|
1490
|
-
|
1490
|
+
expect { Aspect.new :before, :type => Aquarium::AspectInvocationTestClass, :methods => :public_test_method do |jp, *args|; end }.to raise_error(Aquarium::Utils::InvalidOptions)
|
1491
1491
|
end
|
1492
1492
|
|
1493
1493
|
it "should accept an argument list matching |jp, object, *args|." do
|
@@ -1566,12 +1566,12 @@ describe Aspect, "methods" do
|
|
1566
1566
|
@included_types.each do |type|
|
1567
1567
|
advice_called = false
|
1568
1568
|
type.new(1).doit
|
1569
|
-
advice_called.should
|
1569
|
+
advice_called.should be_truthy
|
1570
1570
|
end
|
1571
1571
|
@excluded_types.each do |type|
|
1572
1572
|
advice_called = false
|
1573
1573
|
type.new(1).doit
|
1574
|
-
advice_called.should_not
|
1574
|
+
advice_called.should_not be_truthy
|
1575
1575
|
end
|
1576
1576
|
aspect.unadvise
|
1577
1577
|
end
|
@@ -1644,12 +1644,12 @@ describe Aspect, "methods" do
|
|
1644
1644
|
@included_objects.each do |object|
|
1645
1645
|
advice_called = false
|
1646
1646
|
object.doit
|
1647
|
-
advice_called.should
|
1647
|
+
advice_called.should be_truthy
|
1648
1648
|
end
|
1649
1649
|
@excluded_objects.each do |object|
|
1650
1650
|
advice_called = false
|
1651
1651
|
object.doit
|
1652
|
-
advice_called.should_not
|
1652
|
+
advice_called.should_not be_truthy
|
1653
1653
|
end
|
1654
1654
|
aspect.unadvise
|
1655
1655
|
end
|
@@ -1688,12 +1688,12 @@ describe Aspect, "methods" do
|
|
1688
1688
|
@included_objects.each do |object|
|
1689
1689
|
advice_called = false
|
1690
1690
|
object.doit
|
1691
|
-
advice_called.should
|
1691
|
+
advice_called.should be_truthy
|
1692
1692
|
end
|
1693
1693
|
@excluded_objects.each do |object|
|
1694
1694
|
advice_called = false
|
1695
1695
|
object.doit
|
1696
|
-
advice_called.should_not
|
1696
|
+
advice_called.should_not be_truthy
|
1697
1697
|
end
|
1698
1698
|
aspect.unadvise
|
1699
1699
|
end
|
@@ -1723,12 +1723,12 @@ describe Aspect, "methods" do
|
|
1723
1723
|
included_types.each do |type|
|
1724
1724
|
advice_called = false
|
1725
1725
|
type.new(1).doit
|
1726
|
-
advice_called.should
|
1726
|
+
advice_called.should be_truthy
|
1727
1727
|
end
|
1728
1728
|
excluded_types.each do |type|
|
1729
1729
|
advice_called = false
|
1730
1730
|
type.new(1).doit
|
1731
|
-
advice_called.should_not
|
1731
|
+
advice_called.should_not be_truthy
|
1732
1732
|
end
|
1733
1733
|
aspect.unadvise
|
1734
1734
|
end
|
@@ -1747,10 +1747,10 @@ describe Aspect, "methods" do
|
|
1747
1747
|
|
1748
1748
|
advice_called = false
|
1749
1749
|
ClassWithPublicInstanceMethod.new.public_instance_test_method
|
1750
|
-
advice_called.should
|
1750
|
+
advice_called.should be_falsey
|
1751
1751
|
advice_called = false
|
1752
1752
|
ClassIncludingModuleWithPublicInstanceMethod.new.public_instance_module_test_method
|
1753
|
-
advice_called.should
|
1753
|
+
advice_called.should be_falsey
|
1754
1754
|
aspect.unadvise
|
1755
1755
|
end
|
1756
1756
|
end
|
@@ -1768,10 +1768,10 @@ describe Aspect, "methods" do
|
|
1768
1768
|
|
1769
1769
|
advice_called = false
|
1770
1770
|
ClassWithPublicInstanceMethod.new.public_instance_test_method
|
1771
|
-
advice_called.should
|
1771
|
+
advice_called.should be_falsey
|
1772
1772
|
advice_called = false
|
1773
1773
|
ClassIncludingModuleWithPublicInstanceMethod.new.public_instance_module_test_method
|
1774
|
-
advice_called.should
|
1774
|
+
advice_called.should be_falsey
|
1775
1775
|
aspect.unadvise
|
1776
1776
|
end
|
1777
1777
|
end
|
@@ -1789,10 +1789,10 @@ describe Aspect, "methods" do
|
|
1789
1789
|
|
1790
1790
|
advice_called = false
|
1791
1791
|
ClassWithPublicInstanceMethod.new.public_instance_test_method
|
1792
|
-
advice_called.should
|
1792
|
+
advice_called.should be_falsey
|
1793
1793
|
advice_called = false
|
1794
1794
|
ClassIncludingModuleWithPublicInstanceMethod.new.public_instance_module_test_method
|
1795
|
-
advice_called.should
|
1795
|
+
advice_called.should be_falsey
|
1796
1796
|
aspect.unadvise
|
1797
1797
|
end
|
1798
1798
|
end
|
@@ -1815,12 +1815,12 @@ describe Aspect, "methods" do
|
|
1815
1815
|
included_types.each do |type|
|
1816
1816
|
advice_called = false
|
1817
1817
|
type.new(1).doit
|
1818
|
-
advice_called.should
|
1818
|
+
advice_called.should be_truthy
|
1819
1819
|
end
|
1820
1820
|
excluded_types.each do |type|
|
1821
1821
|
advice_called = false
|
1822
1822
|
type.new(1).doit
|
1823
|
-
advice_called.should_not
|
1823
|
+
advice_called.should_not be_truthy
|
1824
1824
|
end
|
1825
1825
|
aspect.unadvise
|
1826
1826
|
end
|
@@ -1851,12 +1851,12 @@ describe Aspect, "methods" do
|
|
1851
1851
|
@included_objects.each do |object|
|
1852
1852
|
advice_called = false
|
1853
1853
|
object.doit
|
1854
|
-
advice_called.should
|
1854
|
+
advice_called.should be_truthy
|
1855
1855
|
end
|
1856
1856
|
@excluded_objects.each do |object|
|
1857
1857
|
advice_called = false
|
1858
1858
|
object.doit
|
1859
|
-
advice_called.should_not
|
1859
|
+
advice_called.should_not be_truthy
|
1860
1860
|
end
|
1861
1861
|
aspect.unadvise
|
1862
1862
|
end
|
@@ -1890,12 +1890,12 @@ describe Aspect, "methods" do
|
|
1890
1890
|
@included_types.each do |type|
|
1891
1891
|
advice_called = false
|
1892
1892
|
type.new(1).doit
|
1893
|
-
advice_called.should
|
1893
|
+
advice_called.should be_truthy
|
1894
1894
|
end
|
1895
1895
|
@excluded_types.each do |type|
|
1896
1896
|
advice_called = false
|
1897
1897
|
type.new(1).doit
|
1898
|
-
advice_called.should_not
|
1898
|
+
advice_called.should_not be_truthy
|
1899
1899
|
end
|
1900
1900
|
aspect.unadvise
|
1901
1901
|
end
|
@@ -1924,12 +1924,12 @@ describe Aspect, "methods" do
|
|
1924
1924
|
@included_types.each do |type|
|
1925
1925
|
advice_called = false
|
1926
1926
|
type.new(1).doit
|
1927
|
-
advice_called.should
|
1927
|
+
advice_called.should be_truthy
|
1928
1928
|
end
|
1929
1929
|
@excluded_types.each do |type|
|
1930
1930
|
advice_called = false
|
1931
1931
|
type.new(1).doit
|
1932
|
-
advice_called.should_not
|
1932
|
+
advice_called.should_not be_truthy
|
1933
1933
|
end
|
1934
1934
|
aspect.unadvise
|
1935
1935
|
end
|
@@ -1947,12 +1947,12 @@ describe Aspect, "methods" do
|
|
1947
1947
|
Aquarium::PointcutFinderTestClasses.all_class_variables_pointcut_classes.each do |type|
|
1948
1948
|
advice_called = false
|
1949
1949
|
type.new.doit
|
1950
|
-
advice_called.should
|
1950
|
+
advice_called.should be_truthy
|
1951
1951
|
end
|
1952
1952
|
Aquarium::PointcutFinderTestClasses.all_constants_pointcut_classes.each do |type|
|
1953
1953
|
advice_called = false
|
1954
1954
|
type.new.doit
|
1955
|
-
advice_called.should_not
|
1955
|
+
advice_called.should_not be_truthy
|
1956
1956
|
end
|
1957
1957
|
aspect.unadvise
|
1958
1958
|
end
|
@@ -1985,12 +1985,12 @@ describe Aspect, "methods" do
|
|
1985
1985
|
@included_types.each do |type|
|
1986
1986
|
advice_called = false
|
1987
1987
|
type.new(1).doit
|
1988
|
-
advice_called.should
|
1988
|
+
advice_called.should be_truthy
|
1989
1989
|
end
|
1990
1990
|
@excluded_types.each do |type|
|
1991
1991
|
advice_called = false
|
1992
1992
|
type.new(1).doit
|
1993
|
-
advice_called.should_not
|
1993
|
+
advice_called.should_not be_truthy
|
1994
1994
|
end
|
1995
1995
|
aspect.unadvise
|
1996
1996
|
end
|
@@ -2096,12 +2096,12 @@ describe Aspect, "methods" do
|
|
2096
2096
|
@included_objects.each do |object|
|
2097
2097
|
advice_called = false
|
2098
2098
|
object.doit
|
2099
|
-
advice_called.should
|
2099
|
+
advice_called.should be_truthy
|
2100
2100
|
end
|
2101
2101
|
@excluded_objects.each do |object|
|
2102
2102
|
advice_called = false
|
2103
2103
|
object.doit
|
2104
|
-
advice_called.should_not
|
2104
|
+
advice_called.should_not be_truthy
|
2105
2105
|
end
|
2106
2106
|
aspect.unadvise
|
2107
2107
|
end
|
@@ -2146,23 +2146,23 @@ describe Aspect, "methods" do
|
|
2146
2146
|
(@included_types + @excluded_types).each do |type|
|
2147
2147
|
advice_called = false
|
2148
2148
|
type.new(1).doit
|
2149
|
-
advice_called.should
|
2149
|
+
advice_called.should be_truthy
|
2150
2150
|
end
|
2151
2151
|
@excluded_types.each do |type|
|
2152
2152
|
advice_called = false
|
2153
2153
|
type.new(1).doit3
|
2154
|
-
advice_called.
|
2154
|
+
advice_called.should be_falsey
|
2155
2155
|
end
|
2156
2156
|
end
|
2157
2157
|
(@included_objects + @excluded_objects).each do |object|
|
2158
2158
|
advice_called = false
|
2159
2159
|
object.doit
|
2160
|
-
advice_called.should
|
2160
|
+
advice_called.should be_truthy
|
2161
2161
|
end
|
2162
2162
|
@excluded_objects.each do |object|
|
2163
2163
|
advice_called = false
|
2164
2164
|
object.doit3
|
2165
|
-
advice_called.should_not
|
2165
|
+
advice_called.should_not be_truthy
|
2166
2166
|
end
|
2167
2167
|
aspect.unadvise
|
2168
2168
|
end
|
@@ -2205,7 +2205,7 @@ describe Aspect, "methods" do
|
|
2205
2205
|
# (@excluded_objects).each do |object|
|
2206
2206
|
# advice_called = false
|
2207
2207
|
# object.doit
|
2208
|
-
# advice_called.should
|
2208
|
+
# advice_called.should be_truthy
|
2209
2209
|
# end
|
2210
2210
|
# aspect.unadvise
|
2211
2211
|
# end
|