Re: Re: Spindle compatability test suite

"Geoff Longman" <[email protected]> Mon, 15 May 2006 08:32:29 -0400
Newsgroups gmane.comp.ide.eclipse.spindle.devel
Message-ID <[email protected]>
Hey guy. My kids had the flu last week and on Thursday night I got
hit. Just made it out of bed yesterday afternoon and so am a but
behind.

G

On 5/13/06, Hugo Palma <[email protected]> wrote:
> Ok, i've uploaded the files. I used the tapidea svn repo for this.
> You have web access to it, if you like, here
> http://svn.javaforge.com/svn/tapidea/spindle-test-suite/trunk/.
> You can also find my(unfinished) implementation of IFixture here
> http://svn.javaforge.com/svn/tapidea/tapidea-core/trunk/src/main/java/org=
/intellij/tapestry/test/Fixture.java.
>
> I thought a little more about the tested classes implementation issue
> and i think i came up with a much better solution. Instead of having to
> declare a service for each tested class i think we can assume that if we
> have the IDE specific implementation of ITapestryProject and
> TapestryCore we can get any other instance of a class that we want to
> test from that. The current implementation only gets the
> ITapestryProject implementation but a similiar approach can be taken to
> get the TapestryCore impl.
> Do you think this assumption is correct ?
>
>
>
> Geoff Longman wrote:
> > Ok. I see what you have. A fixture is an interface to build a
> > "project" with context and classpath for testing. Can provide or point
> > me to (in you repo) an example of a Test?
> >
> >
> > On 5/10/06, Hugo Palma <[email protected]> wrote:
> >> Forgot to mention how the tested class implementation would be served =
to
> >> the test class.
> >
> > ok, I'm lost at this point. "tested class implementation" is?
> >
> >
> > Geoff
> >
> >> I got this working by declaring a hivemind service for each tested cla=
ss
> >> in spindle-tests and then providing the implementation in the IDE
> >> implementation module. There's also an utility method in
> >> AbstractSpindleTestCase that gets the tested class implementation.
> >> I'm not crazy about having to declare every tested class in the hivemi=
nd
> >> descriptor but i couldn't find a better way of doing this.
> >>
> >>
> >> Hugo Palma wrote:
> >> > I told you i wouldn't let you forget about this :o)
> >> >
> >> > I took advantage of a few dead hours in my day job to give this some
> >> > thought. After some experimenting i came up with some ideas and some
> >> > code also.
> >> >
> >> > There should be a separate module(spindle-tests) with all the
> >> > framework classes and the tests themselves.
> >> >
> >> > The framework consists of one interface, one class and one hivemind
> >> > descriptor. The interface is IFixture, it provides the signature for
> >> > all operations that can be executed in a fixture. A fresh instance o=
f
> >> > the fixture will be provided to each test class at every test run.
> >> > I've come up with the following code for now, still some operations
> >> > missing but good for getting the main picture:
> >> >
> >> > /**
> >> >  * A test fixture. Should have an implementation for each IDE.
> >> >  */
> >> > public interface IFixture<W, F>
> >> > {
> >> >     /**
> >> >      * Adds a web root.
> >> >      *
> >> >      * @param filePath     the absolute path to the web root
> >> directory.
> >> >      * @param relativePath the relative path of the web root. Some
> >> > IDEs let the user specify a different relative path for each web roo=
t,
> >> > changing the default "/" path.
> >> >      * @return the added web root.
> >> >      */
> >> >     W addWebRoot(String filePath, String relativePath);
> >> >
> >> >     /**
> >> >      * Adds a web root with the default "/" relative path.
> >> >      *
> >> >      * @param filePath the absolute path to the web root directory.
> >> >      * @return the added web root.
> >> >      */
> >> >     W addWebRoot(String filePath);
> >> >
> >> >     /**
> >> >      * Adds an empty file to a web root.
> >> >      *
> >> >      * @param webRoot the web root to add the file to.
> >> >      * @param path    the absolute path of the file to be added.
> >> >      * @return the added file.
> >> >      */
> >> >     F addFileToWebRoot(W webRoot, String path);
> >> >
> >> >     /**
> >> >      * Adds a source root.
> >> >      *
> >> >      * @param filePath the absolute path to the source root director=
y.
> >> >      * @return the added source root.
> >> >      */
> >> >     F addSourceRoot(String filePath);
> >> >
> >> >     /**
> >> >      * Adds an empty class to a source root.
> >> >      *
> >> >      * @param root        the source root to add the class to.
> >> >      * @param packageName the class package.
> >> >      * @param className   the class name.
> >> >      */
> >> >     void addClassToSourceRoot(F root, String packageName, String
> >> > className);
> >> >
> >> >     /**
> >> >      * Adds a .jar file to the classpath.
> >> >      *
> >> >      * @param jarFile the .jar file to add to the classpath.
> >> >      */
> >> >     void addJarToClasspath(F jarFile);
> >> >
> >> >     /**
> >> >      * Adds a file to a source root.
> >> >      *
> >> >      * @param root        the source root to add the file to.
> >> >      * @param packageName the package to add the file to.
> >> >      * @param fileName    the absolute path to the file to be added.
> >> >      */
> >> >     void addFileToSourceRoot(F root, String packageName, String
> >> > fileName);
> >> >
> >> >     /**
> >> >      * Tears down the fixture.
> >> >      */
> >> >     void tearDown();
> >> > }
> >> >
> >> >
> >> > The base class for all tests is also provided. I called it
> >> > AbstractSpindleTestCase. This class provides a getFixture() method t=
o
> >> > every subclass and is responsible for getting the fresh fixture
> >> > instance from Hivemind at every test run. Here's the code i came up
> >> with:
> >> >
> >> > /**
> >> >  * Base class for all test classes.
> >> >  *
> >> >  * @author Hugo Palma
> >> >  */
> >> > public abstract class AbstractSpindleTestCase extends TestCase
> >> > {
> >> >     private IFixture _fixture;
> >> >     private static Registry _registry;
> >> >
> >> >     {
> >> >         _registry =3D RegistryBuilder.constructDefaultRegistry();
> >> >     }
> >> >
> >> >     /**
> >> >      * {@inheritDoc}
> >> >      */
> >> >     protected void setUp() throws Exception
> >> >     {
> >> >         super.setUp();
> >> >
> >> >         // Allows getting a brand new IFixture instance every time.
> >> >         _registry.cleanupThread();
> >> >         _registry.setupThread();
> >> >
> >> >         _fixture =3D (IFixture) _registry.getService(IFixture.class =
);
> >> >     }
> >> >
> >> >     /**
> >> >      * {@inheritDoc}
> >> >      */
> >> >     protected void tearDown() throws Exception
> >> >     {
> >> >         super.tearDown();
> >> >
> >> >         // Cleanup the fixture.
> >> >         _fixture.tearDown();
> >> >         _fixture =3D null;
> >> >     }
> >> >
> >> >     protected IFixture getFixture()
> >> >     {
> >> >         return _fixture;
> >> >     }
> >> > }
> >> >
> >> > The only thing missing is the hivemodule.xml in the spindle-tests
> >> module:
> >> >
> >> > <module id=3D" net.sf.spindle.tests" version=3D"1.0.0">
> >> >     <service-point id=3D"fixture"
> >> > interface=3D"net.sf.spindle.tests.IFixture"/>
> >> > </module>
> >> >
> >> > So, given this, all the IDE has to do is:
> >> >
> >> > - Create an implementation of the IFixture interface.
> >> > - Provide a hivemodule.xml file in it's spindle-core implementation
> >> > module with something like:
> >> >
> >> >   <module id=3D"org.intellij.tapestry" version=3D" 1.0.0">
> >> >     <dependency module-id=3D"net.sf.spindle.tests" version=3D"1.0.0"=
/>
> >> >
> >> >     <implementation service-id=3D"net.sf.spindle.tests.fixture">
> >> >         <invoke-factory model=3D"threaded">
> >> >             <construct class=3D"org.intellij.tapestry.test.Fixture"/=
>
> >> >         </invoke-factory>
> >> >     </implementation>
> >> > </module>
> >> > - Execute the tests. I managed to run the tests from IDEA with no
> >> > problem. I'm going to see how/if i can run tests from a jar file wit=
h
> >> > Maven2.
> >> >
> >> >
> >> > Thoughts ?
> >>
> >>
> >> -------------------------------------------------------
> >> Using Tomcat but need to do more? Need to support web services,
> >> security?
> >> Get stuff done quickly with pre-integrated technology to make your
> >> job easier
> >> Download IBM WebSphere Application Server v.1.0.1 based on Apache
> >> Geronimo
> >> http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=3D120709&bid=3D263057&da=
t=3D121642
> >> _______________________________________________
> >> Spindle-developer mailing list
> >> [email protected]
> >> https://lists.sourceforge.net/lists/listinfo/spindle-developer
> >>
> >
> >
>
>
> -------------------------------------------------------
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job ea=
sier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronim=
o
> http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=3D120709&bid=3D263057&dat=
=3D121642
> _______________________________________________
> Spindle-developer mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/spindle-developer
>


--=20
The Spindle guy. http://spindle.sf.net
Blog:                  http://jroller.com/page/glongman
Other interests:  http://www.squidoo.com/spaceelevator/


-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642