tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Howard Lewis Ship" <hls...@gmail.com>
Subject Re: TAPESTRY-1370: Where are the tests
Date Fri, 08 Jun 2007 00:39:31 GMT
Yep ... there's a judgement call there. A unit test for the
StringResultProcessor would be trivial, but wouldn't prove very much
(foo can call bar).  On the other hand, building an integration test
around it proves that the injection of dependencies is working, that
the contributions to the various services are correct, etc.

So I'm not always fanatical about testing a piece of code that has
virtually no branches in it, or any special error processing, as long
as it gets exercised as part of the integration suite.

On 6/7/07, Daniel Gredler <daniel.gredler@gmail.com> wrote:
> Will do. I checked for unit tests on existing result processors like
> StringResultProcessor and didn't find any, so I wrote it off. I guess most
> of these are getting exercised in the integration suite?
>
>
>
> On 6/7/07, Howard Lewis Ship <hlship@gmail.com > wrote:
> > Dan,
> >
> > Good start on your first commit, but you're not done yet ... need to
> > see some tests.  Even modifying the integration test suite to have
> > some event handler method return a page class instead of a page name,
> > but testing is mandatory.
> >
> > I do appreciate that you updated the documentation, though. That and
> > some tests and we're all in good shape.
> >
> > Howard
> >
> >
> > On 6/7/07, gredler@apache.org <gredler@apache.org> wrote:
> > > Author: gredler
> > > Date: Thu Jun  7 17:11:23 2007
> > > New Revision: 545354
> > >
> > > URL: http://svn.apache.org/viewvc?view=rev&rev=545354
> > > Log:
> > > TAPESTRY-1370: Add a component event result processor for Class
> instances
> > >
> > > Added:
> > >
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ClassResultProcessor.java
> > > Modified:
> > >
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
> > >
> tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/event.apt
> > >
> tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/pagenav.apt
> > >
> > > Added:
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ClassResultProcessor.java
> > > URL:
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ClassResultProcessor.java?view=auto&rev=545354
> > >
> ==============================================================================
> > > ---
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ClassResultProcessor.java
> (added)
> > > +++
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ClassResultProcessor.java
> Thu Jun  7 17:11:23 2007
> > > @@ -0,0 +1,56 @@
> > > +// Copyright 2007 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.tapestry.internal.services;
> > > +
> > > +import org.apache.tapestry.Link;
> > > +import org.apache.tapestry.internal.structure.Page ;
> > > +import org.apache.tapestry.runtime.Component;
> > > +import
> org.apache.tapestry.services.ActionResponseGenerator;
> > > +import
> org.apache.tapestry.services.ComponentClassResolver;
> > > +import
> org.apache.tapestry.services.ComponentEventResultProcessor
> ;
> > > +
> > > +/**
> > > + * Used when a component event handler returns a class value. The value
> is interpreted as the page
> > > + * class. A link to the page will be sent.
> > > + *
> > > + * @see LinkActionResponseGenerator
> > > + */
> > > +public class ClassResultProcessor implements
> ComponentEventResultProcessor<Class>
> > > +{
> > > +    private ComponentClassResolver _resolver;
> > > +
> > > +    private final RequestPageCache _requestPageCache;
> > > +
> > > +    private final LinkFactory _linkFactory;
> > > +
> > > +    public ClassResultProcessor(ComponentClassResolver
> resolver, RequestPageCache requestPageCache,
> > > +            LinkFactory linkFactory)
> > > +    {
> > > +        _resolver = resolver;
> > > +        _requestPageCache = requestPageCache;
> > > +        _linkFactory = linkFactory;
> > > +    }
> > > +
> > > +    public ActionResponseGenerator processComponentEvent(Class value,
> Component component,
> > > +            String methodDescripion)
> > > +    {
> > > +        String className = value.getName();
> > > +        String pageName =
> _resolver.resolvePageClassNameToPageName(className);
> > > +        Page page = _requestPageCache.get(pageName);
> > > +        Link link = _linkFactory.createPageLink(page);
> > > +        return new LinkActionResponseGenerator(link);
> > > +    }
> > > +
> > > +}
> > >
> > > Modified:
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
> > > URL:
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java?view=diff&rev=545354&r1=545353&r2=545354
> > >
> ==============================================================================
> > > ---
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
> (original)
> > > +++
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
> Thu Jun  7 17:11:23 2007
> > > @@ -80,6 +80,7 @@
> > >  import
> org.apache.tapestry.internal.services.BeanBlockSourceImpl;
> > >  import
> org.apache.tapestry.internal.services.BeanModelSourceImpl;
> > >  import
> org.apache.tapestry.internal.services.BindingSourceImpl ;
> > > +import
> org.apache.tapestry.internal.services.ClassResultProcessor;
> > >  import
> org.apache.tapestry.internal.services.ClasspathAssetAliasManagerImpl;
> > >  import
> org.apache.tapestry.internal.services.CommonResourcesInjectionProvider
> ;
> > >  import
> org.apache.tapestry.internal.services.ComponentActionDispatcher;
> > > @@ -1262,7 +1263,7 @@
> > >      public void
> contributeComponentEventResultProcessor(
> > >
> @InjectService("ComponentInstanceResultProcessor")
> > >              ComponentEventResultProcessor
> componentInstanceProcessor,
> > > -
> > > +            ComponentClassResolver
> componentClassResolver,
> > >              MappedConfiguration<Class,
> ComponentEventResultProcessor> configuration)
> > >      {
> > >          configuration.add(
> > > @@ -1288,6 +1289,8 @@
> > >          });
> > >
> > >          configuration.add(String.class, new
> StringResultProcessor(_requestPageCache, _linkFactory));
> > > +
> > > +        configuration.add(Class.class, new
> ClassResultProcessor(componentClassResolver,
> _requestPageCache, _linkFactory));
> > >
> > >          configuration.add(Component.class, componentInstanceProcessor);
> > >
> > >
> > > Modified:
> tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/event.apt
> > > URL:
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/event.apt?view=diff&rev=545354&r1=545353&r2=545354
> > >
> ==============================================================================
> > > ---
> tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/event.apt
> (original)
> > > +++
> tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/event.apt
> Thu Jun  7 17:11:23 2007
> > > @@ -107,7 +107,7 @@
> > >
> > >    You should qualify exactly which component(s) you wish to recieve
> events from.
> > >
> > > -Event Handler Method Convention Names
> > > +Event Handler Method Convention Names
> > >
> > >    As an alternative to the use of annotations, you may name your events
> in a specific fashion, and Tapestry will invoke your methods just as if
> > >    they were annotated.
> > > @@ -128,6 +128,10 @@
> > >
> > >    Note from Howard: I've found that I prefer the naming convention
> approach, and reserve the annotation just for situations that don't
> otherwise fit.
> > >
> > > +Event Handler Method Return Values
> > > +
> > > +  For page navigation events, the value returned from an event handler
> method {{{pagenav.html}determines how Tapestry will render a response}}.
> > > +
> > >  Event Context
> > >
> > >    The context values (the context parameter to the ActionLink
> component) can be any object.
> > > @@ -154,8 +158,4 @@
> > >
> > >    The event will bubble up the hierarchy, until it is aborted. The
> event is aborted
> > >    when an event handler method returns a non-null value.
> > > -
> > > -  For page navigation events, the value returned from an event handler
> method {{{pagenav.html}determines how Tapestry will render a response}}.
> > >
> > > -
> > > -
> > > \ No newline at end of file
> > >
> > > Modified:
> tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/pagenav.apt
> > > URL:
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/pagenav.apt?view=diff&rev=545354&r1=545353&r2=545354
> > >
> ==============================================================================
> > > ---
> tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/pagenav.apt
> (original)
> > > +++
> tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/pagenav.apt
> Thu Jun  7 17:11:23 2007
> > > @@ -45,15 +45,22 @@
> > >    are transitory, meaningful only while the application is actively
> engaged, and not meant to be used in later sessions.
> > >
> > >  * String response
> > > -
> > > +
> > >    When a string is returned, it is expected to be the logical name of a
> page (as opposed to the page's
> > >    fully qualified class name).  As elsewhere, the name of the page is
> case insensitive.
> > >
> > >    Again, a render request URL will be constructed and sent to the
> client as a redirect.
> > >
> > > +* Class response
> > > +
> > > +  When a class is returned, it is expected to be a page class.
> Returning a page class from an event handler is safer for refactoring
> > > +  than returning a page name.
> > > +
> > > +  As with other response types, a render request URL will be
> constructed and sent to the client as a redirect.
> > > +
> > >  * Page response
> > > -
> > > -  You may also return an instance of a page, rather than the name of a
> page.
> > > +
> > > +  You may also return an instance of a page, rather than the name or
> class of a page.
> > >
> > >    A page may be injected via the
> {{{../apidocs/org/apache/tapestry/annotations/InjectPage.html}InjectPage}}
> annotation.
> > >
> > >
> > >
> > >
> >
> >
> > --
> > Howard M. Lewis Ship
> > TWD Consulting, Inc.
> > Independent J2EE / Open-Source Java Consultant
> > Creator and PMC Chair, Apache Tapestry
> > Creator, Apache HiveMind
> >
> > Professional Tapestry training, mentoring, support
> > and project work.   http://howardlewisship.com
> >
>
>
>
> --
> Daniel Gredler
> http://daniel.gredler.net/


-- 
Howard M. Lewis Ship
TWD Consulting, Inc.
Independent J2EE / Open-Source Java Consultant
Creator and PMC Chair, Apache Tapestry
Creator, Apache HiveMind

Professional Tapestry training, mentoring, support
and project work.  http://howardlewisship.com

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org


Mime
View raw message