/**
* Copyright (c) 2014 - 2017 Frank Appel
* 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:
* Frank Appel - initial API and implementation
*/
package com.codeaffine.eclipse.swt.widget.action;
import static com.codeaffine.eclipse.swt.test.util.ShellHelper.createShell;
import static com.codeaffine.eclipse.swt.test.util.graphics.PointAssert.assertThat;
import static com.codeaffine.eclipse.swt.widget.action.EnablementHelper.configureAsDisabled;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import java.util.function.BooleanSupplier;
import java.util.function.Function;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import com.codeaffine.eclipse.swt.test.util.DisplayHelper;
public class ActionControlBuilderTest {
@Rule
public final DisplayHelper displayHelper = new DisplayHelper();
private Updatable updatable;
private Shell parent;
@Before
public void setUp() {
parent = createShell( displayHelper );
}
@Test
public void buildWithRunnable() {
Runnable runnable = mock( Runnable.class );
ActionControlBuilder builder = new ActionControlBuilder( runnable );
Control actual = builder.build( parent );
assertThat( actual.getMenu() ).isNull();
assertThat( builder.getAction() ).isSameAs( runnable );
assertThat( builder.getMenuCreator() ).isNull();
}
@Test
public void buildWithMenuCreator() {
Function<Control, Menu> menuCreator = control -> new Menu( control );
ActionControlBuilder builder = new ActionControlBuilder( menuCreator );
Control actual = builder.build( parent );
assertThat( actual.getMenu() ).isNotNull();
assertThat( builder.getAction() ).isNull();
assertThat( builder.getMenuCreator() ).isSameAs( menuCreator );
}
@Test
public void buildEmptyPlaceholder() {
ActionControlBuilder builder = new ActionControlBuilder();
Control actual = builder.build( parent );
Point preferredSize = actual.computeSize( SWT.DEFAULT, SWT.DEFAULT, true );
assertThat( preferredSize ).isEqualToPointOf( 0, 0 );
}
@Test
public void buildWithImage() {
Runnable runnable = mock( Runnable.class );
Image expected = createImage();
Label actual = ( Label )new ActionControlBuilder( runnable ).withImage( expected ).build( parent );
assertThat( actual.getImage() ).isSameAs( expected );
}
@Test
public void buildIfDisabled() {
Runnable runnable = mock( Runnable.class );
Image enabledImage = createImage();
Label actual = ( Label )new ActionControlBuilder( runnable )
.withImage( enabledImage )
.withEnablement( () -> false )
.build( parent );
assertThat( actual.getImage() ).isNotSameAs( enabledImage );
}
@Test
public void buildAndDisable() {
BooleanSupplier enablement = mock( BooleanSupplier.class );
Runnable runnable = mock( Runnable.class );
Image enabledImage = createImage();
Label actual = ( Label )new ActionControlBuilder( runnable )
.withImage( enabledImage )
.withEnablement( enablement )
.withUpdateTrigger( updatable -> this.updatable = updatable )
.build( parent );
configureAsDisabled( enablement );
updatable.update();
assertThat( actual.getImage() ).isNotSameAs( enabledImage );
}
private Image createImage() {
return displayHelper.createImage( 1, 1 );
}
}