--- /dev/null 2015-09-11 11:06:08.592686920 -0400 +++ new/modules/graphics/src/test/java/test/com/sun/javafx/test/OnInvalidateMethodsTestBase.java 2015-09-11 21:24:44.109286768 -0400 @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package test.com.sun.javafx.test; + +import static org.junit.Assert.assertTrue; + +import java.lang.reflect.Method; +import java.util.List; + +import javafx.scene.Node; +import test.javafx.scene.NodeTest; +import javafx.scene.shape.MoveTo; +import javafx.scene.shape.Path; +import javafx.scene.shape.PathElement; +import javafx.scene.shape.Rectangle; +import javafx.scene.transform.Transform; + +import org.junit.Test; + +import javafx.css.CssMetaData; +import com.sun.javafx.scene.DirtyBits; + +public abstract class OnInvalidateMethodsTestBase { + + private final Configuration configuration; + + public OnInvalidateMethodsTestBase(final Configuration configuration) { + this.configuration = configuration; + } + + @Test + public void testFireOnInvalidate() throws Exception { + configuration.testFireOnInvalidate(); + } + + public static class Configuration { + Class clazz; + String propertyName; + Object inValue; + Object[] expectedDirtyBits; + + public Configuration(Class clazz, String parameterName, + Object inValue, Object[] expectedDirtyBits) { + this.clazz = clazz; + this.propertyName = parameterName; + this.inValue = inValue; + this.expectedDirtyBits = expectedDirtyBits; + } + + static final String GET_PREFIX = "get"; + static final String IS_PREFIX = "is"; + static final String SET_PREFIX = "set"; + + public void testFireOnInvalidate() throws Exception { + StringBuilder sb = new StringBuilder(this.propertyName); + sb.setCharAt(0, Character.toUpperCase(propertyName.charAt(0))); + + if (clazz.getSuperclass().equals(PathElement.class)) { + PathElement e = (PathElement)clazz.newInstance(); + Path path = new Path(); + path.getElements().addAll(new MoveTo(0,0), e); + NodeTest.syncNode(path); + getSetter(clazz, sb.toString()).invoke(e, this.inValue); + assertTrue(NodeTest.isDirty(path, (DirtyBits[])this.expectedDirtyBits)); + } else if (clazz.getSuperclass().equals(Transform.class)) { + Transform tr = (Transform)clazz.newInstance(); + Rectangle rect = new Rectangle(); + rect.getTransforms().add(tr); + NodeTest.syncNode(rect); + getSetter(clazz, sb.toString()).invoke(tr, this.inValue); + assertTrue(NodeTest.isDirty(rect, (DirtyBits[])this.expectedDirtyBits)); + } else { + Node node = (Node)clazz.newInstance(); + NodeTest.syncNode(node); + getSetter(clazz, sb.toString()).invoke(node, this.inValue); + if (this.expectedDirtyBits instanceof DirtyBits[]) { + assertTrue(NodeTest.isDirty(node, (DirtyBits[])this.expectedDirtyBits)); + } else if (this.expectedDirtyBits instanceof CssMetaData[]) { + for(CssMetaData key:(CssMetaData[])this.expectedDirtyBits) { + assertTrue(key.isSettable(node)); + } + } + } + + } + + private Path getPathNode(Class pathElementClazz) throws Exception { + Path p = new Path(); + p.getElements().addAll(new MoveTo(0,0), pathElementClazz.newInstance()); + return p; + } + + private Method getSetter(Class cls, String name) throws Exception { + Method getter = (inValue instanceof Boolean) ? + cls.getMethod(IS_PREFIX + name, new Class[]{}) : + cls.getMethod(GET_PREFIX + name, new Class[]{}); + return cls.getMethod(SET_PREFIX + name, getter.getReturnType()); + } + } + +// protected static CssMetaData findCssKey(Class clazz, String propertyName) { +// final List STYLEABLES = CssMetaData.getStyleables(clazz); +// for(CssMetaData styleable : STYLEABLES) { +// if (styleable.getProperty().equals(propertyName)) return styleable; +// } +// return null; +// } + + +}