/*******************************************************************************
* Copyright (c) 2014, 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 com.eclipsesource.tabris.widgets;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.internal.graphics.GCAdapter;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import com.eclipsesource.tabris.test.util.TabrisEnvironment;
@SuppressWarnings("restriction")
public class PagingIndicatorTest {
@Rule
public TabrisEnvironment environment = new TabrisEnvironment();
private Shell parent;
private PagingIndicator indicator;
@Before
public void setUp() {
parent = new Shell( new Display() );
indicator = new PagingIndicator( parent );
}
@Test( expected = IllegalArgumentException.class )
public void testFailsWithNullParent() {
new PagingIndicator( null );
}
@Test
public void testHasDefaultForCount() {
assertEquals( 1, indicator.getCount() );
}
@Test
public void testSavesSettedCount() {
indicator.setCount( 10 );
assertEquals( 10, indicator.getCount() );
}
@Test( expected = IllegalArgumentException.class )
public void testFailsToSetNegativeCount() {
indicator.setCount( -1 );
}
@Test
public void testHasDefaultForActive() {
assertEquals( 0, indicator.getActive() );
}
@Test
public void testSavesSettedActive() {
indicator.setCount( 2 );
indicator.setActive( 1 );
assertEquals( 1, indicator.getActive() );
}
@Test( expected = IllegalArgumentException.class )
public void testFailsToSetActiveWithNegativeIndex() {
indicator.setActive( -1 );
}
@Test( expected = IllegalStateException.class )
public void testFailsToSetActiveWithNonExistingIndex() {
indicator.setActive( 2 );
}
@Test
public void testHasDefaultForSpacing() {
assertEquals( 9, indicator.getSpacing() );
}
@Test
public void testSavesSettedSpacing() {
indicator.setSpacing( 5 );
assertEquals( 5, indicator.getSpacing() );
}
@Test( expected = IllegalArgumentException.class )
public void testFailsToSetNegativeSpacing() {
indicator.setSpacing( -1 );
}
@Test
public void testHasDefaultForDiameter() {
assertEquals( 7, indicator.getDiameter() );
}
@Test
public void testSavesSettedDiameter() {
indicator.setDiameter( 5 );
assertEquals( 5, indicator.getDiameter() );
}
@Test( expected = IllegalArgumentException.class )
public void testFailsToSetNegativeDiameter() {
indicator.setDiameter( -1 );
}
@Test
public void testHasDefaultForActiveColor() {
assertEquals( indicator.getActiveColor().getRGB(), new RGB( 0, 122, 255 ) );
}
@Test
public void testSavesSettedActiveColor() {
indicator.setActiveColor( new Color( parent.getDisplay(), 0, 0, 0 ) );
assertEquals( indicator.getActiveColor().getRGB(), new RGB( 0, 0, 0 ) );
}
@Test( expected = IllegalArgumentException.class )
public void testFailsToSetNullActiveColor() {
indicator.setActiveColor( null );
}
@Test
public void testHasDefaultForInactiveColor() {
assertEquals( indicator.getInactiveColor().getRGB(), new RGB( 192, 192, 192 ) );
}
@Test
public void testSavesSettedInactiveColor() {
indicator.setInactiveColor( new Color( parent.getDisplay(), 255, 0, 0 ) );
assertEquals( indicator.getInactiveColor().getRGB(), new RGB( 255, 0, 0 ) );
}
@Test( expected = IllegalArgumentException.class )
public void testFailsToSetNullInactiveColor() {
indicator.setInactiveColor( null );
}
@Test
public void testSetActiveDrawsIndicator() {
indicator.setCount( 2 );
indicator.setActive( 1 );
verifyDraw( indicator );
}
@Test
public void testSetCountDrawsIndicator() {
indicator.setCount( 2 );
verifyDraw( indicator );
}
@Test
public void testSetSpacingDrawsIndicator() {
indicator.setSpacing( 2 );
verifyDraw( indicator );
}
@Test
public void testSetDiameterDrawsIndicator() {
indicator.setDiameter( 10 );
verifyDraw( indicator );
}
@Test
public void testSetActiveColorDrawsIndicator() {
indicator.setActiveColor( new Color( parent.getDisplay(), 0, 0, 0 ) );
verifyDraw( indicator );
}
@Test
public void testSetInactiveColorDrawsIndicator() {
indicator.setInactiveColor( new Color( parent.getDisplay(), 0, 0, 0 ) );
verifyDraw( indicator );
}
@Test
public void testUpdateDrawsIndicator() {
indicator.update();
verifyDraw( indicator );
}
@Test
public void testAddsPaintListenerThatRedrawsIndicator() {
Canvas canvas = indicator.getCanvas();
Listener listener = canvas.getListeners( SWT.Paint )[ 0 ];
Event event = new Event();
event.type = SWT.Paint;
event.widget = canvas;
event.gc = new GC( canvas );
listener.handleEvent( event );
verifyDraw( indicator );
}
private void verifyDraw( PagingIndicator indicator ) {
GCAdapter gcAdapter = indicator.getCanvas().getAdapter( GCAdapter.class );
assertTrue( gcAdapter.getGCOperations().length > 0 );
}
}