"nicolas de loof" <[EMAIL PROTECTED]> writes:

> FYI I've started a javascript plugin project as part of maven Mojo. It
> allready support running jsunit tests :
>
> http://svn.codehaus.org/mojo/trunk/sandbox/javascript-maven-tools
>

Ah ah, that's good. I was a bit lost with all those javascript plugins
laying around... I used maven-jstools as a base because I a mostly
interested irght now in jsdoc and jslint, not packing.

> You can look at javascript-maven-plugin JsUnitMojo, that runs a customized
> TestCase with a shared jsUnit server to avoid the server-per-test issue you
> noticed.
>
> You will not be able to run the plugin as many dependencies are not (yet)
> available in central repo.

Could'nt you make them available ? Or give directions on how to build
these dependencies ? I assume these are the static files for jsunit
runner. I could build them myself.

> You can look at the src/it projects on how to configure and use the plugin
> for jsunit tests.
>
> Could you give me an example of the test result generated from jsunit result
> ? This part of the plugin is far perfectible, and I would welcome
> contribution ;-)
>

I just wrote a mapper class that constructs a
TestResult object from the results generated by jsunit:

public class BrowseResultToJUnitResult {

        private TestResult testResult;

        public BrowseResultToJUnitResult(TestResult tr) {
                this.testResult = tr;
        }

        /**
         * Add all the testcases found in the given test result to
           this junit
         * TestResult.
         * 
         * @param res
         *            a BrowserResult instance.
         */
        public void addBrowserResult(BrowserResult res) {
                for (final TestCaseResult tcr :
         res.getTestCaseResults()) {
                        Test t = new Test() {

                                public void run(TestResult arg0) {
                                }

                                public int countTestCases() {
                                        return 1;
                                }

                                public String toString() {
                                        return tcr.getName();
                                }
                        };
                        testResult.startTest(t);
                        if (!tcr.wasSuccessful()) {
                                ResultType type = tcr.getResultType();
                                if (type == ResultType.ERROR) {
                                        testResult.addError(t, new
                        Exception(tcr.getError()));
                                } else if (type == ResultType.FAILURE)
                        {
                                        testResult.addFailure(t, new
                        AssertionFailedError(tcr
                                                        .getFailure()));
                                }
                        }
                        testResult.endTest(t);
                }
        }
}

and here are the tests:

public class MapAcceptorToTestResultTest extends TestCase {

        public void testLoadResultFileAndCreateTestResult() throws
        IOException {
                String xml = "acceptor-sample.xml";
                String value = xmlAsString(xml);
                BrowserResultBuilder builder = new
        BrowserResultBuilder(
                                new DummyBrowserSource("toto", 1));
                BrowserResult res = builder.build(value);
                TestResult tr = new TestResult();
                BrowseResultToJUnitResult jres = new
        BrowseResultToJUnitResult(tr);
                jres.addBrowserResult(res);
                assertEquals(8, tr.runCount());
                assertEquals(0, tr.errorCount());
        }

        public void testLoadResultWithFailuresAndCreateTestResult()
        throws IOException {
                String xml = "acceptor-sample2.xml";
                String value = xmlAsString(xml);
                BrowserResultBuilder builder = new
        BrowserResultBuilder(
                                new DummyBrowserSource("toto", 1));
                BrowserResult res = builder.build(value);
                TestResult tr = new TestResult();
                BrowseResultToJUnitResult jres = new
        BrowseResultToJUnitResult(tr);
                jres.addBrowserResult(res);
                assertEquals(8, tr.runCount());
                assertEquals(0, tr.errorCount());
                assertEquals(1, tr.failureCount());
        }

        private String xmlAsString(String xml) throws IOException {
                String value;
                InputStream is = getClass().getResourceAsStream(xml);
                ByteArrayOutputStream bos = new
                ByteArrayOutputStream();
                byte[] data = new byte[1024];
                int ln = 0;
                while ((ln = is.read(data, 0, 1024)) != -1) {
                        bos.write(data, 0, ln);
                }
                return bos.toString();
        }

}

You then just need to modify StandaloneTest (or any other test casse
btw)with:

        @Override
        public void run(TestResult result) {
                try {
                        setUp();
                        testStandaloneRun();
                        tearDown();
                        BrowseResultToJUnitResult res = new
        BrowseResultToJUnitResult(
                                        result);
                        for (BrowserResult br :
        this.testRunResult.getBrowserResults())
                                res.addBrowserResult(br);
                } catch (Throwable e) {
                        e.printStackTrace();
                }
        }

        public void testStandaloneRun() throws Exception {
                testRunManager.runTests();
                this.testRunResult =
                testRunManager.getTestRunResult();
        }

This is far from perfect: I should encapsulate each browser execution
in a TEstSuite to have some grouping effect, but you got the idea. 

BTW, there  are hardcoded paths in the mojos code. Is this ok? 

  for ( int i = 0; i < browsers.length; i++ )
        {
            if ( new File( browsers[i] ).exists() )
            {
                continue;
            }
            if ( "firefox".equalsIgnoreCase( browsers[i] ) )
            {
                browsers[i] = "c:/program files/Mozilla
            Firefox/firefox.exe";
            }
            if ( "iexplorer".equalsIgnoreCase( browsers[i] ) )
            {
                browsers[i] = "c:/program files/internet
            explorer/iexplore.exe";
            }
        }


> Nico.
>
>
> 2007/10/22, Insitu <[EMAIL PROTECTED]>:
>>
>> Hello,
>> I am working on integrating jsunit (http://www.jsunit.net) into
>> maven. I would like to share some thoughts and request some advices
>> avout the best way to do that integration.
>>
>> Right now, I have a sample (maven) project that executes jsunit tests
>> from maven and generates reports. What I did is:
>> - modify jsunit java server test cases to generate JUnit test results
>>    from jsunit test results: That way javascript unit tests results
>>    and error gets integrated seamlessly into surefire's reports
>> - package the java server as an artifact
>> - encapsulates all tests in a single JUnit tests cases that
>>    configures things and laucn jsunit's StandaloneTest class
>>
>> Some  problems are:
>> - test pages contains hardwired and absolute references to everything
>>    (ie. scripts and jsunti base directory) which is BAD !
>> - you need to install jsunit somewhere locally
>> - you need to modify and track files by hand outside of the scope of
>>    the project
>> - test server is started once for  each test execution or event each
>>    JUnit test class execution which can be a performance bottleneck
>>    for large and/or deep projects
>>
>> What I want to do is:
>> 1. package jsunit runner and support files as  a jar or zip
>> 2. create a plugin tbound to process-test-sources that would unpack
>>     the jsunit site in target/jsunit-runner
>> 3. configure generically test server/runners to have
>>     target/jsunit-runner as their root site. This implies that
>>     javascript source files, test files and test pages be moved to
>>     this directory too...
>>
>> Ideally, I would rather serve everything from a servlet launched
>> through jetty with the adequate maven plugin but this would require
>> heavy changes to jsunit java server code. Or may be not...
>>
>> Comments and ideas are welcomed,
>>
>> regards,
>> --
>> OQube < software engineering \ génie logiciel >
>> Arnaud Bailly, Dr.
>> \web> http://www.oqube.com
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>

-- 
OQube < software engineering \ génie logiciel >
Arnaud Bailly, Dr.
\web> http://www.oqube.com


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to