blob: e203af1cb5d0561548c2bb4321e9f0b4e616859f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2014 EclipseSource and others.
* 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:
* EclipseSource - initial API and implementation
******************************************************************************/
package org.eclipse.rap.addons.fileupload.test;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.eclipse.rap.addons.fileupload.FileUploadHandler;
import org.eclipse.rap.addons.fileupload.TestAdapter;
import org.eclipse.rap.rwt.testfixture.internal.Fixture;
import org.eclipse.rap.rwt.testfixture.internal.TestRequest;
@SuppressWarnings( "restriction" )
public final class FileUploadTestUtil {
private FileUploadTestUtil() {
// prevent instantiation
}
public static File createTempDirectory() {
File result;
try {
result = File.createTempFile( "temp-", "-dir" );
} catch( IOException exception ) {
throw new RuntimeException( "Could not create temp file", exception );
}
if( !result.delete() ) {
throw new RuntimeException( "Could not delete temp file: " + result.getAbsolutePath() );
}
if( !result.mkdir() ) {
throw new RuntimeException( "Could not create temp directory: " + result.getAbsolutePath() );
}
return result;
}
public static void deleteRecursively( File file ) {
if( file.exists() ) {
File[] files = file.listFiles();
if( files != null ) {
for( int i = 0; i < files.length; i++ ) {
deleteRecursively( files[ i ] );
}
}
boolean deleted = file.delete();
if( !deleted ) {
throw new RuntimeException( "Could not delete file or directory: " + file.getAbsolutePath() );
}
}
}
public static void fakeUploadRequest( FileUploadHandler handler,
String content,
String contentType,
String fileName )
{
String token = TestAdapter.getTokenFor( handler );
fakeUploadRequest( token, content, contentType, fileName );
}
public static void fakeUploadRequest( String token,
String content,
String contentType,
String fileName )
{
TestRequest request = Fixture.fakeNewRequest();
request.setMethod( "POST" );
request.setParameter( "servicehandler", "org.eclipse.rap.fileupload" );
String boundary = "-----4711-----";
String body = createMultipartBody( boundary, new FileData( content, contentType, fileName ) );
if( token != null ) {
request.setParameter( "token", token );
}
request.setBody( body );
request.setContentType( "multipart/form-data; boundary=" + boundary );
}
public static TestRequest createFakeUploadRequest( String content,
String contentType,
String fileName )
{
TestRequest request = new TestRequest();
String boundary = "-----4711-----";
String body = createMultipartBody( boundary, new FileData( content, contentType, fileName ) );
request.setMethod( "POST" );
request.setBody( body );
request.setContentType( "multipart/form-data; boundary=" + boundary );
return request;
}
public static void fakeUploadRequest( FileUploadHandler handler, FileData... fileData ) {
fakeUploadRequest( TestAdapter.getTokenFor( handler ), fileData );
}
public static void fakeUploadRequest( String token, FileData... fileData ) {
TestRequest request = Fixture.fakeNewRequest();
request.setMethod( "POST" );
request.setParameter( "servicehandler", "org.eclipse.rap.fileupload" );
String boundary = "-----4711-----";
String body = createMultipartBody( boundary, fileData );
if( token != null ) {
request.setParameter( "token", token );
}
request.setBody( body );
request.setContentType( "multipart/form-data; boundary=" + boundary );
}
private static String createMultipartBody( String boundary, FileData... fileData ) {
StringBuffer buffer = new StringBuffer();
String newline = "\r\n";
for( int i = 0; i < fileData.length; i++ ) {
buffer.append( "--" );
buffer.append( boundary );
buffer.append( newline );
buffer.append( "Content-Disposition: form-data; name=\"file\"; filename=\"" );
buffer.append( fileData[ i ].fileName );
buffer.append( "\"" );
buffer.append( newline );
if( fileData[ i ].contentType != null ) {
buffer.append( "Content-Type: " );
buffer.append( fileData[ i ].contentType );
buffer.append( newline );
}
buffer.append( newline );
buffer.append( fileData[ i ].content );
buffer.append( newline );
}
buffer.append( "--" );
buffer.append( boundary );
buffer.append( "--" );
buffer.append( newline );
return buffer.toString();
}
public static String getFileContents( File testFile ) {
String result;
// TODO [rst] Buffer can get very big with the wrong file
byte[] buffer = new byte[ ( int )testFile.length() ];
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream( new FileInputStream( testFile ) );
bis.read( buffer );
result = new String( buffer );
} catch( Exception exception ) {
throw new RuntimeException( exception );
} finally {
if( bis != null ) {
try {
bis.close();
} catch( Exception e ) {
// ignore
}
}
}
return result;
}
public final static class FileData {
public final String content;
public final String contentType;
public final String fileName;
public FileData( String content, String contentType, String fileName ) {
this.content = content;
this.contentType = contentType;
this.fileName = fileName;
}
}
}