/******************************************************************************* * 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.webtextkit; import junit.framework.TestCase; import org.eclipse.rwt.internal.browser.*; import org.eclipse.rwt.internal.lifecycle.HtmlResponseWriter; import org.eclipse.rwt.internal.service.ContextProvider; import com.w4t.*; import com.w4t.ajax.AjaxStatus; import com.w4t.ajax.AjaxStatusUtil; import com.w4t.event.*; import com.w4t.util.RendererCache; /** <p>Unit tests for WebTextRenderer.</p> */ public class WebTextRenderer_Test extends TestCase { public void testAjaxRenderer() throws Exception { WebText text = new WebText(); text.setValue( "Hello World" ); W4TFixture.setWebComponentUniqueId( text, "text1" ); AjaxStatus ajaxStatus = ( AjaxStatus )text.getAdapter( AjaxStatus.class ); ajaxStatus.updateStatus( true ); W4TFixture.fakeBrowser( new Ie5up( true, true ) ); HtmlResponseWriter writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); String markup = W4TFixture.getBodyMarkup(writer); String expected; expected = "<input type=\"text\" " + "name=\"text1\" value=\"Hello World\" " + "id=\"text1\" " + "class=\"w4tCssfae83ad\" " + "onfocus=\"eventHandler.setFocusID(this)\" />"; assertEquals( expected, markup ); // render with item listener text.addWebItemListener( new WebItemListener() { public void webItemStateChanged( final WebItemEvent e ) { } } ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = W4TFixture.getBodyMarkup(writer); expected = "<input type=\"text\" " + "name=\"text1\" value=\"Hello World\" " + "id=\"text1\" " + "class=\"w4tCssfae83ad\" " + "onchange=\"eventHandler.webItemStateChanged(this)\" " + "onfocus=\"eventHandler.setFocusID(this)\" />"; assertEquals( expected, markup ); // render with focus listener ( enabled and writeable) text.addWebFocusGainedListener( new WebFocusGainedListener() { public void webFocusGained( final WebFocusGainedEvent e ) { } } ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = W4TFixture.getBodyMarkup(writer); expected = "<input type=\"text\" " + "name=\"text1\" value=\"Hello World\" " + "id=\"text1\" " + "class=\"w4tCssfae83ad\" " + "onchange=\"eventHandler.webItemStateChanged(this)\" " + "onfocus=\"eventHandler.setFocusID(this);" + "eventHandler.webFocusGained(this)\" />"; assertEquals( expected, markup ); // render with max length and size text.setMaxLength( 10 ); text.setSize( 100 ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = W4TFixture.getBodyMarkup(writer); expected = "<input type=\"text\" " + "name=\"text1\" value=\"Hello World\" " + "id=\"text1\" " + "size=\"100\" " + "maxlength=\"10\" " + "class=\"w4tCssfae83ad\" " + "onchange=\"eventHandler.webItemStateChanged(this)\" " + "onfocus=\"eventHandler.setFocusID(this);" + "eventHandler.webFocusGained(this)\" />"; assertEquals( expected, markup ); // render (enabled and not writeable) text.setUpdatable( false ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = W4TFixture.getBodyMarkup(writer); expected = "<input type=\"text\" " + "name=\"text1\" value=\"Hello World\" " + "id=\"text1\" " + "size=\"100\" " + "maxlength=\"10\" " + "class=\"w4tCssfae83ad\" " + "readonly=\"readonly\" " + "onfocus=\"eventHandler.setFocusID(this);" + "eventHandler.webFocusGained(this)\" />"; assertEquals( expected, markup ); // render (disabled and not writeable) text.setUpdatable( false ); text.setEnabled( false ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = W4TFixture.getBodyMarkup(writer); expected = "<input type=\"text\" " + "name=\"text1\" value=\"Hello World\" " + "id=\"text1\" " + "size=\"100\" " + "maxlength=\"10\" " + "class=\"w4tCssfae83ad\" " + "readonly=\"readonly\" " + "disabled=\"disabled\" " + "/>"; assertEquals( expected, markup ); // render (disabled and writeable) text.setUpdatable( true ); text.setEnabled( false ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = W4TFixture.getBodyMarkup(writer); expected = "<input type=\"text\" " + "name=\"text1\" value=\"Hello World\" " + "id=\"text1\" " + "size=\"100\" " + "maxlength=\"10\" " + "class=\"w4tCssfae83ad\" " + "disabled=\"disabled\" " + "/>"; assertEquals( expected, markup ); } public void testScriptRenderer() throws Exception { WebText text = new WebText(); W4TFixture.setWebComponentUniqueId( text, "text1" ); text.setValue( "Hello World" ); W4TFixture.fakeBrowser( new Ie5up( true, false ) ); HtmlResponseWriter writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); String markup = W4TFixture.getBodyMarkup(writer); String expected = "<input type=\"text\" " + "name=\"text1\" " + "value=\"Hello World\" " + "id=\"text1\" " + "class=\"w4tCssfae83ad\" " + "onfocus=\"eventHandler.setFocusID(this)\" />"; assertEquals( expected, markup ); // render with empty value text.setValue( "" ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = W4TFixture.getBodyMarkup(writer); expected = "<input type=\"text\" " + "name=\"text1\" " + "value=\"\" " + "id=\"text1\" " + "class=\"w4tCssfae83ad\" " + "onfocus=\"eventHandler.setFocusID(this)\" />"; assertEquals( expected, markup ); // render with item listener text.addWebItemListener( new WebItemListener() { public void webItemStateChanged( final WebItemEvent e ) { } } ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = W4TFixture.getBodyMarkup(writer); expected = "<input type=\"text\" " + "name=\"text1\" " + "value=\"\" " + "id=\"text1\" " + "class=\"w4tCssfae83ad\" " + "onchange=\"eventHandler.webItemStateChanged(this)\" " + "onfocus=\"eventHandler.setFocusID(this)\" />"; assertEquals( expected, markup ); // render with size, max legth text.setSize( 100 ); text.setMaxLength( 10 ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = W4TFixture.getBodyMarkup(writer); expected = "<input type=\"text\" " + "name=\"text1\" " + "value=\"\" " + "id=\"text1\" " + "size=\"100\" " + "maxlength=\"10\" " + "class=\"w4tCssfae83ad\" " + "onchange=\"eventHandler.webItemStateChanged(this)\" " + "onfocus=\"eventHandler.setFocusID(this)\" />"; assertEquals( expected, markup ); // render with focus listener text.addWebFocusGainedListener( new WebFocusGainedListener() { public void webFocusGained( final WebFocusGainedEvent e ) { } } ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = W4TFixture.getBodyMarkup(writer); expected = "<input type=\"text\" " + "name=\"text1\" " + "value=\"\" " + "id=\"text1\" " + "size=\"100\" " + "maxlength=\"10\" " + "class=\"w4tCssfae83ad\" " + "onchange=\"eventHandler.webItemStateChanged(this)\" " + "onfocus=\"eventHandler.setFocusID(this);" + "eventHandler.webFocusGained(this)\" />"; assertEquals( expected, markup ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); text.setEnabled( false ); text.setUpdatable( false ); W4TFixture.renderComponent( text ); markup = W4TFixture.getBodyMarkup(writer); expected = "<input type=\"text\" " + "name=\"text1\" " + "value=\"\" " + "id=\"text1\" " + "size=\"100\" " + "maxlength=\"10\" " + "class=\"w4tCssfae83ad\" " + "readonly=\"readonly\" " + "disabled=\"disabled\" />"; assertEquals( expected, markup ); } public void testNoScriptRenderer() throws Exception { WebText text = new WebText(); W4TFixture.setWebComponentUniqueId( text, "text1" ); text.setValue( "Hello World" ); HtmlResponseWriter writer = new HtmlResponseWriter(); W4TFixture.fakeBrowser( new Ie5up( false, false ) ); setResponseWriter( writer ); W4TFixture.renderComponent( text ); String markup = W4TFixture.getBodyMarkup(writer); String expected = "<input type=\"text\" " + "name=\"text1\" " + "value=\"Hello World\" " + "id=\"text1\" " + "class=\"w4tCssfae83ad\" />"; assertEquals( expected, markup ); text.setSize( 100 ); text.setMaxLength( 20 ); text.addWebItemListener( new WebItemListener() { public void webItemStateChanged( WebItemEvent e ) { } } ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = W4TFixture.getBodyMarkup(writer); expected = "<input type=\"text\" " + "name=\"text1\" " + "value=\"Hello World\" " + "id=\"text1\" " + "size=\"100\" " + "maxlength=\"20\" " + "class=\"w4tCssfae83ad\" />" + "<input type=\"image\"" + " src=\"resources/images/submitter.gif\" " + "name=\"wietext1\" border=\"0\" />"; assertEquals( expected, markup ); } public void testReadData_Default_Script() throws Exception { W4TFixture.fakeBrowser( new Default( true, false ) ); WebText text = new WebText(); W4TFixture.fakeRequestParam( text.getUniqueID(), "newText" ); RendererCache rendererCache = RendererCache.getInstance(); Renderer renderer = rendererCache.retrieveRenderer( text.getClass() ); renderer.readData( text ); assertEquals( "newText", text.getValue() ); } public void testReadData_Default_Ajax() throws Exception { W4TFixture.fakeBrowser( new Ie6( true, true ) ); WebText text = new WebText(); W4TFixture.fakeRequestParam( text.getUniqueID(), "newText" ); RendererCache rendererCache = RendererCache.getInstance(); Renderer renderer = rendererCache.retrieveRenderer( text.getClass() ); renderer.readData( text ); assertEquals( "newText", text.getValue() ); } public void testAjaxStatusAfterReadData() throws Exception { // case 1: value changed on client-side -> don't render WebText WebForm form = W4TFixture.getEmptyWebFormInstance(); WebText text = new WebText(); form.add( text, WebBorderLayout.CENTER ); W4TFixture.fakeRequestParam( text.getUniqueID(), "newText" ); W4TFixture.fakeBrowser( new Ie6( true, true ) ); RendererCache rendererCache = RendererCache.getInstance(); AjaxStatusUtil.preRender( form ); AjaxStatusUtil.postRender( form ); Renderer renderer = rendererCache.retrieveRenderer( text.getClass() ); assertEquals( WebTextRenderer_Default_Ajax.class, renderer.getClass() ); renderer.readData( text ); assertEquals( "newText", text.getValue() ); AjaxStatusUtil.preRender( form ); assertEquals( false, W4TFixture.getAjaxStatus( text ).mustRender() ); // case 2: value changed on client-side and programatically after readData // -> must render WebText form = W4TFixture.getEmptyWebFormInstance(); text = new WebText(); form.add( text, WebBorderLayout.CENTER ); W4TFixture.fakeRequestParam( text.getUniqueID(), "newText" ); W4TFixture.fakeBrowser( new Ie6( true, true ) ); rendererCache = RendererCache.getInstance(); AjaxStatusUtil.preRender( form ); AjaxStatusUtil.postRender( form ); renderer = rendererCache.retrieveRenderer( text.getClass() ); assertEquals( WebTextRenderer_Default_Ajax.class, renderer.getClass() ); renderer.readData( text ); text.setValue( "anotherText" ); AjaxStatusUtil.preRender( form ); assertEquals( true, W4TFixture.getAjaxStatus( text ).mustRender() ); } protected void setUp() throws Exception { W4TFixture.setUp(); W4TFixture.createContext(); } protected void tearDown() throws Exception { W4TFixture.tearDown(); W4TFixture.removeContext(); } private static void setResponseWriter( final HtmlResponseWriter writer ) { ContextProvider.getStateInfo().setResponseWriter( writer ); } }