Author: drobiazko Date: Mon May 30 20:02:37 2011 New Revision: 1129336 URL: http://svn.apache.org/viewvc?rev=1129336&view=rev Log: TAP5-1510: Added tests for decorators
Added: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DecorateByMarkerModule2.java (with props) Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java?rev=1129336&r1=1129335&r2=1129336&view=diff ============================================================================== --- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java (original) +++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java Mon May 30 20:02:37 2011 @@ -1609,6 +1609,19 @@ public class IntegrationTest extends IOC } @Test + public void decorate_by_annotation_matched_by_id() + { + Registry r = buildRegistry(DecorateByMarkerModule2.class); + + Greeter green = r.getService("RedGreeter", Greeter.class); + + assertEquals(green.getGreeting(), "Decorated by beta[Decorated by alpha[Red]]"); + + r.shutdown(); + + } + + @Test public void startup_inside_module() { Registry r = buildRegistry(StartupModule2.class); Added: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DecorateByMarkerModule2.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DecorateByMarkerModule2.java?rev=1129336&view=auto ============================================================================== --- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DecorateByMarkerModule2.java (added) +++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DecorateByMarkerModule2.java Mon May 30 20:02:37 2011 @@ -0,0 +1,85 @@ +// Copyright 2011 The Apache Software Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package org.apache.tapestry5.ioc.internal; + +import org.apache.tapestry5.ioc.*; +import org.apache.tapestry5.ioc.annotations.*; +import org.apache.tapestry5.ioc.services.AspectDecorator; +import org.apache.tapestry5.ioc.services.AspectInterceptorBuilder; +import org.testng.Assert; + + +public class DecorateByMarkerModule2 +{ + + @Decorate + @Match("RedGreeter") + public static <T> T byMatchAnnotation(ServiceResources resources, T delegate, AspectDecorator aspectDecorator) + { + return doDecorate("alpha", resources, delegate, aspectDecorator); + } + + @Decorate(id="withMarker") + @RedMarker + @Order("before:*") + public static <T> T byMarkerAnnotation(ServiceResources resources, T delegate, AspectDecorator aspectDecorator) + { + return doDecorate("beta", resources, delegate, aspectDecorator); + } + + @Decorate(id="doesNotMatchAnyService") + public static <T> T doesNotMatchAnyService(ServiceResources resources, T delegate, AspectDecorator aspectDecorator) + { + Assert.fail("Unexpected invocation"); + + return delegate; + } + + private static <T> T doDecorate(final String decoratorId, ServiceResources resources, T delegate, AspectDecorator aspectDecorator) + { + Class<T> serviceInterface = resources.getServiceInterface(); + + AspectInterceptorBuilder<T> builder = aspectDecorator.createBuilder(serviceInterface, delegate, String.format( + "<Interceptor for %s(%s)>", resources.getServiceId(), serviceInterface.getName())); + + builder.adviseAllMethods(new MethodAdvice() + { + + public void advise(Invocation invocation) + { + invocation.proceed(); + + Object result = invocation.getResult(); + + invocation.overrideResult(String.format("Decorated by %s[%s]", decoratorId, result)); + + } + }); + + return builder.build(); + } + + @Marker(RedMarker.class) + public Greeter buildRedGreeter() + { + return new Greeter() + { + public String getGreeting() + { + return "Red"; + } + }; + } + +} Propchange: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DecorateByMarkerModule2.java ------------------------------------------------------------------------------ svn:eol-style = native