/*******************************************************************************
* 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;
import org.eclipse.rwt.internal.browser.Default;
import org.eclipse.rwt.internal.service.ContextProvider;
import org.eclipse.rwt.internal.service.IServiceStateInfo;
import junit.framework.TestCase;
import com.w4t.engine.lifecycle.standard.*;
import com.w4t.event.WebDataEvent;
import com.w4t.event.WebDataListener;
import com.w4t.webcheckboxkit.WebCheckBoxRenderer;
public class WebDataEvent_Test extends TestCase {
private static final String CHECKED = "-1";
private static final String UNCHECKED = "0";
private static final String OLD_VALUE = "mark1";
private static final String NEW_VALUE = "mark2";
protected void setUp() throws Exception {
W4TFixture.setUp();
W4TFixture.createContext();
}
protected void tearDown() throws Exception {
W4TFixture.tearDown();
W4TFixture.removeContext();
}
public void testDataEventTriggering() throws Exception {
WebForm form = W4TFixture.getEmptyWebFormInstance();
W4TFixture.fakeBrowser( new Default( true ) );
final WebDataEvent[] dataEvent = new WebDataEvent[ 1 ];
WebDataListener dataListener = new WebDataListener() {
public void webValueChanged( final WebDataEvent evt ) {
dataEvent[ 0 ] = evt;
}
};
WebText text = new WebText();
form.add( text, WebBorderLayout.NORTH );
text.setValue( OLD_VALUE );
assertEquals( OLD_VALUE, text.getValue() );
text.addWebDataListener( dataListener );
text.setValue( NEW_VALUE );
assertNull( dataEvent[ 0 ] );
text.removeWebDataListener( dataListener );
text.setValue( OLD_VALUE );
dataEvent[ 0 ] = null;
text.addWebDataListener( dataListener );
W4TFixture.fakeRequestParam( text.getUniqueID(), NEW_VALUE );
getLifeCycleAdapter( form ).readData();
IServiceStateInfo stateInfo = ContextProvider.getStateInfo();
String key = EventQueueFilter.ATTRIBUTE_KEY;
EventQueueFilter eqv = ( EventQueueFilter )stateInfo.getAttribute( key );
eqv.filter();
EventQueue.getEventQueue().fireEvents();
assertNotNull( dataEvent[ 0 ] );
assertSame( text, dataEvent[ 0 ].getSource() );
assertSame( OLD_VALUE, dataEvent[ 0 ].getOldValue() );
assertSame( NEW_VALUE, dataEvent[ 0 ].getNewValue() );
assertEquals( NEW_VALUE, text.getValue() );
}
public void testDataEventCheckBox() throws Exception {
WebForm form = W4TFixture.getEmptyWebFormInstance();
W4TFixture.fakeBrowser( new Default( true ) );
final WebDataEvent[] dataEvent = new WebDataEvent[ 1 ];
WebDataListener dataListener = new WebDataListener() {
public void webValueChanged( final WebDataEvent evt ) {
dataEvent[ 0 ] = evt;
}
};
WebCheckBox checkBox = new WebCheckBox();
form.add( checkBox, WebBorderLayout.NORTH );
assertEquals( UNCHECKED, checkBox.getValue() );
checkBox.addWebDataListener( dataListener );
checkBox.setValue( CHECKED );
assertNull( dataEvent[ 0 ] );
checkBox.removeWebDataListener( dataListener );
checkBox.setValue( UNCHECKED );
dataEvent[ 0 ] = null;
checkBox.addWebDataListener( dataListener );
String id = checkBox.getUniqueID();
W4TFixture.fakeRequestParam( id, CHECKED );
W4TFixture.fakeRequestParam( WebCheckBoxRenderer.PREFIX + id, UNCHECKED );
getLifeCycleAdapter( form ).readData();
IServiceStateInfo stateInfo = ContextProvider.getStateInfo();
String key = EventQueueFilter.ATTRIBUTE_KEY;
EventQueueFilter eqv = ( EventQueueFilter )stateInfo.getAttribute( key );
eqv.filter();
EventQueue.getEventQueue().fireEvents();
assertNotNull( dataEvent[ 0 ] );
assertSame( checkBox, dataEvent[ 0 ].getSource() );
assertSame( UNCHECKED, dataEvent[ 0 ].getOldValue() );
assertSame( CHECKED, dataEvent[ 0 ].getNewValue() );
assertEquals( CHECKED, checkBox.getValue() );
dataEvent[ 0 ] = null;
W4TFixture.fakeRequestParam( checkBox.getUniqueID(), null );
W4TFixture.fakeRequestParam( WebCheckBoxRenderer.PREFIX + id, CHECKED );
getLifeCycleAdapter( form ).readData();
eqv.filter();
EventQueue.getEventQueue().fireEvents();
assertNotNull( dataEvent[ 0 ] );
assertSame( checkBox, dataEvent[ 0 ].getSource() );
assertSame( CHECKED, dataEvent[ 0 ].getOldValue() );
assertSame( UNCHECKED, dataEvent[ 0 ].getNewValue() );
assertEquals( UNCHECKED, checkBox.getValue() );
W4TFixture.fakeRequestParam( WebCheckBoxRenderer.PREFIX + id, UNCHECKED );
dataEvent[ 0 ] = null;
getLifeCycleAdapter( form ).readData();
eqv.filter();
EventQueue.getEventQueue().fireEvents();
assertNull( dataEvent[ 0 ] );
assertEquals( UNCHECKED, checkBox.getValue() );
}
private ILifeCycleAdapter getLifeCycleAdapter( final WebForm form ) {
return ( ILifeCycleAdapter )form.getAdapter( ILifeCycleAdapter.class );
}
}