/*******************************************************************************
* 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 org.eclipse.rwt.internal.browser.Default;
import org.eclipse.rwt.internal.lifecycle.LifeCycle;
import org.eclipse.rwt.internal.service.*;
import junit.framework.TestCase;
import com.w4t.*;
import com.w4t.IWindowManager.IWindow;
import com.w4t.engine.util.WindowManager;
import com.w4t.internal.adaptable.IFormAdapter;
public class Focus_Test extends TestCase {
public static final class FocusTestForm extends WebForm {
WebText text;
WebButton button;
protected void setWebComponents() throws Exception {
setWebLayout( new WebFlowLayout() );
button = new WebButton();
add( button );
text = new WebText();
add( text );
}
}
protected void setUp() throws Exception {
W4TFixture.setUp();
W4TFixture.createContext();
}
protected void tearDown() throws Exception {
W4TFixture.tearDown();
W4TFixture.removeContext();
}
public void testSetFocus() throws Exception {
WebButton button = new WebButton();
button.setFocus( true );
assertFalse( button.hasFocus() );
WebForm form = W4TFixture.getEmptyWebFormInstance();
WebPanel panel = new WebPanel();
form.add( panel, WebBorderLayout.NORTH );
panel.add( button );
button.setFocus( true );
assertTrue( button.hasFocus() );
assertEquals( button.getUniqueID(), form.retrieveFocusID() );
button.remove();
assertFalse( button.hasFocus() );
assertEquals( "", form.retrieveFocusID() );
panel.add( button );
button.setLink( true );
button.setFocus( true );
assertEquals( "", form.retrieveFocusID() );
}
public void testNoFocusElementRequestParam() throws Exception {
// prepare form with button and text
FocusTestForm form
= ( FocusTestForm )W4TContext.loadForm( FocusTestForm.class.getName() );
W4TFixture.fakeBrowser( new Default( true, false ) );
W4TFixture.fakeEngineForRequestLifeCycle( form );
fakeRequestCounter( form );
// no focusElement-RequestParam -> no focus change
form.button.setFocus( true );
LifeCycle lifeCycle = ( LifeCycle )W4TContext.getLifeCycle();
lifeCycle.execute();
assertEquals(true, form.button.hasFocus() );
String allMarkup = getAllMarkup();
assertTrue( allMarkup.indexOf( "value=\"\"" ) != -1 );
}
public void testFocusElementRequestParamWithIdOnly() throws Exception {
// prepare form with button and text
FocusTestForm form
= ( FocusTestForm )W4TContext.loadForm( FocusTestForm.class.getName() );
W4TFixture.fakeEngineForRequestLifeCycle( form );
W4TFixture.fakeBrowser( new Default( true, false ) );
fakeRequestCounter( form );
// test request which sets focus to different component
W4TFixture.fakeRequestParam( RequestParams.FOCUS_ELEMENT,
form.button.getUniqueID() );
form.text.setFocus( true );
LifeCycle lifeCycle = ( LifeCycle )W4TContext.getLifeCycle();
lifeCycle.execute();
assertEquals( false, form.text.hasFocus() );
assertEquals( true, form.button.hasFocus() );
String allMarkup = getAllMarkup();
String expected = "value=\"" + form.button.getUniqueID() + "\"";
assertTrue( allMarkup.indexOf( expected ) != -1 );
}
public void testFocusElementRequestParamWithSelection() throws Exception {
// prepare form with button and text
FocusTestForm form
= ( FocusTestForm )W4TContext.loadForm( FocusTestForm.class.getName() );
W4TFixture.fakeEngineForRequestLifeCycle( form );
W4TFixture.fakeBrowser( new Default( true, false ) );
fakeRequestCounter( form );
// test request which sets focus to different component
W4TFixture.fakeRequestParam( RequestParams.FOCUS_ELEMENT,
form.text.getUniqueID() + ";1;4" );
form.button.setFocus( true );
LifeCycle lifeCycle = ( LifeCycle )W4TContext.getLifeCycle();
lifeCycle.execute();
assertEquals( true, form.text.hasFocus() );
assertEquals( false, form.button.hasFocus() );
String allMarkup = getAllMarkup();
String expected = "value=\"" + form.text.getUniqueID() + ";1;4" + "\"";
assertTrue( allMarkup.indexOf( expected ) != -1 );
}
private static String getAllMarkup() {
IServiceStateInfo stateInfo = ContextProvider.getStateInfo();
return W4TFixture.getAllMarkup( stateInfo.getResponseWriter() );
}
private static void fakeRequestCounter( WebForm form ) {
IFormAdapter adapter = W4TFixture.getFormAdapter( form );
adapter.increase();
String formId = form.getUniqueID();
String requestCounter = String.valueOf( adapter.getRequestCounter() - 1 );
IWindow window = WindowManager.getInstance().findWindow( form );
W4TFixture.fakeFormRequestParams( requestCounter, window.getId(), formId );
}
}