dev@javaserverfaces.java.net

RE: Unit tests failing

From: Jason Lee <lee_at_iecokc.com>
Date: Mon, 29 Jan 2007 11:20:27 -0600

Here's a quick update and a warning. :P Per Roger's suggestion, I
downgraded to JDK5 (from 6, obviously ;), which Ryan had already
suggested (to be fair to him), cleaned and reran the tests, and
everything ran fine. I ran the tests again under 5 and 6 to confirm
that tests fail under six. I then downgraded by Linux box at home,
which was showing the same problem, and all tests passed there as well.
The moral of the story, then, is don't do JSF RI dev under Java 6 for
now. :)
 
Thanks for the help, Roger and Ryan. :-D
 
-----
Jason Lee, SCJP
Programmer/Analyst
http://www.iec-okc.com <http://www.iec-okc.com/>
 


  _____

        From: Jason Lee
        Sent: Monday, January 29, 2007 9:31 AM
        To: dev_at_javaserverfaces.dev.java.net
        Subject: Unit tests failing
        
        
        I have an odd problem that Ryan assures me is unique to my
computer (two of them actually), but neither he nor I have been
successful in figuring why. When I run the full the suite of tests,
everything runs fine until I hit the jsf-ri systests, particularly
com.sun.faces.jsptest.PrependIdTestCase.testMissingView(PrependIdTestCas
e.java:126). The line referenced there is this one:
         
            assertTrue(-1 != pageText.indexOf("input
value=\"prependIdFalse\" type=\"text\" name=\"j_id_id54\""));
         
        That tests the output of this block in the jsp:
         
          <h:form prependId="false">
              <h:inputText value="prependIdFalse" />
          </h:form>
         
          <h:form prependId="true">
              <h:inputText value="prependIdTrue" />
          </h:form>
         
          <h:form>
              <h:inputText value="prependIdUnspecified" />
          </h:form>
        
        When I request that page from the server via my browser, I can
see that the first inputText is rendered as:
         
            <input type="text" name="j_id_id54" value="prependIdFalse"
/>
         
        Note that the only thing wrong with that rendered output is the
order of the attributes. The code is expecting value/type/name, but the
server is returning type/name/value. The question that haunts me, and
causes my tests to fail is this: Why is that different? A related
question is why is it rendering like that for me, but not for Ryan (or
Ed, I hear, and I guess untold others).
         
        From the hip, I see a couple of fixes. The most obvious would
be to determine why the attribute order is different and fix it. Sadly,
that has not been easy to date. The second option is to change the test
itself. Currently, the test submits the request to the server via
HtmlUnit:
         
            HtmlPage page = getPage("/faces/jsp/prependId.jsp");
         
        It then gets the String representation of the reponse and begins
to perform a number of String.indexOf() operations. Could the test be
altered to use the HtmlUnit API more extensively, making use of calls
such as HtmlPage.getHtmlElemenetById(), getFormByName(), getChildren(),
etc? That would mean, I think, we'd have to iterate through the DOM
tree for certain tests (i.e., get the forms, which are rendered in a
known order, then iterate through its children to get those elements
that have no IDs, such as in this case).
         
        Am I missing something with regard to the current form of the
test? Is there an easier solution? I honestly don't care how the test
works, as long as it's effective and actually runs. :) I would
certainly appreciate any help, tips, pointers, fixes, etc. :) Thanks!
         
        -----
        Jason Lee, SCJP
        JSF RI Dev Team
        Programmer/Analyst
        http://www.iec-okc.com <http://www.iec-okc.com/>