/******************************************************************************* * Copyright (c) 2013 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.graphics; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; import static org.mockito.Mockito.mock; import org.eclipse.swt.SWT; import org.eclipse.swt.SWTException; import org.junit.Before; import org.junit.Test; public class Path_Test { private Device device; private Path path; @Before public void setUp() { device = mock( Device.class ); path = new Path( device ); } @Test public void testCreate() { PathData pathData = path.getPathData(); assertSame( device, path.getDevice() ); assertEquals( 0, pathData.types.length ); assertEquals( 0, pathData.points.length ); } @Test public void testCreate_withInitialPathData() { PathData initialPathData = new PathData(); initialPathData.types = new byte[]{ SWT.PATH_MOVE_TO, SWT.PATH_LINE_TO }; initialPathData.points = new float[]{ 10, 20, 10, 10 }; path = new Path( device, initialPathData ); PathData pathData = path.getPathData(); assertArrayEquals( new byte[] { SWT.PATH_MOVE_TO, SWT.PATH_LINE_TO }, pathData.types ); assertArrayEquals( new float[] { 10, 20, 10, 10 }, pathData.points, 0 ); } @Test(expected = IllegalArgumentException.class) public void testCreate_withInitialPathDataAndInvalidTypes() { PathData initialPathData = new PathData(); initialPathData.types = new byte[]{ SWT.PATH_MOVE_TO, 67 }; initialPathData.points = new float[]{ 10, 20, 10, 10 }; path = new Path( device, initialPathData ); } @Test(expected = ArrayIndexOutOfBoundsException.class) public void testCreate_withInitialPathDataAndInvalidPoints() { PathData initialPathData = new PathData(); initialPathData.types = new byte[]{ SWT.PATH_MOVE_TO, SWT.PATH_LINE_TO }; initialPathData.points = new float[]{ 10, 20, 10 }; path = new Path( device, initialPathData ); } @Test public void testGetCurrentPoint_initial() { float[] currentPoint = new float[ 2 ]; path.getCurrentPoint( currentPoint ); assertEquals( 0, currentPoint[ 0 ], 0 ); assertEquals( 0, currentPoint[ 1 ], 0 ); } @Test(expected = IllegalArgumentException.class) public void testGetCurrentPoint_withNullArgument() { path.getCurrentPoint( null ); } @Test(expected = IllegalArgumentException.class) public void testGetCurrentPoint_withArgumentWithSmallerSize() { path.getCurrentPoint( new float[ 1 ] ); } @Test(expected = SWTException.class) public void testGetCurrentPoint_withDisposedPath() { path.dispose(); path.getCurrentPoint( new float[ 2 ] ); } @Test public void testMoveTo() { path.moveTo( 10, 20 ); float[] currentPoint = new float[ 2 ]; path.getCurrentPoint( currentPoint ); assertEquals( 10, currentPoint[ 0 ], 0 ); assertEquals( 20, currentPoint[ 1 ], 0 ); } @Test(expected = SWTException.class) public void testMoveTo_withDisposedPath() { path.dispose(); path.moveTo( 10, 20 ); } @Test public void testMoveTo_notLastOperation() { path.lineTo( 10, 10 ); PathData pathData = path.getPathData(); assertArrayEquals( new byte[] { SWT.PATH_MOVE_TO, SWT.PATH_LINE_TO }, pathData.types ); assertArrayEquals( new float[] { 0, 0, 10, 10 }, pathData.points, 0 ); } @Test public void testMoveTo_lastOperation() { path.lineTo( 10, 10 ); path.moveTo( 10, 20 ); PathData pathData = path.getPathData(); assertArrayEquals( new byte[] { SWT.PATH_MOVE_TO, SWT.PATH_LINE_TO }, pathData.types ); assertArrayEquals( new float[] { 0, 0, 10, 10 }, pathData.points, 0 ); } @Test public void testMoveTo_noMultipleSequentialOperations() { path.moveTo( 1, 2 ); path.moveTo( 3, 4 ); path.lineTo( 10, 10 ); PathData pathData = path.getPathData(); assertArrayEquals( new byte[] { SWT.PATH_MOVE_TO, SWT.PATH_LINE_TO }, pathData.types ); assertArrayEquals( new float[] { 3, 4, 10, 10 }, pathData.points, 0 ); } @Test public void testLineTo() { path.lineTo( 10, 10 ); path.lineTo( 30, 10 ); PathData pathData = path.getPathData(); assertArrayEquals( new byte[] { SWT.PATH_MOVE_TO, SWT.PATH_LINE_TO, SWT.PATH_LINE_TO }, pathData.types ); assertArrayEquals( new float[] { 0, 0, 10, 10, 30, 10 }, pathData.points, 0 ); } @Test(expected = SWTException.class) public void testLineTo_withDisposedPath() { path.dispose(); path.lineTo( 10, 20 ); } @Test public void testLineTo_currentPoint() { path.lineTo( 10, 20 ); float[] currentPoint = new float[ 2 ]; path.getCurrentPoint( currentPoint ); assertEquals( 10, currentPoint[ 0 ], 0 ); assertEquals( 20, currentPoint[ 1 ], 0 ); } @Test public void testQuadTo() { path.quadTo( 10, 10, 20, 5 ); PathData pathData = path.getPathData(); assertArrayEquals( new byte[] { SWT.PATH_MOVE_TO, SWT.PATH_QUAD_TO }, pathData.types ); assertArrayEquals( new float[] { 0, 0, 10, 10, 20, 5 }, pathData.points, 0 ); } @Test(expected = SWTException.class) public void testQuadTo_withDisposedPath() { path.dispose(); path.quadTo( 10, 10, 20, 5 ); } @Test public void testQuadTo_currentPoint() { path.quadTo( 10, 10, 20, 5 ); float[] currentPoint = new float[ 2 ]; path.getCurrentPoint( currentPoint ); assertEquals( 20, currentPoint[ 0 ], 0 ); assertEquals( 5, currentPoint[ 1 ], 0 ); } @Test public void testCubicTo() { path.cubicTo( 10, 10, 20, 20, 30, 5 ); PathData pathData = path.getPathData(); assertArrayEquals( new byte[] { SWT.PATH_MOVE_TO, SWT.PATH_CUBIC_TO }, pathData.types ); assertArrayEquals( new float[] { 0, 0, 10, 10, 20, 20, 30, 5 }, pathData.points, 0 ); } @Test(expected = SWTException.class) public void testCubicTo_withDisposedPath() { path.dispose(); path.cubicTo( 10, 10, 20, 20, 30, 5 ); } @Test public void testCubicTo_currentPoint() { path.cubicTo( 10, 10, 20, 20, 30, 5 ); float[] currentPoint = new float[ 2 ]; path.getCurrentPoint( currentPoint ); assertEquals( 30, currentPoint[ 0 ], 0 ); assertEquals( 5, currentPoint[ 1 ], 0 ); } @Test public void testClose() { path.lineTo( 10, 10 ); path.lineTo( 30, 10 ); path.close(); PathData pathData = path.getPathData(); byte[] expectedTypes = new byte[] { SWT.PATH_MOVE_TO, SWT.PATH_LINE_TO, SWT.PATH_LINE_TO, SWT.PATH_CLOSE }; assertArrayEquals( expectedTypes, pathData.types ); assertArrayEquals( new float[] { 0, 0, 10, 10, 30, 10 }, pathData.points, 0 ); } @Test(expected = SWTException.class) public void testClose_withDisposedPath() { path.dispose(); path.close(); } @Test public void testClose_currentPoint() { path.lineTo( 10, 10 ); path.lineTo( 30, 10 ); path.close(); float[] currentPoint = new float[ 2 ]; path.getCurrentPoint( currentPoint ); assertEquals( 0, currentPoint[ 0 ], 0 ); assertEquals( 0, currentPoint[ 1 ], 0 ); } @Test public void testAddPath() { path.lineTo( 10, 10 ); Path pathToAdd = new Path( device ); pathToAdd.lineTo( 20, 10 ); path.addPath( pathToAdd ); PathData pathData = path.getPathData(); byte[] expectedTypes = new byte[] { SWT.PATH_MOVE_TO, SWT.PATH_LINE_TO, SWT.PATH_MOVE_TO, SWT.PATH_LINE_TO }; assertArrayEquals( expectedTypes, pathData.types ); assertArrayEquals( new float[] { 0, 0, 10, 10, 0, 0, 20, 10 }, pathData.points, 0 ); } @Test(expected = SWTException.class) public void testAddPath_withDisposedPath() { path.dispose(); path.addPath( new Path( device ) ); } @Test(expected = IllegalArgumentException.class) public void testAddPath_withNullArgument() { path.addPath( null ); } @Test(expected = IllegalArgumentException.class) public void testAddPath_withDisposedArgument() { Path pathToAdd = new Path( device ); pathToAdd.dispose(); path.addPath( pathToAdd ); } @Test public void testAddPath_currentPoint() { path.lineTo( 10, 10 ); Path pathToAdd = new Path( device ); pathToAdd.lineTo( 20, 10 ); path.addPath( pathToAdd ); float[] currentPoint1 = new float[ 2 ]; pathToAdd.getCurrentPoint( currentPoint1 ); float[] currentPoint2 = new float[ 2 ]; path.getCurrentPoint( currentPoint2 ); assertEquals( currentPoint1[ 0 ], currentPoint2[ 0 ], 0 ); assertEquals( currentPoint1[ 1 ], currentPoint2[ 1 ], 0 ); } @Test public void testAddPath_adjustCurrentPoint() { path.lineTo( 10, 10 ); Path pathToAdd = new Path( device ); pathToAdd.lineTo( 20, 10 ); pathToAdd.moveTo( 30, 30 ); path.addPath( pathToAdd ); float[] currentPoint1 = new float[ 2 ]; pathToAdd.getCurrentPoint( currentPoint1 ); float[] currentPoint2 = new float[ 2 ]; path.getCurrentPoint( currentPoint2 ); assertEquals( currentPoint1[ 0 ], currentPoint2[ 0 ], 0 ); assertEquals( currentPoint1[ 1 ], currentPoint2[ 1 ], 0 ); } @Test public void testAddRectangle() { path.addRectangle( 10, 10, 30, 20 ); PathData pathData = path.getPathData(); byte[] expectedTypes = new byte[] { SWT.PATH_MOVE_TO, SWT.PATH_LINE_TO, SWT.PATH_LINE_TO, SWT.PATH_LINE_TO, SWT.PATH_CLOSE }; assertArrayEquals( expectedTypes, pathData.types ); assertArrayEquals( new float[] { 10, 10, 40, 10, 40, 30, 10, 30 }, pathData.points, 0 ); } @Test(expected = SWTException.class) public void testAddRectangle_withDisposedPath() { path.dispose(); path.addRectangle( 10, 10, 30, 20 ); } @Test public void testAddRectangle_currentPoint() { path.addRectangle( 10, 10, 30, 20 ); float[] currentPoint = new float[ 2 ]; path.getCurrentPoint( currentPoint ); assertEquals( 10, currentPoint[ 0 ], 0 ); assertEquals( 10, currentPoint[ 1 ], 0 ); } }