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