1 /* 2 * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package test.javafx.scene.shape; 27 28 import com.sun.javafx.geom.Path2D; 29 import com.sun.javafx.geom.PathIterator; 30 import com.sun.javafx.sg.prism.NGPath; 31 import javafx.beans.property.ObjectProperty; 32 import javafx.beans.property.SimpleObjectProperty; 33 import javafx.scene.Group; 34 import test.javafx.scene.NodeTest; 35 import javafx.scene.Scene; 36 import org.junit.Test; 37 38 import java.util.ArrayList; 39 import java.util.List; 40 import javafx.scene.shape.FillRule; 41 import javafx.scene.shape.LineTo; 42 import javafx.scene.shape.MoveTo; 43 import javafx.scene.shape.Path; 44 import javafx.scene.shape.PathElement; 45 46 import static org.junit.Assert.*; 47 48 49 public class PathTest { 50 51 @Test public void testVarargConstructor() { 52 PathElement one = new MoveTo(10, 10); 53 PathElement two = new LineTo(20, 20); 54 PathElement three = new MoveTo(30, 30); 55 Path path = new Path(one, two, three); 56 assertEquals(3, path.getElements().size()); 57 assertSame(one, path.getElements().get(0)); 58 assertSame(two, path.getElements().get(1)); 59 assertSame(three, path.getElements().get(2)); 60 } 61 62 @Test public void testListConstructor() { 63 PathElement one = new MoveTo(10, 10); 64 PathElement two = new LineTo(20, 20); 65 PathElement three = new MoveTo(30, 30); 66 67 List<PathElement> listOfElements = new ArrayList<PathElement>(); 68 listOfElements.add(one); 69 listOfElements.add(two); 70 listOfElements.add(three); 71 Path path = new Path(listOfElements); 72 assertEquals(3, path.getElements().size()); 73 assertSame(one, path.getElements().get(0)); 74 assertSame(two, path.getElements().get(1)); 75 assertSame(three, path.getElements().get(2)); 76 } 77 78 @Test public void testBoundPropertySync_FillRule() throws Exception { 79 ObjectProperty<FillRule> v = new SimpleObjectProperty<FillRule>(FillRule.EVEN_ODD); 80 Path path = new Path(); 81 path.fillRuleProperty().bind(v); 82 ((Group)new Scene(new Group()).getRoot()).getChildren().add(path); 83 v.set(FillRule.NON_ZERO); 84 NodeTest.syncNode(path); 85 86 //check 87 Path2D geometry = ((NGPath)path.impl_getPeer()).getGeometry(); 88 assertEquals(geometry.getWindingRule(), FillRule.NON_ZERO.ordinal()); 89 } 90 91 @Test public void testFirstRelativeElement_PathIsEmpty() { 92 Path path = new Path(); 93 final MoveTo moveTo = new MoveTo(10, 10); 94 moveTo.setAbsolute(false); 95 path.getElements().add(moveTo); 96 path.getElements().add(new LineTo(100, 100)); 97 Path2D geometry = ((NGPath)path.impl_getPeer()).getGeometry(); 98 PathIterator piterator = geometry.getPathIterator(null); 99 assertTrue(piterator.isDone());//path is empty 100 } 101 102 @Test public void testFirstRelativeElement_BoundsAreEmpty() { 103 Path path = new Path(); 104 final MoveTo moveTo = new MoveTo(10, 10); 105 moveTo.setAbsolute(false); 106 path.getElements().add(moveTo); 107 path.getElements().add(new LineTo(100, 100)); 108 assertTrue(path.getBoundsInLocal().isEmpty() && path.getBoundsInParent().isEmpty()); 109 } 110 111 @Test public void testFirstElementIsNotMoveTo_PathIsEmpty() { 112 Path path = new Path(); 113 path.getElements().add(new LineTo(10, 10)); 114 path.getElements().add(new LineTo(100, 100)); 115 Path2D geometry = ((NGPath)path.impl_getPeer()).getGeometry(); 116 PathIterator piterator = geometry.getPathIterator(null); 117 assertTrue(piterator.isDone());//path is empty 118 } 119 120 @Test public void testFirstElementIsNotMoveTo_BoundsAreEmpty() { 121 Path path = new Path(); 122 path.getElements().add(new LineTo(10, 10)); 123 path.getElements().add(new LineTo(100, 100)); 124 assertTrue(path.getBoundsInLocal().isEmpty() && path.getBoundsInParent().isEmpty()); 125 } 126 127 @Test public void testFillRuleSync() { 128 Path path = new Path(); 129 path.getElements().add(new MoveTo(10, 10)); 130 path.getElements().add(new LineTo(100, 10)); 131 path.getElements().add(new LineTo(100, 100)); 132 path.setFillRule(FillRule.EVEN_ODD); 133 NodeTest.syncNode(path); 134 Path2D geometry = ((NGPath)path.impl_getPeer()).getGeometry(); 135 assertEquals(Path2D.WIND_EVEN_ODD, geometry.getWindingRule()); 136 137 path.setFillRule(FillRule.NON_ZERO); 138 NodeTest.syncNode(path); 139 // internal shape might have changed, getting it again 140 geometry = ((NGPath)path.impl_getPeer()).getGeometry(); 141 assertEquals(Path2D.WIND_NON_ZERO, geometry.getWindingRule()); 142 } 143 144 @Test public void toStringShouldReturnNonEmptyString() { 145 String s = new Path().toString(); 146 assertNotNull(s); 147 assertFalse(s.isEmpty()); 148 } 149 }