/*******************************************************************************
* 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.webradiobuttonkit;
import java.io.IOException;
import junit.framework.TestCase;
import org.eclipse.rwt.internal.browser.Default;
import org.eclipse.rwt.internal.browser.Ie6;
import org.eclipse.rwt.internal.lifecycle.HtmlResponseWriter;
import org.eclipse.rwt.internal.util.HTML;
import com.w4t.*;
import com.w4t.ajax.AjaxStatusUtil;
import com.w4t.event.*;
import com.w4t.util.RendererCache;
import com.w4t.webradiobuttongroupkit.WebRadioButtonGroupRenderer_Default_Ajax;
/** <p>Unit tests for WebRadioButtonRenderer.</p> */
public class WebRadioButtonRenderer_Test extends TestCase {
public void testAjaxRenderer() throws Exception {
WebRadioButton radioButton = new WebRadioButton();
W4TFixture.setWebComponentUniqueId( radioButton, "radio1" );
radioButton.setValue( "Push Me" );
radioButton.setLabel( "The Label" );
WebRadioButtonGroup group = new WebRadioButtonGroup();
W4TFixture.setWebComponentUniqueId( group, "group1" );
group.setValue( radioButton.getValue() );
group.add( radioButton );
W4TFixture.forceAjaxRendering( radioButton );
W4TFixture.fakeBrowser( new Ie6( true, true ) );
HtmlResponseWriter writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
W4TFixture.renderComponent( radioButton );
String markup = W4TFixture.getBodyMarkup( writer );
String expected
= "<envelope id=\"radio1\"><!--"
+ "<span id=\"radio1\">"
+ "<input type=\"radio\" style=\"vertical-align:middle\" name=\"group1\" "
+ "checked=\"checked\" value=\"Push Me\" />"
+ "<span class=\"w4tCsscd1f6403\">The Label</span></span>--></envelope>";
assertEquals( expected, markup );
// with event handler
group.addWebItemListener( new WebItemListener() {
public void webItemStateChanged( WebItemEvent e ) {
}
} );
radioButton.setDir( "myDir" );
radioButton.setLang( "myLang" );
radioButton.setTitle( "myTitle" );
writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
W4TFixture.renderComponent( radioButton );
markup = W4TFixture.getBodyMarkup( writer );
expected
= "<envelope id=\"radio1\"><!--"
+ "<span id=\"radio1\">"
+ "<input type=\"radio\" style=\"vertical-align:middle\" name=\"group1\" "
+ "checked=\"checked\" value=\"Push Me\" "
+ "onclick=\"eventHandler.webItemStateChanged(this)\" />"
+ "<span class=\"w4tCsscd1f6403\" dir=\"myDir\" lang=\"myLang\" "
+ "title=\"myTitle\">The Label</span></span>--></envelope>";
assertEquals( expected, markup );
radioButton.setEnabled( false );
writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
W4TFixture.renderComponent( radioButton );
markup = W4TFixture.getBodyMarkup( writer );
expected
= "<envelope id=\"radio1\"><!--"
+ "<span id=\"radio1\"><input type=\"radio\" "
+ "style=\"vertical-align:middle\" name=\"group1\" "
+ "checked=\"checked\" disabled=\"disabled\" value=\"Push Me\" />"
+ "<span class=\"w4tCsscd1f6403\" dir=\"myDir\" lang=\"myLang\" "
+ "title=\"myTitle\">The Label</span></span>--></envelope>";
assertEquals( expected, markup );
// set the group to 'not updatable'
group.setUpdatable( false );
radioButton.setEnabled( true );
writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
W4TFixture.renderComponent( radioButton );
markup = W4TFixture.getBodyMarkup( writer );
expected
= "<envelope id=\"radio1\"><!--"
+ "<span id=\"radio1\">"
+ "<input type=\"radio\" style=\"vertical-align:middle\" name=\"group1\" "
+ "checked=\"checked\" disabled=\"disabled\" value=\"Push Me\" "
+ "onclick=\"eventHandler.webItemStateChanged(this)\" />"
+ "<span class=\"w4tCsscd1f6403\" dir=\"myDir\" lang=\"myLang\" "
+ "title=\"myTitle\">The Label</span></span>--></envelope>";
assertEquals( expected, markup );
}
public void testScriptRenderer() throws Exception {
WebRadioButton radioButton = new WebRadioButton();
W4TFixture.setWebComponentUniqueId( radioButton, "radio1" );
WebRadioButtonGroup group = new WebRadioButtonGroup();
W4TFixture.setWebComponentUniqueId( group, "group1" );
group.add( radioButton );
radioButton.setLabel( "The Label" );
radioButton.setValue( "Push Me" );
HtmlResponseWriter writer = new HtmlResponseWriter();
W4TFixture.fakeBrowser( new Default( true ) );
W4TFixture.setResponseWriter( writer );
W4TFixture.renderComponent( radioButton );
String markup = W4TFixture.getBodyMarkup( writer );
String expected;
expected
= "<span id=\"radio1\"><input type=\"radio\" "
+ "style=\"vertical-align:middle\" name=\"group1\" "
+ "value=\"Push Me\">"
+ "<span class=\"w4tCsscd1f6403\">"
+ "The Label</span></span>";
assertEquals( expected, markup );
//with listeners
group.addWebItemListener( new WebItemListener() {
public void webItemStateChanged( WebItemEvent e ) {
}
} );
group.setValue( radioButton.getValue() );
radioButton.setEnabled( true );
writer = new HtmlResponseWriter();
W4TFixture.fakeBrowser( new Default( true, false ) );
W4TFixture.setResponseWriter( writer );
W4TFixture.renderComponent( radioButton );
markup = W4TFixture.getBodyMarkup( writer );
expected
= "<span id=\"radio1\"><input type=\"radio\" "
+ "style=\"vertical-align:middle\" name=\"group1\" "
+ "checked value=\"Push Me\" "
+ "onclick=\"eventHandler.webItemStateChanged(this)\">"
+ "<span class=\"w4tCsscd1f6403\">"
+ "The Label</span></span>";
assertEquals( expected, markup );
// set the group to 'not updatable'
group.setUpdatable( false );
radioButton.setEnabled( true );
writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
W4TFixture.renderComponent( radioButton );
markup = W4TFixture.getBodyMarkup( writer );
expected
= "<span id=\"radio1\">"
+ "<input type=\"radio\" style=\"vertical-align:middle\" name=\"group1\" "
+ "checked disabled value=\"Push Me\" "
+ "onclick=\"eventHandler.webItemStateChanged(this)\">"
+ "<span class=\"w4tCsscd1f6403\">The Label</span></span>";
assertEquals( expected, markup );
}
public void testNoScriptRenderer() throws Exception {
WebRadioButton radioButton = new WebRadioButton();
W4TFixture.setWebComponentUniqueId( radioButton, "radio1" );
// render without group: must not be rendered, it is considered invisible
HtmlResponseWriter writer = new HtmlResponseWriter();
W4TFixture.fakeBrowser( new Default( false ) );
W4TFixture.setResponseWriter( writer );
W4TFixture.renderComponent( radioButton );
String markup = W4TFixture.getBodyMarkup( writer );
String expected
= "<input type=\"radio\" style=\"vertical-align:middle\" "
+ "name=\"radio1\" disabled value=\"p1\">"
+ "<span class=\"w4tCsscd1f6403\"></span>";
assertEquals( expected, markup );
// render 'normal' radioButton with most of its attributes set
radioButton.setLabel( "The Label" );
radioButton.setValue( "Push Me" );
radioButton.setDir( "myDir" );
radioButton.setLang( "myLang" );
radioButton.setTitle( "myTitle" );
WebRadioButtonGroup group = new WebRadioButtonGroup();
W4TFixture.setWebComponentUniqueId( group, "group1" );
group.setValue( "Push Me" );
group.addWebItemListener( new WebItemListener() {
public void webItemStateChanged( WebItemEvent e ) {
}
} );
group.add( radioButton );
writer = new HtmlResponseWriter();
W4TFixture.fakeBrowser( new Default( false ) );
W4TFixture.setResponseWriter( writer );
W4TFixture.renderComponent( radioButton );
markup = W4TFixture.getBodyMarkup( writer );
expected
= "<input type=\"radio\" "
+ "style=\"vertical-align:middle\" "
+ "name=\"group1\" "
+ "checked value=\"Push Me\">"
+ "<span class=\"w4tCsscd1f6403\" "
+ "dir=\"myDir\" "
+ "lang=\"myLang\" title=\"myTitle\">"
+ "The Label</span>"
+ "<input type=\"image\" src=\"resources/images/submitter.gif\" "
+ "name=\"wiegroup1\" border=\"0\">";
assertEquals( expected, markup );
W4TFixture.fakeBrowser( new Default( false ) );
W4TFixture.setResponseWriter( writer );
radioButton.setEnabled( false );
W4TFixture.renderComponent( radioButton );
markup = W4TFixture.getBodyMarkup( writer );
expected
= "<input type=\"radio\" "
+ "style=\"vertical-align:middle\" "
+ "name=\"group1\" "
+ "checked "
+ "value=\"Push Me\">"
+ "<span class=\"w4tCsscd1f6403\" "
+ "dir=\"myDir\" "
+ "lang=\"myLang\" title=\"myTitle\">"
+ "The Label</span>"
+ "<input type=\"image\" src=\"resources/images/submitter.gif\" "
+ "name=\"wiegroup1\" border=\"0\">"
+ "<input type=\"radio\" style=\"vertical-align:middle\" "
+ "name=\"group1\" checked "
+ "disabled value=\"Push Me\"><span "
+ "class=\"w4tCsscd1f6403\" dir=\"myDir\" lang=\"myLang\" "
+ "title=\"myTitle\">The Label</span>";
assertEquals( expected, markup );
// set the group to 'not updatable'
group.setUpdatable( false );
radioButton.setEnabled( true );
writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
W4TFixture.renderComponent( radioButton );
markup = W4TFixture.getBodyMarkup( writer );
expected
= "<input type=\"radio\" style=\"vertical-align:middle\" name=\"group1\" "
+ "checked disabled value=\"Push Me\"><span class=\"w4tCsscd1f6403\" "
+ "dir=\"myDir\" lang=\"myLang\" title=\"myTitle\">The Label</span>";
assertEquals( expected, markup );
}
public void testRenderName() throws IOException {
HtmlResponseWriter writer;
// render id of radioButton for the name attribute if no group
writer = new HtmlResponseWriter();
writer.startElement( HTML.INPUT, null );
WebRadioButton radioButton1 = new WebRadioButton();
RadioButtonUtil.renderName( writer, radioButton1 );
String expected = "<input name=\"" + radioButton1.getUniqueID() + "\"";
assertEquals( expected, W4TFixture.getAllMarkup( writer ) );
// render id of group for the name attribute
writer = new HtmlResponseWriter();
writer.startElement( HTML.INPUT, null );
WebRadioButton radioButton2 = new WebRadioButton();
WebRadioButtonGroup group = new WebRadioButtonGroup();
group.add( radioButton2 );
RadioButtonUtil.renderName( writer, radioButton2 );
expected = "<input name=\"" + group.getUniqueID() + "\"";
assertEquals( expected, W4TFixture.getAllMarkup( writer ) );
}
public void testCreateEventHandler() throws IOException {
// prepare
HtmlResponseWriter writer;
WebRadioButton radioButton1;
W4TFixture.fakeBrowser( new Default( true ) );
WebRadioButtonGroup group = new WebRadioButtonGroup();
// no event handler at all
writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
radioButton1 = new WebRadioButton();
group.add( radioButton1 );
writer.startElement( HTML.INPUT, null );
RadioButtonUtil.createEventHandler( radioButton1 );
String expected = "<input";
assertEquals( expected, W4TFixture.getAllMarkup( writer ) );
// focus listener only
writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
radioButton1.addWebFocusGainedListener( new WebFocusGainedListener() {
public void webFocusGained( WebFocusGainedEvent e ) {
}
} );
writer.startElement( HTML.INPUT, null );
RadioButtonUtil.createEventHandler( radioButton1 );
expected
= "<input "
+ "onfocus=\"eventHandler.setFocusID(this);"
+ "eventHandler.webFocusGained(this)\"";
assertEquals( expected, W4TFixture.getAllMarkup( writer ) );
// itemState- and focus-listener
group.addWebItemListener( new WebItemListener() {
public void webItemStateChanged( WebItemEvent e ) {
}
} );
writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
writer.startElement( HTML.INPUT, null );
RadioButtonUtil.createEventHandler( radioButton1 );
expected
= "<input onclick=\"eventHandler.webItemStateChanged(this)\" "
+ "onfocus=\"eventHandler.setFocusID(this);"
+ "eventHandler.webFocusGained(this)\"";
assertEquals( expected, W4TFixture.getAllMarkup( writer ) );
}
public void testRenderDisplay() throws IOException {
WebRadioButton radioButton = new WebRadioButton();
radioButton.setValue( "value1" );
W4TFixture.fakeBrowser( new Default( false ) );
HtmlResponseWriter writer;
// render radioButton display with empty label
writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
RadioButtonUtil.renderDisplay( radioButton );
String expected = "<span class=\"w4tCsscd1f6403\"></span>";
assertEquals( expected, W4TFixture.getAllMarkup( writer ) );
// render radioButton display with some label
radioButton.setLabel( "theLabel" );
writer = new HtmlResponseWriter();
W4TFixture.setResponseWriter( writer );
RadioButtonUtil.renderDisplay( radioButton );
expected = "<span class=\"w4tCsscd1f6403\">theLabel</span>";
assertEquals( expected, W4TFixture.getAllMarkup( writer ) );
}
public void testAjaxStatusAfterReadData() {
WebForm form = W4TFixture.getEmptyWebFormInstance();
WebRadioButtonGroup group = new WebRadioButtonGroup();
form.add( group, WebBorderLayout.CENTER );
WebRadioButton radio1 = new WebRadioButton();
radio1.setValue( "1" );
group.add( radio1 );
WebRadioButton radio2 = new WebRadioButton();
radio2.setValue( "2" );
group.add( radio2 );
group.setValue( "1" );
W4TFixture.fakeBrowser( new Ie6( true, true ) );
W4TFixture.fakeRequestParam( group.getUniqueID(), "2" );
RendererCache rendererCache = RendererCache.getInstance();
AjaxStatusUtil.preRender( form );
AjaxStatusUtil.postRender( form );
Renderer renderer = rendererCache.retrieveRenderer( group.getClass() );
assertEquals( WebRadioButtonGroupRenderer_Default_Ajax.class,
renderer.getClass() );
// this ensures that *only* the groups' ajax-status is updated, not radio1's
radio1.setLabel( "anotherLabel" );
renderer.readData( group );
assertEquals( "2", group.getValue() );
AjaxStatusUtil.preRender( form );
assertEquals( false, W4TFixture.getAjaxStatus( group ).mustRender() );
assertEquals( true, W4TFixture.getAjaxStatus( radio1 ).mustRender() );
}
protected void setUp() throws Exception {
W4TFixture.setUp();
W4TFixture.createContext();
}
protected void tearDown() throws Exception {
W4TFixture.tearDown();
W4TFixture.removeContext();
}
}