/*******************************************************************************
* Copyright (c) 2009, 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
* Frank Appel - replaced singletons and static fields (Bug 337787)
******************************************************************************/
package org.eclipse.swt.dnd;
import static org.eclipse.rap.rwt.testfixture.internal.SerializationTestUtil.serializeAndDeserialize;
import static org.eclipse.rap.rwt.testfixture.internal.TestUtil.createImage;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
import org.eclipse.rap.rwt.testfixture.internal.Fixture;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Display;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class Transfer_Test {
private Display display;
@Before
public void setUp() {
Fixture.createApplicationContext( true );
Fixture.createServiceContext();
display = new Display();
}
@After
public void tearDown() {
Fixture.disposeOfServiceContext();
Fixture.disposeOfApplicationContext();
}
@Test
public void testTransferDataInitialValues() {
TransferData data = new TransferData();
assertEquals( 0, data.type );
assertEquals( 0, data.result );
assertNull( data.data );
}
@Test
public void testTextTransferTypeIds() {
Transfer transfer = TextTransfer.getInstance();
assertNotNull( transfer.getTypeIds() );
assertTrue( transfer.getTypeIds().length > 0 );
}
@Test
public void testTextTransferIsSupportedType() {
Transfer transfer = TextTransfer.getInstance();
TransferData data = new TransferData();
data.type = transfer.getTypeIds()[ 0 ];
assertTrue( transfer.isSupportedType( data ) );
data = new TransferData();
data.type = ImageTransfer.getInstance().getTypeIds()[ 0 ];
assertFalse( transfer.isSupportedType( data ) );
assertFalse( transfer.isSupportedType( null ) );
}
@Test
public void testTextTransferConversion() {
Transfer transfer = TextTransfer.getInstance();
TransferData data = transfer.getSupportedTypes()[ 0 ];
transfer.javaToNative( "foo", data );
assertEquals( 1, data.result );
Object java = transfer.nativeToJava( data );
assertTrue( java instanceof String );
assertEquals( "foo", java );
}
@Test
public void testImageTransferIsSupportedType() {
Transfer transfer = ImageTransfer.getInstance();
TransferData data = new TransferData();
data.type = transfer.getTypeIds()[ 0 ];
assertTrue( transfer.isSupportedType( data ) );
data = new TransferData();
data.type = TextTransfer.getInstance().getTypeIds()[ 0 ];
assertFalse( transfer.isSupportedType( data ) );
assertFalse( transfer.isSupportedType( null ) );
}
@Test
public void testImageTransferTypeIds() {
Transfer transfer = ImageTransfer.getInstance();
assertNotNull( transfer.getTypeIds() );
assertTrue( transfer.getTypeIds().length > 0 );
}
@Test
public void testImageTransferConversion() throws IOException {
Transfer transfer = ImageTransfer.getInstance();
TransferData data = transfer.getSupportedTypes()[ 0 ];
Image image = createImage( display, Fixture.IMAGE1 );
ImageData imageData = image.getImageData();
transfer.javaToNative( imageData, data );
assertEquals( 1, data.result );
Object java = transfer.nativeToJava( data );
assertTrue( java instanceof ImageData );
assertNotSame( imageData, java );
assertEquals( imageData.width, ( ( ImageData ) java ).width );
assertEquals( imageData.height, ( ( ImageData ) java ).height );
}
@Test
public void testURLTransferConversion() {
Transfer transfer = URLTransfer.getInstance();
TransferData data = transfer.getSupportedTypes()[ 0 ];
String url = "http://eclipse.org/rap";
transfer.javaToNative( url, data );
assertEquals( 1, data.result );
Object java = transfer.nativeToJava( data );
assertTrue( java instanceof String );
assertEquals( url, java );
}
@Test
public void testFileTransferConversion() {
Transfer transfer = FileTransfer.getInstance();
TransferData data = transfer.getSupportedTypes()[ 0 ];
String[] fileNames = new String[] { "c:/file1", "c:/file2", };
transfer.javaToNative( fileNames, data );
assertEquals( 1, data.result );
Object java = transfer.nativeToJava( data );
assertTrue( java instanceof String[] );
String[] transferredFileNames = ( String[] )java;
assertEquals( fileNames.length, transferredFileNames.length );
assertEquals( fileNames[ 0 ], transferredFileNames[ 0 ] );
assertEquals( fileNames[ 1 ], transferredFileNames[ 1 ] );
}
@Test
public void testRTFTransferConversion() {
Transfer transfer = RTFTransfer.getInstance();
TransferData data = transfer.getSupportedTypes()[ 0 ];
String rtf
= "{\\rtf1{\\colortbl;\\red255\\green0\\blue0;}\\cf1\\b "
+ "Hello World"
+ "}";
transfer.javaToNative( rtf, data );
assertEquals( 1, data.result );
Object java = transfer.nativeToJava( data );
assertTrue( java instanceof String );
assertEquals( rtf, java );
}
@Test
public void testHTMLTransferConversion() {
Transfer transfer = HTMLTransfer.getInstance();
TransferData data = transfer.getSupportedTypes()[ 0 ];
String html = "<html></html>";
transfer.javaToNative( html, data );
assertEquals( 1, data.result );
Object java = transfer.nativeToJava( data );
assertTrue( java instanceof String );
assertEquals( html, java );
}
@Test
public void testTextToImageTransfer() {
Transfer textTransfer = TextTransfer.getInstance();
TransferData data = textTransfer.getSupportedTypes()[ 0 ];
String text = "Hello World";
textTransfer.javaToNative( text, data );
assertEquals( 1, data.result );
Transfer imageTransfer = ImageTransfer.getInstance();
Object java = imageTransfer.nativeToJava( data );
assertNull( java );
}
@Test
public void testTextTransferWithIllegalData() {
Transfer textTransfer = TextTransfer.getInstance();
TransferData data = textTransfer.getSupportedTypes()[ 0 ];
try {
textTransfer.javaToNative( new Object(), data );
fail( "Must not accept wrong input data" );
} catch( SWTException expected ) {
}
}
@Test
public void testRegisterType() {
int fooType = Transfer.registerType( "foo" );
assertEquals( fooType, Transfer.registerType( "foo" ) );
int barType = Transfer.registerType( "bar" );
assertTrue( fooType != barType );
}
@Test
public void testIsTransferSerializable() throws Exception {
TextTransfer transfer = TextTransfer.getInstance();
TextTransfer deserializedTransfer = serializeAndDeserialize( transfer );
TransferData type = transfer.getSupportedTypes()[ 0 ];
TransferData deserializedType = deserializedTransfer.getSupportedTypes()[ 0 ];
assertTrue( TransferData.sameType( type, deserializedType ) );
}
@Test
public void testIsTransferDataSerializable() throws Exception {
TransferData transferData = new TransferData();
transferData.type = 123;
transferData.data = "data";
transferData.result = 456;
TransferData deserializedTransferData = serializeAndDeserialize( transferData );
assertEquals( transferData.type, deserializedTransferData.type );
assertEquals( transferData.data, deserializedTransferData.data );
assertEquals( transferData.result, deserializedTransferData.result );
}
}