/*******************************************************************************
* Copyright (c) 2002-2006 Innoopract Informationssysteme GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Innoopract Informationssysteme GmbH - initial API and implementation
******************************************************************************/
package com.w4t.webformkit;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.eclipse.rwt.internal.ConfigurationReader;
import org.eclipse.rwt.internal.browser.Ie6;
import org.eclipse.rwt.internal.lifecycle.HtmlResponseWriter;
import org.eclipse.rwt.internal.resources.ResourceManagerImpl;
import org.eclipse.rwt.internal.service.ContextProvider;
import org.eclipse.rwt.internal.service.RequestParams;
import org.eclipse.rwt.internal.util.CssClass;
import org.eclipse.rwt.internal.util.HTML;
import com.w4t.*;
import com.w4t.W4TFixture.TestResponse;
import com.w4t.engine.W4TModelUtil;
import com.w4t.engine.adapter.TestEngineConfig;
import com.w4t.engine.util.FormManager;
import com.w4t.mockup.TestForm;
import com.w4t.util.RendererCache;
/** <p>Unit tests for WebFormRenderer.</p>
*/
public class WebFormRenderer_Test extends TestCase {
private final static File TEST_CONFIG
= new File( W4TFixture.TEMP_DIR, "w4t.xml" );
public void testGetBodyAttributes() {
WebFormRenderer_Default_Script renderer
= new WebFormRenderer_Default_Script();
WebForm form = new TestForm();
setActiveForm( form );
StringBuffer bodyAttributes = renderer.getBodyAttributes();
String expected
= " bgcolor=\"#ffffff\" "
+ "text=\"#000000\" "
+ "leftmargin=\"0\" topmargin=\"0\" "
+ "marginheight=\"0\" marginwidth=\"0\" ";
assertEquals( expected, bodyAttributes.toString() );
}
public void testNoScript() throws Exception {
WebForm form = new TestForm();
W4TFixture.fakeEngineForRender( form );
W4TFixture.fakeBrowser( new Ie6( false ) );
setActiveForm( form );
HtmlResponseWriter writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
W4TFixture.renderComponent( form );
String markup = W4TFixture.getAllMarkup( writer );
String expected
= "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"
+ "<html>"
+ "<head>"
+ "<title>W4 Toolkit</title>"
+ "<style type=\"text/css\"></style> "
+ "<meta http-equiv=\"content-type\" content=\"text/html; "
+ "charset=UTF-8\" />"
+ "<meta http-equiv=\"cache-control\" content=\"no-cache\" /> "
+ "<!-- InternetExplorer special -->"
+ "<script></script>"
+ "<!-- End InternetExplorer special -->"
+ "<link rel=\"SHORTCUT ICON\" "
+ "href=\"http://fooserver:8080/fooapp/"
+ "resources/images/favicon.ico\" />"
+ "<link rel=\"icon\" href=\"http://fooserver:8080/fooapp/"
+ "resources/images/favicon.ico\" "
+ "type=\"image/ico\" />"
+ "</head>"
+ "<body bgcolor=\"#ffffff\" text=\"#000000\" leftmargin=\"0\" "
+ "topmargin=\"0\" marginheight=\"0\" marginwidth=\"0\" >"
+ "<form id=\"p1\" "
+ "action=\"http://fooserver:8080/fooapp/W4TDelegate?w4t_enc=no\" "
+ "name=\"W4TForm\" method=\"post\" accept-charset=\"UTF-8\" "
+ "enctype=\"application/x-www-form-urlencoded\">"
+ "<input type=\"hidden\" id=\"uiRoot\" "
+ "name=\"uiRoot\" value=\"w1;p1\" />"
+ "<input type=\"hidden\" id=\"w4t_ajaxEnabled\" "
+ "name=\"w4t_ajaxEnabled\" value=\"false\" />"
+ "<input type=\"hidden\" id=\"requestCounter\" "
+ "name=\"requestCounter\" value=\"0\" />"
+ "<table id=\"p1\" width=\"100%\" "
+ "cellspacing=\"0\" cellpadding=\"0\" border=\"0\">"
+ "</table>"
+ "</form>"
+ "</body>"
+ "</html>";
assertEquals( expected, markup );
}
public void testCreatePageHeader_Script() throws Exception {
WebForm form = W4TFixture.getEmptyWebFormInstance();
W4TFixture.fakeEngineForRender( form );
W4TFixture.fakeBrowser( new Ie6( false ) );
setActiveForm( form );
HtmlResponseWriter writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
WebFormRenderer renderer = new WebFormRenderer_Default_Script();
String markup = renderer.createPageHeader().toString();
String expected
= "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"
+ "<html><head><title>W4 Toolkit</title><style type=\"text/css\">"
+ "</style><meta http-equiv=\"content-type\" content=\"text/html; "
+ "charset=UTF-8\" />"
+ "<meta http-equiv=\"cache-control\" content=\"no-cache\" />"
+ "<script type=\"text/javascript\">windowManager.posX = -1;"
+ "windowManager.posY = -1;</script>"
+ "<link rel=\"SHORTCUT ICON\" "
+ "href=\"http://fooserver:8080/fooapp/"
+ "resources/images/favicon.ico\" />"
+ "<link rel=\"icon\" href=\"http://fooserver:8080/fooapp/"
+ "resources/images/favicon.ico\" "
+ "type=\"image/ico\" /></head><body bgcolor=\"#ffffff\" "
+ "text=\"#000000\" leftmargin=\"0\" "
+ "topmargin=\"0\" marginheight=\"0\" marginwidth=\"0\" "
+ "onload=\"windowManager.initWebForm( \'false\' );"
+ "eventHandler.disableFocusEvent();"
+ "setTimeout( \'eventHandler.enableFocusEvent()\', 50 );"
+ "windowManager.scrollWindow( 0, 0 ); "
+ "windowManager.setName( \'w1\' ); "
+ "active = window.setInterval( \'triggerTimeStamp_DOM()\',"
+ "1800000);\" onunload=\"w4tClearKeepAlive();\" >"
+ "<form id=\"p1\" "
+ "action=\"http://fooserver:8080/fooapp/W4TDelegate?w4t_enc=no\" "
+ "name=\"W4TForm\" method=\"post\" accept-charset=\"UTF-8\" "
+ "enctype=\"application/x-www-form-urlencoded\">"
+ "<div id=\"w4t_userdefined_scripts\"></div>"
+ "<input type=\"hidden\" id=\"webActionEvent\" "
+ "name=\"webActionEvent\" value=\"not_occured\" />"
+ "<input type=\"hidden\" id=\"webItemEvent\" "
+ "name=\"webItemEvent\" value=\"not_occured\" />"
+ "<input type=\"hidden\" id=\"webFocusGainedEvent\" "
+ "name=\"webFocusGainedEvent\" value=\"not_occured\" />"
+ "<input type=\"hidden\" id=\"webTreeNodeExpandedEvent\" "
+ "name=\"webTreeNodeExpandedEvent\" value=\"not_occured\" />"
+ "<input type=\"hidden\" id=\"webTreeNodeCollapsedEvent\" "
+ "name=\"webTreeNodeCollapsedEvent\" value=\"not_occured\" />"
+ "<input type=\"hidden\" id=\"changeImage\" "
+ "name=\"changeImage\" value=\"\" />"
+ "<input type=\"hidden\" id=\"dragSource\" "
+ "name=\"dragSource\" value=\"\" />"
+ "<input type=\"hidden\" id=\"dragDestination\" "
+ "name=\"dragDestination\" value=\"\" />"
+ "<input type=\"hidden\" id=\"w4tDoubleClickEvent\" "
+ "name=\"w4tDoubleClickEvent\" value=\"not_occured\" />"
+ "<input type=\"hidden\" id=\"focusElement\" "
+ "name=\"focusElement\" value=\"\" />"
+ "<input type=\"hidden\" id=\"scrollX\" "
+ "name=\"scrollX\" value=\"\" />"
+ "<input type=\"hidden\" id=\"scrollY\" "
+ "name=\"scrollY\" value=\"\" />"
+ "<input type=\"hidden\" id=\"availWidth\" "
+ "name=\"availWidth\" value=\"0\" />"
+ "<input type=\"hidden\" id=\"availHeight\" "
+ "name=\"availHeight\" value=\"0\" />";
assertEquals( expected, markup );
}
public void testCreateCssClasses() {
String expected;
HtmlResponseWriter writer;
WebFormRenderer_Default_Script renderer;
String markup;
W4TFixture.fakeBrowser( new Ie6( true ) );
writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
renderer = new WebFormRenderer_Default_Script();
markup = renderer.createCssClasses();
expected
= "<style type=\"text/css\"></style>";
assertEquals( expected, markup );
writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
writer.addNamedCssClass( new CssClass( "myStyle", "color:red" ) );
renderer = new WebFormRenderer_Default_Script();
markup = renderer.createCssClasses();
expected
= "<style type=\"text/css\">.myStyle { color:red } </style>";
assertEquals( expected, markup );
}
public void testWriteCssClasses() throws IOException {
String expected;
HtmlResponseWriter writer;
WebFormRenderer_Default_Script renderer;
String markup;
W4TFixture.fakeBrowser( new Ie6( true ) );
writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
renderer = new WebFormRenderer_Default_Script();
renderer.writeCssClasses();
markup = W4TFixture.getAllMarkup();
expected
= "<style type=\"text/css\"></style>";
assertEquals( expected, markup );
writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
writer.addNamedCssClass( new CssClass( "myStyle", "color:red" ) );
renderer = new WebFormRenderer_Default_Script();
renderer.writeCssClasses();
markup = W4TFixture.getAllMarkup();
expected
= "<style type=\"text/css\">.myStyle { color:red } </style>";
assertEquals( expected, markup );
}
public void testDuplicateNamedCssClasses() throws Exception {
// prepare
WebForm form = W4TFixture.getEmptyWebFormInstance();
W4TFixture.fakeEngineForRender( form );
W4TFixture.fakeBrowser( new Ie6( false, false ) );
HtmlResponseWriter writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
// add named css class
CssClass cssClass = new CssClass( "my-style", "appearance:extraordinary" );
writer.addNamedCssClass( cssClass );
// add another equal named css class
cssClass = new CssClass( "my-style", "appearance:extraordinary" );
writer.addNamedCssClass( cssClass );
W4TFixture.renderComponent( form );
String allMarkup = W4TFixture.getAllMarkup( writer );
assertEquals( allMarkup.indexOf( ".my-style" ),
allMarkup.lastIndexOf( ".my-style" ) );
}
public void testDuplicateRegisterCssClass() throws Exception {
// prepare
WebForm form = W4TFixture.getEmptyWebFormInstance();
W4TFixture.fakeEngineForRender( form );
W4TFixture.fakeBrowser( new Ie6( false, false ) );
HtmlResponseWriter writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
// register css style two times
writer.registerCssClass( "appearance:extraordinary" );
writer.registerCssClass( "appearance:extraordinary" );
W4TFixture.renderComponent( form );
String allMarkup = W4TFixture.getAllMarkup( writer );
assertEquals( allMarkup.indexOf( ".w4tCss8bd7045c" ),
allMarkup.lastIndexOf( ".w4tCss8bd7045c" ) );
}
public void testResponseContentType_Ajax() throws Exception {
WebForm form = W4TFixture.getEmptyWebFormInstance();
W4TFixture.forceAjaxRendering( form );
W4TFixture.fakeEngineForRender( form );
W4TFixture.fakeBrowser( new Ie6( true, true ) );
assertEquals( WebFormRenderer_Default_Ajax.class,
RendererCache.getInstance().retrieveRenderer( WebForm.class ).getClass() );
assertEquals( true, W4TContext.getBrowser().isAjaxEnabled() );
HtmlResponseWriter writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
W4TFixture.fakeRequestParam( RequestParams.IS_AJAX_REQUEST, "true" );
W4TFixture.renderComponent( form );
HttpServletResponse response = ContextProvider.getResponse();
W4TFixture.TestResponse testResponse = ( TestResponse )response;
assertEquals( HTML.CONTENT_TEXT_XML, testResponse.getContentType() );
}
public void testResponseContentType_Script() throws Exception {
WebForm form = W4TFixture.getEmptyWebFormInstance();
W4TFixture.fakeEngineForRender( form );
W4TFixture.fakeBrowser( new Ie6( true, false ) );
HtmlResponseWriter writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
W4TFixture.renderComponent( form );
HttpServletResponse response = ContextProvider.getResponse();
W4TFixture.TestResponse testResponse = ( TestResponse )response;
assertEquals( HTML.CONTENT_TEXT_HTML_UTF_8, testResponse.getContentType() );
}
public void testResponseContentType_Noscript() throws Exception {
WebForm form = W4TFixture.getEmptyWebFormInstance();
W4TFixture.fakeEngineForRender( form );
W4TFixture.fakeBrowser( new Ie6( false, false ) );
HtmlResponseWriter writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
W4TFixture.renderComponent( form );
HttpServletResponse response = ContextProvider.getResponse();
W4TFixture.TestResponse testResponse = ( TestResponse )response;
assertEquals( HTML.CONTENT_TEXT_HTML_UTF_8, testResponse.getContentType() );
}
protected void setUp() throws Exception {
W4TFixture.setUp();
try {
W4TModelUtil.initModel();
} catch( Exception e ) {
e.printStackTrace();
Assert.fail( "Failed to create W4TModelCore. Reason: " + e );
}
ResourceManagerImpl.createInstance( W4TFixture.getWebAppBase().toString(),
ResourceManagerImpl.DELIVER_FROM_DISK );
W4TFixture.copyTestResource( "resources/w4t_default.xml", TEST_CONFIG );
TestEngineConfig engineConfig = new TestEngineConfig();
engineConfig.setConfigFile( TEST_CONFIG );
ConfigurationReader.setEngineConfig( engineConfig );
engineConfig.setServerContextDir( W4TFixture.getWebAppBase() );
}
protected void tearDown() throws Exception {
W4TFixture.setPrivateField( ResourceManagerImpl.class, null, "_instance", null );
W4TFixture.tearDown();
if( TEST_CONFIG.exists() ) {
TEST_CONFIG.delete();
}
ConfigurationReader.setConfigurationFile( null );
}
private void setActiveForm( final WebForm form ) {
FormManager.add( form );
FormManager.setActive( form );
}
}