test/tc_service_point.rb in needle-1.1.0 vs test/tc_service_point.rb in needle-1.2.0
- old
+ new
@@ -14,10 +14,11 @@
# =============================================================================
#++
$:.unshift "../lib"
+require 'needle'
require 'needle/interceptor'
require 'needle/pipeline/interceptor'
require 'needle/service-point'
require 'test/unit'
@@ -37,17 +38,30 @@
succ.call( *args )
end
def <=>( item )
priority <=> item.priority
end
+ def reset!
+ end
end
class Container
+ def initialize( descended=true )
+ @descended = descended
+ end
+
def root
self
end
+ def non_public_services_exist?
+ true
+ end
+
+ def non_public_services_exist=( flag )
+ end
+
def []( name )
case name
when :service_models
{ :mock => [ :mock ] }
when :pipeline_elements
@@ -56,10 +70,14 @@
end
def fullname
"container"
end
+
+ def descended_from?( c )
+ @descended
+ end
end
class Interceptor
def initialize( point, opts )
end
@@ -138,8 +156,39 @@
interceptor = Needle::Interceptor.new.with { Interceptor }
point.interceptor interceptor
inst = point.instance
assert_instance_of Needle::InterceptorChainBuilder::InterceptedServiceProxy, inst
+ end
+
+ def test_interceptor_after_instance
+ reg = Needle::Registry.new
+ reg.define.foo { "hello" }
+
+ events = []
+ reg.intercept( :foo ).doing do |ch,ctx|
+ events << "first"
+ ch.process_next ctx
+ end
+ reg.intercept( :foo ).doing do |ch,ctx|
+ events << "second"
+ ch.process_next ctx
+ end
+
+ obj1 = reg.foo
+ obj1.length
+ assert_equal [ "first", "second" ], events
+
+ events = []
+ reg.intercept( :foo ).doing do |ch,ctx|
+ events << "third"
+ ch.process_next ctx
+ end
+
+ obj2 = reg.foo
+ obj2.length
+ assert_equal [ "first", "second", "third" ], events
+
+ assert_not_same obj1, obj2
end
end