package com.codeaffine.extras.jdt.internal.junitstatus;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
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;
import com.codeaffine.eclipse.swt.test.util.SWTIgnoreConditions.NonWindowsPlatform;
import com.codeaffine.test.util.junit.ConditionalIgnoreRule;
import com.codeaffine.test.util.junit.ConditionalIgnoreRule.ConditionalIgnore;
import com.codeaffine.test.util.lang.ThrowableCaptor;
public class JUnitProgressBarTest {
@Rule
public final DisplayHelper displayHelper = new DisplayHelper();
@Rule
public final ConditionalIgnoreRule ignoreRule = new ConditionalIgnoreRule();
private JUnitProgressBar progressBar;
@Before
public void setUp() {
Shell parent = displayHelper.createShell();
parent.setLayout( new FillLayout() );
progressBar = new JUnitProgressBar( parent );
}
@Test
public void testInitialValues() {
assertThat( progressBar.getText() ).isEmpty();
assertThat( progressBar.getTextAlignment() ).isEqualTo( SWT.LEFT );
assertThat( progressBar.getBarColor() ).isNull();
assertThat( progressBar.getSelection() ).isEqualTo( 0 );
assertThat( progressBar.getMaximum() ).isEqualTo( 0 );
}
@ConditionalIgnore(condition=NonWindowsPlatform.class)
@Test
public void testStyleNoBackground() {
assertThat( progressBar.getStyle() & SWT.NO_BACKGROUND ).isNotZero();
}
@Test
public void testStyleDoubleBuffered() {
assertThat( progressBar.getStyle() & SWT.DOUBLE_BUFFERED ).isNotZero();
}
@Test
public void testStyleNoFocus() {
assertThat( progressBar.getStyle() & SWT.NO_FOCUS ).isNotZero();
}
@Test
public void testSetText() {
String expected = "text";
progressBar.setText( expected );
String text = progressBar.getText();
assertThat( text ).isEqualTo( expected );
}
@Test
public void testSetTextAlignment() {
int expected = SWT.CENTER;
progressBar.setTextAlignment( expected );
assertThat( progressBar.getTextAlignment() ).isEqualTo( expected );
}
@Test
public void testSetBarColor() {
Color expected = displayHelper.getDisplay().getSystemColor( SWT.COLOR_RED );
progressBar.setBarColor( expected );
assertThat( progressBar.getBarColor() ).isEqualTo( expected );
}
@Test
public void testSetSelection() {
int expected = 2;
progressBar.setSelection( expected );
assertThat( progressBar.getSelection() ).isEqualTo( expected );
}
@Test
public void testSetMaximum() {
int expected = 2;
progressBar.setMaximum( expected );
assertThat( progressBar.getMaximum() ).isEqualTo( expected );
}
@Test
public void testSetValue() {
String text = "text";
int textAlignment = SWT.CENTER;
Color barColor = displayHelper.getDisplay().getSystemColor( SWT.COLOR_RED );
int selection = 1;
int maximum = 100;
progressBar.setValues( text, textAlignment, barColor, selection, maximum );
assertThat( progressBar.getText() ).isEqualTo( text );
assertThat( progressBar.getTextAlignment() ).isEqualTo( textAlignment );
assertThat( progressBar.getBarColor() ).isEqualTo( barColor );
assertThat( progressBar.getSelection() ).isEqualTo( selection );
assertThat( progressBar.getMaximum() ).isEqualTo( maximum );
}
@Test
public void testSetValueWithUnchangedArguments() {
progressBar = spy( progressBar );
String text = "text";
int textAlignment = SWT.CENTER;
Color barColor = displayHelper.getDisplay().getSystemColor( SWT.COLOR_RED );
int selection = 1;
int maximum = 100;
progressBar.setValues( text, textAlignment, barColor, selection, maximum );
progressBar.setValues( text, textAlignment, barColor, selection, maximum );
verify( progressBar ).redraw();
}
@Test
public void testGetBarWidth() {
setProgressBarWidth( 100 );
progressBar.setMaximum( 100 );
progressBar.setSelection( 50 );
assertThat( progressBar.getBarWidth() ).isEqualTo( 50 );
}
@Test
public void testGetBarWidthForSelectionLargetThanWidth() {
setProgressBarWidth( 100 );
progressBar.setMaximum( 200 );
progressBar.setSelection( 100 );
assertThat( progressBar.getBarWidth() ).isEqualTo( 50 );
}
@Test
public void testGetBarWidthForSelectionExceedingMaximum() {
setProgressBarWidth( 100 );
progressBar.setMaximum( 100 );
progressBar.setSelection( 200 );
assertThat( progressBar.getBarWidth() ).isEqualTo( 100 );
}
@Test
public void testGetBarWidthForZeroSelection() {
setProgressBarWidth( 100 );
progressBar.setMaximum( 100 );
progressBar.setSelection( 0 );
assertThat( progressBar.getBarWidth() ).isEqualTo( 0 );
}
@Test
public void testGetBarWidthForZeroMaximum() {
setProgressBarWidth( 100 );
progressBar.setMaximum( 0 );
progressBar.setSelection( 10 );
assertThat( progressBar.getBarWidth() ).isEqualTo( 0 );
}
@Test
public void testRedrawWithInitialValues() {
progressBar.getParent().setVisible( true );
Throwable throwable = ThrowableCaptor.thrownBy( () -> progressBar.redraw() );
assertThat( throwable ).isNull();
}
@Test
public void testRedrawWithCustomValues() {
progressBar.getParent().setVisible( true );
Color barColor = displayHelper.getSystemColor( SWT.COLOR_BLUE );
progressBar.setValues( "text", SWT.CENTER, barColor, 4, 5 );
Throwable throwable = ThrowableCaptor.thrownBy( () -> progressBar.redraw() );
assertThat( throwable ).isNull();
}
private void setProgressBarWidth( int width ) {
Rectangle trim = progressBar.computeTrim( 0, 0, width, 10 );
progressBar.setSize( trim.width + 2, 10 );
}
}