/*******************************************************************************
* Copyright (c) 2012 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.custom;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import org.eclipse.swt.internal.SWTEventListener;
import org.eclipse.swt.internal.events.EventTypes;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Widget;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
public class TypedCTabFolderListener_Test {
private Event event;
@Before
public void setUp() {
event = new Event();
event.widget = mock( Widget.class );
}
@Test
public void testGetEventListener() {
SWTEventListener wrappedListener = mock( SWTEventListener.class );
TypedCTabFolderListener tabFolderListener = new TypedCTabFolderListener( wrappedListener );
assertSame( wrappedListener, tabFolderListener.getEventListener() );
}
@Test
public void testHandleEventWithUnknownEventType() {
SWTEventListener wrappedListener = mock( SWTEventListener.class );
TypedCTabFolderListener tabFolderListener = new TypedCTabFolderListener( wrappedListener );
event.type = 12345;
tabFolderListener.handleEvent( event );
verifyZeroInteractions( wrappedListener );
}
@Test
public void testHandleEventForClose() {
CTabFolder2Listener tabFolderListener = mock( CTabFolder2Listener.class );
TypedCTabFolderListener typedListener = new TypedCTabFolderListener( tabFolderListener );
event.type = EventTypes.CTAB_FOLDER_CLOSE;
event.doit = true;
event.item = mock( Item.class );
typedListener.handleEvent( event );
ArgumentCaptor<CTabFolderEvent> captor = ArgumentCaptor.forClass( CTabFolderEvent.class );
verify( tabFolderListener ).close( captor.capture() );
assertEquals( event.item, captor.getValue().item );
assertTrue( captor.getValue().doit );
}
@Test
public void testHandleEventForVetoedClose() {
CTabFolder2Listener tabFolderListener = spy( new CTabFolder2Adapter() {
@Override
public void close( CTabFolderEvent event ) {
event.doit = false;
}
} );
TypedCTabFolderListener typedListener = new TypedCTabFolderListener( tabFolderListener );
event.type = EventTypes.CTAB_FOLDER_CLOSE;
event.doit = true;
typedListener.handleEvent( event );
verify( tabFolderListener ).close( any( CTabFolderEvent.class ) );
assertFalse( event.doit );
}
@Test
public void testHandleEventForMinimize() {
CTabFolder2Listener tabFolderListener = mock( CTabFolder2Listener.class );
TypedCTabFolderListener typedListener = new TypedCTabFolderListener( tabFolderListener );
event.type = EventTypes.CTAB_FOLDER_MINIMIZE;
typedListener.handleEvent( event );
verify( tabFolderListener ).minimize( any( CTabFolderEvent.class ) );
}
@Test
public void testHandleEventForMaximize() {
CTabFolder2Listener tabFolderListener = mock( CTabFolder2Listener.class );
TypedCTabFolderListener typedListener = new TypedCTabFolderListener( tabFolderListener );
event.type = EventTypes.CTAB_FOLDER_MAXIMIZE;
typedListener.handleEvent( event );
verify( tabFolderListener ).maximize( any( CTabFolderEvent.class ) );
}
@Test
public void testHandleEventForRestore() {
CTabFolder2Listener tabFolderListener = mock( CTabFolder2Listener.class );
TypedCTabFolderListener typedListener = new TypedCTabFolderListener( tabFolderListener );
event.type = EventTypes.CTAB_FOLDER_RESTORE;
typedListener.handleEvent( event );
verify( tabFolderListener ).restore( any( CTabFolderEvent.class ) );
}
@Test
public void testHandleEventForShowList() {
CTabFolder2Listener tabFolderListener = mock( CTabFolder2Listener.class );
TypedCTabFolderListener typedListener = new TypedCTabFolderListener( tabFolderListener );
event.type = EventTypes.CTAB_FOLDER_SHOW_LIST;
event.x = 1;
event.y = 2;
event.width = 3;
event.height = 3;
event.doit = true;
typedListener.handleEvent( event );
ArgumentCaptor<CTabFolderEvent> captor = ArgumentCaptor.forClass( CTabFolderEvent.class );
verify( tabFolderListener ).showList( captor.capture() );
assertTrue( event.doit == captor.getValue().doit );
assertEquals( event.x, captor.getValue().x );
assertEquals( event.y, captor.getValue().y );
assertEquals( event.width, captor.getValue().width );
assertEquals( event.height, captor.getValue().height );
}
@Test
public void testHandleEventForVetoedShowList() {
CTabFolder2Listener tabFolderListener = spy( new CTabFolder2Adapter() {
@Override
public void showList( CTabFolderEvent event ) {
event.doit = false;
}
} );
TypedCTabFolderListener typedListener = new TypedCTabFolderListener( tabFolderListener );
event.type = EventTypes.CTAB_FOLDER_SHOW_LIST;
event.doit = true;
typedListener.handleEvent( event );
verify( tabFolderListener ).showList( any( CTabFolderEvent.class ) );
assertFalse( event.doit );
}
}