/**
* 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.scrollbar;
import static com.codeaffine.eclipse.swt.widget.scrollbar.ImageDrawer.IMAGE_DRAWER_IS_DISPOSED;
import static com.codeaffine.test.util.lang.ThrowableCaptor.thrownBy;
import static org.assertj.core.api.Assertions.assertThat;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import com.codeaffine.eclipse.swt.test.util.DisplayHelper;
public class ImageDrawerTest {
private static final int HEIGHT = 30;
private static final int WIDTH = 20;
@Rule
public final DisplayHelper displayHelper = new DisplayHelper();
@Before
public void setUp() {
displayHelper.ensureDisplay();
}
@Test
public void getForeground() {
Color color = displayHelper.getSystemColor( SWT.COLOR_BLUE );
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION, color, color );
Color actual = drawer.getForeground();
assertThat( actual )
.isNotSameAs( color )
.isNotNull();
}
@Test
public void getForegroundIfDisposed() {
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION );
drawer.dispose();
Throwable actual = thrownBy( () -> drawer.getForeground() );
assertThat( actual )
.hasMessage( ImageDrawer.IMAGE_DRAWER_IS_DISPOSED )
.isInstanceOf( IllegalStateException.class );
}
@Test
public void getBackground() {
Color color = displayHelper.getSystemColor( SWT.COLOR_BLUE );
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION, color, color );
Color actual = drawer.getBackground();
assertThat( actual )
.isNotSameAs( color )
.isNotNull();
}
@Test
public void getBackgroundIfDisposed() {
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION );
drawer.dispose();
Throwable actual = thrownBy( () -> drawer.getBackground() );
assertThat( actual )
.hasMessage( ImageDrawer.IMAGE_DRAWER_IS_DISPOSED )
.isInstanceOf( IllegalStateException.class );
}
@Test
public void setForeground() {
Color expected = displayHelper.getSystemColor( SWT.COLOR_BLUE );
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION );
drawer.setForeground( expected );
Color actual = drawer.getForeground();
assertThat( actual )
.isEqualTo( expected )
.isNotSameAs( expected );
}
@Test
public void setForegroundIfDisposed() {
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION );
drawer.dispose();
Throwable actual = thrownBy( () -> drawer.setForeground( displayHelper.getSystemColor( SWT.COLOR_BLUE ) ) );
assertThat( actual )
.isInstanceOf( IllegalStateException.class )
.hasMessage( IMAGE_DRAWER_IS_DISPOSED );
}
@Test
public void setForegroundWithNullAsParameter() {
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION );
Color expected = drawer.getForeground();
drawer.setForeground( null );
Color actual = drawer.getForeground();
assertThat( actual ).isSameAs( expected );
}
@Test
public void setBackground() {
Color expected = displayHelper.getSystemColor( SWT.COLOR_BLUE );
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION );
drawer.setBackground( expected );
Color actual = drawer.getBackground();
assertThat( actual )
.isEqualTo( expected )
.isNotSameAs( expected );
}
@Test
public void setBackgroundIfDisposed() {
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION );
drawer.dispose();
Throwable actual = thrownBy( () -> drawer.setBackground( displayHelper.getSystemColor( SWT.COLOR_BLUE ) ) );
assertThat( actual )
.isInstanceOf( IllegalStateException.class )
.hasMessage( IMAGE_DRAWER_IS_DISPOSED );
}
@Test
public void setBackgroundWithNullAsParameter() {
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION );
Color expected = drawer.getBackground();
drawer.setBackground( null );
Color actual = drawer.getBackground();
assertThat( actual ).isSameAs( expected );
}
@Test
public void draw() {
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION );
drawer.setForeground( displayHelper.getDisplay().getSystemColor( SWT.COLOR_BLUE ) );
Image actual = drawer.draw( WIDTH, HEIGHT );
assertThat( actual.getBounds() ).isEqualTo( new Rectangle( 0, 0, WIDTH, HEIGHT ) );
assertThat( actual.getDevice() ).isEqualTo( Display.getCurrent() );
assertThat( actual.getImageData().data ).isNotEqualTo( emptyImageDataArray() );
}
@Test
public void drawIfDisposed() {
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION );
drawer.dispose();
Throwable actual = thrownBy( () -> drawer.draw( WIDTH, HEIGHT ) );
assertThat( actual )
.isInstanceOf( IllegalStateException.class )
.hasMessage( IMAGE_DRAWER_IS_DISPOSED );
}
@Test
public void drawWithDifferentColors() {
displayHelper.ensureDisplay();
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION );
Image first = drawer.draw( WIDTH, HEIGHT );
drawer.setForeground( displayHelper.getDisplay().getSystemColor( SWT.COLOR_BLUE ) );
Image second = drawer.draw( WIDTH, HEIGHT );
drawer.setBackground( displayHelper.getDisplay().getSystemColor( SWT.COLOR_RED ) );
Image third = drawer.draw( WIDTH, HEIGHT );
assertThat( first.getImageData().data ).isNotEqualTo( second.getImageData().data );
assertThat( second.getImageData().data ).isNotEqualTo( third.getImageData().data );
}
@Test
public void dispose() {
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION );
drawer.dispose();
boolean actual = drawer.isDisposed();
assertThat( actual ).isTrue();
}
@Test
public void disposeTwice() {
ImageDrawer drawer = new ImageDrawer( FlatScrollBar.DEFAULT_MAX_EXPANSION );
drawer.dispose();
Throwable actual = thrownBy( () -> drawer.dispose() );
assertThat( actual ).isNull();
}
private byte[] emptyImageDataArray() {
return displayHelper.createImage( WIDTH, HEIGHT ).getImageData().data;
}
}