/*******************************************************************************
* Copyright (c) 2010, 2016 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.swt.widgets;
import static org.eclipse.rap.rwt.testfixture.internal.SerializationTestUtil.serializeAndDeserialize;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import java.util.ArrayList;
import org.eclipse.rap.rwt.internal.lifecycle.WidgetLCA;
import org.eclipse.rap.rwt.testfixture.TestContext;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.internal.events.EventList;
import org.eclipse.swt.internal.graphics.GCAdapter;
import org.eclipse.swt.internal.widgets.canvaskit.CanvasLCA;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
public class Canvas_Test {
@Rule
public TestContext context = new TestContext();
private java.util.List<PaintEvent> paintEventLog;
private Display display;
private Canvas canvas;
@Before
public void setUp() {
paintEventLog = new ArrayList<PaintEvent>();
display = new Display();
Shell shell = new Shell( display );
canvas = new Canvas( shell, SWT.NONE );
canvas.setSize( 100, 200 );
}
@Test
public void testPaintEvent_afterRedraw() {
canvas.addPaintListener( new PaintListener() {
@Override
public void paintControl( PaintEvent event ) {
paintEventLog.add( event );
}
} );
canvas.redraw();
assertEquals( 1, paintEventLog.size() );
PaintEvent event = paintEventLog.get( 0 );
assertSame( canvas, event.widget );
assertTrue( event.gc.isDisposed() );
assertEquals( event.x, 0 );
assertEquals( event.y, 0 );
assertEquals( event.width, 100 );
assertEquals( event.height, 200 );
}
@Test
public void testPaintEvent_afterPartialRedraw() {
canvas.addPaintListener( new PaintListener() {
@Override
public void paintControl( PaintEvent event ) {
paintEventLog.add( event );
}
} );
canvas.redraw( 1, 2, 3, 4, true );
assertEquals( 1, paintEventLog.size() );
PaintEvent event = paintEventLog.get( 0 );
assertSame( canvas, event.widget );
assertTrue( event.gc.isDisposed() );
assertEquals( event.x, 1 );
assertEquals( event.y, 2 );
assertEquals( event.width, 3 );
assertEquals( event.height, 4 );
}
@Test
public void testResize() {
canvas.addPaintListener( new PaintListener() {
@Override
public void paintControl( PaintEvent event ) {
paintEventLog.add( event );
}
} );
canvas.setSize( 100, 100 );
assertEquals( 1, paintEventLog.size() );
}
@Test
public void testMultiplePaintEvents() {
canvas.addPaintListener( new PaintListener() {
@Override
public void paintControl( PaintEvent event ) {
paintEventLog.add( event );
event.gc.drawLine( 1, 2, 3, 4 );
}
} );
canvas.redraw();
canvas.redraw();
assertEquals( 2, paintEventLog.size() );
GCAdapter adapter = canvas.getAdapter( GCAdapter.class );
assertEquals( 1, adapter.getGCOperations().length );
}
@Test
public void testIsSerializable() throws Exception {
Canvas deserializedCanvas = serializeAndDeserialize( canvas );
assertNotNull( deserializedCanvas );
}
@Test
public void testAddPaintListener() {
canvas.addPaintListener( mock( PaintListener.class ) );
assertTrue( canvas.isListening( SWT.Paint ) );
}
@Test
public void testRemovePaintListener() {
PaintListener listener = mock( PaintListener.class );
canvas.addPaintListener( listener );
canvas.removePaintListener( listener );
assertFalse( canvas.isListening( SWT.Paint ) );
}
@Test
public void testRemovePaintListenerUnregistersUntypedEvent() {
PaintListener listener = mock( PaintListener.class );
canvas.addPaintListener( listener );
canvas.removePaintListener( listener );
assertFalse( canvas.isListening( SWT.Paint ) );
}
@Test
public void testAddPaintListenerWithNullArgument() {
try {
canvas.addPaintListener( null );
} catch( IllegalArgumentException expected ) {
}
}
@Test
public void testRemovePaintListenerWithNullArgument() {
try {
canvas.removePaintListener( null );
} catch( IllegalArgumentException expected ) {
}
}
@Test
public void testConstructorDoesNotSendPaintEvents() {
// See bug 393771
canvas.addPaintListener( mock( PaintListener.class ) );
assertEquals( 0, EventList.getInstance().getAll().length );
}
@Test
public void testGetAdapter_LCA() {
assertTrue( canvas.getAdapter( WidgetLCA.class ) instanceof CanvasLCA );
assertSame( canvas.getAdapter( WidgetLCA.class ), canvas.getAdapter( WidgetLCA.class ) );
}
}