The Author Online Book Forums are Moving

The Author Online Book Forums will soon redirect to Manning's liveBook and liveVideo. All book forum content will migrate to liveBook's discussion forum and all video forum content will migrate to liveVideo. Log in to liveBook or liveVideo with your Manning credentials to join the discussion!

Thank you for your engagement in the AoF over the years! We look forward to offering you a more enhanced forum experience.

MatDeLong (2) [Avatar] Offline
#1
Hey, I don't know if this is the best place to post a question related to Cactus and JSP Unit testing, but I'll try anyway!

I have the Cactus ant integration working, and cactus tasks successfully run. However, I can not successfully forward to a jsp page on my server. Here are my testXX and endXXX methods:

public void testConfig() throws Exception {
// Create a bean to be used on the forwarded page.
// Set properties on this bean to confirm that the form
// fields reference the correct bean properties.+
DirectoryBean bean = new DirectoryBean();
bean.setName("EMBT Cactus Test Name");
bean.setDescription("EMBT Cactus Test Description");
request.setAttribute("directory",bean);
pageContext.forward("/iam/html/portlet/administration/directory/dirConfig_Step1.jsp");
}

public void endConfig(WebResponse theResponse) throws SAXException, IOException {
WebTable[] tables = theResponse.getTables();
HashMap<String, WebTable> tableMap = new HashMap<String, WebTable>();

// Populate a hash map with all tables on page, with
// their identifiers as the key
// This is done so each table can be tested
// individually, but requires all tables
// on a given page to have unique identifiers.
for (int i = 0; i < tables.length; ++i) {
tableMap.put(tables[i].getID(), tables[i]);
}

//Evaluate a particular table, given its unique
//identifier

WebTable table = tableMap.get("contentTable");
assertNotNull("Table is null", table);
assertEquals("Names not equal",
"EMBT Cactus Test Name",
table.getTableCellWithID("name"));
assertEquals("Description not equal",
"EMBT Cactus Test Description",
table.getTableCellWithID("description"));
}

The error I get is that the table comes up being null in the endXXX() method. I believe this is because the pageContext.forward does not successfully return the page.

Any advice would be greatly appreciated!

Thanks

Mat
MatDeLong (2) [Avatar] Offline
#2
Re: Cactus JspTestCase
I tried testing with a simple JSP page that was more just like HTML and it worked fine. I think my problem is because of the page itself and how it's formatted, so here is an example, so that maybe you can see where I'm going wrong with the testing:


-----------------------

<%@ include file="/html/portlet/administration/directory/init.jsp" %>

<f: view>
<f: loadBundle basename="resources/Language" var="messages"/>
<t: aliasBeansScope>
<t: aliasBean alias="#{portletBean}" value="#{administrationBean}" />
<t: aliasBean alias="#{currentPage}" value="#{adminDirectoryAddPage}" />

<tiles: insert page="/html/portlet/common/template.jsp" flush="false">
<tiles: put name="portlet_menu" value="/html/portlet/common/menu.jsp" />
<tiles: put name="breadcrumb" value="/html/portlet/common/breadcrumb.jsp" />
<tiles: put name="portlet_actions" value="/html/portlet/common/actions.jsp" />
<tiles: put name="portlet_help_tip" value="/html/portlet/common/helptip.jsp" />
<tiles: put name="portlet_title" type="String">
<t: outputText value="#{messages.title_directory_configuration_1}" />
</tiles: put>

<tiles: put name="portlet_content" type="String" >

<t: saveState value="#{directory}"/>
<h: form id="step1">

<table id="contentTable" border="0" cellspacing="1" cellpadding="2" class="list" width="95%">
<tr>
<td class="portlet-section-alternate" width="200">
<t: outputText value="#{messages.column_name}" styleClass="portlet-font" style="font-size: x-small;" />
</td>
<td class="portlet-section-body">
<h:outputFormat value="#{messages[directory.errors.name]}" styleClass="portlet-msg-error" style="font-size: x-small;">
<f: param value="#{messages.column_name}" />
</h: outputFormat>
<t:outputText value="<br>" escape="false" rendered="#{!empty directory.errors.name}" />
<t: inputText id="name" value="#{directory.name}" size="50" maxlength="128" styleClass="form-text" />
</td>
</tr>
.
.
.

Thanks,

Mat