/******************************************************************************* * Copyright (c) 2002-2008 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 java.io.*; import java.lang.reflect.Field; import java.net.MalformedURLException; import java.net.URL; import java.security.Principal; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; import junit.framework.Assert; import org.eclipse.rwt.Adaptable; import org.eclipse.rwt.internal.*; import org.eclipse.rwt.internal.browser.Browser; import org.eclipse.rwt.internal.browser.Default; import org.eclipse.rwt.internal.lifecycle.HtmlResponseWriter; import org.eclipse.rwt.internal.lifecycle.LifeCycleFactory; import org.eclipse.rwt.internal.resources.*; import org.eclipse.rwt.internal.service.*; import org.eclipse.rwt.resources.IResourceManager; import org.eclipse.rwt.service.ISessionStore; import org.xml.sax.SAXException; import com.w4t.IWindowManager.IWindow; import com.w4t.ajax.AjaxStatus; import com.w4t.ajax.AjaxStatusAdapterFactory; import com.w4t.engine.adapter.TestEngineConfig; import com.w4t.engine.lifecycle.standard.*; import com.w4t.engine.service.DispatchHandler; import com.w4t.engine.util.FormManager; import com.w4t.engine.util.WindowManager; import com.w4t.internal.adaptable.IFormAdapter; import com.w4t.internal.adaptable.RenderInfoAdapterFactory; import com.w4t.util.image.ImageCache; /* * This class provides fake context data for test runs. */ public class W4TFixture { public final static File TEMP_DIR = new File( System.getProperty( "java.io.tmpdir" ) ); public final static File CONTEXT_DIR = new File( TEMP_DIR, "testapp" ); public final static String OPERATING_SYSTEM = System.getProperty( "os.name" ); private static LifeCycleAdapterFactory lifeCycleAdapterFactory; private static RenderInfoAdapterFactory renderInfoAdapterFactory; private static AjaxStatusAdapterFactory ajaxStatusAdapterFactory; private static final class EmptyWebForm extends WebForm { private long closingTimeout = -1; protected void setWebComponents() throws Exception { } public long getClosingTimeout() { return closingTimeout; } public void setClosingTimeout( final long closingTimeout ) { this.closingTimeout = closingTimeout; } } public final static class TestResourceManager implements IResourceManager, Adaptable { public Object getAdapter( final Class adapter ) { return new JsConcatenator() { public void startJsConcatenation() { } public String getContent() { return ""; } public String getLocation() { return ""; } }; } public String getCharset( final String name ) { return null; } public ClassLoader getContextLoader() { return null; } public String getLocation( final String name ) { return null; } public URL getResource( final String name ) { return null; } public InputStream getResourceAsStream( final String name ) { return null; } public Enumeration getResources( final String name ) throws IOException { return null; } public boolean isRegistered( final String name ) { return false; } public void register( final String name ) { } public void register( final String name, final InputStream is ) { } public void register( final String name, final String charset ) { } public void register( final String name, final String charset, final RegisterOptions options ) { } public void register( String name, InputStream is, String charset, RegisterOptions options ) { } public void setContextLoader( final ClassLoader classLoader ) { } public InputStream getRegisteredContent( final String name ) { return null; } } public final static class TestRequest implements HttpServletRequest { private HttpSession session; private String scheme = "http"; private String serverName = "fooserver"; private String contextPath = "/fooapp"; private String requestURI = "/fooapp/W4TDelegate"; private final StringBuffer requestURL = new StringBuffer(); private String servletPath = "/W4TDelegate"; private Map parameters = new HashMap(); private Map headers = new HashMap(); private Map attributes = new HashMap(); public String getAuthType() { return null; } public Cookie[] getCookies() { return null; } public long getDateHeader( final String arg0 ) { return 0; } public String getHeader( final String arg0 ) { return ( String )headers.get( arg0 ); } public void setHeader(final String arg0, final String arg1) { headers.put(arg0, arg1); } public Enumeration getHeaders( final String arg0 ) { return null; } public Enumeration getHeaderNames() { return new Enumeration() { private Iterator iterator = headers.keySet().iterator(); public boolean hasMoreElements() { return iterator.hasNext(); } public Object nextElement() { return iterator.next(); } }; } public int getIntHeader( final String arg0 ) { return 0; } public String getMethod() { return null; } public String getPathInfo() { return null; } public String getPathTranslated() { return null; } public String getContextPath() { return contextPath; } public String getQueryString() { return null; } public String getRemoteUser() { return null; } public boolean isUserInRole( final String arg0 ) { return false; } public Principal getUserPrincipal() { return null; } public String getRequestedSessionId() { return null; } /** * @return Returns the requestURI. * @uml.property name="requestURI" */ public String getRequestURI() { return requestURI; } /** * @param requestURI The requestURI to set. * @uml.property name="requestURI" */ public void setRequestURI( final String requestURI ) { this.requestURI = requestURI; } /** * @return Returns the requestURL. * @uml.property name="requestURL" */ public StringBuffer getRequestURL() { return requestURL; } /** * @return Returns the servletPath. * @uml.property name="servletPath" */ public String getServletPath() { return servletPath; } /** * @param servletPath The servletPath to set. * @uml.property name="servletPath" */ public void setServletPath( final String servletPath ) { this.servletPath = servletPath; } public HttpSession getSession( final boolean arg0 ) { return session; } /** * @return Returns the session. * @uml.property name="session" */ public HttpSession getSession() { return session; } public boolean isRequestedSessionIdValid() { return false; } public boolean isRequestedSessionIdFromCookie() { return false; } public boolean isRequestedSessionIdFromURL() { return false; } public boolean isRequestedSessionIdFromUrl() { return false; } public Object getAttribute( final String arg0 ) { return attributes.get( arg0 ); } public Enumeration getAttributeNames() { return null; } public String getCharacterEncoding() { return null; } public void setCharacterEncoding( final String arg0 ) throws UnsupportedEncodingException { } public int getContentLength() { return 0; } public String getContentType() { return null; } public ServletInputStream getInputStream() throws IOException { return null; } public String getParameter( final String arg0 ) { String[] value = ( String[] )parameters.get( arg0 ); String result = null; if( value != null ) { result = value[ 0 ]; } return result; } public Enumeration getParameterNames() { return new Enumeration() { private Iterator iterator = parameters.keySet().iterator(); public boolean hasMoreElements() { return iterator.hasNext(); } public Object nextElement() { return iterator.next(); } }; } public String[] getParameterValues( final String arg0 ) { return ( String[] )parameters.get( arg0 ); } public void setParameter( final String key, final String value ) { if( value == null ) { parameters.remove( key ); } else { parameters.put( key, new String[] { value } ); } } public void addParameter( final String key, final String value ) { if( parameters.containsKey( key ) ) { String[] values = ( String[] )parameters.get( key ); String[] newValues = new String[ values.length + 1 ]; System.arraycopy( values, 0, newValues, 0, values.length ); newValues[ values.length ] = value; parameters.put( key, newValues ); } else { setParameter( key, value ); } } public Map getParameterMap() { return parameters; } public String getProtocol() { return null; } /** * @return Returns the scheme. * @uml.property name="scheme" */ public String getScheme() { return scheme; } /** * @param scheme The scheme to set. * @uml.property name="scheme" */ public void setScheme( final String scheme ) { this.scheme = scheme; } /** * @return Returns the serverName. * @uml.property name="serverName" */ public String getServerName() { return serverName; } /** * @param serverName The serverName to set. * @uml.property name="serverName" */ public void setServerName( final String serverName ) { this.serverName = serverName; } public int getServerPort() { return 8080; } public BufferedReader getReader() throws IOException { return null; } public String getRemoteAddr() { return null; } public String getRemoteHost() { return null; } public void setAttribute( final String arg0, final Object arg1 ) { attributes.put( arg0, arg1 ); } public void removeAttribute( final String arg0 ) { } public Locale getLocale() { return null; } public Enumeration getLocales() { return null; } public boolean isSecure() { return false; } public RequestDispatcher getRequestDispatcher( final String arg0 ) { return null; } public String getRealPath( final String arg0 ) { return null; } /** * @param session The session to set. * @uml.property name="session" */ public void setSession( final HttpSession session ) { this.session = session; } public String getLocalAddr() { throw new UnsupportedOperationException(); } public String getLocalName() { throw new UnsupportedOperationException(); } public int getLocalPort() { throw new UnsupportedOperationException(); } public int getRemotePort() { throw new UnsupportedOperationException(); } } public final static class TestResponse implements HttpServletResponse { private ServletOutputStream outStream; private String contentType; public void addCookie( final Cookie arg0 ) { } public boolean containsHeader( final String arg0 ) { return false; } public String encodeURL( final String arg0 ) { return arg0; } public String encodeRedirectURL( final String arg0 ) { return arg0; } public String encodeUrl( final String arg0 ) { return arg0; } public String encodeRedirectUrl( final String arg0 ) { return arg0; } public void sendError( final int arg0, final String arg1 ) throws IOException { } public void sendError( final int arg0 ) throws IOException { } public void sendRedirect( final String arg0 ) throws IOException { } public void setDateHeader( final String arg0, final long arg1 ) { } public void addDateHeader( final String arg0, final long arg1 ) { } public void setHeader( final String arg0, final String arg1 ) { } public void addHeader( final String arg0, final String arg1 ) { } public void setIntHeader( final String arg0, final int arg1 ) { } public void addIntHeader( final String arg0, final int arg1 ) { } public void setStatus( final int arg0 ) { } public void setStatus( final int arg0, final String arg1 ) { } public String getCharacterEncoding() { return null; } public ServletOutputStream getOutputStream() throws IOException { return outStream; } public void setOutputStream( final ServletOutputStream outStream ) { this.outStream = outStream; } public PrintWriter getWriter() throws IOException { return new PrintWriter( outStream ); } public void setContentLength( final int arg0 ) { } public void setContentType( final String contentType ) { this.contentType = contentType; } public String getContentType() { return contentType; } public void setBufferSize( final int arg0 ) { } public int getBufferSize() { return 0; } public void flushBuffer() throws IOException { } public void resetBuffer() { } public boolean isCommitted() { return false; } public void reset() { } public void setLocale( final Locale arg0 ) { } public Locale getLocale() { return null; } public void setCharacterEncoding( String charset ) { throw new UnsupportedOperationException(); } } public final static class TestServletContext implements ServletContext { private String servletContextName; private final Map initParameters = new HashMap(); private Map attributes = new HashMap(); public ServletContext getContext( final String arg0 ) { return null; } public int getMajorVersion() { return 0; } public int getMinorVersion() { return 0; } public String getMimeType( final String arg0 ) { return null; } public Set getResourcePaths( final String arg0 ) { return null; } public URL getResource( final String arg0 ) throws MalformedURLException { return null; } public InputStream getResourceAsStream( final String arg0 ) { return null; } public RequestDispatcher getRequestDispatcher( final String arg0 ) { return null; } public RequestDispatcher getNamedDispatcher( final String arg0 ) { return null; } public Servlet getServlet( final String arg0 ) throws ServletException { return null; } public Enumeration getServlets() { return null; } public Enumeration getServletNames() { return null; } public void log( final String arg0 ) { } public void log( final Exception arg0, final String arg1 ) { } public void log( final String arg0, final Throwable arg1 ) { } public String getRealPath( final String arg0 ) { return null; } public String getServerInfo() { return null; } public String getInitParameter( final String name ) { return ( String )initParameters.get( name ); } public void setInitParameter( final String name, final String value ) { initParameters.put( name, value ); } public Enumeration getInitParameterNames() { return null; } public Object getAttribute( final String arg0 ) { return attributes.get( arg0 ); } public Enumeration getAttributeNames() { return null; } public void setAttribute( final String arg0, final Object arg1 ) { attributes .put( arg0, arg1 ); } public void removeAttribute( final String arg0 ) { } public String getServletContextName() { return servletContextName; } public void setServletContextName( final String servletContextName ) { this.servletContextName = servletContextName; } } public final static class TestSession implements HttpSession { private final Map attributes = new HashMap(); private final ServletContext servletContext = new TestServletContext(); private boolean isInvalidated; private boolean newSession; public long getCreationTime() { return 0; } public String getId() { if( isInvalidated ) { String text = "Unabled to obtain session id. Session already invalidated."; throw new IllegalStateException( text ); } return String.valueOf( hashCode() ); } public long getLastAccessedTime() { return 0; } public ServletContext getServletContext() { return servletContext ; } public void setMaxInactiveInterval( final int arg0 ) { } public int getMaxInactiveInterval() { return 0; } public HttpSessionContext getSessionContext() { return null; } public Object getAttribute( final String arg0 ) { return attributes.get( arg0 ); } public Object getValue( final String arg0 ) { return null; } public Enumeration getAttributeNames() { final Iterator iterator = attributes.keySet().iterator(); return new Enumeration() { public boolean hasMoreElements() { return iterator.hasNext(); } public Object nextElement() { return iterator.next(); } }; } public String[] getValueNames() { return null; } public void setAttribute( final String arg0, final Object arg1 ) { if( arg1 instanceof HttpSessionBindingListener ) { HttpSessionBindingListener listener = ( HttpSessionBindingListener )arg1; listener.valueBound( new HttpSessionBindingEvent( this, arg0, arg1 ) ); } attributes.put( arg0, arg1 ); } public void putValue( final String arg0, final Object arg1 ) { } public void removeAttribute( final String arg0 ) { Object removed = attributes.remove( arg0 ); if( removed instanceof HttpSessionBindingListener ) { HttpSessionBindingListener listener = ( HttpSessionBindingListener )removed; HttpSessionBindingEvent evt = new HttpSessionBindingEvent( this, arg0, removed ); listener.valueUnbound( evt ); } } public void removeValue( final String arg0 ) { } public void invalidate() { Object[] keys = attributes.keySet().toArray(); for( int i = 0; i < keys.length; i++ ) { String key = ( String )keys[ i ]; Object val = attributes.get( key ); if( val instanceof HttpSessionBindingListener ) { HttpSessionBindingListener lsnr = ( HttpSessionBindingListener )val; lsnr.valueUnbound( new HttpSessionBindingEvent( this, key, val ) ); } } attributes.clear(); isInvalidated = true; } public boolean isInvalidated() { return isInvalidated; } public boolean isNew() { return newSession; } public void setNew( boolean newSession ) { this.newSession = newSession; } } public static class TestServletConfig implements ServletConfig { public String getServletName() { return null; } public ServletContext getServletContext() { return null; } public String getInitParameter( final String initParameter ) { return null; } public Enumeration getInitParameterNames() { return null; } } public static class TestServletOutputStream extends ServletOutputStream { private ByteArrayOutputStream stream = new ByteArrayOutputStream(); public void write( final int b ) throws IOException { stream.write( b ); } public ByteArrayOutputStream getContent() { return stream; } } private W4TFixture() { } public static void setUp() { // disable js-versioning by default to make comparison easier System.setProperty( SystemProps.USE_VERSIONED_JAVA_SCRIPT, "false" ); clearSingletons(); try { ConfigurationReader.setConfigurationFile( null ); } catch( Throwable shouldNotHappen ) { throw new RuntimeException( shouldNotHappen ); } TestResponse response = new TestResponse(); TestRequest request = new TestRequest(); request.setSession( new TestSession() ); fakeContextProvider( response, request ); AdapterManager manager = W4TContext.getAdapterManager(); lifeCycleAdapterFactory = new LifeCycleAdapterFactory(); manager.registerAdapters( lifeCycleAdapterFactory, WebForm.class ); renderInfoAdapterFactory = new RenderInfoAdapterFactory(); manager.registerAdapters( renderInfoAdapterFactory, Adaptable.class ); ajaxStatusAdapterFactory = new AjaxStatusAdapterFactory(); manager.registerAdapters( ajaxStatusAdapterFactory, WebComponent.class ); } public static void clearSingletons() { setPrivateField( ResourceManagerImpl.class, null, "_instance", null ); setPrivateField( ImageCache.class, null, "_instance", null ); setPrivateField( LifeCycleFactory.class, null, "globalLifeCycle", null ); } public static void tearDown() { AdapterManager manager = W4TContext.getAdapterManager(); manager.deregisterAdapters( lifeCycleAdapterFactory, WebForm.class ); lifeCycleAdapterFactory = null; manager.deregisterAdapters( renderInfoAdapterFactory, WebForm.class ); renderInfoAdapterFactory = null; manager.deregisterAdapters( ajaxStatusAdapterFactory, WebComponent.class ); ajaxStatusAdapterFactory = null; HttpSession session = ContextProvider.getRequest().getSession(); ContextProvider.disposeContext(); session.invalidate(); clearSingletons(); } public static void createContext( final boolean fake ) throws IOException, FactoryConfigurationError, ParserConfigurationException, SAXException { if( fake ) { String submittersNone = IInitialization.NOSCRIPT_SUBMITTERS_NONE; ImageCache.createInstance( CONTEXT_DIR.toString(), submittersNone ); setPrivateField( ResourceManagerImpl.class, null, "_instance", new TestResourceManager() ); } else { createContextWithoutResourceManager(); String webAppBase = CONTEXT_DIR.toString(); String deliverFromDisk = IInitialization.RESOURCES_DELIVER_FROM_DISK; ResourceManagerImpl.createInstance( webAppBase, deliverFromDisk ); } ServiceManager.setHandler( new DispatchHandler() ); } public static void createContext() throws IOException, FactoryConfigurationError, ParserConfigurationException, SAXException { createContext( true ); } public static void createContextWithoutResourceManager() throws FileNotFoundException, IOException, FactoryConfigurationError, ParserConfigurationException, SAXException { CONTEXT_DIR.mkdirs(); File webInf = new File( CONTEXT_DIR, "WEB-INF" ); webInf.mkdirs(); File conf = new File( webInf, "conf" ); conf.mkdirs(); File classes = new File( webInf, "classes" ); classes.mkdirs(); File libDir = new File( webInf, "lib" ); libDir.mkdirs(); File w4tXml = new File( conf, "W4T.xml" ); copyTestResource( "resources/w4t_fixture.xml", w4tXml ); File colorScheme = new File( conf, "defaultColorScheme.properties" ); copyTestResource( "defaultColorScheme.properties", colorScheme ); String webAppBase = CONTEXT_DIR.toString(); EngineConfig engineConfig = new EngineConfig( webAppBase ); ConfigurationReader.setEngineConfig( engineConfig ); String submittersNone = IInitialization.NOSCRIPT_SUBMITTERS_NONE; ImageCache.createInstance( webAppBase, submittersNone ); } public static void removeContext() { if( CONTEXT_DIR.exists() ) { delete( CONTEXT_DIR ); } setPrivateField( ServiceManager.class, null, "handlerDispatcher", null ); } public static void delete( final File toDelete ) { if( toDelete.isDirectory() ) { File[] children = toDelete.listFiles(); for( int i = 0; i < children.length; i++ ) { delete( children[ i ] ); } } toDelete.delete(); } public static void copyTestResource( final String resourceName, final File destination ) throws FileNotFoundException, IOException { ClassLoader loader = W4TFixture.class.getClassLoader(); InputStream is = loader.getResourceAsStream( resourceName ); try { OutputStream out = new FileOutputStream( destination ); try { int c = is.read(); while( c != -1 ) { out.write( c ); c = is.read(); } } finally { out.close(); } } finally { is.close(); } } public static File getWebAppBase() throws Exception { File result = CONTEXT_DIR; if( !result.exists() ) { createContextWithoutResourceManager(); result = CONTEXT_DIR; } return result; } public static void fakeBrowser( final Browser browser ) { ISessionStore session = ContextProvider.getSession(); session.setAttribute( ServiceContext.DETECTED_SESSION_BROWSER, browser ); IServiceStateInfo stateInfo = ContextProvider.getStateInfo(); stateInfo.setDetectedBrowser( browser ); } public static void fakeRequestParam( final String key, final String value ) { TestRequest request = ( TestRequest )ContextProvider.getRequest(); request.setParameter( key, value ); } public static void fakeContextProvider( final HttpServletResponse response, final HttpServletRequest request ) { ServiceContext context = new ServiceContext( request, response ); ServiceStateInfo stateInfo = new ServiceStateInfo(); context.setStateInfo( stateInfo ); ContextProvider.setContext( context ); LifeCycleHelper.setSchedule( new IRenderingSchedule() { public boolean isScheduled( final Object component ) { return true; } public void schedule( final Object component ) { } } ); } public static void fakeEngineForRender( final WebForm formToRender ) throws Exception { FormManager.setActive( formToRender ); FormManager.add( formToRender ); IWindow window = WindowManager.getInstance().findWindow( formToRender ); if( window == null ) { window = WindowManager.getInstance().create( formToRender ); } WindowManager.setActive( window ); TestEngineConfig config = new TestEngineConfig(); config.setServerContextDir( getWebAppBase() ); config.setClassDir( new File( getWebAppBase(), "WEB-INF/classes" ) ); config.setLibDir( new File( getWebAppBase(), "WEB-INF/lib" ) ); ConfigurationReader.setEngineConfig( config ); ResourceManagerImpl.createInstance( W4TFixture.getWebAppBase().toString(), ResourceManagerImpl.DELIVER_FROM_DISK ); } public static void fakeEngineForRequestLifeCycle( final WebForm form ) throws Exception { IServiceStateInfo stateInfo = ContextProvider.getStateInfo(); stateInfo.setResponseWriter( new HtmlResponseWriter() ); String browserId = ServiceContext.DETECTED_SESSION_BROWSER; Default browser = new Default( false, false ); ContextProvider.getSession().setAttribute( browserId, browser ); stateInfo.setDetectedBrowser( browser ); FormManager.add( form ); IWindow window = WindowManager.getInstance().create( form ); WindowManager.setActive( window ); fakeRequestParam( RequestParams.REQUEST_COUNTER, "-1" ); String uiRootId = window.getId() + ";" + form.getUniqueID(); fakeRequestParam( RequestParams.UIROOT, uiRootId ); fakeEngineForRender( form ); } public static void renderComponent( final WebComponent component ) throws Exception { LifeCycleHelper.render( component, component ); } public static void setWebComponentUniqueId( final WebComponent component, final String uniqueID ) { setPrivateField( WebComponent.class, component, "uniqueId", uniqueID ); } public static void setPrivateField( final Class clazz, final Object object, final String fieldName, final Object value ) { Field[] fields = clazz.getDeclaredFields(); Field field = null; for( int i = 0; field == null && i < fields.length; i++ ) { if( fields[ i ].getName().equals( fieldName ) ) { field = fields[ i ]; } } if ( field == null ) { Assert.fail( "Private field " + clazz.getName() + "#" + fieldName + " could not be found." ); } field.setAccessible( true ); try { field.set( object, value ); } catch( Exception e ) { e.printStackTrace(); Assert.fail( "Failed to set value of private field " + clazz.getName() + "#" + fieldName ); } } public static WebForm getEmptyWebFormInstance() { return new EmptyWebForm(); } public static ILifeCycleAdapter getLifeCycleAdapter( final WebForm form ) { return ( ILifeCycleAdapter )form.getAdapter( ILifeCycleAdapter.class ); } public static void setResponseWriter( final HtmlResponseWriter writer ) { ContextProvider.getStateInfo().setResponseWriter( writer ); } public static String getHeadMarkup( final HtmlResponseWriter writer ) { StringBuffer buffer = new StringBuffer(); for( int i = 0; i < writer.getHeadSize(); i++ ) { buffer.append( writer.getHeadToken( i ) ); } return buffer.toString(); } public static String getFootMarkup( final HtmlResponseWriter writer ) { StringBuffer buffer = new StringBuffer(); for( int i = 0; i < writer.getFootSize(); i++ ) { buffer.append( writer.getFootToken( i ) ); } return buffer.toString(); } public static 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(); } public static String getAllMarkup() { IServiceStateInfo stateInfo = ContextProvider.getStateInfo(); HtmlResponseWriter writer = stateInfo.getResponseWriter(); return getAllMarkup( writer ); } public static String getAllMarkup( final HtmlResponseWriter writer ) { StringBuffer buffer = new StringBuffer(); buffer.append( getHeadMarkup( writer ) ); buffer.append( getBodyMarkup( writer ) ); buffer.append( getFootMarkup( writer ) ); return buffer.toString(); } public static void fakeUserAgent( final String userAgent ) { TestRequest request = ( TestRequest )ContextProvider.getRequest(); request.setHeader( "User-Agent", userAgent ); } public static void forceAjaxRendering( final WebComponent component ) { AjaxStatus ajaxStatus = ( AjaxStatus )component.getAdapter( AjaxStatus.class ); ajaxStatus.updateStatus( true ); } public static void fakeResponseWriter() { HtmlResponseWriter writer = new HtmlResponseWriter(); IServiceStateInfo stateInfo = ContextProvider.getStateInfo(); stateInfo.setResponseWriter( writer ); } public static IFormAdapter getFormAdapter( final WebForm form ) { return ( IFormAdapter )form.getAdapter( IFormAdapter.class ); } public static WebForm loadStartupForm() { IConfiguration configuration = ConfigurationReader.getConfiguration(); String startup = configuration.getInitialization().getStartUpForm(); return FormManager.load( startup ); } public static void fakeFormRequestParams( final String requestCounter, final String windowId, final String formId ) { fakeRequestParam( RequestParams.UIROOT, windowId + ";" + formId ); fakeRequestParam( RequestParams.REQUEST_COUNTER, requestCounter ); } public static void scheduleForRenderInAJAX( final WebComponent component ) { AjaxStatus ajaxStatus; ajaxStatus = ( AjaxStatus )component.getAdapter( AjaxStatus.class ); ajaxStatus.updateStatus( true ); } public static AjaxStatus getAjaxStatus( final WebComponent component ) { AjaxStatus result; result = ( AjaxStatus )component.getAdapter( AjaxStatus.class ); return result; } }