Hi,
I need to document all this but I wanted to give you a heads up on
our Maven2 build:
* It's fully functional but requires Maven 2.1 to fully work (this is
due to bugs in 2.0.6 which is fixed in 2.1). As 2.1 isn't released
yet, I've made a version available at
http://xwiki.org/maven-2.1-SNAPSHOT.zip
* What does the m2 build currently do:
- it builds everything including the standalone distribution.
Note: it doesn't generate the NSIS exe yet.
- we can generate artifacts for various databases (we have 3
configured: HSQLDB, MySQL and PostGreSQL). However the application/
and application-test/ modules currently only work with HSQLDB and the
database/ module needs that your database be started if you're not
using HSQLDB (the default).
- it runs selenium tests written as junit tests and located in
xwiki/application-test/src/test/it
* The full build currently takes close to 3mn here. I'll exclude the
functional tests from the default build as they'll start to take too
long as soon as we start having more tests. I'll create a profile
called "integration-tests" for running them. Our CI tool will use it.
* We've installed a CI tool at
http://teamcity.xwiki.org but we have
some issues with the svn checkout which hangs. I need to figure out
what's wrong.
* What's left for the m2 build:
- some fine tuning
- configure it so that we can release directly on objectweb's m2
repo at the click of a button
- NSIS integration
- move the tests in xwiki/tests or rewrite them
- review the JAR version differences with the Ant build and try to
align them. It's probably a good time to upgrade all our jars to use
the latest version of libraries too.
* A note on Selenium tests. I've set up an infrastructure so that any
tests dropped in xwiki/application-test/src/test/it gets executed.
Don't hesitate to add new tests there. To whet your appetite here's
an example of a login test to show you how easy it is (yeah I know,
that test is easy :)):
public class LoginTest extends AbstractSeleniumTestCase
{
public void setUp() throws Exception
{
super.setUp();
open("/xwiki/bin/view/Main/");
// Verify that the user isn't logged in
if (isAuthenticated()) {
logout();
}
goToLoginPage();
}
public void testLogAsAdmin()
{
setFieldValue("j_username", "Admin");
setFieldValue("j_password", "admin");
checkField("rememberme");
submit();
assertTrue("Admin user has not been authenticated",
isAuthenticated());
}
public void testLogWithWrongPassword()
{
setFieldValue("j_username", "Admin");
setFieldValue("j_password", "wrong password");
submit();
assertTextPresent("Wrong password");
}
public void testLogWithInvalidUsername()
{
setFieldValue("j_username", "non existent user");
setFieldValue("j_password", "admin");
submit();
assertTextPresent("Wrong user name");
}
}
TODO: I'm going to try writing some tests for the WYSIWYG editor
right now and see how hard it gets.
Comments are most welcome.
Thanks
-Vincent