blob: 384907b7a93f84a75cc2882f0209da2622136889 [file] [log] [blame]
/*
* Copyright (c) 2014, 2015, 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.
*
* 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.
*/
import java.beans.BeanProperty;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyDescriptor;
import java.util.Arrays;
/**
* @test
* @bug 4058433
* @summary Tests the BeanProperty annotation
* @author Sergey Malenkov
* @library ..
*/
public class TestBeanProperty {
public static void main(String[] args) throws Exception {
Class<?>[] types =
{B.class, BL.class, BLF.class, E.class, H.class, P.class,
VU.class, D.class, EVD.class, EVE.class, EV.class, EVL.class,
EVX.class, R.class};
for (Class<?> type : types) {
PropertyDescriptor pd = BeanUtils.getPropertyDescriptor(type, "value");
if (((B.class == type) || (BLF.class == type)) && pd.isBound()) {
BeanUtils.reportPropertyDescriptor(pd);
throw new Error("not bound");
}
if ((BL.class == type) == !pd.isBound()) {
BeanUtils.reportPropertyDescriptor(pd);
throw new Error("bound");
}
if ((E.class == type) == !pd.isExpert()) {
BeanUtils.reportPropertyDescriptor(pd);
throw new Error("expert");
}
if ((H.class == type) == !pd.isHidden()) {
BeanUtils.reportPropertyDescriptor(pd);
throw new Error("hidden");
}
if ((P.class == type) == !pd.isPreferred()) {
BeanUtils.reportPropertyDescriptor(pd);
throw new Error("preferred");
}
if ((R.class == type) == !Boolean.TRUE.equals(pd.getValue("required"))) {
BeanUtils.reportPropertyDescriptor(pd);
throw new Error("required");
}
if ((D.class == type) == !"getter".equals(pd.getShortDescription())) {
BeanUtils.reportPropertyDescriptor(pd);
throw new Error("shortDescription");
}
if ((VU.class == type) == !Boolean.TRUE.equals(pd.getValue("visualUpdate"))) {
BeanUtils.reportPropertyDescriptor(pd);
throw new Error("visualUpdate");
}
if ((EV.class == type) == !isEV(pd, "LEFT", 2, "javax.swing.SwingConstants.LEFT", "RIGHT", 4, "javax.swing.SwingConstants.RIGHT")) {
BeanUtils.reportPropertyDescriptor(pd);
throw new Error("enumerationValues from another package");
}
if ((EVL.class == type) == !isEV(pd, "ZERO", 0, "ZERO", "ONE", 1, "ONE")) {
BeanUtils.reportPropertyDescriptor(pd);
throw new Error("enumerationValues from another package");
}
if ((EVX.class == type) == !isEV(pd, "ZERO", 0, "X.ZERO", "ONE", 1, "X.ONE")) {
BeanUtils.reportPropertyDescriptor(pd);
throw new Error("enumerationValues from another package");
}
if (EVD.class == type && !isEV(pd)) {
BeanUtils.reportPropertyDescriptor(pd);
throw new Error("EV:"+ pd.getValue("enumerationValues"));
}
if (EVE.class == type && !isEV(pd)) {
BeanUtils.reportPropertyDescriptor(pd);
throw new Error("EV:"+ pd.getValue("enumerationValues"));
}
}
}
private static boolean isEV(PropertyDescriptor pd, Object... expected) {
Object value = pd.getValue("enumerationValues");
return value instanceof Object[] && Arrays.equals((Object[]) value, expected);
}
public static class B {
private int value;
public int getValue() {
return this.value;
}
public void setValue(int value) {
this.value = value;
}
}
public static class BL {
private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
private int value;
public int getValue() {
return this.value;
}
public void setValue(int value) {
this.value = value;
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
this.pcs.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
this.pcs.removePropertyChangeListener(listener);
}
}
public static class BLF {
private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
private int value;
public int getValue() {
return this.value;
}
@BeanProperty(bound = false)
public void setValue(int value) {
this.value = value;
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
this.pcs.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
this.pcs.removePropertyChangeListener(listener);
}
}
public static class E {
private int value;
public int getValue() {
return this.value;
}
@BeanProperty(expert = true)
public void setValue(int value) {
this.value = value;
}
}
public static class H {
private int value;
public int getValue() {
return this.value;
}
@BeanProperty(hidden = true)
public void setValue(int value) {
this.value = value;
}
}
public static class P {
private int value;
public int getValue() {
return this.value;
}
@BeanProperty(preferred = true)
public void setValue(int value) {
this.value = value;
}
}
public static class R {
private int value;
public int getValue() {
return this.value;
}
@BeanProperty(required = true)
public void setValue(int value) {
this.value = value;
}
}
public static class VU {
private int value;
public int getValue() {
return this.value;
}
@BeanProperty(visualUpdate = true)
public void setValue(int value) {
this.value = value;
}
}
public static class D {
private int value;
@BeanProperty(description = "getter")
public int getValue() {
return this.value;
}
@BeanProperty(description = "setter")
public void setValue(int value) {
this.value = value;
}
}
public static class EVD {
private int value;
public int getValue() {
return value;
}
@BeanProperty()
public void setValue(int value) {
this.value = value;
}
}
public static class EVE {
private int value;
public int getValue() {
return value;
}
@BeanProperty(enumerationValues = {})
public void setValue(int value) {
this.value = value;
}
}
public static class EV {
private int value;
public int getValue() {
return this.value;
}
@BeanProperty(enumerationValues = {
"javax.swing.SwingConstants.LEFT",
"javax.swing.SwingConstants.RIGHT"})
public void setValue(int value) {
this.value = value;
}
}
public static class EVL {
private int value;
public int getValue() {
return this.value;
}
@BeanProperty(enumerationValues = {"ZERO", "ONE"})
public void setValue(int value) {
this.value = value;
}
public static int ZERO = 0;
public static int ONE = 1;
}
public static class EVX {
private int value;
public int getValue() {
return this.value;
}
@BeanProperty(enumerationValues = {
"X.ZERO",
"X.ONE"})
public void setValue(int value) {
this.value = value;
}
}
public static interface X {
int ZERO = 0;
int ONE = 1;
}
}