/******************************************************************************* * 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.webtextareakit; 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 WebTextAreaRenderer. * </p> */ public class WebTextAreaRenderer_Test extends TestCase { public void testAjaxRenderer() throws Exception { WebTextArea text = new WebTextArea(); text.addWebItemListener( new WebItemListener() { public void webItemStateChanged( final WebItemEvent e ) { } } ); text.addWebFocusGainedListener( new WebFocusGainedListener() { public void webFocusGained( final WebFocusGainedEvent e ) { } } ); text.setValue( "Hello World" ); text.setCols( 20 ); text.setRows( 20 ); text.setDir( "myDirectory" ); text.setLang( "myLang" ); text.setName( "myName" ); text.setTitle( "myTitle" ); text.setEnabled( false ); text.setUpdatable( false ); W4TFixture.setWebComponentUniqueId( text, "text1" ); AjaxStatus ajaxStatus = ( AjaxStatus )text.getAdapter( AjaxStatus.class ); ajaxStatus.updateStatus( true ); W4TFixture.fakeBrowser( new Default( true, true ) ); HtmlResponseWriter writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); String markup = getBodyMarkup( writer ); String expected; expected = "<textarea " + "id=\"text1\" " + "name=\"text1\" " + "rows=\"20\" cols=\"20\" " + "wrap=\"virtual\" " + "class=\"w4tCsscd1f6403\" " + "dir=\"myDirectory\" " + "lang=\"myLang\" " + "title=\"myTitle\" " + "readonly disabled>" + "Hello World</textarea>"; assertEquals( expected, markup ); } public void testAjaxRendererIE5() throws Exception { WebTextArea text = new WebTextArea(); text.addWebItemListener( new WebItemListener() { public void webItemStateChanged( final WebItemEvent e ) { } } ); text.addWebFocusGainedListener( new WebFocusGainedListener() { public void webFocusGained( final WebFocusGainedEvent e ) { } } ); text.setValue( "Hello World" ); text.setCols( 20 ); text.setRows( 20 ); text.setDir( "myDirectory" ); text.setLang( "myLang" ); text.setName( "myName" ); text.setTitle( "myTitle" ); text.setEnabled( false ); text.setUpdatable( false ); 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 = getBodyMarkup( writer ); String expected; expected = "<textarea " + "id=\"text1\" " + "name=\"text1\" " + "rows=\"20\" cols=\"20\" " + "wrap=\"virtual\" " + "class=\"w4tCsscd1f6403\" " + "dir=\"myDirectory\" " + "lang=\"myLang\" " + "title=\"myTitle\" " + "readonly=\"readonly\" " + "disabled=\"disabled\">" + "Hello World</textarea>"; assertEquals( expected, markup ); } public void testScriptRenderer() throws Exception { // disabled and readonly WebTextArea text = new WebTextArea(); W4TFixture.setWebComponentUniqueId( text, "text1" ); text.setValue( "Hello World" ); text.addWebItemListener( new WebItemListener() { public void webItemStateChanged( final WebItemEvent e ) { } } ); text.addWebFocusGainedListener( new WebFocusGainedListener() { public void webFocusGained( final WebFocusGainedEvent e ) { } } ); text.setCols( 20 ); text.setRows( 20 ); text.setDir( "myDirectory" ); text.setLang( "myLang" ); text.setName( "myName" ); text.setTitle( "myTitle" ); text.setEnabled( false ); text.setUpdatable( false ); W4TFixture.fakeBrowser( new Default( true, false ) ); HtmlResponseWriter writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); String markup = getBodyMarkup( writer ); String expected = "<textarea " + "id=\"text1\" " + "name=\"text1\" " + "rows=\"20\" cols=\"20\" " + "wrap=\"virtual\" class=\"w4tCsscd1f6403\" " + "dir=\"myDirectory\" " + "lang=\"myLang\" " + "title=\"myTitle\" " + "readonly disabled>" + "Hello World</textarea>"; assertEquals( expected, markup ); // render with empty value and enabled and readonly text.setValue( "" ); text.setEnabled( true ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = getBodyMarkup( writer ); expected = "<textarea " + "id=\"text1\" " + "name=\"text1\" " + "rows=\"20\" cols=\"20\" " + "wrap=\"virtual\" class=\"w4tCsscd1f6403\" " + "dir=\"myDirectory\" " + "lang=\"myLang\" " + "title=\"myTitle\" " + "readonly " + "onfocus=\"eventHandler.setFocusID(this);" + "eventHandler.webFocusGained(this)\">" + "</textarea>"; assertEquals( expected, markup ); // render with empty value and enabled and writeable text.setValue( "" ); text.setEnabled( true ); text.setUpdatable( true ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = getBodyMarkup( writer ); expected = "<textarea " + "id=\"text1\" " + "name=\"text1\" " + "rows=\"20\" cols=\"20\" " + "wrap=\"virtual\" class=\"w4tCsscd1f6403\" " + "dir=\"myDirectory\" " + "lang=\"myLang\" " + "title=\"myTitle\" " + "onchange=\"eventHandler.webItemStateChanged(this)\" " + "onfocus=\"eventHandler.setFocusID(this);" + "eventHandler.webFocusGained(this)\">" + "</textarea>"; assertEquals( expected, markup ); // render with empty value and disabled and writeable text.setValue( "" ); text.setEnabled( false ); text.setUpdatable( true ); writer = new HtmlResponseWriter(); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = getBodyMarkup( writer ); expected = "<textarea " + "id=\"text1\" " + "name=\"text1\" " + "rows=\"20\" cols=\"20\" " + "wrap=\"virtual\" class=\"w4tCsscd1f6403\" " + "dir=\"myDirectory\" " + "lang=\"myLang\" " + "title=\"myTitle\" " + "disabled>" + "</textarea>"; assertEquals( expected, markup ); } public void testNoScriptRenderer() throws Exception { WebTextArea text = new WebTextArea(); W4TFixture.setWebComponentUniqueId( text, "text1" ); text.setValue( "Hello World" ); text.setCols( 20 ); text.setRows( 20 ); text.setDir( "myDirectory" ); text.setLang( "myLang" ); text.setName( "myName" ); text.setTitle( "myTitle" ); text.setUpdatable( false ); text.addWebItemListener( new WebItemListener() { public void webItemStateChanged( WebItemEvent e ) { } } ); HtmlResponseWriter writer = new HtmlResponseWriter(); W4TFixture.fakeBrowser( new Default( false, false ) ); setResponseWriter( writer ); W4TFixture.renderComponent( text ); String markup = getBodyMarkup( writer ); String expected = "<textarea " + "name=\"text1\" " + "rows=\"20\" cols=\"20\" " + "wrap=\"virtual\" class=\"w4tCsscd1f6403\" " + "dir=\"myDirectory\" " + "lang=\"myLang\" " + "title=\"myTitle\" " + "readonly>" + "Hello World</textarea>" + "<input type=\"image\" " + "src=\"resources/images/submitter.gif\" " + "name=\"wietext1\" " + "border=\"0\">"; assertEquals( expected, markup ); writer = new HtmlResponseWriter(); text.setEnabled( false ); setResponseWriter( writer ); W4TFixture.renderComponent( text ); markup = getBodyMarkup( writer ); expected = "<textarea " + "name=\"text1\" " + "rows=\"20\" cols=\"20\" " + "wrap=\"virtual\" class=\"w4tCsscd1f6403\" " + "dir=\"myDirectory\" " + "lang=\"myLang\" " + "title=\"myTitle\" " + "readonly disabled>" + "Hello World</textarea>"; assertEquals( expected, markup ); } public void testReadData_Default_Script() throws Exception { W4TFixture.fakeBrowser( new Default( true, false ) ); WebTextArea text = new WebTextArea(); W4TFixture.setWebComponentUniqueId( text, "text1" ); fakeRequestParameter( 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 ) ); WebTextArea text = new WebTextArea(); W4TFixture.setWebComponentUniqueId( text, "text1" ); fakeRequestParameter( 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(); WebTextArea textArea = new WebTextArea(); form.add( textArea, WebBorderLayout.CENTER ); W4TFixture.fakeRequestParam( textArea.getUniqueID(), "newText" ); W4TFixture.fakeBrowser( new Ie6( true, true ) ); RendererCache rendererCache = RendererCache.getInstance(); AjaxStatusUtil.preRender( form ); AjaxStatusUtil.postRender( form ); Renderer renderer = rendererCache.retrieveRenderer( textArea.getClass() ); assertEquals( WebTextAreaRenderer_Default_Ajax.class, renderer.getClass() ); renderer.readData( textArea ); assertEquals( "newText", textArea.getValue() ); AjaxStatusUtil.preRender( form ); assertEquals( false, W4TFixture.getAjaxStatus( textArea ).mustRender() ); // case 2: value changed on client-side and programatically after readData // -> must render WebText form = W4TFixture.getEmptyWebFormInstance(); textArea = new WebTextArea(); form.add( textArea, WebBorderLayout.CENTER ); W4TFixture.fakeRequestParam( textArea.getUniqueID(), "newText" ); W4TFixture.fakeBrowser( new Ie6( true, true ) ); rendererCache = RendererCache.getInstance(); AjaxStatusUtil.preRender( form ); AjaxStatusUtil.postRender( form ); renderer = rendererCache.retrieveRenderer( textArea.getClass() ); renderer.readData( textArea ); textArea.setValue( "anotherText" ); AjaxStatusUtil.preRender( form ); assertEquals( true, W4TFixture.getAjaxStatus( textArea ).mustRender() ); } protected void setUp() throws Exception { W4TFixture.setUp(); W4TFixture.createContext(); } protected void tearDown() throws Exception { W4TFixture.tearDown(); W4TFixture.removeContext(); } private void setResponseWriter( final HtmlResponseWriter writer ) { ContextProvider.getStateInfo().setResponseWriter( writer ); } private String getBodyMarkup( final HtmlResponseWriter writer ) { StringBuffer buffer = new StringBuffer(); for( int i = 0; i < writer.getBodySize(); i++ ) { buffer.append( writer.getBodyToken( i ) ); } return buffer.toString(); } private static void fakeRequestParameter( final String key, final String value ) { W4TFixture.fakeRequestParam( key, value ); } }