/******************************************************************************* * 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.engine.service; import java.io.IOException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import junit.framework.TestCase; import org.eclipse.rwt.internal.resources.ResourceManagerImpl; import org.eclipse.rwt.internal.service.*; import org.eclipse.rwt.internal.util.HTML; import org.eclipse.rwt.resources.IResourceManager; import com.w4t.W4TFixture; import com.w4t.W4TContext; import com.w4t.W4TFixture.TestResponse; import com.w4t.W4TFixture.TestServletOutputStream; import com.w4t.engine.W4TModelUtil; public class ResourceServiceHandler_Test extends TestCase { private static final String UNKNOWN_RESOURCE_XYZ = "com/w4t/engine/service/unknown-resource.xyz"; private static final String RESOURCETEST1_JS = "com/w4t/engine/util/resourcetest1.js"; protected void setUp() throws Exception { W4TFixture.setUp(); W4TFixture.createContext( false ); ResourceManagerImpl.setDeliveryMode( ResourceManagerImpl.DELIVER_BY_SERVLET ); // place output stream to 'see' what has been written HttpServletResponse response = ContextProvider.getResponse(); W4TFixture.TestResponse testResponse = ( TestResponse )response; ServletOutputStream outStream = new TestServletOutputStream(); testResponse.setOutputStream( outStream ); } protected void tearDown() throws Exception { W4TFixture.tearDown(); W4TFixture.removeContext(); } public void testUnknown() throws Exception { W4TModelUtil.initModel(); IResourceManager resourceManager = W4TContext.getResourceManager(); resourceManager.register( UNKNOWN_RESOURCE_XYZ ); W4TFixture.fakeRequestParam( RequestParams.RESOURCE, UNKNOWN_RESOURCE_XYZ ); W4TFixture.fakeRequestParam( RequestParams.RESOURCE_VERSION, null ); ServiceManager.getHandler().service(); byte[] response = getResponseBytes(); byte[] expected = "xyz".getBytes(); assertEquals( expected.length, response.length ); for( int i = 0; i < response.length; i++ ) { assertEquals( expected[ i ], response[ i ] ); } assertEquals( "content/unknown", getResponseContentType() ); } public void testUnversionedJavaScript() throws Exception { W4TModelUtil.initModel(); IResourceManager resourceManager = W4TContext.getResourceManager(); resourceManager.register( RESOURCETEST1_JS, HTML.CHARSET_NAME_ISO_8859_1, IResourceManager.RegisterOptions.NONE ); W4TFixture.fakeRequestParam( RequestParams.RESOURCE, RESOURCETEST1_JS ); W4TFixture.fakeRequestParam( RequestParams.RESOURCE_VERSION, null ); ServiceManager.getHandler().service(); byte[] response = getResponseBytes(); assertTrue( response.length > 0 ); assertEquals( "text/javascript", getResponseContentType() ); } public void testVersionedJavaScript() throws Exception { W4TModelUtil.initModel(); IResourceManager resourceManager = W4TContext.getResourceManager(); resourceManager.register( RESOURCETEST1_JS, HTML.CHARSET_NAME_ISO_8859_1, IResourceManager.RegisterOptions.VERSION ); W4TFixture.fakeRequestParam( RequestParams.RESOURCE, RESOURCETEST1_JS ); String version = String.valueOf( ResourceManagerImpl.findVersion( RESOURCETEST1_JS ) ); W4TFixture.fakeRequestParam( RequestParams.RESOURCE_VERSION, version ); ServiceManager.getHandler().service(); byte[] response = getResponseBytes(); assertTrue( response.length > 0 ); assertEquals( "text/javascript", getResponseContentType() ); } private byte[] getResponseBytes() throws IOException { HttpServletResponse response = ContextProvider.getResponse(); TestServletOutputStream outStream = ( TestServletOutputStream )response.getOutputStream(); return outStream.getContent().toByteArray(); } private String getResponseContentType() { HttpServletResponse response = ContextProvider.getResponse(); W4TFixture.TestResponse testResponse = ( TestResponse )response; return testResponse.getContentType(); } }